From c763a55a1753ef16db5a845ff0c8e5758638f75f Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Sat, 14 Jan 2023 12:04:48 -0600 Subject: [PATCH] unapply on death settings --- build.gradle.kts | 3 +++ .../com/hibiscusmc/hmccosmetics/config/Settings.java | 6 ++++++ .../hmccosmetics/listener/PlayerGameListener.java | 11 +++++++++++ .../hibiscusmc/hmccosmetics/user/CosmeticUser.java | 7 +++++++ common/src/main/resources/config.yml | 2 ++ 5 files changed, 29 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 026dc456..7e081863 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -208,6 +208,9 @@ bukkit { register("hmccosmetics.cmd.menu.other") { default = BukkitPluginDescription.Permission.Default.OP } + register("hmccosmetics.unapplydeath.bypass") { + default = BukkitPluginDescription.Permission.Default.OP + } } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java index 211e7d26..fde4d4af 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java @@ -27,6 +27,7 @@ public class Settings { private static final String DYE_MENU_NAME = "title"; private static final String DEBUG_ENABLE_PETH = "debug-mode"; private static final String TICK_PERIOD_PATH = "tick-period"; + private static final String UNAPPLY_DEATH_PATH = "unapply-on-death"; private static String defaultMenu; private static String dyeMenuName; @@ -37,6 +38,7 @@ public class Settings { private static boolean requireEmptyPants; private static boolean requireEmptyBoots; private static boolean debugMode; + private static boolean unapplyOnDeath; private static int lookDownPitch; private static int viewDistance; private static int tickPeriod; @@ -64,6 +66,7 @@ public class Settings { requireEmptyChestPlate = cosmeticSettings.node(REQUIRE_EMPTY_CHEST_PLATE_PATH).getBoolean(); requireEmptyPants = cosmeticSettings.node(REQUIRE_EMPTY_PANTS_PATH).getBoolean(); requireEmptyBoots = cosmeticSettings.node(REQUIRE_EMPTY_BOOTS_PATH).getBoolean(); + unapplyOnDeath = cosmeticSettings.node(UNAPPLY_DEATH_PATH).getBoolean(false); tickPeriod = cosmeticSettings.node(TICK_PERIOD_PATH).getInt(-1); lookDownPitch = cosmeticSettings.node(LOOK_DOWN_PITCH_PATH).getInt(); @@ -177,4 +180,7 @@ public class Settings { public static int getTickPeriod() { return tickPeriod; } + public static boolean getUnapplyOnDeath() { + return unapplyOnDeath; + } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java index 9e4dea4b..f774b442 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -28,6 +28,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.*; @@ -208,6 +209,16 @@ public class PlayerGameListener implements Listener { }, 2); } + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + CosmeticUser user = CosmeticUsers.getUser(event.getEntity()); + if (user == null) return; + + if (Settings.getUnapplyOnDeath() && !event.getEntity().hasPermission("hmccosmetics.unapplydeath.bypass")) { + user.removeCosmetics(); + } + } + private void registerInventoryClickListener() { ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(HMCCosmeticsPlugin.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Client.WINDOW_CLICK) { @Override diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java index d156b575..4cff452e 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java @@ -136,6 +136,13 @@ public class CosmeticUser { addPlayerCosmetic(cosmetic); } + public void removeCosmetics() { + for (Cosmetic cosmetic : getCosmetic()) { + removeCosmeticSlot(cosmetic.getSlot()); + } + } + + public void removeCosmeticSlot(CosmeticSlot slot) { // API PlayerCosmeticRemoveEvent event = new PlayerCosmeticRemoveEvent(this, getCosmetic(slot)); diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index 1fb0d54d..d98dd583 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -20,6 +20,8 @@ cosmetic-settings: tick-period: 20 # In ticks, determines how many times a player cosmetics should be updated. -1 to disable. # Ticking periods is something that ensures new players near a player get the packets to actually apply to the user. + unapply-on-death: false # If when a player dies, their cosmetics should be unapplied. If this is true, use hmccosmetics.unapplydeath.bypass to bypass + # view distance in blocks that other players will see the backpack cosmetic # setting this to lower than the server player view distance should fix the # bug where players see random backpacks. Put -1 to ignore and send packets to everyone.