Commit ce24cc01 authored by Ashijin's avatar Ashijin
Browse files

aaaaaa

parent 0bdf5933
package io.lumine.cosmetics.api.cosmetics;
import org.bukkit.NamespacedKey;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.utils.config.properties.PropertyHolder;
import io.lumine.utils.menu.MenuData;
import lombok.Getter;
public interface Cosmetic {
public abstract class Cosmetic implements PropertyHolder,MenuData<CosmeticProfile> {
public boolean has(CosmeticProfile profile);
@Getter private final String type;
@Getter private final String key;
public Cosmetic(String type, String key) {
this.type = type;
this.key = key;
}
public boolean has(CosmeticProfile profile) {
return profile.has(this);
}
public boolean equip(CosmeticProfile profile);
public void equip(CosmeticProfile profile) {
profile.equip(this);
}
public boolean isEquipped(CosmeticProfile profile);
public boolean isEquipped(CosmeticProfile profile) {
return profile.isEquipped(this);
}
}
......@@ -2,9 +2,22 @@ package io.lumine.cosmetics.api.players;
import java.util.UUID;
import org.bukkit.entity.Player;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
public interface CosmeticProfile {
public UUID getUniqueId();
public String getName();
public Player getPlayer();
public boolean has(Cosmetic cosmetic);
public void equip(Cosmetic cosmetic);
public boolean isEquipped(Cosmetic cosmetic);
}
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>io.lumine</groupId>
<artifactId>MCCosmetics</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>io.lumine</groupId>
<artifactId>LumineUtils</artifactId>
<version>1.18-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ticxo.modelengine</groupId>
<artifactId>api</artifactId>
<version>R2.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.17-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib-API</artifactId>
<version>4.4.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-api</artifactId>
<version>4.8.1</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.lumine</groupId>
<artifactId>Mythic-Dist</artifactId>
<version>4.14.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>LibsDisguises</groupId>
<artifactId>LibsDisguises</artifactId>
<version>10.0.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.10.9</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>nexus</id>
<url>https://mvn.lumine.io/repository/maven/</url>
</repository>
<repository>
<id>lumine-public</id>
<url>https://mvn.lumine.io/repository/maven-public/</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>papermc</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
<repository>
<id>sk89q-repo</id>
<url>https://maven.sk89q.com/repo/</url>
</repository>
<repository>
<id>md_5-public</id>
<url>https://repo.md-5.net/content/groups/public/</url>
</repository>
<repository>
<id>md_5-snapshots</id>
<url>https://repo.md-5.net/content/repositories/snapshots/</url>
</repository>
<repository>
<id>placeholderapi</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<repository>
<id>filoghost-repo</id>
<url>https://ci.filoghost.me/plugin/repository/everything/</url>
</repository>
<repository>
<id>CodeMC</id>
<url>https://repo.codemc.org/repository/maven-public</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>lumine</id>
<url>https://mvn.lumine.io/repository/maven/</url>
</repository>
</repositories>
</project>
......@@ -8,6 +8,9 @@ import io.lumine.cosmetics.commands.admin.AdminCommand;
import io.lumine.cosmetics.compat.CompatibilityManager;
import io.lumine.cosmetics.config.Configuration;
import io.lumine.cosmetics.logging.MCLogger;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.hats.HatManager;
import io.lumine.cosmetics.menus.MenuManager;
import io.lumine.cosmetics.metrics.bStats;
import io.lumine.cosmetics.nms.VolatileCodeDisabled;
import io.lumine.cosmetics.nms.VolatileCodeHandler;
......@@ -26,9 +29,12 @@ public class MCCosmeticsPlugin extends LuminePlugin {
@Getter private CompatibilityManager compatibility;
@Getter private ProfileManager profiles;
@Getter private MenuManager menuManager;
@Getter private BaseCommand baseCommand;
@Getter private AdminCommand adminCommand;
@Getter private HatManager hatManager;
private VolatileCodeHandler volatileCodeHandler;
......@@ -81,8 +87,8 @@ public class MCCosmeticsPlugin extends LuminePlugin {
this.baseCommand = new BaseCommand(this);
this.adminCommand = new AdminCommand(this);
this.registerCommand("mccosmetics", baseCommand);
this.registerCommand("cosmetics", adminCommand);
this.registerCommand("cosmetics", baseCommand);
this.registerCommand("mccosmetics", adminCommand);
if(configuration.isAllowingMetrics()) {
new bStats(this);
......
package io.lumine.cosmetics.config;
import java.io.File;
import java.util.Collection;
import com.google.common.collect.Lists;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.PropertyHolder;
......@@ -30,7 +35,26 @@ public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implement
return "Configuration";
}
public Collection<File> getPackFolders() {
final File packsFolder = new File(getPlugin().getDataFolder() + System.getProperty("file.separator") + "packs");
final Collection<File> packs = Lists.newArrayList();
if(!packsFolder.exists()) {
packsFolder.mkdir();
}
if(packsFolder.exists() && packsFolder.isDirectory()) {
for(var packFolder : packsFolder.listFiles()) {
if(packFolder.isDirectory()) {
packs.add(packFolder);
}
}
}
return packs;
}
public int getClockInterval() {
return CLOCK_INTERVAL.get(this);
}
}
package io.lumine.cosmetics.constants;
public class CosmeticType {
public static final String HAT = "HAT";
}
package io.lumine.cosmetics.constants;
public class PackFolders {
public static final String HATS = "hats";
}
package io.lumine.cosmetics.managers.hats;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;
......@@ -12,8 +13,11 @@ import org.bukkit.inventory.ItemStack;
import com.google.common.collect.Lists;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.commands.CommandHelper;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.config.properties.Property;
import io.lumine.utils.config.properties.PropertyHolder;
......@@ -33,7 +37,7 @@ import lombok.Data;
import lombok.Getter;
@Data
public class Hat implements PropertyHolder,MenuData<Profile> {
public class Hat extends Cosmetic {
private static final EnumProp<Material> MATERIAL = Property.Enum(Scope.NONE, Material.class, "Material", Material.EMERALD);
private static final IntProp MODEL = Property.Int(Scope.NONE, "Model");
......@@ -41,6 +45,7 @@ public class Hat implements PropertyHolder,MenuData<Profile> {
private static final LangListProp DESCRIPTION = Property.LangList(Scope.NONE, "Description");
private static final StringProp TEXTURE = Property.String(Scope.NONE, "Texture");
private final File file;
private final String key;
@Getter private List<String> sources = Lists.newArrayList();
......@@ -51,12 +56,15 @@ public class Hat implements PropertyHolder,MenuData<Profile> {
@Getter private ItemStack hatItem;
public Hat(String key) {
public Hat(File file, String key) {
super(CosmeticType.HAT, key);
this.file = file;
this.key = key.toUpperCase();
this.material = MATERIAL.get(this);
this.model = MODEL.get(this);
this.display = DISPLAY.get(this);
this.description = DESCRIPTION.get(this);
this.material = MATERIAL.fget(file,this);
this.model = MODEL.fget(file,this);
this.display = DISPLAY.fget(file,this);
this.description = DESCRIPTION.fget(file,this);
if(material == Material.PLAYER_HEAD) {
this.hatItem = ItemFactory.of(this.material)
......@@ -82,8 +90,8 @@ public class Hat implements PropertyHolder,MenuData<Profile> {
}
@Override
public Icon<Profile> getIcon() {
return IconBuilder.<Profile>create()
public Icon<CosmeticProfile> getIcon() {
return IconBuilder.<CosmeticProfile>create()
.name(Text.colorize(this.getDisplay()))
.item(this.hatItem)
.hideFlags()
......
package io.lumine.cosmetics.managers.hats;
import java.util.ArrayList;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
......@@ -15,21 +15,29 @@ import org.bukkit.inventory.ItemStack;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import io.lumine.utils.Events;
import io.lumine.utils.Schedulers;
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.protocol.Protocol;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.events.CosmeticPlayerLoadedEvent;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.constants.PackFolders;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.players.Profile;
public class HatManager extends MCCosmeticsManager {
private final Map<String,Hat> hats = new ConcurrentHashMap<>();
private final NodeListProp KEYS = Property.NodeList(Scope.NONE, "");
private final Map<String,Hat> hats = Maps.newConcurrentMap();
public HatManager(MCCosmeticsPlugin plugin) {
super(plugin);
......@@ -37,15 +45,26 @@ public class HatManager extends MCCosmeticsManager {
@Override
public void load(MCCosmeticsPlugin plugin) {
//
// TODO: Load Hats
//
final Collection<File> files = Lists.newArrayList();
for(var packFolder : plugin.getConfiguration().getPackFolders()) {
final File confFolder = new File(packFolder.getAbsolutePath() + System.getProperty("file.separator") + PackFolders.HATS);
if(confFolder.exists() && confFolder.isDirectory()) {
files.addAll(Files.getAllYaml(confFolder.getAbsolutePath()));
}
}
for(var file : files) {
for(var node : KEYS.fget(file)) {
var cosmetic = new Hat(file,node);
hats.put(node.toUpperCase(), cosmetic);
}
}
Log.info("Loaded " + hats.size() + " hats");
Events.subscribe(CosmeticPlayerLoadedEvent.class)
.handler(event -> {
final CosmeticProfile profile = event.getProfile();
final var profile = event.getProfile();
//if(profile.getHat().isPresent()) {
// equipHat(profile);
......
package io.lumine.cosmetics.menus;
import org.bukkit.entity.Player;
import io.lumine.cosmetics.MCCosmeticsPlugin;
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.Menu;
import io.lumine.utils.menu.ReloadableMenu;
import lombok.Getter;
public abstract class CosmeticMenu<T> extends ReloadableMenu<T> {
@Getter protected MCCosmeticsPlugin loungeCore;
@Getter protected MenuManager menuManager;
public CosmeticMenu(MCCosmeticsPlugin core, MenuManager manager, MenuProp menu) {
super(menu);
this.loungeCore = core;
this.menuManager = manager;
}
public CosmeticMenu(MCCosmeticsPlugin core, MenuManager manager, MenuProp menu, boolean buildOnOpen) {
super(menu, buildOnOpen);
this.loungeCore = core;
this.menuManager = manager;
}
public void openMenu(Player player, CosmeticMenu menu, Object state) {
Profile profile = loungeCore.getProfiles().getProfile(player);
//boolean b = profile.getHatIsActive();
//profile.setHatIsActive(false);
//MainMenu.playMenuClick(player);
menu.open(player, state);
//profile.setHatIsActive(b);
}
public EditableMenuBuilder<Profile> addPageButtons(EditableMenuBuilder<Profile> builder) {
builder.getIcon("NEXT_PAGE").ifPresent(icon -> {
icon.getBuilder().click((profile,player) -> {
//MainMenu.playMenuClick(player);
nextPage(player);
});
});
builder.getIcon("PREVIOUS_PAGE").ifPresent(icon -> {
icon.getBuilder().click((profile,player) -> {
//MainMenu.playMenuClick(player);
previousPage(player);
});
});
return builder;
}
}
package io.lumine.cosmetics.menus;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.config.properties.types.MenuProp;
import io.lumine.utils.menu.EditableMenuBuilder;
public class CustomizeMenu extends CosmeticMenu<Profile> {
public CustomizeMenu(MCCosmeticsPlugin core, MenuManager manager) {
super(core, manager, new MenuProp(core, "menus/customize", "Menu", null));
}
@Override
public EditableMenuBuilder<Profile> build(EditableMenuBuilder<Profile> builder) {
builder.getIcon("BUTTON_HATS").ifPresent(icon -> {
icon.getBuilder().click((profile,player) -> {
player.performCommand("hats");
});
});
return builder;
}
}
package io.lumine.cosmetics.menus;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.plugin.ReloadableModule;
import lombok.Getter;
public class MenuManager extends ReloadableModule<MCCosmeticsPlugin> {
@Getter private CustomizeMenu customizeMenu;
//@Getter private ColorsMenu colorsMenu;
//@Getter private ChatColorsMenu chatColorsMenu;
//@Getter private ChatShoutColorsMenu chatShoutColorsMenu;
//@Getter private GadgetsMenu gadgetsMenu;
//@Getter private HatsMenu hatsMenu;
//@Getter private NameColorsMenu nameColorsMenu;
//@Getter private PetsMenu petsMenu;
//@Getter private TagsMenu chatTagsMenu;
//@Getter private SpeedBoostersMenu speedBoostersMenu;
//@Getter private SpraysMenu spraysMenu;
//@Getter private TitlesMenu titlesMenu;
private boolean firstLoad = true;
public MenuManager(MCCosmeticsPlugin plugin) {
super(plugin);
}
@Override
public void load(MCCosmeticsPlugin plugin) {
if(customizeMenu == null) {
customizeMenu = new CustomizeMenu(plugin,this);
//colorsMenu = new ColorsMenu(plugin,this);
//chatColorsMenu = new ChatColorsMenu(plugin,this);
//chatShoutColorsMenu = new ChatShoutColorsMenu(plugin,this);
//hatsMenu = new HatsMenu(plugin,this);
//chatTagsMenu = new TagsMenu(plugin,this);
//nameColorsMenu = new NameColorsMenu(plugin,this);
//petsMenu = new PetsMenu(plugin,this);
//gadgetsMenu = new GadgetsMenu(plugin,this);
//speedBoostersMenu = new SpeedBoostersMenu(plugin,this);
//spraysMenu = new SpraysMenu(plugin,this);
//titlesMenu = new TitlesMenu(plugin,this);
firstLoad = false;
}
customizeMenu.reload();
//colorsMenu.reload();
//chatColorsMenu.reload();
//chatShoutColorsMenu.reload();
//hatsMenu.reload();
//gadgetsMenu.reload();
//nameColorsMenu.reload();
//petsMenu.reload();
//chatTagsMenu.reload();
//speedBoostersMenu.reload();
//spraysMenu.reload();
//titlesMenu.reload();
}
@Override
public void unload() {}
}
......@@ -4,6 +4,7 @@ import java.util.UUID;
import org.bukkit.entity.Player;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import lombok.Getter;
......@@ -26,4 +27,23 @@ public class Profile implements CosmeticProfile,io.lumine.utils.storage.players.
this.player = player;
}
@Override
public boolean has(Cosmetic cosmetic) {
// TODO Auto-generated method stub
return false;
}
@Override
public void equip(Cosmetic cosmetic) {
// TODO Auto-generated method stub
}
@Override
public boolean isEquipped(Cosmetic cosmetic) {
// TODO Auto-generated method stub
return false;
}
}
......@@ -12,6 +12,8 @@ import io.lumine.utils.storage.players.PlayerRepository;
public class ProfileManager extends PlayerRepository<MCCosmeticsPlugin,Profile> {
public ProfileManager(MCCosmeticsPlugin plugin) {
super(plugin, Profile.class, new JsonPlayerStorageAdapter<>(plugin,Profile.class));
}
......
package io.lumine.cosmetics.nms;
public class VolatileCodeEnabled_v1_18_R1 {
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.nms.v1_18_R1.VolatileHatImpl;
import lombok.Getter;
public class VolatileCodeEnabled_v1_18_R1 implements VolatileCodeHandler {
@Getter private final MCCosmeticsPlugin plugin;
@Getter private final VolatileHatHelper hatHelper;
public VolatileCodeEnabled_v1_18_R1(MCCosmeticsPlugin plugin) {
this.plugin = plugin;
this.hatHelper = new VolatileHatImpl(plugin);
}
}
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