From a1ac4652abd9febaf51bc3ef5ef9cfcd5d26c048 Mon Sep 17 00:00:00 2001 From: Brianna Date: Sun, 5 Jul 2020 19:00:26 -0500 Subject: [PATCH] Added better 1.16 Support. --- .DS_Store | Bin 0 -> 6148 bytes .../anvil/PlayerAnvilData.java | 10 ++ .../handlers/RepairHandler.java | 90 ++++++++++++++---- 3 files changed, 81 insertions(+), 19 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8ad0f56faeb1371a0803b45464d482af0a93b5e9 GIT binary patch literal 6148 zcmeHKTZ_{`6h70|-DC?=L2(5i0zT-&Qd$u&_!7IVu&`d(tnP!CI@!c+ASNYAx582= zg0KDnef5HWL;Vr{5Aj*QxhUIIebgdz;LLY2^PNfZO=c!TM65Fk+C&W^vfu)1D=2

MIKG}H1&@+2ll`ea?(alN zkd8a)C<$`O*PYAwHZKO~$2#La9^y5KY|HL9Ru2v?U%9yETxw6&92K@(=Pyhqwq>0< zdwuKS=-G>xuU@}-`|iU>nMDi>vb19wf50aMGve)gSrVto9_mHT3A#fu#Emdi92jB% zLku}bO$JXOc~iEQhQ7j)efUGcrLjd;Kz|}ueUTs1JeyI#DDY1d5bJ{j7wBr7DwInH z3V8$o)=(`CvG{2aIgUnG<5VG9U`(X~RVvd*45rdi?`WQ@ajH new PlayerAnvilData()); + + EntityEquipment equipment = player.getEquipment(); + if (equipment != null) { + if (equipment.getItemInMainHand().equals(itemStack)) { + equipment.setItemInMainHand(null); + playerData.setSlot(EquipmentSlot.HAND); + } else if (itemStack.equals(equipment.getHelmet())) { + equipment.setHelmet(null); + playerData.setSlot(EquipmentSlot.HEAD); + } else if (itemStack.equals(equipment.getChestplate())) { + equipment.setChestplate(null); + playerData.setSlot(EquipmentSlot.CHEST); + } else if (itemStack.equals(equipment.getLeggings())) { + equipment.setLeggings(null); + playerData.setSlot(EquipmentSlot.LEGS); + } else if (itemStack.equals(equipment.getBoots())) { + equipment.setBoots(null); + playerData.setSlot(EquipmentSlot.FEET); + } else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { + if (itemStack.equals(equipment.getItemInOffHand())) { + equipment.setItemInOffHand(null); + playerData.setSlot(EquipmentSlot.OFF_HAND); + } + } + } player.getInventory().removeItem(itemStack); + Item item = player.getWorld().dropItem(anvil.add(0.5, 2, 0.5), itemStack); // Support for EpicHoppers suction. @@ -62,8 +93,6 @@ public class RepairHandler { item.setPickupDelay(3600); item.setMetadata("UltimateRepairing", new FixedMetadataValue(instance, "")); - // Get from Map, put new instance in Map if it doesn't exist - PlayerAnvilData playerData = playerAnvilData.computeIfAbsent(player.getUniqueId(), uuid -> new PlayerAnvilData()); playerData.setItem(item); playerData.setToBeRepaired(itemStack); playerData.setLocations(anvil.add(0, -2, 0)); @@ -139,26 +168,28 @@ public class RepairHandler { Effect effect = Effect.STEP_SOUND; - Material blockType = Material.REDSTONE_BLOCK; + CompatibleMaterial blockType = CompatibleMaterial.REDSTONE_BLOCK; String typeStr = playerData.getToBeRepaired().getType().name().toUpperCase(); - if (typeStr.contains("DIAMOND")) { - blockType = Material.DIAMOND_BLOCK; + if (typeStr.contains("NETHERITE")) { + blockType = CompatibleMaterial.NETHERITE_BLOCK; + } else if (typeStr.contains("DIAMOND")) { + blockType = CompatibleMaterial.DIAMOND_BLOCK; } else if (typeStr.contains("IRON")) { - blockType = Material.IRON_BLOCK; + blockType = CompatibleMaterial.IRON_BLOCK; } else if (typeStr.contains("GOLD")) { - blockType = Material.GOLD_BLOCK; + blockType = CompatibleMaterial.GOLD_BLOCK; } else if (typeStr.contains("STONE")) { - blockType = Material.STONE; + blockType = CompatibleMaterial.STONE; } else if (typeStr.contains("WOOD")) { - blockType = CompatibleMaterial.OAK_WOOD.getMaterial(); + blockType = CompatibleMaterial.OAK_WOOD; } - final Material blockTypeFinal = blockType; + final Material blockTypeFinal = blockType.getMaterial(); Location location = playerData.getLocations(); - player.getWorld().playEffect(location, effect, blockType); + player.getWorld().playEffect(location, effect, blockType.getMaterial()); Runnable runnable = () -> player.getWorld().playEffect(location, effect, blockTypeFinal); Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 5L); Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> { @@ -175,17 +206,12 @@ public class RepairHandler { instance.getLocale().getMessage("event.repair.success").sendPrefixedMessage(player); playerData.getToBeRepaired().setDurability((short) 0); - HashMap items = player.getInventory().addItem(playerData.getToBeRepaired()); - for (ItemStack item : items.values()) { - player.getWorld().dropItemNaturally(player.getLocation(), item); - } + removeItem(playerData, player); - playerData.getItem().remove(); if (player.getGameMode() != GameMode.CREATIVE && type == RepairType.EXPERIENCE) { player.setLevel(player.getLevel() - playerData.getPrice()); } - this.playerAnvilData.remove(player.getUniqueId()); player.closeInventory(); }, 25L); return; @@ -208,8 +234,34 @@ public class RepairHandler { } public void removeItem(PlayerAnvilData playerData, Player player) { - PlayerUtils.giveItem(player, playerData.getToBeRepaired()); - playerData.getItem().remove(); + EquipmentSlot slot = playerData.getSlot(); + if (slot == null) + PlayerUtils.giveItem(player, playerData.getToBeRepaired()); + else if (player.getEquipment() != null) { + EntityEquipment equipment = player.getEquipment(); + ItemStack item = playerData.getToBeRepaired(); + switch (slot) { + case HAND: + equipment.setItemInMainHand(item); + break; + case OFF_HAND: + equipment.setItemInOffHand(item); + break; + case HEAD: + equipment.setHelmet(item); + break; + case CHEST: + equipment.setChestplate(item); + break; + case LEGS: + equipment.setLeggings(item); + break; + case FEET: + equipment.setBoots(item); + } + } + if (playerData.getItem() != null) + playerData.getItem().remove(); this.playerAnvilData.remove(player.getUniqueId()); }