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;
import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.constants.Permissions;
import io.lumine.utils.commands.Command;
import io.lumine.utils.serialize.Chroma;
import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.mythic.bukkit.utils.serialize.Chroma;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
......
......@@ -3,9 +3,9 @@ package io.lumine.cosmetics.commands.admin;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.constants.Permissions;
import io.lumine.utils.adventure.text.Component;
import io.lumine.utils.commands.Command;
import io.lumine.utils.text.Text;
import net.kyori.adventure.text.Component;
import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.mythic.bukkit.utils.text.Text;
import org.bukkit.command.CommandSender;
......
......@@ -4,8 +4,8 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.Permissions;
import io.lumine.utils.commands.Command;
import io.lumine.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import org.bukkit.command.CommandSender;
import java.util.Collections;
......@@ -19,13 +19,8 @@ public class ReloadCommand extends Command<MCCosmeticsPlugin> {
@Override
public boolean onCommand(CommandSender sender, String[] args) {
getPlugin().reloadConfiguration();
getPlugin().getMenuManager().reload();
getPlugin().getCosmetics().reloadAllManagers();
getPlugin().getProfiles().reloadAllCosmetics();
getPlugin().reload();
CommandHelper.sendSuccess(sender, Property.String(Scope.CONFIG,
"Configuration.Language.Reloaded","MCCosmetics has been reloaded.").get());
......
......@@ -4,8 +4,8 @@ import java.util.Collections;
import java.util.List;
import io.lumine.cosmetics.config.Scope;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.text.Text;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.text.Text;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
......@@ -13,7 +13,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.MCCosmetics;
import io.lumine.cosmetics.commands.CommandHelper;
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> {
......
......@@ -4,9 +4,9 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.constants.Permissions;
import io.lumine.cosmetics.nms.VolatileCodeDisabled;
import io.lumine.utils.chat.ColorString;
import io.lumine.utils.commands.Command;
import io.lumine.utils.version.ServerVersion;
import io.lumine.mythic.bukkit.utils.chat.ColorString;
import io.lumine.mythic.bukkit.utils.commands.Command;
import io.lumine.mythic.bukkit.utils.version.ServerVersion;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
......
package io.lumine.cosmetics.compat;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.logging.Log;
import io.lumine.utils.plugin.ReloadableModule;
import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import lombok.Getter;
import org.bukkit.Bukkit;
......
......@@ -6,9 +6,9 @@ import io.lumine.core.utils.gson.GsonProvider;
import io.lumine.core.utils.logging.Log;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.plugin.PluginModule;
import io.lumine.utils.promise.Promise;
import io.lumine.utils.storage.players.PlayerStorageAdapter;
import io.lumine.mythic.bukkit.utils.plugin.PluginModule;
import io.lumine.mythic.bukkit.utils.promise.Promise;
import io.lumine.mythic.bukkit.utils.storage.players.PlayerStorageAdapter;
import java.io.File;
import java.io.FileWriter;
......
......@@ -4,7 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.compat.mythicmobs.CosmeticEmoteMechanic;
import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.bukkit.events.MythicMechanicLoadEvent;
import io.lumine.utils.Events;
import io.lumine.mythic.bukkit.utils.Events;
import java.util.Locale;
......
package io.lumine.cosmetics.compat;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.managers.chat.ChatTag;
import io.lumine.cosmetics.players.Profile;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player;
......@@ -18,7 +19,7 @@ public class PlaceholderAPICompat extends PlaceholderExpansion {
public String onPlaceholderRequest(Player player, String identifier) {
Profile profile = plugin.getProfiles().getProfile(player);
if(identifier.startsWith("is_equipped_")){
if(identifier.startsWith("is_equipped_")) {
String cosmeticType = identifier.split("_")[2].toUpperCase();
return profile.getEquippedCosmetics().containsKey(cosmeticType) ? "true" : "false";
}
......@@ -35,6 +36,14 @@ public class PlaceholderAPICompat extends PlaceholderExpansion {
}
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":
return profile.getEquippedCosmetics().containsKey("GESTURE") ? "true" : "false";
case "active_gesture":
......
......@@ -3,7 +3,6 @@ package io.lumine.cosmetics.compat;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
......@@ -26,7 +25,7 @@ public class WorldGuardSupport {
StateFlag flag = new StateFlag("mcc-spray-flag", true);
registry.register(flag);
SPRAY_FLAG = flag;
} catch(FlagConflictException e){
} catch(FlagConflictException e) {
Flag<?> existing = registry.get("mcc-spray-flag");
if(existing instanceof StateFlag){
SPRAY_FLAG = (StateFlag) existing;
......@@ -36,12 +35,17 @@ public class WorldGuardSupport {
}
public boolean canSprayWG(Player player, Location location) {
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location));
try {
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
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;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.storage.StorageDriver;
import io.lumine.utils.storage.sql.SqlCredentials;
import io.lumine.utils.config.properties.types.SqlCredentialsProp;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.PropertyHolder;
import io.lumine.utils.config.properties.types.EnumProp;
import io.lumine.utils.config.properties.types.IntProp;
import io.lumine.utils.logging.Log;
import io.lumine.utils.plugin.ReloadableModule;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.config.properties.types.*;
import io.lumine.mythic.bukkit.utils.storage.sql.SqlCredentials;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.PropertyHolder;
import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import io.lumine.mythic.core.packs.PackImpl;
import lombok.Getter;
import java.io.File;
......@@ -24,16 +24,22 @@ import java.util.jar.JarFile;
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 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 final Pack mythicPack;
public Configuration(MCCosmeticsPlugin plugin) {
super(plugin);
this.mythicPack = new PackImpl(plugin, "MythicCosmetics");
}
@Override
......@@ -66,11 +72,7 @@ public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implement
}
return packs;
}
public int getClockInterval() {
return CLOCK_INTERVAL.get(this);
}
public StorageDriver getStorageType() {
return STORAGE_DRIVER.get(this);
}
......
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 {
......
......@@ -2,6 +2,7 @@ package io.lumine.cosmetics.constants;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
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.hats.Hat;
import io.lumine.cosmetics.managers.modelengine.MEGAccessory;
......@@ -9,7 +10,7 @@ import io.lumine.cosmetics.managers.offhand.Offhand;
import io.lumine.cosmetics.managers.particle.ParticleAccessory;
import io.lumine.cosmetics.managers.pets.Pet;
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 java.util.HashMap;
......@@ -28,6 +29,7 @@ public class CosmeticType {
register(Spray.class, new CosmeticConstant("SPRAY", "sprays"));
register(Offhand.class, new CosmeticConstant("OFFHAND", "offhands"));
register(Gesture.class, new CosmeticConstant("GESTURE", "gestures"));
register(ChatTag.class, new CosmeticConstant("CHATTAG", "chattags"));
}
public static void register(Class<? extends Cosmetic> clazz, CosmeticConstant cosmeticConstant) {
......
package io.lumine.cosmetics.logging;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.logging.ConsoleColor;
import io.lumine.mythic.bukkit.utils.logging.ConsoleColor;
import java.util.logging.Level;
......
......@@ -12,15 +12,19 @@ import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.Permissions;
import io.lumine.cosmetics.menus.CosmeticMenu;
import io.lumine.utils.Schedulers;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.*;
import io.lumine.utils.items.ItemFactory;
import io.lumine.utils.menu.Icon;
import io.lumine.utils.menu.IconBuilder;
import io.lumine.utils.text.Text;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.bukkit.utils.Schedulers;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.*;
import io.lumine.mythic.bukkit.utils.items.ItemFactory;
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 org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack;
import java.io.File;
......@@ -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 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 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 LangListProp DESCRIPTION = Property.LangList(Scope.NONE, "Description");
protected static final StringProp TEXTURE = Property.String(Scope.NONE, "SkullTexture");
......@@ -45,6 +49,7 @@ public abstract class AbstractCosmetic extends Cosmetic {
private final MCCosmeticsManager manager;
protected final Pack mythicPack;
protected final File file;
@Getter protected final String id;
@Getter protected final String key;
......@@ -54,7 +59,6 @@ public abstract class AbstractCosmetic extends Cosmetic {
// Menu Item
protected Material material;
protected int model;
@Getter protected String display;
protected List<String> description;
protected String color;
......@@ -65,8 +69,13 @@ public abstract class AbstractCosmetic extends Cosmetic {
protected Map<String,CosmeticVariant> variants = Maps.newConcurrentMap();
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);
this.manager = manager;
this.mythicPack = pack;
this.file = file;
this.key = key;
this.namespace = NAMESPACE.fget(file,this);
......@@ -90,7 +99,6 @@ public abstract class AbstractCosmetic extends Cosmetic {
}
this.material = MATERIAL.fget(file,this);
this.model = MODEL.fget(file,this);
this.display = DISPLAY.fget(file,this);
this.description = DESCRIPTION.fget(file,this);
this.color = COLOR.fget(file,this);
......@@ -104,19 +112,38 @@ public abstract class AbstractCosmetic extends Cosmetic {
if(material == Material.PLAYER_HEAD) {
this.menuItem = ItemFactory.of(this.material)
.name(Text.colorize(this.getDisplay()))
.model(model)
.hideAttributes()
.lore(description)
.skullTexture(TEXTURE.get(this))
//.skullTexture(TEXTURE.get(this))
.build();
} else {
this.menuItem = ItemFactory.of(this.material)
.name(Text.colorize(this.getDisplay()))
.model(model)
.hideAttributes()
.lore(description)
.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) {
......@@ -174,4 +201,9 @@ public abstract class AbstractCosmetic extends Cosmetic {
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;
import io.lumine.cosmetics.api.cosmetics.CosmeticVariant;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.config.Scope;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.LangListProp;
import io.lumine.utils.config.properties.types.LangProp;
import io.lumine.utils.config.properties.types.StringProp;
import io.lumine.utils.menu.Icon;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.LangListProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.LangProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import lombok.Getter;
public class AbstractCosmeticVariant extends CosmeticVariant {
......
......@@ -3,8 +3,8 @@ package io.lumine.cosmetics.managers;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.events.extra.ArmorEquipEventListener;
import io.lumine.utils.plugin.ReloadableModule;
import io.lumine.mythic.bukkit.utils.events.extra.ArmorEquipEventListener;
import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import lombok.Getter;
import java.util.Collection;
......
......@@ -15,11 +15,13 @@ import io.lumine.cosmetics.nms.VolatileCodeHandler;
import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper;
import io.lumine.cosmetics.players.ProfileManager;
import io.lumine.cosmetics.players.wardrobe.WardrobeExecutor;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.NodeListProp;
import io.lumine.utils.files.Files;
import io.lumine.utils.logging.Log;
import io.lumine.utils.plugin.ReloadableModule;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.NodeListProp;
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 org.bukkit.entity.Player;
......@@ -46,25 +48,22 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM
@Override
public void load(MCCosmeticsPlugin plugin) {
final Collection<File> files = Lists.newArrayList();
final String type = CosmeticType.folder(cosmeticClass);
for(var packFolder : plugin.getConfiguration().getPackFolders()) {
final File confFolder = new File(packFolder.getAbsolutePath() + System.getProperty("file.separator") + type);
if(confFolder.exists() && confFolder.isDirectory()) {
files.addAll(Files.getAllYaml(confFolder.getAbsolutePath()));
for (File file : Files.getAllYaml(confFolder.getAbsolutePath())) {
loadCosmetics(null, file);
}
}
}
for(var file : files) {
for(var node : KEYS.fget(file)) {
var cosmetic = build(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.");
for(var pack : MythicBukkit.inst().getPackManager().getPacks()) {
final File confFolder = pack.getPackFolder("cosmetics" + System.getProperty("file.separator") + type);
if(confFolder.exists() && confFolder.isDirectory()) {
for (File file : Files.getAllYaml(confFolder.getAbsolutePath())) {
loadCosmetics(pack, file);
}
}
}
......@@ -82,12 +81,25 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM
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
public void unload() {
cosmetics.clear();
}
public abstract T build(File file, String node);
public abstract T build(Pack pack, File file, String node);
public Collection<T> getAllCosmetics() {
return cosmetics.values();
......
......@@ -7,8 +7,10 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.items.ItemFactory;
import io.lumine.utils.menu.Icon;
import io.lumine.cosmetics.managers.hats.HatManager;
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;
......@@ -16,8 +18,12 @@ import java.io.File;
public class BackAccessory extends AbstractCosmetic implements ColorableCosmetic,ItemCosmetic {
public BackAccessory(BackManager manager, File file, String key) {
super(manager, file, CosmeticType.type(BackAccessory.class), key);
public BackAccessory(BackManager manager, File file, String 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
......
......@@ -10,8 +10,9 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.gestures.Gesture;
import io.lumine.cosmetics.managers.modelengine.MEGAccessory;
import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper;
import io.lumine.utils.Events;
import io.lumine.utils.Schedulers;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.Events;
import io.lumine.mythic.bukkit.utils.Schedulers;
import java.io.File;
......@@ -83,8 +84,8 @@ public class BackManager extends MCCosmeticsManager<BackAccessory> implements Hi
}
@Override
public BackAccessory build(File file, String node) {
return new BackAccessory(this, file, node);
public BackAccessory build(Pack pack, File file, String node) {
return new BackAccessory(this, pack, file, node);
}
@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