mirror of
https://github.com/libraryaddict/LibsDisguises.git
synced 2024-09-26 03:52:40 +02:00
Some enchantments should remain in self disguise armor/held items. Fixes #673
This commit is contained in:
parent
ae0db7292b
commit
6ea0c665d9
@ -73,6 +73,7 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.boss.KeyedBossBar;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Ageable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
@ -262,6 +263,7 @@ public class DisguiseUtilities {
|
||||
@Setter
|
||||
private static boolean protocollibUpdateDownloaded;
|
||||
private static NamespacedKey savedDisguisesKey;
|
||||
private static final List<Enchantment> whitelistedEnchantments = new ArrayList<>();
|
||||
|
||||
static {
|
||||
final Matcher matcher = Pattern.compile("(?:1\\.)?(\\d+)").matcher(System.getProperty("java.version"));
|
||||
@ -286,6 +288,37 @@ public class DisguiseUtilities {
|
||||
profileCache = new File(LibsDisguises.getInstance().getDataFolder(), "SavedSkins");
|
||||
savedDisguises = new File(LibsDisguises.getInstance().getDataFolder(), "SavedDisguises");
|
||||
}
|
||||
|
||||
whitelistedEnchantments.add(Enchantment.DEPTH_STRIDER);
|
||||
whitelistedEnchantments.add(Enchantment.OXYGEN);
|
||||
|
||||
if (NmsVersion.v1_13.isSupported()) {
|
||||
whitelistedEnchantments.add(Enchantment.RIPTIDE);
|
||||
|
||||
if (NmsVersion.v1_19_R1.isSupported()) {
|
||||
|
||||
whitelistedEnchantments.add(Enchantment.SOUL_SPEED);
|
||||
whitelistedEnchantments.add(Enchantment.SWIFT_SNEAK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean shouldBeHiddenSelfDisguise(ItemStack itemStack) {
|
||||
if (itemStack == null || itemStack.getType() == Material.AIR) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Map<Enchantment, Integer> enchants = itemStack.getEnchantments();
|
||||
|
||||
for (Enchantment enchantment : enchants.keySet()) {
|
||||
if (!whitelistedEnchantments.contains(enchantment)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static String serialize(Component component) {
|
||||
|
@ -263,8 +263,8 @@ public class DisguiseListener implements Listener {
|
||||
// If the packet is coming, then I need to replace the item they are switching to
|
||||
// As for the old item, I need to restore it.
|
||||
org.bukkit.inventory.ItemStack currentlyHeld = player.getItemInHand();
|
||||
// If his old weapon isn't air
|
||||
if (currentlyHeld != null && currentlyHeld.getType() != Material.AIR) {
|
||||
// If their old weapon isn't air
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(currentlyHeld)) {
|
||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.SET_SLOT);
|
||||
|
||||
StructureModifier<Object> mods = packet.getModifier();
|
||||
@ -283,8 +283,8 @@ public class DisguiseListener implements Listener {
|
||||
|
||||
org.bukkit.inventory.ItemStack newHeld = player.getInventory().getItem(event.getNewSlot());
|
||||
|
||||
// If his new weapon isn't air either!
|
||||
if (newHeld != null && newHeld.getType() != Material.AIR) {
|
||||
// If their new weapon isn't air either!
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(newHeld)) {
|
||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.SET_SLOT);
|
||||
|
||||
StructureModifier<Object> mods = packet.getModifier();
|
||||
|
@ -14,6 +14,7 @@ import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import me.libraryaddict.disguise.utilities.reflection.WatcherValue;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
@ -25,6 +26,7 @@ import java.util.List;
|
||||
* Created by libraryaddict on 3/01/2019.
|
||||
*/
|
||||
public class PacketHandlerEquipment implements IPacketHandler {
|
||||
|
||||
@Override
|
||||
public PacketType[] getHandledPackets() {
|
||||
return new PacketType[]{PacketType.Play.Server.ENTITY_EQUIPMENT};
|
||||
|
@ -80,7 +80,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
|
||||
org.bukkit.inventory.ItemStack item = player.getInventory().getArmorContents()[armorSlot];
|
||||
|
||||
if (item != null && item.getType() != Material.AIR && item.getType() != Material.ELYTRA) {
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(item) && item.getType() != Material.ELYTRA) {
|
||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||
|
||||
StructureModifier<Object> mods = packet.getModifier();
|
||||
@ -104,7 +104,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
if (slot + 36 == currentSlot || slot == 45) {
|
||||
org.bukkit.inventory.ItemStack item = player.getInventory().getItemInMainHand();
|
||||
|
||||
if (item != null && item.getType() != Material.AIR) {
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(item)) {
|
||||
PacketContainer packet = new PacketContainer(Server.SET_SLOT);
|
||||
|
||||
StructureModifier<Object> mods = packet.getModifier();
|
||||
@ -138,6 +138,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
// Its a shift click
|
||||
clickedItem = event.getPacket().getItemModifier().read(0);
|
||||
|
||||
// We don't look at if it should be hidden or not, we just want to prevent mis-synced inventory
|
||||
if (clickedItem != null && clickedItem.getType() != Material.AIR) {
|
||||
// Rather than predict the clients actions
|
||||
// Lets just update the entire inventory..
|
||||
@ -159,7 +160,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
clickedItem = player.getItemOnCursor();
|
||||
}
|
||||
|
||||
if (clickedItem != null && clickedItem.getType() != Material.AIR && clickedItem.getType() != Material.ELYTRA) {
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(clickedItem) && clickedItem.getType() != Material.ELYTRA) {
|
||||
// If the slot is a armor slot
|
||||
if (slot >= 5 && slot <= 8) {
|
||||
if (disguise.isHidingArmorFromSelf()) {
|
||||
@ -242,7 +243,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
|
||||
org.bukkit.inventory.ItemStack item = player.getInventory().getArmorContents()[armorSlot];
|
||||
|
||||
if (item != null && item.getType() != Material.AIR && item.getType() != Material.ELYTRA) {
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(item) && item.getType() != Material.ELYTRA) {
|
||||
event.setPacket(event.getPacket().shallowClone());
|
||||
|
||||
event.getPacket().getItemModifier().write(0, new ItemStack(Material.AIR));
|
||||
@ -257,7 +258,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
if (slot == currentSlot + 36 || slot == 45) {
|
||||
org.bukkit.inventory.ItemStack item = player.getInventory().getItemInMainHand();
|
||||
|
||||
if (item != null && item.getType() != Material.AIR) {
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(item)) {
|
||||
event.setPacket(event.getPacket().shallowClone());
|
||||
|
||||
event.getPacket().getItemModifier().write(0, new ItemStack(Material.AIR));
|
||||
@ -279,7 +280,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
|
||||
ItemStack item = player.getInventory().getArmorContents()[armorSlot];
|
||||
|
||||
if (item != null && item.getType() != Material.AIR && item.getType() != Material.ELYTRA) {
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(item) && item.getType() != Material.ELYTRA) {
|
||||
items.set(slot, new ItemStack(Material.AIR));
|
||||
}
|
||||
}
|
||||
@ -292,7 +293,7 @@ public class PacketListenerInventory extends PacketAdapter {
|
||||
if (slot == currentSlot + 36 || slot == 45) {
|
||||
ItemStack item = player.getInventory().getItemInMainHand();
|
||||
|
||||
if (item != null && item.getType() != Material.AIR) {
|
||||
if (DisguiseUtilities.shouldBeHiddenSelfDisguise(item)) {
|
||||
items.set(slot, new ItemStack(Material.AIR));
|
||||
}
|
||||
}
|
||||
|
@ -800,7 +800,6 @@ public class DisguiseParser {
|
||||
}
|
||||
|
||||
if (!method1.getParam().isAssignableFrom(param.getClass())) {
|
||||
System.out.println("Can't cast " + method1.getParam() + " to " + param.getClass() + " for " + method);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user