From 51fc52e24b80265d24f38de9668d0f4a41a3f5d5 Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Fri, 27 Oct 2023 20:34:07 -0500 Subject: [PATCH] feat: add config option to disable cosmetics in certain gamemodes --- .../hmccosmetics/config/Settings.java | 17 +++++++++++++++++ .../listener/PlayerGameListener.java | 10 ++++++++++ .../hmccosmetics/user/CosmeticUser.java | 3 ++- common/src/main/resources/config.yml | 6 ++++++ 4 files changed, 35 insertions(+), 1 deletion(-) 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 91ad46a0..ba733e7c 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/config/Settings.java @@ -3,10 +3,13 @@ package com.hibiscusmc.hmccosmetics.config; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; import com.hibiscusmc.hmccosmetics.util.MessagesUtil; import lombok.Getter; +import org.bukkit.GameMode; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.util.Vector; import org.spongepowered.configurate.ConfigurationNode; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; public class Settings { @@ -26,6 +29,8 @@ public class Settings { private static final String UNAPPLY_DEATH_PATH = "unapply-on-death"; private static final String FORCE_PERMISSION_JOIN_PATH = "force-permission-join"; private static final String FORCE_SHOW_COSMETICS_PATH = "force-show-join"; + private static final String DISABLED_GAMEMODE_PATH = "disabled-gamemode"; + private static final String DISABLED_GAMEMODE_GAMEMODES_PATH = "gamemodes"; private static final String EMOTE_DISTANCE_PATH = "emote-distance"; private static final String HOOK_SETTING_PATH = "hook-settings"; private static final String HOOK_ITEMADDER_PATH = "itemsadder"; @@ -110,6 +115,10 @@ public class Settings { @Getter private static boolean emotesEnabled; @Getter + private static boolean disabledGamemodesEnabled; + @Getter + private static List disabledGamemodes; + @Getter private static int viewDistance; @Getter private static int tickPeriod; @@ -164,6 +173,14 @@ public class Settings { ConfigurationNode cosmeticSettings = source.node(COSMETIC_SETTINGS_PATH); + ConfigurationNode disabledGamemodeSettings = cosmeticSettings.node(DISABLED_GAMEMODE_PATH); + disabledGamemodesEnabled = disabledGamemodeSettings.node(ENABLED_PATH).getBoolean(true); + try { + disabledGamemodes = disabledGamemodeSettings.node(DISABLED_GAMEMODE_GAMEMODES_PATH).getList(String.class); + } catch (Exception e) { + disabledGamemodes = new ArrayList<>(); + } + unapplyOnDeath = cosmeticSettings.node(UNAPPLY_DEATH_PATH).getBoolean(false); forcePermissionJoin = cosmeticSettings.node(FORCE_PERMISSION_JOIN_PATH).getBoolean(false); forceShowOnJoin = cosmeticSettings.node(FORCE_SHOW_COSMETICS_PATH).getBoolean(false); 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 74369712..fd0f3f06 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -336,6 +336,16 @@ public class PlayerGameListener implements Listener { CosmeticUser user = CosmeticUsers.getUser(event.getPlayer()); if (user == null) return; + if (Settings.isDisabledGamemodesEnabled()) { + if (Settings.getDisabledGamemodes().contains(event.getNewGameMode().toString())) { + user.hideCosmetics(CosmeticUser.HiddenReason.GAMEMODE); + } else { + if (user.getHiddenReason() != null && user.getHiddenReason().equals(CosmeticUser.HiddenReason.GAMEMODE)) { + user.showCosmetics(); + } + } + } + if (Settings.isDestroyLooseCosmetics()) { ItemStack[] equippedArmor = event.getPlayer().getInventory().getArmorContents(); if (equippedArmor.length == 0) return; 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 bf4162c2..64526101 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java @@ -527,6 +527,7 @@ public class CosmeticUser { POTION, ACTION, COMMAND, - EMOTE + EMOTE, + GAMEMODE } } diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index 34c5a1d0..214a5c61 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -24,6 +24,12 @@ cosmetic-settings: force-permission-join: true # Checks a player permission if they can have a cosmetic when they join the server. force-show-join: false # If the plugin should force show a player's cosmetics when they join the server. + disabled-gamemode: + enabled: true + # Which gamemodes should cosmetics be disabled for. This is useful for servers that have a creative world. All options are here, https://hub.spigotmc.org/javadocs/spigot/org/bukkit/GameMode.html + gamemodes: + - "SPECTATOR" + # This disables the entire internal emote system within the plugin. This option requires a restart. emote-enable: true emote-distance: -3 # This shows how far away the camera should be while a player is doing an emote. Negative is behind player.