diff --git a/CHANGELOG.md b/CHANGELOG.md index be75398..ff7f9ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 2.0.2 +- Fixed tridents disappearing when throwing similar tridents (same durability, etc.) from the offhand + ## 2.0.1 - Fixed tridents getting lost on return when throwing many of them from the offhand while having "return-to-offhand" set to "true" diff --git a/pom.xml b/pom.xml index 9c8c9e8..9626191 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.jeff_media BetterTridents BetterTridents - 2.0.1 + 2.0.2 ${project.name} @@ -49,7 +49,23 @@ org.bstats - de.jeff_Media.notridentvoid + de.jeff_media.bettertridents.bstats + + + org.apache + de.jeff_media.bettertridents.lib.org.apache + + + org.codehaus + de.jeff_media.bettertridents.lib.org.codehaus + + + org.intellij + de.jeff_media.bettertridents.lib.org.intellij + + + org.jetbrains + de.jeff_media.bettertridents.lib.org.jetbrains diff --git a/src/main/java/de/jeff_media/bettertridents/listeners/OffhandListener.java b/src/main/java/de/jeff_media/bettertridents/listeners/OffhandListener.java index 4761858..1419858 100644 --- a/src/main/java/de/jeff_media/bettertridents/listeners/OffhandListener.java +++ b/src/main/java/de/jeff_media/bettertridents/listeners/OffhandListener.java @@ -11,6 +11,8 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerPickupArrowEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; public class OffhandListener implements Listener { @@ -18,18 +20,20 @@ public class OffhandListener implements Listener { @EventHandler(ignoreCancelled = true) private void onPickupTrident(PlayerPickupArrowEvent event) { - main.debug("onPickupTrident"); if (!main.getConfig().getBoolean(Config.RETURN_TO_OFFHAND)) return; if (!(event.getArrow() instanceof Trident)) return; Trident trident = (Trident) event.getArrow(); if(!EnchantmentUtils.isOffhandThrown(trident)) { - main.debug("This trident wasn't thrown from the offhand."); return; } Player player = event.getPlayer(); if (player.getInventory().getItemInOffHand().getType() != Material.AIR) return; ItemStack tridentItem = event.getItem().getItemStack().clone(); + ItemMeta meta = tridentItem.getItemMeta(); + meta.getPersistentDataContainer().set(Main.OFFHAND_TAG, PersistentDataType.BYTE, (byte) 1); + tridentItem.setItemMeta(meta); + event.getItem().setItemStack(tridentItem); main.debug("Starting offhand task..."); new MoveToOffhand(player, tridentItem).runTask(main); diff --git a/src/main/java/de/jeff_media/bettertridents/tasks/MoveToOffhand.java b/src/main/java/de/jeff_media/bettertridents/tasks/MoveToOffhand.java index 1352b8d..beb66d8 100644 --- a/src/main/java/de/jeff_media/bettertridents/tasks/MoveToOffhand.java +++ b/src/main/java/de/jeff_media/bettertridents/tasks/MoveToOffhand.java @@ -1,8 +1,11 @@ package de.jeff_media.bettertridents.tasks; +import de.jeff_media.bettertridents.Main; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; import org.bukkit.scheduler.BukkitRunnable; public class MoveToOffhand extends BukkitRunnable { @@ -16,12 +19,17 @@ public class MoveToOffhand extends BukkitRunnable { @Override public void run() { - for (ItemStack item : player.getInventory()) { + for (int i = 0; i < player.getInventory().getSize(); i++) { + ItemStack item = player.getInventory().getItem(i); if (item != null && item.equals(tridentItem)) { + ItemMeta meta = tridentItem.getItemMeta(); + meta.getPersistentDataContainer().remove(Main.OFFHAND_TAG); + tridentItem.setItemMeta(meta); ItemStack offhand = player.getInventory().getItemInOffHand(); if(offhand == null || offhand.getType() == Material.AIR) { - player.getInventory().remove(item); - player.getInventory().setItemInOffHand(item.clone()); + player.getInventory().setItemInOffHand(tridentItem.clone()); + tridentItem.setAmount(tridentItem.getAmount()-1); + player.getInventory().setItem(i, tridentItem); } break; }