Commit ada68a1c authored by Ash's avatar Ash
Browse files

Renamed project to MythicCosmetics

`+` Plugin is now a Mythic add-on and depends on MythicMobs

`+` Updated to support 1.21.3 and 1.21.4 (emotes currently broken, though)

`+` Dropped support for all versions before 1.21.3

`+` Updated to use ModelEngine 4

`+` Added support to load cosmetics from Mythic packs using folder structure `PACK/cosmetics/hats` etc

`+` Added support for Crucible implicit generation for hats and other equippabless
parent 048c3a5f
...@@ -6,8 +6,8 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic; ...@@ -6,8 +6,8 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic;
import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.constants.Permissions;
import io.lumine.utils.commands.Command; import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.utils.serialize.Chroma; import io.lumine.mythic.bukkit.utils.serialize.Chroma;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
......
...@@ -3,9 +3,9 @@ package io.lumine.cosmetics.commands.admin; ...@@ -3,9 +3,9 @@ package io.lumine.cosmetics.commands.admin;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.constants.Permissions;
import io.lumine.utils.adventure.text.Component; import net.kyori.adventure.text.Component;
import io.lumine.utils.commands.Command; import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.utils.text.Text; import io.lumine.mythic.bukkit.utils.text.Text;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
......
...@@ -4,8 +4,8 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; ...@@ -4,8 +4,8 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.constants.Permissions;
import io.lumine.utils.commands.Command; import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.utils.config.properties.Property; import io.lumine.mythic.bukkit.utils.config.properties.Property;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import java.util.Collections; import java.util.Collections;
...@@ -19,13 +19,8 @@ public class ReloadCommand extends Command<MCCosmeticsPlugin> { ...@@ -19,13 +19,8 @@ public class ReloadCommand extends Command<MCCosmeticsPlugin> {
@Override @Override
public boolean onCommand(CommandSender sender, String[] args) { public boolean onCommand(CommandSender sender, String[] args) {
getPlugin().reloadConfiguration();
getPlugin().getMenuManager().reload(); getPlugin().reload();
getPlugin().getCosmetics().reloadAllManagers();
getPlugin().getProfiles().reloadAllCosmetics();
CommandHelper.sendSuccess(sender, Property.String(Scope.CONFIG, CommandHelper.sendSuccess(sender, Property.String(Scope.CONFIG,
"Configuration.Language.Reloaded","MCCosmetics has been reloaded.").get()); "Configuration.Language.Reloaded","MCCosmetics has been reloaded.").get());
......
...@@ -4,8 +4,8 @@ import java.util.Collections; ...@@ -4,8 +4,8 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.config.Scope;
import io.lumine.utils.config.properties.Property; import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.utils.text.Text; import io.lumine.mythic.bukkit.utils.text.Text;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
...@@ -13,7 +13,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; ...@@ -13,7 +13,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.MCCosmetics; import io.lumine.cosmetics.api.MCCosmetics;
import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.constants.Permissions;
import io.lumine.utils.commands.Command; import io.lumine.mythic.bukkit.utils.commands.Command;
public class SprayCommand extends Command<MCCosmeticsPlugin> { public class SprayCommand extends Command<MCCosmeticsPlugin> {
......
...@@ -4,9 +4,9 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; ...@@ -4,9 +4,9 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.constants.Permissions;
import io.lumine.cosmetics.nms.VolatileCodeDisabled; import io.lumine.cosmetics.nms.VolatileCodeDisabled;
import io.lumine.utils.chat.ColorString; import io.lumine.mythic.bukkit.utils.chat.ColorString;
import io.lumine.utils.commands.Command; import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.utils.version.ServerVersion; import io.lumine.mythic.bukkit.utils.version.ServerVersion;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
......
package io.lumine.cosmetics.compat; package io.lumine.cosmetics.compat;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.logging.Log; import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.utils.plugin.ReloadableModule; import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
......
...@@ -6,9 +6,9 @@ import io.lumine.core.utils.gson.GsonProvider; ...@@ -6,9 +6,9 @@ import io.lumine.core.utils.gson.GsonProvider;
import io.lumine.core.utils.logging.Log; import io.lumine.core.utils.logging.Log;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.players.Profile; import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.plugin.PluginModule; import io.lumine.mythic.bukkit.utils.plugin.PluginModule;
import io.lumine.utils.promise.Promise; import io.lumine.mythic.bukkit.utils.promise.Promise;
import io.lumine.utils.storage.players.PlayerStorageAdapter; import io.lumine.mythic.bukkit.utils.storage.players.PlayerStorageAdapter;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
......
...@@ -4,7 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; ...@@ -4,7 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.compat.mythicmobs.CosmeticEmoteMechanic; import io.lumine.cosmetics.compat.mythicmobs.CosmeticEmoteMechanic;
import io.lumine.mythic.bukkit.MythicBukkit; import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.bukkit.events.MythicMechanicLoadEvent; import io.lumine.mythic.bukkit.events.MythicMechanicLoadEvent;
import io.lumine.utils.Events; import io.lumine.mythic.bukkit.utils.Events;
import java.util.Locale; import java.util.Locale;
......
package io.lumine.cosmetics.compat; package io.lumine.cosmetics.compat;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.managers.chat.ChatTag;
import io.lumine.cosmetics.players.Profile; import io.lumine.cosmetics.players.Profile;
import me.clip.placeholderapi.expansion.PlaceholderExpansion; import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
...@@ -18,7 +19,7 @@ public class PlaceholderAPICompat extends PlaceholderExpansion { ...@@ -18,7 +19,7 @@ public class PlaceholderAPICompat extends PlaceholderExpansion {
public String onPlaceholderRequest(Player player, String identifier) { public String onPlaceholderRequest(Player player, String identifier) {
Profile profile = plugin.getProfiles().getProfile(player); Profile profile = plugin.getProfiles().getProfile(player);
if(identifier.startsWith("is_equipped_")){ if(identifier.startsWith("is_equipped_")) {
String cosmeticType = identifier.split("_")[2].toUpperCase(); String cosmeticType = identifier.split("_")[2].toUpperCase();
return profile.getEquippedCosmetics().containsKey(cosmeticType) ? "true" : "false"; return profile.getEquippedCosmetics().containsKey(cosmeticType) ? "true" : "false";
} }
...@@ -35,6 +36,14 @@ public class PlaceholderAPICompat extends PlaceholderExpansion { ...@@ -35,6 +36,14 @@ public class PlaceholderAPICompat extends PlaceholderExpansion {
} }
switch (identifier) { switch (identifier) {
case "chattag": {
final var maybeTag = profile.getEquipped(ChatTag.class);
if(maybeTag.isPresent()) {
return ((ChatTag) maybeTag.get().getCosmetic()).getChatTag().get();
} else {
return "";
}
}
case "is_gesturing": case "is_gesturing":
return profile.getEquippedCosmetics().containsKey("GESTURE") ? "true" : "false"; return profile.getEquippedCosmetics().containsKey("GESTURE") ? "true" : "false";
case "active_gesture": case "active_gesture":
......
...@@ -3,7 +3,6 @@ package io.lumine.cosmetics.compat; ...@@ -3,7 +3,6 @@ package io.lumine.cosmetics.compat;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag;
...@@ -26,7 +25,7 @@ public class WorldGuardSupport { ...@@ -26,7 +25,7 @@ public class WorldGuardSupport {
StateFlag flag = new StateFlag("mcc-spray-flag", true); StateFlag flag = new StateFlag("mcc-spray-flag", true);
registry.register(flag); registry.register(flag);
SPRAY_FLAG = flag; SPRAY_FLAG = flag;
} catch(FlagConflictException e){ } catch(FlagConflictException e) {
Flag<?> existing = registry.get("mcc-spray-flag"); Flag<?> existing = registry.get("mcc-spray-flag");
if(existing instanceof StateFlag){ if(existing instanceof StateFlag){
SPRAY_FLAG = (StateFlag) existing; SPRAY_FLAG = (StateFlag) existing;
...@@ -36,12 +35,17 @@ public class WorldGuardSupport { ...@@ -36,12 +35,17 @@ public class WorldGuardSupport {
} }
public boolean canSprayWG(Player player, Location location) { public boolean canSprayWG(Player player, Location location) {
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); try {
RegionQuery query = container.createQuery(); RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location)); RegionQuery query = container.createQuery();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); LocalPlayer localPlayer = WorldGuard.getInstance().checkPlayer(BukkitAdapter.adapt(player));
return set.testState(localPlayer, SPRAY_FLAG); return set.testState(localPlayer, SPRAY_FLAG);
} catch(Throwable ex) {
ex.printStackTrace();
return true;
}
} }
} }
...@@ -4,14 +4,14 @@ import com.google.common.collect.Lists; ...@@ -4,14 +4,14 @@ import com.google.common.collect.Lists;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.storage.StorageDriver; import io.lumine.cosmetics.storage.StorageDriver;
import io.lumine.utils.storage.sql.SqlCredentials; import io.lumine.mythic.api.packs.Pack;
import io.lumine.utils.config.properties.types.SqlCredentialsProp; import io.lumine.mythic.bukkit.utils.config.properties.types.*;
import io.lumine.utils.config.properties.Property; import io.lumine.mythic.bukkit.utils.storage.sql.SqlCredentials;
import io.lumine.utils.config.properties.PropertyHolder; import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.EnumProp; import io.lumine.mythic.bukkit.utils.config.properties.PropertyHolder;
import io.lumine.utils.config.properties.types.IntProp; import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.utils.logging.Log; import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import io.lumine.utils.plugin.ReloadableModule; import io.lumine.mythic.core.packs.PackImpl;
import lombok.Getter; import lombok.Getter;
import java.io.File; import java.io.File;
...@@ -24,16 +24,22 @@ import java.util.jar.JarFile; ...@@ -24,16 +24,22 @@ import java.util.jar.JarFile;
public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implements PropertyHolder { public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implements PropertyHolder {
private static final IntProp CLOCK_INTERVAL = Property.Int(Scope.CONFIG, "Clock.Interval", 1); private static final EnumProp<StorageDriver> STORAGE_DRIVER = Property.Enum(Scope.CONFIG, StorageDriver.class, "Storage.Driver", StorageDriver.JSON);
private static final EnumProp<StorageDriver> STORAGE_DRIVER = Property.Enum(Scope.CONFIG, StorageDriver.class, "Storage.Driver", StorageDriver.JSON);
private static final SqlCredentialsProp SQL_CREDENTIALS = Property.SqlCredentials(Scope.CONFIG, "Storage"); private static final SqlCredentialsProp SQL_CREDENTIALS = Property.SqlCredentials(Scope.CONFIG, "Storage");
private static final IntProp EQUIP_DELAY = Property.Int(Scope.CONFIG, "General.EquipDelay", 5); private static final IntProp EQUIP_DELAY = Property.Int(Scope.CONFIG, "General.EquipDelay", 5);
private static final BooleanProp CRUCIBLE_GENERATION = Property.Boolean(Scope.CONFIG, "Assets.CrucibleGeneration", false);
//private static final StringProp ASSET_PACK = Property.String(Scope.CONFIG, "Assets.PackToGenerateFrom", "MythicCosmetics");
@Getter private boolean allowingMetrics = true; @Getter private boolean allowingMetrics = true;
@Getter private final Pack mythicPack;
public Configuration(MCCosmeticsPlugin plugin) { public Configuration(MCCosmeticsPlugin plugin) {
super(plugin); super(plugin);
this.mythicPack = new PackImpl(plugin, "MythicCosmetics");
} }
@Override @Override
...@@ -66,11 +72,7 @@ public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implement ...@@ -66,11 +72,7 @@ public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implement
} }
return packs; return packs;
} }
public int getClockInterval() {
return CLOCK_INTERVAL.get(this);
}
public StorageDriver getStorageType() { public StorageDriver getStorageType() {
return STORAGE_DRIVER.get(this); return STORAGE_DRIVER.get(this);
} }
......
package io.lumine.cosmetics.config; package io.lumine.cosmetics.config;
import io.lumine.utils.config.properties.PropertyScope; import io.lumine.mythic.bukkit.utils.config.properties.PropertyScope;
public enum Scope implements PropertyScope { public enum Scope implements PropertyScope {
......
...@@ -2,6 +2,7 @@ package io.lumine.cosmetics.constants; ...@@ -2,6 +2,7 @@ package io.lumine.cosmetics.constants;
import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.managers.back.BackAccessory; import io.lumine.cosmetics.managers.back.BackAccessory;
import io.lumine.cosmetics.managers.chat.ChatTag;
import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.managers.gestures.Gesture;
import io.lumine.cosmetics.managers.hats.Hat; import io.lumine.cosmetics.managers.hats.Hat;
import io.lumine.cosmetics.managers.modelengine.MEGAccessory; import io.lumine.cosmetics.managers.modelengine.MEGAccessory;
...@@ -9,7 +10,7 @@ import io.lumine.cosmetics.managers.offhand.Offhand; ...@@ -9,7 +10,7 @@ import io.lumine.cosmetics.managers.offhand.Offhand;
import io.lumine.cosmetics.managers.particle.ParticleAccessory; import io.lumine.cosmetics.managers.particle.ParticleAccessory;
import io.lumine.cosmetics.managers.pets.Pet; import io.lumine.cosmetics.managers.pets.Pet;
import io.lumine.cosmetics.managers.sprays.Spray; import io.lumine.cosmetics.managers.sprays.Spray;
import io.lumine.utils.logging.Log; import io.lumine.mythic.bukkit.utils.logging.Log;
import org.bukkit.Material; import org.bukkit.Material;
import java.util.HashMap; import java.util.HashMap;
...@@ -28,6 +29,7 @@ public class CosmeticType { ...@@ -28,6 +29,7 @@ public class CosmeticType {
register(Spray.class, new CosmeticConstant("SPRAY", "sprays")); register(Spray.class, new CosmeticConstant("SPRAY", "sprays"));
register(Offhand.class, new CosmeticConstant("OFFHAND", "offhands")); register(Offhand.class, new CosmeticConstant("OFFHAND", "offhands"));
register(Gesture.class, new CosmeticConstant("GESTURE", "gestures")); register(Gesture.class, new CosmeticConstant("GESTURE", "gestures"));
register(ChatTag.class, new CosmeticConstant("CHATTAG", "chattags"));
} }
public static void register(Class<? extends Cosmetic> clazz, CosmeticConstant cosmeticConstant) { public static void register(Class<? extends Cosmetic> clazz, CosmeticConstant cosmeticConstant) {
......
package io.lumine.cosmetics.logging; package io.lumine.cosmetics.logging;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.logging.ConsoleColor; import io.lumine.mythic.bukkit.utils.logging.ConsoleColor;
import java.util.logging.Level; import java.util.logging.Level;
......
...@@ -12,15 +12,19 @@ import io.lumine.cosmetics.commands.CommandHelper; ...@@ -12,15 +12,19 @@ import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.constants.Permissions;
import io.lumine.cosmetics.menus.CosmeticMenu; import io.lumine.cosmetics.menus.CosmeticMenu;
import io.lumine.utils.Schedulers; import io.lumine.mythic.api.packs.Pack;
import io.lumine.utils.config.properties.Property; import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.utils.config.properties.types.*; import io.lumine.mythic.bukkit.utils.Schedulers;
import io.lumine.utils.items.ItemFactory; import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.utils.menu.Icon; import io.lumine.mythic.bukkit.utils.config.properties.types.*;
import io.lumine.utils.menu.IconBuilder; import io.lumine.mythic.bukkit.utils.items.ItemFactory;
import io.lumine.utils.text.Text; import io.lumine.mythic.bukkit.utils.menu.Icon;
import io.lumine.mythic.bukkit.utils.menu.IconBuilder;
import io.lumine.mythic.bukkit.utils.text.Text;
import io.papermc.paper.datacomponent.DataComponentTypes;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.io.File; import java.io.File;
...@@ -33,7 +37,7 @@ public abstract class AbstractCosmetic extends Cosmetic { ...@@ -33,7 +37,7 @@ public abstract class AbstractCosmetic extends Cosmetic {
protected static final StringProp NAMESPACE = Property.String(Scope.NONE, "Namespace", null); protected static final StringProp NAMESPACE = Property.String(Scope.NONE, "Namespace", null);
protected static final StringProp PERMISSION = Property.String(Scope.NONE, "Permission", null); protected static final StringProp PERMISSION = Property.String(Scope.NONE, "Permission", null);
protected static final EnumProp<Material> MATERIAL = Property.Enum(Scope.NONE, Material.class, "Material", Material.EMERALD); protected static final EnumProp<Material> MATERIAL = Property.Enum(Scope.NONE, Material.class, "Material", Material.EMERALD);
protected static final IntProp MODEL = Property.Int(Scope.NONE, "Model"); protected static final StringProp MODEL = Property.String(Scope.NONE, "Model", null);
protected static final LangProp DISPLAY = Property.Lang(Scope.NONE, "Display"); protected static final LangProp DISPLAY = Property.Lang(Scope.NONE, "Display");
protected static final LangListProp DESCRIPTION = Property.LangList(Scope.NONE, "Description"); protected static final LangListProp DESCRIPTION = Property.LangList(Scope.NONE, "Description");
protected static final StringProp TEXTURE = Property.String(Scope.NONE, "SkullTexture"); protected static final StringProp TEXTURE = Property.String(Scope.NONE, "SkullTexture");
...@@ -45,6 +49,7 @@ public abstract class AbstractCosmetic extends Cosmetic { ...@@ -45,6 +49,7 @@ public abstract class AbstractCosmetic extends Cosmetic {
private final MCCosmeticsManager manager; private final MCCosmeticsManager manager;
protected final Pack mythicPack;
protected final File file; protected final File file;
@Getter protected final String id; @Getter protected final String id;
@Getter protected final String key; @Getter protected final String key;
...@@ -54,7 +59,6 @@ public abstract class AbstractCosmetic extends Cosmetic { ...@@ -54,7 +59,6 @@ public abstract class AbstractCosmetic extends Cosmetic {
// Menu Item // Menu Item
protected Material material; protected Material material;
protected int model;
@Getter protected String display; @Getter protected String display;
protected List<String> description; protected List<String> description;
protected String color; protected String color;
...@@ -65,8 +69,13 @@ public abstract class AbstractCosmetic extends Cosmetic { ...@@ -65,8 +69,13 @@ public abstract class AbstractCosmetic extends Cosmetic {
protected Map<String,CosmeticVariant> variants = Maps.newConcurrentMap(); protected Map<String,CosmeticVariant> variants = Maps.newConcurrentMap();
public AbstractCosmetic(MCCosmeticsManager manager, File file, String type, String key) { public AbstractCosmetic(MCCosmeticsManager manager, File file, String type, String key) {
this(manager, null, file, type, key);
}
public AbstractCosmetic(MCCosmeticsManager manager, Pack pack, File file, String type, String key) {
super(manager, type, key); super(manager, type, key);
this.manager = manager; this.manager = manager;
this.mythicPack = pack;
this.file = file; this.file = file;
this.key = key; this.key = key;
this.namespace = NAMESPACE.fget(file,this); this.namespace = NAMESPACE.fget(file,this);
...@@ -90,7 +99,6 @@ public abstract class AbstractCosmetic extends Cosmetic { ...@@ -90,7 +99,6 @@ public abstract class AbstractCosmetic extends Cosmetic {
} }
this.material = MATERIAL.fget(file,this); this.material = MATERIAL.fget(file,this);
this.model = MODEL.fget(file,this);
this.display = DISPLAY.fget(file,this); this.display = DISPLAY.fget(file,this);
this.description = DESCRIPTION.fget(file,this); this.description = DESCRIPTION.fget(file,this);
this.color = COLOR.fget(file,this); this.color = COLOR.fget(file,this);
...@@ -104,19 +112,38 @@ public abstract class AbstractCosmetic extends Cosmetic { ...@@ -104,19 +112,38 @@ public abstract class AbstractCosmetic extends Cosmetic {
if(material == Material.PLAYER_HEAD) { if(material == Material.PLAYER_HEAD) {
this.menuItem = ItemFactory.of(this.material) this.menuItem = ItemFactory.of(this.material)
.name(Text.colorize(this.getDisplay())) .name(Text.colorize(this.getDisplay()))
.model(model)
.hideAttributes() .hideAttributes()
.lore(description) .lore(description)
.skullTexture(TEXTURE.get(this)) //.skullTexture(TEXTURE.get(this))
.build(); .build();
} else { } else {
this.menuItem = ItemFactory.of(this.material) this.menuItem = ItemFactory.of(this.material)
.name(Text.colorize(this.getDisplay())) .name(Text.colorize(this.getDisplay()))
.model(model)
.hideAttributes() .hideAttributes()
.lore(description) .lore(description)
.build(); .build();
} }
var model = MODEL.fget(file,this);
if(model != null) {
NamespacedKey itemModelKey = null;
if(MythicBukkit.inst().getCompatibility().getCrucible().isPresent()) {
final var generationFeedback = MythicBukkit.inst().getCompatibility().getCrucible().get().addItemToGeneration(mythicPack, model);
if(generationFeedback.getItemModel().isPresent()) {
itemModelKey = generationFeedback.getItemModel().get();
}
}
if(itemModelKey == null) {
if (!model.contains(":")) {
model = "minecraft:" + model;
}
itemModelKey = NamespacedKey.minecraft(model);
}
this.menuItem.setData(DataComponentTypes.ITEM_MODEL, itemModelKey);
}
} }
protected Icon<CosmeticProfile> buildIcon(String type) { protected Icon<CosmeticProfile> buildIcon(String type) {
...@@ -174,4 +201,9 @@ public abstract class AbstractCosmetic extends Cosmetic { ...@@ -174,4 +201,9 @@ public abstract class AbstractCosmetic extends Cosmetic {
return Optional.ofNullable(variants.getOrDefault(id, null)); return Optional.ofNullable(variants.getOrDefault(id, null));
} }
@Override
public String getPropertyNode() {
return this.key;
}
} }
...@@ -6,11 +6,11 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic; ...@@ -6,11 +6,11 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.api.cosmetics.CosmeticVariant; import io.lumine.cosmetics.api.cosmetics.CosmeticVariant;
import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.config.Scope;
import io.lumine.utils.config.properties.Property; import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.LangListProp; import io.lumine.mythic.bukkit.utils.config.properties.types.LangListProp;
import io.lumine.utils.config.properties.types.LangProp; import io.lumine.mythic.bukkit.utils.config.properties.types.LangProp;
import io.lumine.utils.config.properties.types.StringProp; import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp;
import io.lumine.utils.menu.Icon; import io.lumine.mythic.bukkit.utils.menu.Icon;
import lombok.Getter; import lombok.Getter;
public class AbstractCosmeticVariant extends CosmeticVariant { public class AbstractCosmeticVariant extends CosmeticVariant {
......
...@@ -3,8 +3,8 @@ package io.lumine.cosmetics.managers; ...@@ -3,8 +3,8 @@ package io.lumine.cosmetics.managers;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.events.extra.ArmorEquipEventListener; import io.lumine.mythic.bukkit.utils.events.extra.ArmorEquipEventListener;
import io.lumine.utils.plugin.ReloadableModule; import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import lombok.Getter; import lombok.Getter;
import java.util.Collection; import java.util.Collection;
......
...@@ -15,11 +15,13 @@ import io.lumine.cosmetics.nms.VolatileCodeHandler; ...@@ -15,11 +15,13 @@ import io.lumine.cosmetics.nms.VolatileCodeHandler;
import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper; import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper;
import io.lumine.cosmetics.players.ProfileManager; import io.lumine.cosmetics.players.ProfileManager;
import io.lumine.cosmetics.players.wardrobe.WardrobeExecutor; import io.lumine.cosmetics.players.wardrobe.WardrobeExecutor;
import io.lumine.utils.config.properties.Property; import io.lumine.mythic.api.packs.Pack;
import io.lumine.utils.config.properties.types.NodeListProp; import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.utils.files.Files; import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.utils.logging.Log; import io.lumine.mythic.bukkit.utils.config.properties.types.NodeListProp;
import io.lumine.utils.plugin.ReloadableModule; import io.lumine.mythic.bukkit.utils.files.Files;
import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import lombok.Getter; import lombok.Getter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
...@@ -46,25 +48,22 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM ...@@ -46,25 +48,22 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM
@Override @Override
public void load(MCCosmeticsPlugin plugin) { public void load(MCCosmeticsPlugin plugin) {
final Collection<File> files = Lists.newArrayList();
final String type = CosmeticType.folder(cosmeticClass); final String type = CosmeticType.folder(cosmeticClass);
for(var packFolder : plugin.getConfiguration().getPackFolders()) { for(var packFolder : plugin.getConfiguration().getPackFolders()) {
final File confFolder = new File(packFolder.getAbsolutePath() + System.getProperty("file.separator") + type); final File confFolder = new File(packFolder.getAbsolutePath() + System.getProperty("file.separator") + type);
if(confFolder.exists() && confFolder.isDirectory()) { if(confFolder.exists() && confFolder.isDirectory()) {
files.addAll(Files.getAllYaml(confFolder.getAbsolutePath())); for (File file : Files.getAllYaml(confFolder.getAbsolutePath())) {
loadCosmetics(null, file);
}
} }
} }
for(var pack : MythicBukkit.inst().getPackManager().getPacks()) {
for(var file : files) { final File confFolder = pack.getPackFolder("cosmetics" + System.getProperty("file.separator") + type);
for(var node : KEYS.fget(file)) { if(confFolder.exists() && confFolder.isDirectory()) {
var cosmetic = build(file, node); for (File file : Files.getAllYaml(confFolder.getAbsolutePath())) {
if(!cosmetics.containsKey(cosmetic.getId())){ loadCosmetics(pack, file);
cosmetics.put(cosmetic.getId(), cosmetic);
} else {
Log.warn("Cosmetic with id " + cosmetic.getId() + " already exists!");
Log.warn("Cosmetic will be ignored! Please rename this cosmetic.");
} }
} }
} }
...@@ -82,12 +81,25 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM ...@@ -82,12 +81,25 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM
Log.info("Loaded " + cosmetics.size() + " " + type + "."); Log.info("Loaded " + cosmetics.size() + " " + type + ".");
} }
private void loadCosmetics(Pack pack, File file) {
for(var node : KEYS.fget(file)) {
var cosmetic = build(pack, file, node);
if(!cosmetics.containsKey(cosmetic.getId())) {
cosmetics.put(cosmetic.getId(), cosmetic);
} else {
Log.warn("Cosmetic with id " + cosmetic.getId() + " already exists!");
Log.warn("Cosmetic will be ignored! Please rename this cosmetic.");
}
}
}
@Override @Override
public void unload() { public void unload() {
cosmetics.clear(); cosmetics.clear();
} }
public abstract T build(File file, String node); public abstract T build(Pack pack, File file, String node);
public Collection<T> getAllCosmetics() { public Collection<T> getAllCosmetics() {
return cosmetics.values(); return cosmetics.values();
......
...@@ -7,8 +7,10 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; ...@@ -7,8 +7,10 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic; import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.items.ItemFactory; import io.lumine.cosmetics.managers.hats.HatManager;
import io.lumine.utils.menu.Icon; import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.items.ItemFactory;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
...@@ -16,8 +18,12 @@ import java.io.File; ...@@ -16,8 +18,12 @@ import java.io.File;
public class BackAccessory extends AbstractCosmetic implements ColorableCosmetic,ItemCosmetic { public class BackAccessory extends AbstractCosmetic implements ColorableCosmetic,ItemCosmetic {
public BackAccessory(BackManager manager, File file, String key) { public BackAccessory(BackManager manager, File file, String key) {
super(manager, file, CosmeticType.type(BackAccessory.class), key); this(manager, null, file, key);
}
public BackAccessory(BackManager manager, Pack pack, File file, String key) {
super(manager, pack, file, CosmeticType.type(BackAccessory.class), key);
} }
@Override @Override
......
...@@ -10,8 +10,9 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager; ...@@ -10,8 +10,9 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.managers.gestures.Gesture;
import io.lumine.cosmetics.managers.modelengine.MEGAccessory; import io.lumine.cosmetics.managers.modelengine.MEGAccessory;
import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper;
import io.lumine.utils.Events; import io.lumine.mythic.api.packs.Pack;
import io.lumine.utils.Schedulers; import io.lumine.mythic.bukkit.utils.Events;
import io.lumine.mythic.bukkit.utils.Schedulers;
import java.io.File; import java.io.File;
...@@ -83,8 +84,8 @@ public class BackManager extends MCCosmeticsManager<BackAccessory> implements Hi ...@@ -83,8 +84,8 @@ public class BackManager extends MCCosmeticsManager<BackAccessory> implements Hi
} }
@Override @Override
public BackAccessory build(File file, String node) { public BackAccessory build(Pack pack, File file, String node) {
return new BackAccessory(this, file, node); return new BackAccessory(this, pack, file, node);
} }
@Override @Override
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment