From 0f36803026096f6374011e478944d483feebc6d6 Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Mon, 18 Dec 2023 19:40:28 -0600 Subject: [PATCH] feat: add PlayerArmorChangeEvent for Paper servers --- common/build.gradle.kts | 2 +- .../hmccosmetics/HMCCosmeticsPlugin.java | 12 +++++++- .../listener/PaperPlayerGameListener.java | 30 +++++++++++++++++++ .../hmccosmetics/util/ServerUtils.java | 9 ++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PaperPlayerGameListener.java diff --git a/common/build.gradle.kts b/common/build.gradle.kts index e03f2aa1..02b20428 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -5,7 +5,7 @@ plugins { dependencies { compileOnly("com.mojang:authlib:1.5.25") - compileOnly("org.spigotmc:spigot-api:1.18.2-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT") compileOnly("org.jetbrains:annotations:23.0.0") compileOnly("com.comphenix.protocol:ProtocolLib:5.1.0") compileOnly("me.clip:placeholderapi:2.11.3") diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/HMCCosmeticsPlugin.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/HMCCosmeticsPlugin.java index 29e39813..bb6f76fd 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/HMCCosmeticsPlugin.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/HMCCosmeticsPlugin.java @@ -18,16 +18,19 @@ import com.hibiscusmc.hmccosmetics.gui.Menus; import com.hibiscusmc.hmccosmetics.hooks.Hooks; import com.hibiscusmc.hmccosmetics.hooks.worldguard.WGHook; import com.hibiscusmc.hmccosmetics.hooks.worldguard.WGListener; +import com.hibiscusmc.hmccosmetics.listener.PaperPlayerGameListener; import com.hibiscusmc.hmccosmetics.listener.PlayerConnectionListener; import com.hibiscusmc.hmccosmetics.listener.PlayerGameListener; import com.hibiscusmc.hmccosmetics.nms.NMSHandlers; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.hibiscusmc.hmccosmetics.util.MessagesUtil; +import com.hibiscusmc.hmccosmetics.util.ServerUtils; import com.hibiscusmc.hmccosmetics.util.TranslationUtil; import com.jeff_media.updatechecker.UpdateCheckSource; import com.jeff_media.updatechecker.UpdateChecker; import com.ticxo.playeranimator.PlayerAnimatorImpl; +import lombok.Getter; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -52,6 +55,8 @@ public final class HMCCosmeticsPlugin extends JavaPlugin { private static final int pluginId = 13873; private static boolean onLatestVersion = true; private static String latestVersion = ""; + @Getter + private static boolean onPaper = false; @Override public void onEnable() { @@ -123,7 +128,12 @@ public final class HMCCosmeticsPlugin extends JavaPlugin { // Listener getServer().getPluginManager().registerEvents(new PlayerConnectionListener(), this); getServer().getPluginManager().registerEvents(new PlayerGameListener(), this); - + // Taken from PaperLib + if (ServerUtils.hasClass("com.destroystokyo.paper.PaperConfig") || ServerUtils.hasClass("io.papermc.paper.configuration.Configuration")) { + onPaper = true; + getLogger().info("Detected Paper! Enabling Paper support..."); + getServer().getPluginManager().registerEvents(new PaperPlayerGameListener(), this); + } // Database new Database(); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PaperPlayerGameListener.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PaperPlayerGameListener.java new file mode 100644 index 00000000..62506a54 --- /dev/null +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PaperPlayerGameListener.java @@ -0,0 +1,30 @@ +package com.hibiscusmc.hmccosmetics.listener; + +import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent; +import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; +import com.hibiscusmc.hmccosmetics.user.CosmeticUser; +import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class PaperPlayerGameListener implements Listener { + + @EventHandler + public void onPlayerArmorEquip(PlayerArmorChangeEvent event) { + CosmeticUser user = CosmeticUsers.getUser(event.getPlayer()); + if (user == null) return; + if (user.isInWardrobe()) return; + user.updateCosmetic(slotTypeToCosmeticType(event.getSlotType())); + } + + private CosmeticSlot slotTypeToCosmeticType(PlayerArmorChangeEvent.SlotType slotType) { + return switch (slotType) { + case HEAD -> CosmeticSlot.HELMET; + case FEET -> CosmeticSlot.BOOTS; + case LEGS -> CosmeticSlot.LEGGINGS; + case CHEST -> CosmeticSlot.CHESTPLATE; + default -> null; + }; + } + +} diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/ServerUtils.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/ServerUtils.java index 2c1dcf15..3a3aebf6 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/ServerUtils.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/ServerUtils.java @@ -157,4 +157,13 @@ public class ServerUtils { } return nextYaw; } + + public static boolean hasClass(String className) { + try { + Class.forName(className); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } }