Skip to content

Commit 42dd0d9

Browse files
committed
Fix cake and item frame right click support
1 parent fdf9fc0 commit 42dd0d9

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

src/main/java/ch/njol/skript/events/EvtClick.java

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ public boolean check(final Event e) {
109109

110110
Player player = clickEvent.getPlayer();
111111
assert player != null;
112-
boolean useOffHand = checkUseOffHand(player, click, null);
112+
boolean useOffHand = checkUseOffHand(player, click, null, clickEvent.getRightClicked());
113+
Skript.info("useOffHand: " + useOffHand);
114+
Skript.info("Event hand: " + clickEvent.getHand());
113115
if ((useOffHand && clickEvent.getHand() == EquipmentSlot.HAND) || (!useOffHand && clickEvent.getHand() == EquipmentSlot.OFF_HAND)) {
114116
return false;
115117
}
@@ -127,9 +129,9 @@ public boolean check(final Event e) {
127129

128130
Player player = clickEvent.getPlayer();
129131
assert player != null;
130-
boolean useOffHand = checkUseOffHand(player, click, clickEvent.getClickedBlock());
131-
//Skript.info("useOffHand: " + useOffHand);
132-
//Skript.info("Event hand: " + clickEvent.getHand());
132+
boolean useOffHand = checkUseOffHand(player, click, clickEvent.getClickedBlock(), null);
133+
Skript.info("useOffHand: " + useOffHand);
134+
Skript.info("Event hand: " + clickEvent.getHand());
133135
if ((useOffHand && clickEvent.getHand() == EquipmentSlot.HAND) || (!useOffHand && clickEvent.getHand() == EquipmentSlot.OFF_HAND)) {
134136
return false;
135137
}
@@ -188,14 +190,17 @@ public String toString(final @Nullable Event e, final boolean debug) {
188190
return (click == LEFT ? "left" : click == RIGHT ? "right" : "") + "click" + (types != null ? " on " + types.toString(e, debug) : "") + (tools != null ? " holding " + tools.toString(e, debug) : "");
189191
}
190192

191-
public static boolean checkUseOffHand(Player player, int clickType, @Nullable Block block) {
193+
public static boolean checkUseOffHand(Player player, int clickType, @Nullable Block block, @Nullable Entity entity) {
192194
if (clickType != RIGHT) return false; // Attacking with off hand is not possible
193195

194196
boolean mainUsable = false; // Usable item
195197
boolean offUsable = false;
196198
ItemStack mainHand = player.getInventory().getItemInMainHand();
197199
ItemStack offHand = player.getInventory().getItemInOffHand();
198200

201+
Skript.info("block is " + block);
202+
Skript.info("entity is " + entity);
203+
199204
switch (offHand.getType()) {
200205
case BOW:
201206
case EGG:
@@ -264,13 +269,13 @@ public static boolean checkUseOffHand(Player player, int clickType, @Nullable Bl
264269
}
265270

266271
boolean blockUsable = false;
272+
boolean mainOnly = false;
267273
if (block != null) {
268274
switch (block.getType()) {
269275
case ANVIL:
270276
case BEACON:
271277
case BED:
272278
case BREWING_STAND:
273-
case CAKE:
274279
case CAULDRON:
275280
case CHEST:
276281
case TRAPPED_CHEST:
@@ -303,10 +308,22 @@ public static boolean checkUseOffHand(Player player, int clickType, @Nullable Bl
303308
case ITEM_FRAME:
304309
blockUsable = true;
305310
break;
311+
case CAKE_BLOCK:
312+
mainOnly = true;
313+
break;
306314
//$CASES-OMITTED$
307315
default:
308316
blockUsable = false;
309317
}
318+
} else if (entity != null) {
319+
switch (entity.getType()) {
320+
case ITEM_FRAME:
321+
mainOnly = true;
322+
break;
323+
//$CASES-OMITTED$
324+
default:
325+
mainOnly = false;
326+
}
310327
}
311328

312329
boolean isSneaking = player.isSneaking();
@@ -322,19 +339,21 @@ public static boolean checkUseOffHand(Player player, int clickType, @Nullable Bl
322339
} else { // When not sneaking, main hand is ALWAYS used
323340
return false;
324341
}
342+
} else if (mainOnly) {
343+
return false;
325344
}
326345

327-
//Skript.info("Check for usable items...");
346+
Skript.info("Check for usable items...");
328347
if (mainUsable) return false;
329348
if (offUsable) return true;
330-
//Skript.info("No hand has usable item");
349+
Skript.info("No hand has usable item");
331350

332351
// Still not returned?
333352
if (mainHand.getType() != Material.AIR) return false;
334-
//Skript.info("Main hand is an item.");
353+
Skript.info("Main hand is an item.");
335354
if (offHand.getType() != Material.AIR) return true;
336355

337-
//Skript.info("Final return!");
356+
Skript.info("Final return!");
338357
return false; // Both hands are AIR material!
339358
}
340359

0 commit comments

Comments
 (0)