Commit 74a26d9f authored by Ash's avatar Ash
Browse files

Rewrote and optimized the packet handler for armor-type equipped cosmetics

`+` Fixed a bunch of bugs with equipped cosmetics

`+` Refactored some of the cosmetic managers

`+` Load cosmetics from mythic packs, and treat the MythicCosmetics folder as a mythic pack for consistency

`+` Added support for managing chat colors and chat tags
parent b49aa1e7
......@@ -12,21 +12,22 @@ import io.lumine.cosmetics.compat.WorldGuardSupport;
import io.lumine.cosmetics.config.Configuration;
import io.lumine.cosmetics.listeners.PlayerListeners;
import io.lumine.cosmetics.logging.MCLogger;
import io.lumine.cosmetics.managers.CosmeticsExecutor;
import io.lumine.cosmetics.managers.back.BackManager;
import io.lumine.cosmetics.managers.chat.ChatTagManager;
import io.lumine.cosmetics.managers.gestures.GestureManager;
import io.lumine.cosmetics.managers.hats.HatManager;
import io.lumine.cosmetics.managers.modelengine.MEGManager;
import io.lumine.cosmetics.managers.offhand.OffhandManager;
import io.lumine.cosmetics.managers.sprays.SprayManager;
import io.lumine.cosmetics.types.CosmeticsExecutor;
import io.lumine.cosmetics.types.back.BackManager;
import io.lumine.cosmetics.types.chat.ChatColorManager;
import io.lumine.cosmetics.types.chat.ChatTagManager;
import io.lumine.cosmetics.types.equipment.EquipmentManager;
import io.lumine.cosmetics.types.gestures.GestureManager;
import io.lumine.cosmetics.types.equipment.hats.HatManager;
import io.lumine.cosmetics.types.modelengine.MEGManager;
import io.lumine.cosmetics.types.equipment.offhand.OffhandManager;
import io.lumine.cosmetics.types.sprays.SprayManager;
import io.lumine.cosmetics.menus.MenuManager;
import io.lumine.cosmetics.metrics.bStats;
import io.lumine.cosmetics.nms.VolatileCodeDisabled;
import io.lumine.cosmetics.nms.VolatileCodeHandler;
import io.lumine.cosmetics.players.ProfileManager;
import io.lumine.cosmetics.players.wardrobe.WardrobeExecutor;
import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.bukkit.events.MythicReloadedEvent;
import io.lumine.mythic.bukkit.utils.Events;
import io.lumine.mythic.bukkit.utils.chat.ColorString;
......@@ -52,9 +53,11 @@ public class MCCosmeticsPlugin extends LuminePlugin {
@Getter private AdminCommand adminCommand;
@Getter private CosmeticsExecutor cosmetics;
@Getter private EquipmentManager equipmentManager;
@Getter private BackManager backManager;
@Getter private ChatTagManager chatTagManager;
@Getter private ChatColorManager chatColorManager;
@Getter private GestureManager gestureManager;
@Getter private HatManager hatManager;
@Getter private OffhandManager offhandManager;
......@@ -114,12 +117,16 @@ public class MCCosmeticsPlugin extends LuminePlugin {
compatibility = new CompatibilityManager(this);
cosmetics = new CosmeticsExecutor(this);
equipmentManager = new EquipmentManager(this);
hatManager = new HatManager(this);
backManager = new BackManager(this);
sprayManager = new SprayManager(this);
offhandManager = new OffhandManager(this);
chatColorManager = new ChatColorManager(this);
chatTagManager = new ChatTagManager(this);
if(Bukkit.getPluginManager().getPlugin("ModelEngine") != null) {
try {
megManager = new MEGManager(this);
......
package io.lumine.cosmetics.commands;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.constants.Permissions;
import io.lumine.cosmetics.managers.gestures.Gesture;
import io.lumine.cosmetics.managers.gestures.GestureManager;
import io.lumine.cosmetics.types.gestures.Gesture;
import io.lumine.cosmetics.types.gestures.GestureManager;
import io.lumine.cosmetics.players.Profile;
import io.lumine.mythic.bukkit.utils.commands.Command;
import org.bukkit.command.CommandSender;
......
......@@ -7,10 +7,8 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
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.cosmetics.managers.sprays.Spray;
import io.lumine.cosmetics.types.sprays.Spray;
import io.lumine.mythic.bukkit.utils.commands.Command;
public class SprayCommand extends Command<MCCosmeticsPlugin> {
......
......@@ -7,10 +7,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
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.cosmetics.managers.sprays.Spray;
import io.lumine.mythic.bukkit.utils.commands.Command;
public class SprayRemoveCommand extends Command<MCCosmeticsPlugin> {
......
package io.lumine.cosmetics.compat;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.managers.chat.ChatTag;
import io.lumine.cosmetics.types.chat.ChatTag;
import io.lumine.cosmetics.players.Profile;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player;
......
......@@ -5,6 +5,7 @@ import com.google.common.collect.Lists;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.storage.StorageDriver;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.MythicBukkit;
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;
......@@ -39,7 +40,7 @@ public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implement
public Configuration(MCCosmeticsPlugin plugin) {
super(plugin);
this.mythicPack = new PackImpl(plugin, "MythicCosmetics");
this.mythicPack = MythicBukkit.inst().getPackManager().getCosmeticsPack();
}
@Override
......
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;
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.mythic.bukkit.utils.logging.Log;
import org.bukkit.Material;
import io.lumine.cosmetics.types.back.BackAccessory;
import io.lumine.cosmetics.types.chat.ChatColor;
import io.lumine.cosmetics.types.chat.ChatTag;
import io.lumine.cosmetics.types.gestures.Gesture;
import io.lumine.cosmetics.types.equipment.hats.Hat;
import io.lumine.cosmetics.types.modelengine.MEGAccessory;
import io.lumine.cosmetics.types.equipment.offhand.Offhand;
import io.lumine.cosmetics.types.particle.ParticleAccessory;
import io.lumine.cosmetics.types.pets.Pet;
import io.lumine.cosmetics.types.sprays.Spray;
import java.util.HashMap;
import java.util.Map;
......@@ -29,6 +28,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(ChatColor.class, new CosmeticConstant("CHATCOLOR", "chatcolors"));
register(ChatTag.class, new CosmeticConstant("CHATTAG", "chattags"));
}
......
......@@ -4,6 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.logging.MCLogger;
import io.lumine.cosmetics.players.Profile;
import io.lumine.mythic.api.skills.placeholders.PlaceholderString;
import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp;
import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder;
......@@ -43,20 +44,23 @@ public abstract class CosmeticMenu<T> extends ReloadableMenu<T> {
@Override
public EditableMenuBuilder<T> build(EditableMenuBuilder<T> builder) {
final var display = builder.getBuilder().getTitleFunc().apply(null);
builder.getBuilder().title((input) -> {
return PlaceholderString.of(display).get();
});
builder.getIcons().values().forEach(icon -> {
final var config = icon.getConfigurationSection();
if(config.isSet("Model") && !config.isInt("Model")) {
final var model = config.getString("Model");
MCLogger.log("Found Model {0}", model);
var model = config.getString("Model");
if(MythicBukkit.inst().getCompatibility().getCrucible().isPresent()) {
if(MythicBukkit.inst().getCompatibility().getCrucible().isPresent() && MythicBukkit.inst().getCompatibility().getCrucible().get().isImplicitlyGenerating()) {
final var generationFeedback = MythicBukkit.inst().getCompatibility().getCrucible().get().addItemToGeneration(plugin.getConfiguration().getMythicPack(), model);
if(generationFeedback.getItemModel().isPresent()) {
var itemModelKey = generationFeedback.getItemModel().get();
icon.getBuilder().itemModel(itemModelKey);
MCLogger.log("Set Menu ItemModel {0}", model);
}
}
}
......
package io.lumine.cosmetics.menus;
import java.util.List;
import com.google.common.collect.Lists;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.types.MCCosmeticsManager;
import io.lumine.cosmetics.players.Profile;
import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule;
import lombok.Getter;
......
package io.lumine.cosmetics.menus;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.types.MCCosmeticsManager;
import io.lumine.cosmetics.players.Profile;
import io.lumine.mythic.bukkit.utils.serialize.Chroma;
import lombok.Data;
......
......@@ -2,7 +2,7 @@ package io.lumine.cosmetics.menus;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.types.MCCosmeticsManager;
import io.lumine.cosmetics.players.Profile;
import io.lumine.mythic.bukkit.utils.Schedulers;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
......
package io.lumine.cosmetics.menus;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.types.MCCosmeticsManager;
import io.lumine.cosmetics.players.Profile;
import lombok.Data;
......
......@@ -2,6 +2,7 @@ package io.lumine.cosmetics.nms;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper;
import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentCosmeticHelper;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
......@@ -20,6 +21,11 @@ public class VolatileCodeDisabled implements VolatileCodeHandler {
return null;
}
@Override
public VolatileEquipmentCosmeticHelper getCosmeticEquipmentHelper() {
return null;
}
@Override
public void injectPlayer(Player player) {
......
......@@ -5,6 +5,7 @@ import io.lumine.cosmetics.api.players.wardrobe.Mannequin;
import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker;
import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper;
import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentCosmeticHelper;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
......@@ -15,8 +16,11 @@ import java.util.Collection;
public interface VolatileCodeHandler {
VolatileCosmeticHelper getCosmeticHelper(Class<? extends Cosmetic> tClass);
Collection<VolatileCosmeticHelper> getCosmeticHelpers();
public VolatileEquipmentCosmeticHelper getCosmeticEquipmentHelper();
void injectPlayer(Player player);
void removePlayer(Player player);
......
......@@ -4,7 +4,7 @@ import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.api.players.wardrobe.Mannequin;
public interface VolatileEquipmentHelper extends VolatileCosmeticHelper {
public interface VolatileAppliedCosmeticHelper extends VolatileCosmeticHelper {
void apply(CosmeticProfile profile);
void unapply(CosmeticProfile profile);
......
package io.lumine.cosmetics.nms.cosmetic;
import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.api.players.wardrobe.Mannequin;
import io.lumine.cosmetics.players.Profile;
import io.lumine.cosmetics.types.equipment.CosmeticEquipmentSlot;
public interface VolatileEquipmentCosmeticHelper extends VolatileCosmeticHelper {
public void equip(CosmeticProfile profile, CosmeticEquipmentSlot slot);
public void unequip(CosmeticProfile profile, CosmeticEquipmentSlot slot);
default void equipMannequin(Mannequin mannequin, CosmeticEquipmentSlot slot, EquippedCosmetic cosmetic) {
}
default void unequipMannequin(Mannequin mannequin, CosmeticEquipmentSlot slot) {
}
static byte toByte(float val) {
return (byte)((int)(val * 256.0F / 360.0F));
}
void sendEquippedCosmetics(Profile profile);
}
package io.lumine.cosmetics.nms.cosmetic;
import io.lumine.cosmetics.managers.sprays.Spray;
import io.lumine.cosmetics.types.sprays.Spray;
import org.bukkit.Location;
import org.bukkit.block.BlockFace;
......
......@@ -8,7 +8,7 @@ import com.ticxo.modelengine.api.entity.Dummy;
import com.ticxo.modelengine.api.nms.entity.wrapper.BodyRotationController;
import io.lumine.cosmetics.api.players.wardrobe.Mannequin;
import io.lumine.cosmetics.managers.modelengine.ModelAnchor;
import io.lumine.cosmetics.types.modelengine.ModelAnchor;
import io.lumine.mythic.bukkit.utils.serialize.Orient;
public class WardrobeMegDummy extends Dummy {
......
package io.lumine.cosmetics.managers;
package io.lumine.cosmetics.types;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
......
package io.lumine.cosmetics.managers;
import java.io.File;
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.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 {
protected static final LangProp DISPLAY = Property.Lang(Scope.NONE, "Display");
protected static final LangListProp DESCRIPTION = Property.LangList(Scope.NONE, "Description");
protected static final StringProp COLOR = Property.String(Scope.NONE, "Color");
@Getter private final String propertyNode;
@Getter private final String color;
public AbstractCosmeticVariant(Cosmetic cosmetic, File file, String key) {
super(cosmetic, key);
this.propertyNode = getCosmetic().getPropertyNode() + ".Variants." + key;
this.color = COLOR.fget(file, this);
}
@Override
public Icon<CosmeticProfile> getIcon() {
return null;
}
}
package io.lumine.cosmetics.types;
import java.io.File;
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.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 {
protected static final LangProp DISPLAY = Property.Lang(Scope.NONE, "Display");
protected static final LangListProp DESCRIPTION = Property.LangList(Scope.NONE, "Description");
protected static final StringProp COLOR = Property.String(Scope.NONE, "Color");
@Getter private final String propertyNode;
@Getter private final String color;
public AbstractCosmeticVariant(Cosmetic cosmetic, File file, String key) {
super(cosmetic, key);
this.propertyNode = getCosmetic().getPropertyNode() + ".Variants." + key;
this.color = COLOR.fget(file, this);
}
@Override
public Icon<CosmeticProfile> getIcon() {
return null;
}
}
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