Commit 32d7bc28 authored by Ashijin's avatar Ashijin
Browse files

aaaaaa

parent e19c09c3
package io.lumine.cosmetics.api.cosmetics;
import io.lumine.cosmetics.api.players.CosmeticInventory;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.utils.config.properties.PropertyHolder;
import io.lumine.utils.menu.MenuData;
......@@ -16,15 +17,32 @@ public abstract class Cosmetic implements PropertyHolder,MenuData<CosmeticProfil
}
public boolean has(CosmeticProfile profile) {
return profile.has(this);
return has(profile.getCosmeticInventory());
}
public boolean has(CosmeticInventory inventory) {
return inventory.getUnlocked(type).contains(key);
}
public void equip(CosmeticProfile profile) {
profile.equip(this);
}
public void equip(CosmeticInventory inventory) {
inventory.equip(this);
}
public boolean isEquipped(CosmeticProfile profile) {
return profile.isEquipped(this);
}
public boolean isEquipped(CosmeticInventory inventory) {
var maybeCosmetic = inventory.getCustomEquipped(type);
if(maybeCosmetic.isEmpty()) {
return false;
}
return maybeCosmetic.get().equals(this);
}
}
package io.lumine.cosmetics.api.players;
import java.util.Collection;
import java.util.Optional;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
public interface CosmeticInventory {
public void initialize();
public Collection<String> getUnlocked(String type);
public Optional<Cosmetic> getCustomEquipped(String type);
public Optional<Cosmetic> getEquippedHat();
public void equip(Cosmetic cosmetic);
}
......@@ -14,6 +14,8 @@ public interface CosmeticProfile {
public Player getPlayer();
public CosmeticInventory getCosmeticInventory();
public boolean has(Cosmetic cosmetic);
public void equip(Cosmetic cosmetic);
......
......@@ -9,6 +9,7 @@ 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.CosmeticsExecutor;
import io.lumine.cosmetics.managers.MCCosmeticsManager;
import io.lumine.cosmetics.managers.hats.HatManager;
import io.lumine.cosmetics.menus.MenuManager;
......@@ -35,6 +36,8 @@ public class MCCosmeticsPlugin extends LuminePlugin {
@Getter private BaseCommand baseCommand;
@Getter private AdminCommand adminCommand;
@Getter private CosmeticsExecutor cosmetics;
@Getter private HatManager hatManager;
@Getter private BackManager backManager;
......@@ -78,6 +81,10 @@ public class MCCosmeticsPlugin extends LuminePlugin {
volatileCodeHandler = getVolatileCodeHandler();
compatibility = new CompatibilityManager(this);
cosmetics = new CosmeticsExecutor(this);
hatManager = new HatManager(this);
profiles = new ProfileManager(this);
getConfiguration().load(this);
......
package io.lumine.cosmetics.managers;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import com.google.common.collect.Maps;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.utils.plugin.ReloadableModule;
import lombok.Getter;
public class CosmeticsExecutor extends ReloadableModule<MCCosmeticsPlugin> {
@Getter private final Map<String,MCCosmeticsManager> cosmeticManagers = Maps.newConcurrentMap();
public CosmeticsExecutor(MCCosmeticsPlugin plugin) {
super(plugin);
}
@Override
public void load(MCCosmeticsPlugin plugin) {}
@Override
public void unload() {
cosmeticManagers.clear();
}
public Optional<MCCosmeticsManager> getManager(String type) {
return Optional.ofNullable(cosmeticManagers.getOrDefault(type, null));
}
public <T extends MCCosmeticsManager> void registerCosmeticManager(String type, T manager) {
type = type.toUpperCase();
if(cosmeticManagers.containsKey(type)) {
throw new IllegalStateException("Multiple managers cannot be created for the same cosmetic type");
}
cosmeticManagers.put(type, manager);
}
public Collection<String> getRegisteredTypes() {
return cosmeticManagers.keySet();
}
}
......@@ -48,6 +48,7 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM
}
}
plugin.getCosmetics().registerCosmeticManager(CosmeticType.type(tClass), this);
Log.info("Loaded " + cosmetics.size() + " " + type + ".");
}
......
......@@ -12,29 +12,29 @@ import lombok.Getter;
public abstract class CosmeticMenu<T> extends ReloadableMenu<T> {
@Getter protected MCCosmeticsPlugin loungeCore;
@Getter protected MCCosmeticsPlugin plugin;
@Getter protected MenuManager menuManager;
public CosmeticMenu(MCCosmeticsPlugin core, MenuManager manager, MenuProp menu) {
super(menu);
this.loungeCore = core;
this.plugin = core;
this.menuManager = manager;
}
public CosmeticMenu(MCCosmeticsPlugin core, MenuManager manager, MenuProp menu, boolean buildOnOpen) {
super(menu, buildOnOpen);
this.loungeCore = core;
this.plugin = core;
this.menuManager = manager;
}
public void openMenu(Player player, CosmeticMenu menu, Object state) {
Profile profile = loungeCore.getProfiles().getProfile(player);
public void openMenu(Player player) {
Profile profile = plugin.getProfiles().getProfile(player);
//boolean b = profile.getHatIsActive();
//profile.setHatIsActive(false);
//MainMenu.playMenuClick(player);
menu.open(player, state);
//menu.open(player, state);
//profile.setHatIsActive(b);
}
......
package io.lumine.cosmetics.menus;
import java.util.List;
import com.google.common.collect.Lists;
import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.players.Profile;
import io.lumine.utils.config.properties.types.MenuProp;
import io.lumine.utils.menu.EditableMenuBuilder;
......@@ -14,11 +19,18 @@ public class CustomizeMenu extends CosmeticMenu<Profile> {
@Override
public EditableMenuBuilder<Profile> build(EditableMenuBuilder<Profile> builder) {
builder.getIcon("BUTTON_HATS").ifPresent(icon -> {
icon.getBuilder().click((profile,player) -> {
player.performCommand("hats");
for(var entry : getPlugin().getCosmetics().getCosmeticManagers().entrySet()) {
final var type = entry.getKey();
final var manager = entry.getValue();
builder.getIcon("BUTTON_" + type).ifPresent(icon -> {
icon.getBuilder().click((profile,player) -> {
// TODO: sorting
List<Cosmetic> cosmetics = Lists.newArrayList(manager.getAllCosmetics());
getMenuManager().getSelectionMenu().open(player, profile, cosmetics);
});
});
});
}
return builder;
}
......
......@@ -7,21 +7,8 @@ import lombok.Getter;
public class MenuManager extends ReloadableModule<MCCosmeticsPlugin> {
@Getter private CustomizeMenu customizeMenu;
@Getter private SelectionMenu selectionMenu;
//@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);
}
......@@ -30,35 +17,11 @@ public class MenuManager extends ReloadableModule<MCCosmeticsPlugin> {
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;
selectionMenu = new SelectionMenu(plugin,this);
}
customizeMenu.reload();
//colorsMenu.reload();
//chatColorsMenu.reload();
//chatShoutColorsMenu.reload();
//hatsMenu.reload();
//gadgetsMenu.reload();
//nameColorsMenu.reload();
//petsMenu.reload();
//chatTagsMenu.reload();
//speedBoostersMenu.reload();
//spraysMenu.reload();
//titlesMenu.reload();
selectionMenu.reload();
}
@Override
......
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 SelectionMenu extends CosmeticMenu<Profile> {
public SelectionMenu(MCCosmeticsPlugin core, MenuManager manager) {
super(core, manager, new MenuProp(core, "menus/selection", "Menu", null));
}
@Override
public EditableMenuBuilder<Profile> build(EditableMenuBuilder<Profile> builder) {
return builder;
}
}
......@@ -12,6 +12,7 @@ import com.google.common.collect.Maps;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.api.players.CosmeticInventory;
import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.players.inventory.DigitalInventory;
import lombok.Getter;
public class Profile implements CosmeticProfile,io.lumine.utils.storage.players.Profile {
......@@ -20,7 +21,7 @@ public class Profile implements CosmeticProfile,io.lumine.utils.storage.players.
@Getter private String name;
@Getter private long timestamp = System.currentTimeMillis();
@Getter private CosmeticInventory cosmeticInventory;
@Getter private DigitalInventory cosmeticInventory = new DigitalInventory();
@Getter private transient Player player;
......@@ -33,24 +34,21 @@ public class Profile implements CosmeticProfile,io.lumine.utils.storage.players.
public void initialize(final Player player) {
this.player = player;
//this.equippedCosmetics = new EquippedCosmetics(this);
}
@Override
public boolean has(Cosmetic cosmetic) {
return true; //return unlockedCosmetics.getOrDefault(cosmetic.getType(), Collections.emptyList()).contains(cosmetic.getKey());
return cosmeticInventory.hasUnlocked(cosmetic);
}
@Override
public void equip(Cosmetic cosmetic) {
//if(this)
cosmeticInventory.equip(cosmetic);
}
@Override
public boolean isEquipped(Cosmetic cosmetic) {
// TODO Auto-generated method stub
return false;
return cosmeticInventory.isEquipped(cosmetic);
}
}
package io.lumine.cosmetics.players.inventory;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import io.lumine.cosmetics.api.players.CosmeticInventory;
import io.lumine.cosmetics.managers.hats.Hat;
import io.lumine.utils.serialize.Optl;
......@@ -15,9 +19,9 @@ public class DigitalInventory implements CosmeticInventory {
@Getter private Map<String,List<String>> unlockedCosmetics = Maps.newConcurrentMap();
@Getter private Map<String,String> equippedCosmetics = Maps.newConcurrentMap();
private Optl<Hat> hat;
private Optl<Hat> equippedHat;
private final Map<String,String> custom = Maps.newConcurrentMap();
private final Map<String,Cosmetic> equippedCustom = Maps.newConcurrentMap();
@Override
public void initialize() {
......@@ -26,4 +30,35 @@ public class DigitalInventory implements CosmeticInventory {
}
}
public boolean hasUnlocked(Cosmetic cosmetic) {
return cosmetic.has(this);
}
public void equip(Cosmetic cosmetic) {
if(cosmetic instanceof Hat hat) {
equippedHat = Optl.of(hat);
} else {
}
}
public boolean isEquipped(Cosmetic cosmetic) {
return cosmetic.isEquipped(this);
}
@Override
public Optional<Cosmetic> getCustomEquipped(String type) {
return Optional.ofNullable(equippedCustom.getOrDefault(type, null));
}
@Override
public Optional<Cosmetic> getEquippedHat() {
return Optional.ofNullable(equippedHat.orElseGet(null));
}
@Override
public Collection<String> getUnlocked(String type) {
return unlockedCosmetics.getOrDefault(type, Lists.newArrayList());
}
}
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