2626import net .md_5 .bungee .api .chat .TextComponent ;
2727import org .bukkit .Bukkit ;
2828import org .bukkit .ChatColor ;
29+ import org .bukkit .GameMode ;
2930import org .bukkit .Material ;
3031import org .bukkit .entity .EntityType ;
3132import org .bukkit .entity .HumanEntity ;
4243import org .bukkit .event .player .PlayerDropItemEvent ;
4344import org .bukkit .event .player .PlayerInteractEvent ;
4445import org .bukkit .event .player .PlayerSwapHandItemsEvent ;
46+ import org .bukkit .inventory .EquipmentSlot ;
4547import org .bukkit .inventory .ItemStack ;
4648import org .bukkit .inventory .PlayerInventory ;
4749
@@ -142,6 +144,7 @@ public void itemEquipEvent(InventoryCloseEvent event) {
142144 return ;
143145 }
144146 HumanEntity player = event .getPlayer ();
147+
145148 if (player instanceof Player ) {
146149 Player p = (Player ) player ;
147150 ISpigotCharacter character = spigotCharacterService .getCharacter (player .getUniqueId ());
@@ -163,6 +166,9 @@ public void onItemDrop(PlayerDropItemEvent event) {
163166 if (spigotRpg .isDisabledInWorld (event .getPlayer ())) {
164167 return ;
165168 }
169+ if (event .getPlayer ().getGameMode () == GameMode .CREATIVE ) {
170+ return ;
171+ }
166172 Player player = event .getPlayer ();
167173 IActiveCharacter character = spigotCharacterService .getCharacter (player );
168174 if (character .isStub ()) {
@@ -199,6 +205,9 @@ public void onSwapHands(PlayerSwapHandItemsEvent event) {
199205 if (spigotRpg .isDisabledInWorld (event .getPlayer ())) {
200206 return ;
201207 }
208+ if (event .getPlayer ().getGameMode () == GameMode .CREATIVE ) {
209+ return ;
210+ }
202211 ItemStack futureMainHand = event .getMainHandItem ();
203212 ItemStack futureOffHand = event .getOffHandItem ();
204213 if (futureMainHand .getType () == Material .AIR && futureOffHand .getType () == Material .AIR ) {
@@ -265,6 +274,9 @@ public void onHotbarInteract(PlayerInteractEvent event) {
265274 return ;
266275 }
267276 Player player = event .getPlayer ();
277+ if (player .getGameMode () == GameMode .CREATIVE ) {
278+ return ;
279+ }
268280 ISpigotCharacter character = spigotCharacterService .getCharacter (player );
269281 if (character .isStub ()) {
270282 return ;
@@ -293,7 +305,8 @@ public void onHotbarInteract(PlayerInteractEvent event) {
293305
294306 if (last != selectedSlotIndex ) {
295307
296- boolean b = prepareItemInHand (player , character , itemStack , selectedSlotIndex , rpgItemType , itemService , inventoryHandler );
308+ boolean b = prepareItemInHand (player , character , itemStack , selectedSlotIndex , rpgItemType ,
309+ event .getHand (), itemService , inventoryHandler );
297310 event .setCancelled (b );
298311 }
299312 }
@@ -302,7 +315,9 @@ public void onHotbarInteract(PlayerInteractEvent event) {
302315
303316 public static boolean prepareItemInHand (Player player , ISpigotCharacter character , ItemStack itemStack ,
304317 int selectedSlotIndex , RpgItemType rpgItemType ,
305- SpigotItemService itemService , InventoryHandler inventoryHandler ) {
318+ EquipmentSlot hand ,
319+ SpigotItemService itemService ,
320+ InventoryHandler inventoryHandler ) {
306321 Map <Class <?>, RpgInventory > managedInventory = character .getManagedInventory ();
307322 Map <Integer , ManagedSlot > managedSlots = managedInventory .get (PlayerInventory .class ).getManagedSlots ();
308323
@@ -326,15 +341,29 @@ public static boolean prepareItemInHand(Player player, ISpigotCharacter characte
326341 if (inventoryHandler .handleCharacterEquipActionPre (character , managedSlot , rpgItemStack )) {
327342 inventoryHandler .handleInventoryInitializationPost (character );
328343 character .setLastHotbarSlotInteraction (selectedSlotIndex );
329- character .setMainHand (rpgItemStack , selectedSlotIndex );
344+ if (hand == EquipmentSlot .HAND ) {
345+ character .setMainHand (rpgItemStack , selectedSlotIndex );
346+ } else if (hand == EquipmentSlot .OFF_HAND ) {
347+ character .setOffHand (rpgItemStack );
348+ }
330349 character .setRequiresDamageRecalculation (true );
331350 return false ;
332351 } else {
333- player .getWorld ().dropItemNaturally (player .getLocation (), itemStack );
334- String message = Rpg .get ().getLocalizationService ().translate (LocalizationKeys .CANNOT_USE_ITEM_CONFIGURATION_REASON );
335- BaseComponent c = TextComponent .fromLegacyText (ChatColor .RED + message )[0 ];
336- player .spigot ().sendMessage (ChatMessageType .ACTION_BAR , c );
337- player .getInventory ().setItemInMainHand (null );
352+ if (player .getGameMode () != GameMode .CREATIVE ) {
353+
354+ if (hand == EquipmentSlot .HAND ) {
355+ player .getInventory ().setItemInMainHand (null );
356+ } else if (hand == EquipmentSlot .OFF_HAND ) {
357+ player .getInventory ().setItemInOffHand (null );
358+ }
359+
360+ String message = Rpg .get ().getLocalizationService ().translate (LocalizationKeys .CANNOT_USE_ITEM_CONFIGURATION_REASON );
361+ BaseComponent c = TextComponent .fromLegacyText (ChatColor .RED + message )[0 ];
362+ player .spigot ().sendMessage (ChatMessageType .ACTION_BAR , c );
363+
364+ player .getWorld ().dropItemNaturally (player .getLocation (), itemStack );
365+
366+ }
338367 character .setLastHotbarSlotInteraction (-1 );
339368 character .setRequiresDamageRecalculation (true );
340369 return true ;
@@ -348,6 +377,7 @@ public void onDrag(InventoryDragEvent event) {
348377 if (spigotRpg .isDisabledInWorld (event .getWhoClicked ())) {
349378 return ;
350379 }
380+
351381 for (Integer slotId : event .getInventorySlots ()) {
352382 if (inventoryService .isManagedInventory (PlayerInventory .class , slotId ) || slotId == OFFHAND_SLOT_ID || (slotId >= 0 && slotId <= 8 )) {
353383 event .setResult (Event .Result .DENY );
@@ -362,10 +392,16 @@ public void onInteract(InventoryClickEvent event) {
362392 }
363393 HumanEntity whoClicked = event .getWhoClicked ();
364394 if (whoClicked instanceof Player ) {
395+ Player player = (Player ) whoClicked ;
396+ if (player .getGameMode () == GameMode .CREATIVE ) {
397+ return ;
398+ }
365399 int slotId = event .getSlot ();
366400 if (!inventoryService .isManagedInventory (PlayerInventory .class , slotId )) {
367401 return ;
368402 }
403+
404+
369405 IActiveCharacter character = spigotCharacterService .getCharacter (whoClicked .getUniqueId ());
370406 Map <Class <?>, RpgInventory > managedInventory = character .getManagedInventory ();
371407 RpgInventory rpgInventory = managedInventory .get (PlayerInventory .class );
0 commit comments