@@ -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