Added better 1.16 Support.
This commit is contained in:
parent
64bafec579
commit
a1ac4652ab
|
@ -3,6 +3,7 @@ package com.songoda.ultimaterepairing.anvil;
|
||||||
import com.songoda.ultimaterepairing.repair.RepairType;
|
import com.songoda.ultimaterepairing.repair.RepairType;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.inventory.EquipmentSlot;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class PlayerAnvilData {
|
public class PlayerAnvilData {
|
||||||
|
@ -12,6 +13,7 @@ public class PlayerAnvilData {
|
||||||
private RepairType type;
|
private RepairType type;
|
||||||
private Item item;
|
private Item item;
|
||||||
private ItemStack toBeRepaired;
|
private ItemStack toBeRepaired;
|
||||||
|
private EquipmentSlot slot = null;
|
||||||
private Location locations;
|
private Location locations;
|
||||||
private boolean inRepair;
|
private boolean inRepair;
|
||||||
private boolean beingRepaired;
|
private boolean beingRepaired;
|
||||||
|
@ -79,4 +81,12 @@ public class PlayerAnvilData {
|
||||||
public void setBeingRepaired(boolean beingRepaired) {
|
public void setBeingRepaired(boolean beingRepaired) {
|
||||||
this.beingRepaired = beingRepaired;
|
this.beingRepaired = beingRepaired;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EquipmentSlot getSlot() {
|
||||||
|
return slot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSlot(EquipmentSlot slot) {
|
||||||
|
this.slot = slot;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -2,6 +2,7 @@ package com.songoda.ultimaterepairing.handlers;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.CompatibleSound;
|
import com.songoda.core.compatibility.CompatibleSound;
|
||||||
|
import com.songoda.core.compatibility.ServerVersion;
|
||||||
import com.songoda.core.gui.GuiManager;
|
import com.songoda.core.gui.GuiManager;
|
||||||
import com.songoda.core.hooks.EconomyManager;
|
import com.songoda.core.hooks.EconomyManager;
|
||||||
import com.songoda.core.utils.PlayerUtils;
|
import com.songoda.core.utils.PlayerUtils;
|
||||||
|
@ -14,6 +15,8 @@ import com.songoda.ultimaterepairing.utils.Methods;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.EntityEquipment;
|
||||||
|
import org.bukkit.inventory.EquipmentSlot;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
@ -47,7 +50,35 @@ public class RepairHandler {
|
||||||
|
|
||||||
|
|
||||||
public void preRepair(ItemStack itemStack, Player player, RepairType type, Location anvil) {
|
public void preRepair(ItemStack itemStack, Player player, RepairType type, Location anvil) {
|
||||||
|
// Get from Map, put new instance in Map if it doesn't exist
|
||||||
|
PlayerAnvilData playerData = playerAnvilData.computeIfAbsent(player.getUniqueId(), uuid -> 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);
|
player.getInventory().removeItem(itemStack);
|
||||||
|
|
||||||
Item item = player.getWorld().dropItem(anvil.add(0.5, 2, 0.5), itemStack);
|
Item item = player.getWorld().dropItem(anvil.add(0.5, 2, 0.5), itemStack);
|
||||||
|
|
||||||
// Support for EpicHoppers suction.
|
// Support for EpicHoppers suction.
|
||||||
|
@ -62,8 +93,6 @@ public class RepairHandler {
|
||||||
item.setPickupDelay(3600);
|
item.setPickupDelay(3600);
|
||||||
item.setMetadata("UltimateRepairing", new FixedMetadataValue(instance, ""));
|
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.setItem(item);
|
||||||
playerData.setToBeRepaired(itemStack);
|
playerData.setToBeRepaired(itemStack);
|
||||||
playerData.setLocations(anvil.add(0, -2, 0));
|
playerData.setLocations(anvil.add(0, -2, 0));
|
||||||
|
@ -139,26 +168,28 @@ public class RepairHandler {
|
||||||
|
|
||||||
Effect effect = Effect.STEP_SOUND;
|
Effect effect = Effect.STEP_SOUND;
|
||||||
|
|
||||||
Material blockType = Material.REDSTONE_BLOCK;
|
CompatibleMaterial blockType = CompatibleMaterial.REDSTONE_BLOCK;
|
||||||
|
|
||||||
String typeStr = playerData.getToBeRepaired().getType().name().toUpperCase();
|
String typeStr = playerData.getToBeRepaired().getType().name().toUpperCase();
|
||||||
|
|
||||||
if (typeStr.contains("DIAMOND")) {
|
if (typeStr.contains("NETHERITE")) {
|
||||||
blockType = Material.DIAMOND_BLOCK;
|
blockType = CompatibleMaterial.NETHERITE_BLOCK;
|
||||||
|
} else if (typeStr.contains("DIAMOND")) {
|
||||||
|
blockType = CompatibleMaterial.DIAMOND_BLOCK;
|
||||||
} else if (typeStr.contains("IRON")) {
|
} else if (typeStr.contains("IRON")) {
|
||||||
blockType = Material.IRON_BLOCK;
|
blockType = CompatibleMaterial.IRON_BLOCK;
|
||||||
} else if (typeStr.contains("GOLD")) {
|
} else if (typeStr.contains("GOLD")) {
|
||||||
blockType = Material.GOLD_BLOCK;
|
blockType = CompatibleMaterial.GOLD_BLOCK;
|
||||||
} else if (typeStr.contains("STONE")) {
|
} else if (typeStr.contains("STONE")) {
|
||||||
blockType = Material.STONE;
|
blockType = CompatibleMaterial.STONE;
|
||||||
} else if (typeStr.contains("WOOD")) {
|
} 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();
|
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);
|
Runnable runnable = () -> player.getWorld().playEffect(location, effect, blockTypeFinal);
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 5L);
|
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, runnable, 5L);
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> {
|
||||||
|
@ -175,17 +206,12 @@ public class RepairHandler {
|
||||||
instance.getLocale().getMessage("event.repair.success").sendPrefixedMessage(player);
|
instance.getLocale().getMessage("event.repair.success").sendPrefixedMessage(player);
|
||||||
|
|
||||||
playerData.getToBeRepaired().setDurability((short) 0);
|
playerData.getToBeRepaired().setDurability((short) 0);
|
||||||
HashMap<Integer, ItemStack> items = player.getInventory().addItem(playerData.getToBeRepaired());
|
removeItem(playerData, player);
|
||||||
for (ItemStack item : items.values()) {
|
|
||||||
player.getWorld().dropItemNaturally(player.getLocation(), item);
|
|
||||||
}
|
|
||||||
|
|
||||||
playerData.getItem().remove();
|
|
||||||
if (player.getGameMode() != GameMode.CREATIVE &&
|
if (player.getGameMode() != GameMode.CREATIVE &&
|
||||||
type == RepairType.EXPERIENCE) {
|
type == RepairType.EXPERIENCE) {
|
||||||
player.setLevel(player.getLevel() - playerData.getPrice());
|
player.setLevel(player.getLevel() - playerData.getPrice());
|
||||||
}
|
}
|
||||||
this.playerAnvilData.remove(player.getUniqueId());
|
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
}, 25L);
|
}, 25L);
|
||||||
return;
|
return;
|
||||||
|
@ -208,8 +234,34 @@ public class RepairHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeItem(PlayerAnvilData playerData, Player player) {
|
public void removeItem(PlayerAnvilData playerData, Player player) {
|
||||||
PlayerUtils.giveItem(player, playerData.getToBeRepaired());
|
EquipmentSlot slot = playerData.getSlot();
|
||||||
playerData.getItem().remove();
|
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());
|
this.playerAnvilData.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue