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
package io.lumine.cosmetics.managers.chat;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.menu.Icon;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.api.skills.placeholders.PlaceholderString;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import lombok.Getter;
import java.io.File;
import org.bukkit.entity.Player;
public class ChatTag extends AbstractCosmetic {
import lombok.Getter;
private static final StringProp TAG = Property.String(Scope.NONE, "Tag");
public class ChatTag extends AbstractCosmetic {
@Getter private final PlaceholderString chatTag;
public ChatTag(ChatTagManager manager, File file, String key) {
super(manager, file, CosmeticType.type(ChatTag.class), key);
}
public ChatTag(ChatTagManager manager, Pack pack, File file, String key) {
super(manager, pack, file, CosmeticType.type(ChatTag.class), key);
@Override
public String getPropertyNode() {
return this.key;
this.chatTag = PlaceholderString.of(TAG.fget(file, this));
}
@Override
......
......@@ -3,7 +3,10 @@ package io.lumine.cosmetics.managers.chat;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.hats.Hat;
import io.lumine.cosmetics.managers.sprays.Spray;
import io.lumine.mythic.api.packs.Pack;
import java.io.File;
public class ChatTagManager extends MCCosmeticsManager<ChatTag> {
......@@ -16,23 +19,18 @@ public class ChatTagManager extends MCCosmeticsManager<ChatTag> {
@Override
public void load(MCCosmeticsPlugin plugin) {
super.load(plugin);
}
@Override
public ChatTag build(File file, String node) {
return null;
public ChatTag build(Pack pack, File file, String node) {
return new ChatTag(this, pack, file, node);
}
@Override
public void equip(CosmeticProfile profile) {}
@Override
public void unequip(CosmeticProfile profile) {
}
public void unequip(CosmeticProfile profile) {}
}
......@@ -6,13 +6,13 @@ import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.BooleanProp;
import io.lumine.utils.config.properties.types.EnumProp;
import io.lumine.utils.config.properties.types.StringProp;
import io.lumine.utils.menu.Icon;
import io.lumine.utils.menu.IconBuilder;
import io.lumine.utils.text.Text;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.BooleanProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.EnumProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp;
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 lombok.Getter;
import java.io.File;
......
......@@ -9,8 +9,9 @@ import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper;
import io.lumine.utils.Events;
import io.lumine.utils.files.Files;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.Events;
import io.lumine.mythic.bukkit.utils.files.Files;
import lombok.Getter;
import org.bukkit.entity.Player;
......@@ -54,7 +55,7 @@ public class GestureManager extends MCCosmeticsManager<Gesture> {
}
@Override
public Gesture build(File file, String node) {
public Gesture build(Pack pack, File file, String node) {
return new Gesture(this, file, node);
}
......
......@@ -7,8 +7,9 @@ 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.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;
......@@ -17,15 +18,13 @@ import java.io.File;
public class Hat extends AbstractCosmetic implements ColorableCosmetic,ItemCosmetic {
public Hat(HatManager manager, File file, String key) {
super(manager, file, CosmeticType.type(Hat.class), key);
this(manager, null, file, key);
}
@Override
public String getPropertyNode() {
return this.key;
public Hat(HatManager manager, Pack pack, File file, String key) {
super(manager, pack, file, CosmeticType.type(Hat.class), key);
}
@Override
public Icon<CosmeticProfile> getIcon() {
return buildIcon("hat");
......
......@@ -9,8 +9,9 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.gestures.Gesture;
import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper;
import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.Events;
import io.lumine.utils.events.extra.ArmorEquipEvent;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.Events;
import io.lumine.mythic.bukkit.utils.events.extra.ArmorEquipEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryCloseEvent;
import io.lumine.cosmetics.api.players.wardrobe.Mannequin;
......@@ -52,8 +53,8 @@ public class HatManager extends MCCosmeticsManager<Hat> implements HideableCosme
}
@Override
public Hat build(File file, String node) {
return new Hat(this, file, node);
public Hat build(Pack pack, File file, String node) {
return new Hat(this, pack, file, node);
}
@Override
......
package io.lumine.cosmetics.managers.modelengine;
import com.ticxo.modelengine.api.entity.BukkitPlayer;
import com.ticxo.modelengine.api.nms.entity.wrapper.BodyRotationController;
import com.ticxo.modelengine.api.utils.math.Offset;
import io.lumine.utils.serialize.Orient;
import com.ticxo.playeranimator.api.utils.math.Offset;
import io.lumine.mythic.bukkit.utils.serialize.Orient;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
......@@ -15,7 +14,6 @@ public class FakeEntity extends BukkitPlayer {
private final double yaw;
private final double pitch;
private final ModelAnchor anchor;
private BodyRotationController controller;
public FakeEntity(@NotNull Player entity, Orient orient, ModelAnchor anchor) {
super(entity);
......@@ -23,26 +21,23 @@ public class FakeEntity extends BukkitPlayer {
yaw = Math.toRadians(orient.getDirection().getYaw());
pitch = Math.toRadians(orient.getDirection().getPitch());
this.anchor = anchor;
}
@Override
public BodyRotationController wrapBodyRotationControl() {
controller = super.wrapBodyRotationControl();
controller.setMaxHeadAngle(45);
controller.setMaxBodyAngle(45);
controller.setStableAngle(5);
return controller;
this.getBodyRotationController().setMaxHeadAngle(45);
this.getBodyRotationController().setMaxBodyAngle(45);
this.getBodyRotationController().setStableAngle(5);
}
@Override
public Location getLocation() {
final var controller = getBodyRotationController();
Location location = getOriginal().getLocation();
Vector offset;
if (anchor == ModelAnchor.HEAD) {
double pYaw = Math.toRadians(location.getYaw());
double pPitch = Math.toRadians(location.getPitch());
offset = Offset.rotateYaw(Offset.rotatePitch(this.offset.clone(), pitch + pPitch), yaw + pYaw);
}else {
} else {
double pYaw = Math.toRadians(controller == null ? getYBodyRot() : controller.getYBodyRot());
offset = Offset.rotateYaw(this.offset.clone(), yaw + pYaw);
}
......
package io.lumine.cosmetics.managers.modelengine;
import com.ticxo.modelengine.api.model.AnimationMode;
import io.lumine.cosmetics.api.cosmetics.ColorableCosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.EnumProp;
import io.lumine.utils.config.properties.types.OrientProp;
import io.lumine.utils.config.properties.types.StringProp;
import io.lumine.utils.menu.Icon;
import io.lumine.utils.serialize.Orient;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.EnumProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.OrientProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import io.lumine.mythic.bukkit.utils.serialize.Orient;
import lombok.Getter;
import java.io.File;
......@@ -21,13 +20,11 @@ public class MEGAccessory extends AbstractCosmetic implements ColorableCosmetic
private static final StringProp MODEL = Property.String(Scope.NONE, "ModelId");
private static final StringProp STATE = Property.String(Scope.NONE, "State");
private static final OrientProp OFFSET = Property.Orient(Scope.NONE, "Offset");
private static final EnumProp<AnimationMode> MODELMODE = Property.Enum(Scope.NONE, AnimationMode.class, "Mode", AnimationMode.B);
private static final EnumProp<ModelAnchor> MODELANCHOR = Property.Enum(Scope.NONE, ModelAnchor.class, "Anchor", ModelAnchor.BODY);
@Getter private final String modelId;
@Getter private final String state;
@Getter private final Orient offset;
@Getter private final AnimationMode mode;
@Getter private final ModelAnchor anchor;
public MEGAccessory(MEGManager manager, File file, String key) {
......@@ -36,9 +33,7 @@ public class MEGAccessory extends AbstractCosmetic implements ColorableCosmetic
modelId = MODEL.fget(file, this);
state = STATE.fget(file, this);
offset = OFFSET.fget(file, this);
mode = MODELMODE.fget(file, this);
anchor = MODELANCHOR.fget(file, this);
}
@Override
......
package io.lumine.cosmetics.managers.modelengine;
import com.ticxo.modelengine.api.ModelEngineAPI;
import com.ticxo.modelengine.api.animation.AnimationProperty;
import com.ticxo.modelengine.api.animation.blueprint.LoopMode;
import com.ticxo.modelengine.api.animation.BlueprintAnimation;
import com.ticxo.modelengine.api.animation.property.SimpleProperty;
import com.ticxo.modelengine.api.entity.data.BukkitEntityData;
import com.ticxo.modelengine.api.model.ActiveModel;
import com.ticxo.modelengine.api.model.ModeledEntity;
import com.ticxo.modelengine.api.nms.entity.wrapper.RangeManager;
import io.lumine.cosmetics.MCCosmeticsPlugin;
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.managers.MCCosmeticsManager;
import io.lumine.cosmetics.players.wardrobe.WardrobeMegDummy;
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 io.lumine.mythic.bukkit.utils.logging.Log;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.PlayerDeathEvent;
......@@ -131,7 +133,7 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> {
}
@Override
public MEGAccessory build(File file, String node) {
public MEGAccessory build(Pack pack, File file, String node) {
return new MEGAccessory(this, file, node);
}
......@@ -139,41 +141,52 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> {
public void equip(CosmeticProfile profile) {
final var maybeEquipped = profile.getEquipped(MEGAccessory.class);
if(maybeEquipped.isEmpty()) {
Log.info("No Accessory Found");
return;
}
var opt = maybeEquipped.get().getCosmetic();
if(!(opt instanceof MEGAccessory meg)) {
Log.info("Accessory Invalid");
return;
}
final var blueprint = ModelEngineAPI.getBlueprint(meg.getModelId());
if(blueprint == null)
return;
if(blueprint == null) {
Log.info("No Blueprint Found");
return;
}
final var animation = blueprint.getAnimations().get(meg.getState());
if(animation == null)
return;
if(animation == null) {
Log.info("No Animation Found");
return;
}
final var player = profile.getPlayer();
final var activeModel = ModelEngineAPI.createActiveModel(blueprint);
final var property = new SimpleProperty(activeModel, animation, 1, 0, 1);
property.setForceLoopMode(LoopMode.LOOP);
property.setForceLoopMode(BlueprintAnimation.LoopMode.LOOP);
property.setForceOverride(true);
activeModel.getAnimationHandler().playAnimation(property, true);
activeModel.setCanHurt(false);
ModeledEntity modeledEntity = ModelEngineAPI.getModeledEntity(player.getUniqueId());
if(modeledEntity == null) {
modeledEntity = ModelEngineAPI.createModeledEntity(new FakeEntity(player, meg.getOffset(), meg.getAnchor()));
modeledEntity.setBaseEntityVisible(true);
ModelEngineAPI.getEntityHandler().setSelfFakeInvisible(player, false);
if(modeledEntity.getRangeManager() instanceof RangeManager.Disguise disguise)
disguise.setIncludeSelf(true);
}
ModeledEntity modeledEntity = ModelEngineAPI.getModeledEntity(player);
if(modeledEntity != null) {
modeledEntity.destroy();
}
modeledEntity = ModelEngineAPI.createModeledEntity(new FakeEntity(player, meg.getOffset(), meg.getAnchor()));
modeledEntity.getBase().getBodyRotationController().setPlayerMode(true);
modeledEntity.setBaseEntityVisible(true);
ModelEngineAPI.getEntityHandler().setForcedInvisible(player, false);
if(modeledEntity.getBase().getData() instanceof BukkitEntityData data) {
data.getTracked().addForcedPairing(player.getUniqueId());
}
modeledEntity.destroy();
modeledEntity.addModel(activeModel, false);
modeledEntity.addModel(activeModel, false).ifPresent(ActiveModel::destroy);
}
public void unequip(CosmeticProfile profile) {
......@@ -212,7 +225,7 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> {
final var activeModel = ModelEngineAPI.createActiveModel(blueprint);
final var property = new SimpleProperty(activeModel, animation, 1, 0, 1);
property.setForceLoopMode(LoopMode.LOOP);
property.setForceLoopMode(BlueprintAnimation.LoopMode.LOOP);
property.setForceOverride(true);
activeModel.getAnimationHandler().playAnimation(property, true);
activeModel.setCanHurt(false);
......@@ -223,11 +236,11 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> {
if(modeledEntity == null) {
modeledEntity = ModelEngineAPI.createModeledEntity(dummy);
modeledEntity.setBaseEntityVisible(true);
if(modeledEntity.getRangeManager() instanceof RangeManager.Disguise disguise) {
disguise.setIncludeSelf(true);
}
//if(modeledEntity.getRangeManager() instanceof RangeManager.Disguise disguise) {
// disguise.setIncludeSelf(true);
//}
modeledEntity.getRangeManager().forceSpawn(mannequin.getPlayer());
//modeledEntity.getRangeManager().forceSpawn(mannequin.getPlayer());
}
modeledEntity.destroy();
......
......@@ -6,8 +6,8 @@ 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.mythic.bukkit.utils.items.ItemFactory;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import org.bukkit.inventory.ItemStack;
......
......@@ -10,7 +10,8 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.gestures.Gesture;
import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper;
import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.Events;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.Events;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
......@@ -59,7 +60,7 @@ public class OffhandManager extends MCCosmeticsManager<Offhand> implements Hidea
}
@Override
public Offhand build(File file, String node) {
public Offhand build(Pack pack, File file, String node) {
return new Offhand(this, file, node);
}
......
......@@ -4,7 +4,7 @@ import io.lumine.cosmetics.api.cosmetics.ColorableCosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.menu.Icon;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import java.io.File;
......
......@@ -3,6 +3,7 @@ package io.lumine.cosmetics.managers.particle;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.mythic.api.packs.Pack;
import java.io.File;
......@@ -13,7 +14,7 @@ public class ParticleManager extends MCCosmeticsManager<ParticleAccessory> {
}
@Override
public ParticleAccessory build(File file, String node) {
public ParticleAccessory build(Pack pack, File file, String node) {
return new ParticleAccessory(this, file, node);
}
......
......@@ -5,9 +5,9 @@ import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.config.properties.Property;
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.StringProp;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import lombok.Getter;
import java.io.File;
......
......@@ -3,6 +3,7 @@ package io.lumine.cosmetics.managers.pets;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.mythic.api.packs.Pack;
import java.io.File;
......@@ -13,7 +14,7 @@ public class PetManager extends MCCosmeticsManager<Pet> {
}
@Override
public Pet build(File file, String node) {
public Pet build(Pack pack, File file, String node) {
return new Pet(this, file, node);
}
......
......@@ -3,7 +3,7 @@ package io.lumine.cosmetics.managers.sprays;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.AbstractCosmetic;
import io.lumine.utils.menu.Icon;
import io.lumine.mythic.bukkit.utils.menu.Icon;
import java.io.File;
import org.bukkit.entity.Player;
......
......@@ -2,8 +2,8 @@ package io.lumine.cosmetics.managers.sprays;
import java.io.File;
import io.lumine.utils.logging.Log;
import io.lumine.utils.maps.MapImage;
import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.maps.MapImage;
import lombok.Data;
@Data
......
package io.lumine.cosmetics.managers.sprays;
import io.lumine.utils.Events;
import io.lumine.utils.Schedulers;
import io.lumine.utils.config.properties.types.IntProp;
import io.lumine.utils.cooldown.Cooldown;
import io.lumine.utils.cooldown.CooldownMap;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.Events;
import io.lumine.mythic.bukkit.utils.Schedulers;
import io.lumine.mythic.bukkit.utils.config.properties.types.IntProp;
import io.lumine.mythic.bukkit.utils.cooldown.Cooldown;
import io.lumine.mythic.bukkit.utils.cooldown.CooldownMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import io.lumine.cosmetics.MCCosmeticsPlugin;
......@@ -14,13 +15,13 @@ import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.back.BackAccessory;
import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.types.BooleanProp;
import io.lumine.utils.config.properties.types.DoubleProp;
import io.lumine.utils.config.properties.types.StringProp;
import io.lumine.utils.files.Files;
import io.lumine.utils.logging.Log;
import io.lumine.utils.numbers.Numbers;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.BooleanProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.DoubleProp;
import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp;
import io.lumine.mythic.bukkit.utils.files.Files;
import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.numbers.Numbers;
import org.bukkit.Bukkit;
import org.bukkit.FluidCollisionMode;
import org.bukkit.Location;
......@@ -92,7 +93,7 @@ public class SprayManager extends MCCosmeticsManager<Spray> {
}
@Override
public Spray build(File file, String node) {
public Spray build(Pack pack, File file, String node) {
return new Spray(this, file, node);
}
......
package io.lumine.cosmetics.menus;
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.utils.config.properties.types.MenuProp;
import io.lumine.utils.menu.EditableMenuBuilder;
import io.lumine.utils.menu.ReloadableMenu;
import io.lumine.mythic.bukkit.MythicBukkit;
import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp;
import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder;
import io.lumine.mythic.bukkit.utils.menu.ReloadableMenu;
import lombok.Getter;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
public abstract class CosmeticMenu<T> extends ReloadableMenu<T> {
......@@ -35,8 +39,29 @@ public abstract class CosmeticMenu<T> extends ReloadableMenu<T> {
//menu.open(player, state);
//profile.setHatIsActive(b);
}
public EditableMenuBuilder<Profile> addPageButtons(EditableMenuBuilder<Profile> builder) {
@Override
public EditableMenuBuilder<T> build(EditableMenuBuilder<T> builder) {
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);
if(MythicBukkit.inst().getCompatibility().getCrucible().isPresent()) {
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);
}
}
}
});
builder.getIcon("NEXT_PAGE").ifPresent(icon -> {
icon.getBuilder().click((profile,player) -> {
playMenuClick(player);
......@@ -49,9 +74,10 @@ public abstract class CosmeticMenu<T> extends ReloadableMenu<T> {
previousPage(player);
});
});
return builder;
}
public static void playMenuClick(Player player) {
player.playSound(player.getLocation(), "entity.chicken.egg", 1F, 1F);
}
......
......@@ -3,8 +3,9 @@ package io.lumine.cosmetics.menus;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.config.properties.types.MenuProp;
import io.lumine.utils.menu.EditableMenuBuilder;
import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp;
import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder;
public class CustomizeMenu extends CosmeticMenu<Profile> {
......@@ -26,7 +27,7 @@ public class CustomizeMenu extends CosmeticMenu<Profile> {
});
}
return builder;
return super.build(builder);
}
}
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