9
0
mirror of https://github.com/HibiscusMC/HMCCosmetics.git synced 2025-12-29 11:59:21 +00:00

Complete overhaul of hooks

This commit is contained in:
LoJoSho
2023-02-07 15:54:21 -06:00
parent a096f6c684
commit 5aef04dee0
17 changed files with 162 additions and 125 deletions

View File

@@ -12,8 +12,8 @@ import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic;
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetics;
import com.hibiscusmc.hmccosmetics.database.Database;
import com.hibiscusmc.hmccosmetics.gui.Menus;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.hooks.items.ItemHooks;
import com.hibiscusmc.hmccosmetics.hooks.Hooks;
import com.hibiscusmc.hmccosmetics.hooks.placeholders.HMCPlaceholderExpansion;
import com.hibiscusmc.hmccosmetics.hooks.worldguard.WGHook;
import com.hibiscusmc.hmccosmetics.hooks.worldguard.WGListener;
import com.hibiscusmc.hmccosmetics.listener.PlayerConnectionListener;
@@ -26,7 +26,6 @@ import com.jeff_media.updatechecker.UpdateChecker;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.permissions.Permission;
@@ -105,11 +104,6 @@ public final class HMCCosmeticsPlugin extends JavaPlugin {
// Database
new Database();
// PAPI
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
new PAPIHook().register();
}
// ModelEngine
if (Bukkit.getPluginManager().getPlugin("ModelEngine") != null) {
hasModelEngine = true;
@@ -197,8 +191,8 @@ public final class HMCCosmeticsPlugin extends JavaPlugin {
throw new RuntimeException(e);
}
// ItemHooks
ItemHooks.setup();
// Misc Hooks setup (like items)
Hooks.setup();
// Cosmetics setup
Cosmetics.setup();

View File

@@ -1,7 +1,7 @@
package com.hibiscusmc.hmccosmetics.config.serializer;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import com.hibiscusmc.hmccosmetics.hooks.items.ItemHooks;
import com.hibiscusmc.hmccosmetics.hooks.Hooks;
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
import com.hibiscusmc.hmccosmetics.util.ServerUtils;
import com.hibiscusmc.hmccosmetics.util.builder.ColorBuilder;
@@ -74,7 +74,7 @@ public class ItemSerializer implements TypeSerializer<ItemStack> {
String material = materialNode.getString();
ItemStack item = ItemHooks.getItem(material);
ItemStack item = Hooks.getItem(material);
if (item == null) {
HMCCosmeticsPlugin.getInstance().getLogger().severe("Invalid Material -> " + material);
return new ItemStack(Material.AIR);

View File

@@ -5,22 +5,18 @@ import com.hibiscusmc.hmccosmetics.api.PlayerMenuOpenEvent;
import com.hibiscusmc.hmccosmetics.config.serializer.ItemSerializer;
import com.hibiscusmc.hmccosmetics.gui.type.Type;
import com.hibiscusmc.hmccosmetics.gui.type.Types;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import com.hibiscusmc.hmccosmetics.user.CosmeticUsers;
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
import com.hibiscusmc.hmccosmetics.util.misc.Adventure;
import com.hibiscusmc.hmccosmetics.util.misc.Placeholder;
import dev.triumphteam.gui.builder.item.ItemBuilder;
import dev.triumphteam.gui.guis.Gui;
import dev.triumphteam.gui.guis.GuiItem;
import me.clip.placeholderapi.PlaceholderAPI;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.spongepowered.configurate.ConfigurationNode;
import org.spongepowered.configurate.serialize.SerializationException;

View File

@@ -7,7 +7,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticArmorType;
import com.hibiscusmc.hmccosmetics.gui.action.Actions;
import com.hibiscusmc.hmccosmetics.gui.special.DyeMenu;
import com.hibiscusmc.hmccosmetics.gui.type.Type;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.hooks.Hooks;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
import com.hibiscusmc.hmccosmetics.util.misc.StringUtils;
@@ -123,11 +123,15 @@ public class TypeCosmetic extends Type {
lockedName = StringUtils.parseStringToString(Utils.replaceIfNull(itemConfig.node("locked-name").getString(), ""));
}
itemMeta.setDisplayName(PlaceholderAPI.setPlaceholders(user.getPlayer(), lockedName));
if (Hooks.isActiveHook("PlaceHolderAPI")) {
lockedName = PlaceholderAPI.setPlaceholders(user.getPlayer(), lockedName);
}
itemMeta.setDisplayName(lockedName);
if (itemMeta.hasLore()) {
itemMeta.getLore().clear();
for (String loreLine : lockedLore) {
processedLore.add(PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine));
if (Hooks.isActiveHook("PlaceHolderAPI")) loreLine = PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine);
processedLore.add(loreLine);
}
}
} catch (Exception e) {
@@ -142,11 +146,11 @@ public class TypeCosmetic extends Type {
private ItemMeta processLoreLines(CosmeticUser user, ItemMeta itemMeta) {
List<String> processedLore = new ArrayList<>();
if (PAPIHook.isPAPIEnabled()) {
if (itemMeta.hasLore()) {
for (String loreLine : itemMeta.getLore()) {
processedLore.add(PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine));
}
if (itemMeta.hasLore()) {
for (String loreLine : itemMeta.getLore()) {
if (Hooks.isActiveHook("PlaceholderAPI"))
loreLine = PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine);
processedLore.add(loreLine);
}
}

View File

@@ -2,7 +2,8 @@ package com.hibiscusmc.hmccosmetics.gui.type.types;
import com.hibiscusmc.hmccosmetics.gui.action.Actions;
import com.hibiscusmc.hmccosmetics.gui.type.Type;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.hooks.Hooks;
import com.hibiscusmc.hmccosmetics.hooks.placeholders.HMCPlaceholderExpansion;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.event.inventory.ClickType;
@@ -55,11 +56,11 @@ public class TypeEmpty extends Type {
public ItemMeta setLore(CosmeticUser user, ConfigurationNode config, ItemMeta itemMeta) {
List<String> processedLore = new ArrayList<>();
if (PAPIHook.isPAPIEnabled()) {
if (itemMeta.hasLore()) {
for (String loreLine : itemMeta.getLore()) {
processedLore.add(PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine));
}
if (itemMeta.hasLore()) {
for (String loreLine : itemMeta.getLore()) {
if (Hooks.isActiveHook("PlaceholderAPI"))
loreLine = PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine);
processedLore.add(loreLine);
}
}

View File

@@ -1,20 +1,25 @@
package com.hibiscusmc.hmccosmetics.hooks.items;
package com.hibiscusmc.hmccosmetics.hooks;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
public class ItemHook implements Listener {
public class Hook implements Listener {
private String id;
private boolean active;
private boolean itemHook;
public ItemHook(String id) {
public Hook(String id) {
this.id = id;
active = false;
ItemHooks.addItemHook(this);
Hooks.addHook(this);
}
public ItemStack get(String itemid) {
public void load() {
// Override
}
public ItemStack getItem(String itemid) {
return null;
// Override
}
@@ -30,4 +35,12 @@ public class ItemHook implements Listener {
public boolean getActive() {
return this.active;
}
public void setEnabledItemHook(boolean enabled) {
itemHook = enabled;
}
public boolean hasEnabledItemHook() {
return itemHook;
}
}

View File

@@ -0,0 +1,67 @@
package com.hibiscusmc.hmccosmetics.hooks;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import com.hibiscusmc.hmccosmetics.hooks.items.*;
import com.hibiscusmc.hmccosmetics.hooks.placeholders.HookPlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.HashMap;
public class Hooks {
private static HashMap<String, Hook> hooks = new HashMap<>();
private static HookOraxen ORAXEN_HOOK = new HookOraxen();
private static HookItemAdder ITEMADDER_HOOK = new HookItemAdder();
private static HookMythic MYTHIC_HOOK = new HookMythic();
private static HookHMCCosmetics HMCCOSMETIC_HOOK = new HookHMCCosmetics();
private static HookPlaceholderAPI PAPI_HOOK = new HookPlaceholderAPI();
public static Hook getHook(String id) {
return hooks.get(id.toLowerCase());
}
public static boolean isItemHook(String id) {
return hooks.containsKey(id.toLowerCase());
}
public static void addHook(Hook hook) {
hooks.put(hook.getId().toLowerCase(), hook);
}
public static void setup() {
for (Hook hook : hooks.values()) {
if (Bukkit.getPluginManager().getPlugin(hook.getId()) != null) {
HMCCosmeticsPlugin.getInstance().getServer().getPluginManager().registerEvents(hook, HMCCosmeticsPlugin.getInstance());
hook.setActive(true);
hook.load();
HMCCosmeticsPlugin.getInstance().getLogger().info("Successfully hooked into " + hook.getId());
}
}
}
public static ItemStack getItem(String raw) {
if (!raw.contains(":")) {
Material mat = Material.getMaterial(raw.toUpperCase());
if (mat == null) return null;
return new ItemStack(mat);
}
// Ex. Oraxen:BigSword
// split[0] is the plugin name
// split[1] is the item name
String[] split = raw.split(":", 2);
if (!isItemHook(split[0])) return null;
Hook hook = getHook(split[0]);
if (!hook.hasEnabledItemHook()) return null;
if (!hook.getActive()) return null;
ItemStack item = hook.getItem(split[1]);
return item;
}
public static boolean isActiveHook(String id) {
if (!hooks.containsKey(getHook(id))) return false;
return hooks.get(getHook(id)).getActive();
}
}

View File

@@ -2,17 +2,19 @@ package com.hibiscusmc.hmccosmetics.hooks.items;
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic;
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetics;
import com.hibiscusmc.hmccosmetics.hooks.Hook;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
public class HMCCosmeticsHook extends ItemHook implements Listener {
public class HookHMCCosmetics extends Hook implements Listener {
public HMCCosmeticsHook() {
public HookHMCCosmetics() {
super("HMCCosmetics");
setEnabledItemHook(true);
}
@Override
public ItemStack get(String itemid) {
public ItemStack getItem(String itemid) {
Cosmetic cosmetic = Cosmetics.getCosmetic(itemid);
if (cosmetic == null) return null;
return cosmetic.getItem();

View File

@@ -1,6 +1,7 @@
package com.hibiscusmc.hmccosmetics.hooks.items;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import com.hibiscusmc.hmccosmetics.hooks.Hook;
import dev.lone.itemsadder.api.CustomStack;
import dev.lone.itemsadder.api.Events.ItemsAdderLoadDataEvent;
import org.bukkit.Material;
@@ -8,18 +9,19 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
public class ItemAdderHook extends ItemHook implements Listener {
public class HookItemAdder extends Hook implements Listener {
// I hate IA, this overcomplicate stuff is so unneeded if it just did its stuff when its needed.
private boolean enabled = false;
public ItemAdderHook() {
public HookItemAdder() {
super("itemsadder");
setEnabledItemHook(true);
}
@Override
public ItemStack get(String itemid) {
public ItemStack getItem(String itemid) {
if (enabled) {
CustomStack stack = CustomStack.getInstance(itemid);
if (stack == null) return null;

View File

@@ -1,18 +1,20 @@
package com.hibiscusmc.hmccosmetics.hooks.items;
import com.hibiscusmc.hmccosmetics.hooks.Hook;
import com.mineinabyss.geary.prefabs.PrefabKey;
import com.mineinabyss.looty.LootyFactory;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
public class LootyHook extends ItemHook implements Listener {
public class HookLooty extends Hook implements Listener {
public LootyHook() {
public HookLooty() {
super("looty");
setEnabledItemHook(true);
}
@Override
public ItemStack get(String itemid) {
public ItemStack getItem(String itemid) {
PrefabKey prefabKey = PrefabKey.Companion.ofOrNull(itemid);
if (prefabKey == null) return null;
return LootyFactory.INSTANCE.createFromPrefab(prefabKey);

View File

@@ -1,16 +1,18 @@
package com.hibiscusmc.hmccosmetics.hooks.items;
import com.hibiscusmc.hmccosmetics.hooks.Hook;
import io.lumine.mythic.bukkit.MythicBukkit;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
public class MythicHook extends ItemHook implements Listener {
public MythicHook() {
public class HookMythic extends Hook implements Listener {
public HookMythic() {
super("mythicmobs");
setEnabledItemHook(true);
}
@Override
public ItemStack get(String itemid) {
public ItemStack getItem(String itemid) {
return MythicBukkit.inst().getItemManager().getItemStack(itemid);
}
}

View File

@@ -1,18 +1,20 @@
package com.hibiscusmc.hmccosmetics.hooks.items;
import com.hibiscusmc.hmccosmetics.hooks.Hook;
import io.th0rgal.oraxen.api.OraxenItems;
import io.th0rgal.oraxen.items.ItemBuilder;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
public class OraxenHook extends ItemHook implements Listener {
public class HookOraxen extends Hook implements Listener {
public OraxenHook() {
public HookOraxen() {
super("oraxen");
setEnabledItemHook(true);
}
@Override
public ItemStack get(String itemid) {
public ItemStack getItem(String itemid) {
ItemBuilder builder = OraxenItems.getItemById(itemid);
if (builder == null) return null;
return builder.build();

View File

@@ -1,58 +0,0 @@
package com.hibiscusmc.hmccosmetics.hooks.items;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.HashMap;
public class ItemHooks {
private static HashMap<String, ItemHook> itemHooks = new HashMap<>();
private static OraxenHook ORAXEN_HOOK = new OraxenHook();
private static LootyHook LOOTY_HOOK = new LootyHook();
private static ItemAdderHook ITEMADDER_HOOK = new ItemAdderHook();
private static MythicHook MYTHIC_HOOK = new MythicHook();
private static HMCCosmeticsHook HMCCOSMETIC_HOOK = new HMCCosmeticsHook();
public static ItemHook getItemHook(String id) {
return itemHooks.get(id.toLowerCase());
}
public static boolean isItemHook(String id) {
return itemHooks.containsKey(id.toLowerCase());
}
public static void addItemHook(ItemHook hook) {
itemHooks.put(hook.getId().toLowerCase(), hook);
}
public static void setup() {
for (ItemHook itemHook : itemHooks.values()) {
if (Bukkit.getPluginManager().getPlugin(itemHook.getId()) != null) {
HMCCosmeticsPlugin.getInstance().getServer().getPluginManager().registerEvents(itemHook, HMCCosmeticsPlugin.getInstance());
itemHook.setActive(true);
HMCCosmeticsPlugin.getInstance().getLogger().info("Successfully hooked into " + itemHook.getId());
}
}
}
public static ItemStack getItem(String raw) {
if (!raw.contains(":")) {
Material mat = Material.getMaterial(raw.toUpperCase());
if (mat == null) return null;
return new ItemStack(mat);
}
// Ex. Oraxen:BigSword
// split[0] is the plugin name
// split[1] is the item name
String[] split = raw.split(":", 2);
if (!isItemHook(split[0])) return null;
ItemHook itemHook = getItemHook(split[0]);
if (!itemHook.getActive()) return null;
ItemStack item = itemHook.get(split[1]);
return item;
}
}

View File

@@ -1,4 +1,4 @@
package com.hibiscusmc.hmccosmetics.hooks;
package com.hibiscusmc.hmccosmetics.hooks.placeholders;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic;
@@ -16,11 +16,11 @@ import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.List;
public class PAPIHook extends PlaceholderExpansion {
public class HMCPlaceholderExpansion extends PlaceholderExpansion {
private static boolean papiEnabled = false;
public PAPIHook() {
public HMCPlaceholderExpansion() {
papiEnabled = true;
}
@@ -66,6 +66,7 @@ public class PAPIHook extends PlaceholderExpansion {
if (placeholderArgs.get(1) != null) {
CosmeticSlot slot = CosmeticSlot.valueOf(placeholderArgs.get(1).toUpperCase());
if (slot == null) return null;
if (user.getCosmetic(slot) == null) return null;
if (placeholderArgs.size() == 2) return user.getCosmetic(slot).getId();
switch (placeholderArgs.get(2).toLowerCase()) {
case "material" -> {
@@ -161,8 +162,4 @@ public class PAPIHook extends PlaceholderExpansion {
}
return null;
}
public static boolean isPAPIEnabled() {
return papiEnabled;
}
}

View File

@@ -0,0 +1,15 @@
package com.hibiscusmc.hmccosmetics.hooks.placeholders;
import com.hibiscusmc.hmccosmetics.hooks.Hook;
public class HookPlaceholderAPI extends Hook {
public HookPlaceholderAPI() {
super("placeholderapi");
}
@Override
public void load() {
new HMCPlaceholderExpansion().register();
}
}

View File

@@ -3,7 +3,8 @@ package com.hibiscusmc.hmccosmetics.util;
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
import com.hibiscusmc.hmccosmetics.config.Settings;
import com.hibiscusmc.hmccosmetics.config.WardrobeSettings;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.hooks.Hooks;
import com.hibiscusmc.hmccosmetics.hooks.placeholders.HMCPlaceholderExpansion;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import com.hibiscusmc.hmccosmetics.util.misc.Adventure;
import me.clip.placeholderapi.PlaceholderAPI;
@@ -95,7 +96,7 @@ public class MessagesUtil {
if (!messages.containsKey(key)) return null;
if (messages.get(key) == null) return null;
String message = messages.get(key);
if (PAPIHook.isPAPIEnabled() && player != null) message = PlaceholderAPI.setPlaceholders(player, message);
if (Hooks.isActiveHook("PlaceholderAPI") && player != null) message = PlaceholderAPI.setPlaceholders(player, message);
message = message.replaceAll("%prefix%", prefix);
if (placeholders != null ) {
return Adventure.MINI_MESSAGE.deserialize(message, placeholders);
@@ -113,7 +114,7 @@ public class MessagesUtil {
public static Component processStringNoKey(Player player, String message, TagResolver placeholders) {
message = message.replaceAll("%prefix%", prefix);
if (PAPIHook.isPAPIEnabled() && player != null) message = PlaceholderAPI.setPlaceholders(player, message);
if (Hooks.isActiveHook("PlaceholderAPI") && player != null) message = PlaceholderAPI.setPlaceholders(player, message);
if (placeholders != null ) {
return Adventure.MINI_MESSAGE.deserialize(message, placeholders);
}
@@ -122,7 +123,7 @@ public class MessagesUtil {
public static String processStringNoKeyString(Player player, String message) {
message = message.replaceAll("%prefix%", prefix);
if (PAPIHook.isPAPIEnabled() && player != null) message = PlaceholderAPI.setPlaceholders(player, message);
if (Hooks.isActiveHook("PlaceholderAPI") && player != null) message = PlaceholderAPI.setPlaceholders(player, message);
return message;
}