From 8015db68f631cf29c388e634282d6789cedfdbed Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Thu, 14 Nov 2019 14:42:32 +1300 Subject: [PATCH] Client listener to sync again, run in scheduler. Add cat color config option --- .../disguise/DisguiseConfig.java | 10 +++ .../utilities/packets/PacketsManager.java | 3 +- .../PacketListenerClientInteract.java | 61 ++++++++++++------- src/main/resources/config.yml | 1 + 4 files changed, 50 insertions(+), 25 deletions(-) diff --git a/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java b/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java index 3a16e36e..f679aad1 100644 --- a/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java +++ b/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java @@ -38,6 +38,7 @@ public class DisguiseConfig { private static boolean collectEnabled; private static boolean colorizeSheep; private static boolean colorizeWolf; + private static boolean colorizeCat; private static HashMap customDisguises = new HashMap<>(); private static boolean disableInvisibility; private static int disguiseCloneExpire; @@ -315,6 +316,7 @@ public class DisguiseConfig { setMaxClonedDisguises(config.getInt("DisguiseCloneSize")); setSheepDyeable(config.getBoolean("DyeableSheep")); setWolfDyeable(config.getBoolean("DyeableWolf")); + setCatDyeable(config.getBoolean("DyeableCat")); setUndisguiseOnWorldChange(config.getBoolean("UndisguiseOnWorldChange")); setUpdateNotificationPermission(config.getString("Permission")); setStopShulkerDisguisesFromMoving(config.getBoolean("StopShulkerDisguisesFromMoving", true)); @@ -770,6 +772,14 @@ public class DisguiseConfig { colorizeWolf = color; } + public static void setCatDyeable(boolean color) { + colorizeCat = color; + } + + public static boolean isCatDyeable() { + return colorizeCat; + } + private DisguiseConfig() { } } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java index 629a54ff..9b85b00a 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java @@ -35,8 +35,7 @@ public class PacketsManager { clientInteractEntityListener = new PacketListenerClientInteract(libsDisguises); PacketListener tabListListener = new PacketListenerTabList(libsDisguises); - ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(clientInteractEntityListener) - .syncStart(); + ProtocolLibrary.getProtocolManager().addPacketListener(clientInteractEntityListener); ProtocolLibrary.getProtocolManager().addPacketListener(tabListListener); // Now I call this and the main listener is registered! diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java index 08b1ccac..08a2aaad 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerClientInteract.java @@ -14,6 +14,8 @@ import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.TargetedDisguise; +import me.libraryaddict.disguise.disguisetypes.watchers.CatWatcher; +import me.libraryaddict.disguise.disguisetypes.watchers.OcelotWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.WolfWatcher; import me.libraryaddict.disguise.events.DisguiseInteractEvent; @@ -84,32 +86,45 @@ public class PacketListenerClientInteract extends PacketAdapter { } } - if (disguise.getType() != DisguiseType.SHEEP && disguise.getType() != DisguiseType.WOLF) { + if (disguise.getType() != DisguiseType.SHEEP && disguise.getType() != DisguiseType.WOLF && + disguise.getType() != DisguiseType.CAT) { return; } - // If this is something the player can dye the disguise with - for (ItemStack item : new ItemStack[]{observer.getInventory().getItemInMainHand(), - observer.getInventory().getItemInOffHand()}) { - if (item == null) { - continue; + new BukkitRunnable() { + @Override + public void run() { + // If this is something the player can dye the disguise with + for (ItemStack item : new ItemStack[]{observer.getInventory().getItemInMainHand(), + observer.getInventory().getItemInOffHand()}) { + if (item == null) { + continue; + } + + AnimalColor color = AnimalColor.getColorByMaterial(item.getType()); + + if (color == null) { + continue; + } + + if (disguise.getType() == DisguiseType.SHEEP) { + SheepWatcher watcher = (SheepWatcher) disguise.getWatcher(); + + watcher.setColor(DisguiseConfig.isSheepDyeable() ? color : watcher.getColor()); + break; + } else if (disguise.getType() == DisguiseType.WOLF) { + WolfWatcher watcher = (WolfWatcher) disguise.getWatcher(); + + watcher.setCollarColor(DisguiseConfig.isWolfDyeable() ? color : watcher.getCollarColor()); + break; + } else if (disguise.getType() == DisguiseType.CAT) { + CatWatcher watcher = (CatWatcher) disguise.getWatcher(); + + watcher.setCollarColor(DisguiseConfig.isCatDyeable() ? color : watcher.getCollarColor()); + break; + } + } } - - AnimalColor color = AnimalColor.getColorByMaterial(item.getType()); - - if (color == null) { - continue; - } - - if (disguise.getType() == DisguiseType.SHEEP) { - SheepWatcher watcher = (SheepWatcher) disguise.getWatcher(); - - watcher.setColor(DisguiseConfig.isSheepDyeable() ? color : watcher.getColor()); - } else { - WolfWatcher watcher = (WolfWatcher) disguise.getWatcher(); - - watcher.setCollarColor(DisguiseConfig.isWolfDyeable() ? color : watcher.getCollarColor()); - } - } + }.runTask(LibsDisguises.getInstance()); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 54c3ab6b..e87c6e96 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -119,6 +119,7 @@ AddEntityAnimations: true # Please note that this will not remove the dye from their hands. This also does not check if the disguised entity is actually a sheep/wolf and wants a say in its color. DyeableSheep: false DyeableWolf: false +DyeableCat: false # This is only called into action when the disguise is constructed using the commands. # And when the disguise supports that. This will not be used at all for plugins constructing the disguises for instance.