using generics to improve gui api

This commit is contained in:
Indyuce 2021-08-20 11:31:46 +02:00
parent b06f38c2eb
commit fb75868e8d
22 changed files with 638 additions and 714 deletions

View File

@ -1,11 +1,7 @@
package net.Indyuce.mmocore.gui;
import net.Indyuce.mmocore.api.event.PlayerAttributeUseEvent;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.event.PlayerAttributeUseEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute;
import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes.AttributeInstance;
@ -13,10 +9,12 @@ import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.SoundManager;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
public class AttributeView extends EditableInventory {
public AttributeView() {
@ -26,10 +24,10 @@ public class AttributeView extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
if (function.equalsIgnoreCase("reallocation"))
return new InventoryPlaceholderItem(config) {
return new InventoryItem(config) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
Placeholders holders = new Placeholders();
holders.register("attribute_points", inv.getPlayerData().getAttributePoints());
holders.register("points", inv.getPlayerData().getAttributeReallocationPoints());
@ -38,14 +36,14 @@ public class AttributeView extends EditableInventory {
}
};
return function.startsWith("attribute_") ? new AttributeItem(function, config) : new NoPlaceholderItem(config);
return function.startsWith("attribute_") ? new AttributeItem(function, config) : new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new AttributeViewerInventory(data, this);
}
public static class AttributeItem extends InventoryPlaceholderItem {
public static class AttributeItem extends InventoryItem {
private final PlayerAttribute attribute;
public AttributeItem(String function, ConfigurationSection config) {
@ -56,7 +54,7 @@ public class AttributeView extends EditableInventory {
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
int total = inv.getPlayerData().getAttributes().getInstance(attribute).getTotal();
Placeholders holders = new Placeholders();

View File

@ -1,12 +1,5 @@
package net.Indyuce.mmocore.gui;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.event.PlayerChangeClassEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
@ -16,89 +9,89 @@ import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.SoundManager;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
public class ClassConfirmation extends EditableInventory {
public ClassConfirmation() {
super("class-confirm");
}
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equalsIgnoreCase("yes") ? new YesItem(config) : new NoPlaceholderItem(config);
}
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equalsIgnoreCase("yes") ? new YesItem(config) : new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data, PlayerClass profess, PluginInventory last) {
return new ClassConfirmationInventory(data, this, profess, last);
}
public GeneratedInventory newInventory(PlayerData data, PlayerClass profess, PluginInventory last) {
return new ClassConfirmationInventory(data, this, profess, last);
}
public class UnlockedItem extends InventoryPlaceholderItem {
public class UnlockedItem extends InventoryItem<ClassConfirmationInventory> {
public UnlockedItem(ConfigurationSection config) {
super(config);
}
public UnlockedItem(ConfigurationSection config) {
super(config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
PlayerClass profess = ((ClassConfirmationInventory) inv).profess;
SavedClassInformation info = inv.getPlayerData().getClassInfo(profess);
Placeholders holders = new Placeholders();
@Override
public Placeholders getPlaceholders(ClassConfirmationInventory inv, int n) {
PlayerClass profess = inv.profess;
SavedClassInformation info = inv.getPlayerData().getClassInfo(profess);
Placeholders holders = new Placeholders();
int nextLevelExp = inv.getPlayerData().getLevelUpExperience();
double ratio = (double) info.getExperience() / (double) nextLevelExp;
int nextLevelExp = inv.getPlayerData().getLevelUpExperience();
double ratio = (double) info.getExperience() / (double) nextLevelExp;
StringBuilder bar = new StringBuilder("" + ChatColor.BOLD);
int chars = (int) (ratio * 20);
for (int j = 0; j < 20; j++)
bar.append(j == chars ? "" + ChatColor.WHITE + ChatColor.BOLD : "").append("|");
StringBuilder bar = new StringBuilder("" + ChatColor.BOLD);
int chars = (int) (ratio * 20);
for (int j = 0; j < 20; j++)
bar.append(j == chars ? "" + ChatColor.WHITE + ChatColor.BOLD : "").append("|");
holders.register("percent", decimal.format(ratio * 100));
holders.register("progress", bar.toString());
holders.register("class", profess.getName());
holders.register("unlocked_skills", info.getSkillKeys().size());
holders.register("class_skills", profess.getSkills().size());
holders.register("next_level", "" + nextLevelExp);
holders.register("level", info.getLevel());
holders.register("exp", info.getExperience());
holders.register("skill_points", info.getSkillPoints());
holders.register("class_skills", profess.getSkills().size());
holders.register("next_level", "" + nextLevelExp);
holders.register("level", info.getLevel());
holders.register("exp", info.getExperience());
holders.register("skill_points", info.getSkillPoints());
return holders;
}
}
return holders;
}
}
public class YesItem extends InventoryItem {
private final InventoryPlaceholderItem unlocked, locked;
public class YesItem extends SimplePlaceholderItem<ClassConfirmationInventory> {
private final InventoryItem unlocked, locked;
public YesItem(ConfigurationSection config) {
super(config);
public YesItem(ConfigurationSection config) {
super(config);
Validate.isTrue(config.contains("unlocked"), "Could not load 'unlocked' config");
Validate.isTrue(config.contains("locked"), "Could not load 'locked' config");
Validate.isTrue(config.contains("unlocked"), "Could not load 'unlocked' config");
Validate.isTrue(config.contains("locked"), "Could not load 'locked' config");
unlocked = new UnlockedItem(config.getConfigurationSection("unlocked"));
locked = new InventoryPlaceholderItem(config.getConfigurationSection("locked")) {
unlocked = new UnlockedItem(config.getConfigurationSection("unlocked"));
locked = new InventoryItem<ClassConfirmationInventory>(config.getConfigurationSection("locked")) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
Placeholders holders = new Placeholders();
holders.register("class", ((ClassConfirmationInventory) inv).profess.getName());
return holders;
}
};
}
@Override
public Placeholders getPlaceholders(ClassConfirmationInventory inv, int n) {
Placeholders holders = new Placeholders();
holders.register("class", inv.profess.getName());
return holders;
}
};
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
return inv.getPlayerData().hasSavedClass(((ClassConfirmationInventory) inv).profess) ? unlocked.display(inv, n) : locked.display(inv, n);
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
@Override
public ItemStack display(ClassConfirmationInventory inv, int n) {
return inv.getPlayerData().hasSavedClass(inv.profess) ? unlocked.display(inv, n) : locked.display(inv, n);
}
}
public class ClassConfirmationInventory extends GeneratedInventory {

View File

@ -1,17 +1,8 @@
package net.Indyuce.mmocore.gui;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.ConfigMessage;
import net.Indyuce.mmocore.api.player.PlayerData;
@ -20,12 +11,20 @@ import net.Indyuce.mmocore.api.player.profess.PlayerClass;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.InventoryManager;
import net.Indyuce.mmocore.manager.SoundManager;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class ClassSelect extends EditableInventory {
public ClassSelect() {
@ -34,14 +33,14 @@ public class ClassSelect extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equals("class") ? new ClassItem(config) : new NoPlaceholderItem(config);
return function.equals("class") ? new ClassItem(config) : new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new ProfessSelectionInventory(data, this);
}
public class ClassItem extends NoPlaceholderItem {
public class ClassItem extends SimplePlaceholderItem<ProfessSelectionInventory> {
private final String name;
private final List<String> lore;
@ -57,13 +56,11 @@ public class ClassSelect extends EditableInventory {
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
ProfessSelectionInventory generated = (ProfessSelectionInventory) inv;
if (n >= generated.classes.size())
public ItemStack display(ProfessSelectionInventory inv, int n) {
if (n >= inv.classes.size())
return null;
PlayerClass profess = generated.classes.get(n);
PlayerClass profess = inv.classes.get(n);
ItemStack item = profess.getIcon();
ItemMeta meta = item.getItemMeta();
if (hideFlags())
@ -89,11 +86,6 @@ public class ClassSelect extends EditableInventory {
item.setItemMeta(meta);
return NBTItem.get(item).addTag(new ItemTag("classId", profess.getId())).toItem();
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
}
public class ProfessSelectionInventory extends GeneratedInventory {

View File

@ -1,12 +1,6 @@
package net.Indyuce.mmocore.gui;
import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import io.lumine.mythic.lib.version.VersionMaterial;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.experience.Booster;
import net.Indyuce.mmocore.api.experience.Profession;
@ -18,10 +12,14 @@ import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import io.lumine.mythic.lib.version.VersionMaterial;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
public class PlayerStats extends EditableInventory {
public PlayerStats() {
@ -35,7 +33,7 @@ public class PlayerStats extends EditableInventory {
return new BoostItem(config);
if (function.equals("boost-next"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<PlayerStatsInventory>(config) {
@Override
public boolean hasDifferentDisplay() {
@ -43,23 +41,18 @@ public class PlayerStats extends EditableInventory {
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
public boolean canDisplay(PlayerStatsInventory inv) {
InventoryItem boost = inv.getByFunction("boost");
return boost != null && ((PlayerStatsInventory) inv).boostOffset + boost.getSlots().size() < MMOCore.plugin.boosterManager.getBoosters().size();
return boost != null && inv.boostOffset + boost.getSlots().size() < MMOCore.plugin.boosterManager.getBoosters().size();
}
};
if (function.equals("boost-previous"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<PlayerStatsInventory>(config) {
@Override
public boolean hasDifferentDisplay() {
return true;
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return ((PlayerStatsInventory) inv).boostOffset > 0;
public boolean canDisplay(PlayerStatsInventory inv) {
return inv.boostOffset > 0;
}
};
@ -71,10 +64,15 @@ public class PlayerStats extends EditableInventory {
Validate.isTrue(MMOCore.plugin.professionManager.has(id));
Profession profession = MMOCore.plugin.professionManager.get(id);
return new InventoryPlaceholderItem(config) {
return new InventoryItem(config) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
Placeholders holders = new Placeholders();
net.Indyuce.mmocore.api.player.stats.PlayerStats stats = inv.getPlayerData().getStats();
@ -105,10 +103,15 @@ public class PlayerStats extends EditableInventory {
return new PlayerProfileItem(config);
if (function.equals("stats"))
return new InventoryPlaceholderItem(config) {
return new InventoryItem(config) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
net.Indyuce.mmocore.api.player.stats.PlayerStats stats = inv.getPlayerData().getStats();
Placeholders holders = new Placeholders();
@ -127,7 +130,7 @@ public class PlayerStats extends EditableInventory {
}
};
return new NoPlaceholderItem(config);
return new SimplePlaceholderItem(config);
}
public PlayerStatsInventory newInventory(PlayerData data) {
@ -160,89 +163,18 @@ public class PlayerStats extends EditableInventory {
}
}
public class BoostItem extends InventoryItem {
private final InventoryPlaceholderItem noBoost, mainLevel, profession;
public BoostItem(ConfigurationSection config) {
super(config);
ConfigurationSection noBoost = config.getConfigurationSection("no-boost");
Validate.notNull(noBoost, "Could not load 'no-boost' config");
this.noBoost = new NoPlaceholderItem(noBoost);
ConfigurationSection mainLevel = config.getConfigurationSection("main-level");
Validate.notNull(mainLevel, "Could not load 'main-level' config");
this.mainLevel = new InventoryPlaceholderItem(mainLevel) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
Placeholders holders = new Placeholders();
Booster boost = MMOCore.plugin.boosterManager.get(((PlayerStatsInventory) inv).boostOffset + n);
holders.register("author", boost.hasAuthor() ? boost.getAuthor() : "Server");
holders.register("value", (int) (boost.getExtra() * 100));
holders.register("left", boost.isTimedOut() ?
MMOCore.plugin.configManager.getSimpleMessage("booster-expired").message()
: new DelayFormat(2).format(boost.getLeft()));
return holders;
}
};
ConfigurationSection profession = config.getConfigurationSection("profession");
Validate.notNull(profession, "Could not load 'profession' config");
this.profession = new InventoryPlaceholderItem(profession) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
Placeholders holders = new Placeholders();
Booster boost = MMOCore.plugin.boosterManager.get(((PlayerStatsInventory) inv).boostOffset + n);
holders.register("author", boost.hasAuthor() ? boost.getAuthor() : "Server");
holders.register("profession", boost.getProfession().getName());
holders.register("value", (int) (boost.getExtra() * 100));
holders.register("left", boost.isTimedOut() ?
MMOCore.plugin.configManager.getSimpleMessage("booster-expired").message()
: new DelayFormat(2).format(boost.getLeft()));
return holders;
}
};
}
@Override
public boolean hasDifferentDisplay() {
return true;
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
int offset = ((PlayerStatsInventory) inv).boostOffset;
if (n + offset >= MMOCore.plugin.boosterManager.getBoosters().size())
return noBoost.display(inv, n);
Booster boost = MMOCore.plugin.boosterManager.get(((PlayerStatsInventory) inv).boostOffset + n);
return amount(boost.hasProfession() ? profession.display(inv, n) : mainLevel.display(inv, n), n + offset + 1);
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
}
private ItemStack amount(ItemStack item, int amount) {
item.setAmount(amount);
return item;
}
public static class PartyMoraleItem extends InventoryPlaceholderItem {
public static class PartyMoraleItem extends InventoryItem {
public PartyMoraleItem(ConfigurationSection config) {
super(config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
Placeholders holders = new Placeholders();
int count = inv.getPlayerData().getParty().getMembers().count();
@ -257,10 +189,9 @@ public class PlayerStats extends EditableInventory {
public boolean canDisplay(GeneratedInventory inv) {
return inv.getPlayerData().hasParty() && inv.getPlayerData().getParty().getMembers().count() > 1;
}
}
public static class PlayerProfileItem extends InventoryPlaceholderItem {
public static class PlayerProfileItem extends InventoryItem {
public PlayerProfileItem(ConfigurationSection config) {
super(config);
}
@ -277,7 +208,7 @@ public class PlayerStats extends EditableInventory {
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
PlayerData data = inv.getPlayerData();
Placeholders holders = new Placeholders();
@ -297,11 +228,87 @@ public class PlayerStats extends EditableInventory {
holders.register("attribute_points", "" + data.getAttributePoints());
holders.register("progress", bar.toString());
holders.register("next_level", "" + nextLevelExp);
if(data.isOnline())
if (data.isOnline())
holders.register("player", "" + data.getPlayer().getName());
holders.register("class", "" + data.getProfess().getName());
return holders;
}
}
public class BoostItem extends SimplePlaceholderItem<PlayerStatsInventory> {
private final InventoryItem noBoost, mainLevel, profession;
public BoostItem(ConfigurationSection config) {
super(config);
ConfigurationSection noBoost = config.getConfigurationSection("no-boost");
Validate.notNull(noBoost, "Could not load 'no-boost' config");
this.noBoost = new SimplePlaceholderItem(noBoost);
ConfigurationSection mainLevel = config.getConfigurationSection("main-level");
Validate.notNull(mainLevel, "Could not load 'main-level' config");
this.mainLevel = new InventoryItem<PlayerStatsInventory>(mainLevel) {
@Override
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(PlayerStatsInventory inv, int n) {
Placeholders holders = new Placeholders();
Booster boost = MMOCore.plugin.boosterManager.get(inv.boostOffset + n);
holders.register("author", boost.hasAuthor() ? boost.getAuthor() : "Server");
holders.register("value", (int) (boost.getExtra() * 100));
holders.register("left", boost.isTimedOut() ?
MMOCore.plugin.configManager.getSimpleMessage("booster-expired").message()
: new DelayFormat(2).format(boost.getLeft()));
return holders;
}
};
ConfigurationSection profession = config.getConfigurationSection("profession");
Validate.notNull(profession, "Could not load 'profession' config");
this.profession = new InventoryItem<PlayerStatsInventory>(profession) {
@Override
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(PlayerStatsInventory inv, int n) {
Placeholders holders = new Placeholders();
Booster boost = MMOCore.plugin.boosterManager.get(inv.boostOffset + n);
holders.register("author", boost.hasAuthor() ? boost.getAuthor() : "Server");
holders.register("profession", boost.getProfession().getName());
holders.register("value", (int) (boost.getExtra() * 100));
holders.register("left", boost.isTimedOut() ?
MMOCore.plugin.configManager.getSimpleMessage("booster-expired").message()
: new DelayFormat(2).format(boost.getLeft()));
return holders;
}
};
}
@Override
public boolean hasDifferentDisplay() {
return true;
}
@Override
public ItemStack display(PlayerStatsInventory inv, int n) {
int offset = inv.boostOffset;
if (n + offset >= MMOCore.plugin.boosterManager.getBoosters().size())
return noBoost.display(inv, n);
Booster boost = MMOCore.plugin.boosterManager.get(inv.boostOffset + n);
return amount(boost.hasProfession() ? profession.display(inv, n) : mainLevel.display(inv, n), n + offset + 1);
}
}
}

View File

@ -1,10 +1,18 @@
package net.Indyuce.mmocore.gui;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.quest.Quest;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.SoundManager;
import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
@ -14,20 +22,10 @@ import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.quest.Quest;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.manager.SoundManager;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class QuestViewer extends EditableInventory {
public QuestViewer() {
@ -39,35 +37,34 @@ public class QuestViewer extends EditableInventory {
if (function.equals("quest"))
return new QuestItem(config);
if (function.equals("previous"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<QuestInventory>(config) {
@Override
public boolean canDisplay(GeneratedInventory inv) {
return ((QuestInventory) inv).page > 0;
public boolean canDisplay(QuestInventory inv) {
return inv.page > 0;
}
};
if (function.equals("next"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<QuestInventory>(config) {
@Override
public boolean canDisplay(GeneratedInventory inv) {
QuestInventory generated = (QuestInventory) inv;
return generated.perPage * (generated.page + 1) < generated.quests.size();
public boolean canDisplay(QuestInventory inv) {
return inv.perPage * (inv.page + 1) < inv.quests.size();
}
};
return new NoPlaceholderItem(config);
return new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new QuestInventory(data, this);
}
public class QuestItem extends NoPlaceholderItem {
private final InventoryPlaceholderItem noQuest, locked;
public class QuestItem extends SimplePlaceholderItem {
private final SimplePlaceholderItem noQuest, locked;
private final String mainHit, mainNotHit, professionHit, professionNotHit;
private final SimpleDateFormat dateFormat;
@ -78,8 +75,8 @@ public class QuestViewer extends EditableInventory {
Validate.isTrue(config.contains("no-quest"), "Could not load config 'no-quest'");
Validate.isTrue(config.contains("locked"), "Could not load config 'locked'");
locked = new NoPlaceholderItem(config.getConfigurationSection("locked"));
noQuest = new NoPlaceholderItem(config.getConfigurationSection("no-quest"));
locked = new SimplePlaceholderItem(config.getConfigurationSection("locked"));
noQuest = new SimplePlaceholderItem(config.getConfigurationSection("no-quest"));
Validate.isTrue(config.contains("date-format"), "Could not find date-format");
dateFormat = new SimpleDateFormat(config.getString("date-format"));

View File

@ -1,8 +1,18 @@
package net.Indyuce.mmocore.gui;
import java.util.ArrayList;
import java.util.List;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.skill.Skill;
import net.Indyuce.mmocore.api.skill.Skill.SkillInfo;
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@ -14,21 +24,8 @@ import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.skill.Skill;
import net.Indyuce.mmocore.api.skill.Skill.SkillInfo;
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import java.util.ArrayList;
import java.util.List;
public class SkillList extends EditableInventory {
public SkillList() {
@ -48,11 +45,11 @@ public class SkillList extends EditableInventory {
return new LevelItem(config);
if (function.equals("upgrade"))
return new InventoryPlaceholderItem(config) {
return new InventoryItem<SkillViewerInventory>(config) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
Skill selected = ((SkillViewerInventory) inv).selected.getSkill();
public Placeholders getPlaceholders(SkillViewerInventory inv, int n) {
Skill selected = inv.selected.getSkill();
Placeholders holders = new Placeholders();
holders.register("skill_caps", selected.getName().toUpperCase());
@ -63,21 +60,21 @@ public class SkillList extends EditableInventory {
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return !((SkillViewerInventory) inv).binding;
public boolean canDisplay(SkillViewerInventory inv) {
return !inv.binding;
}
};
if (function.equals("slot"))
return new InventoryPlaceholderItem(config) {
return new InventoryItem<SkillViewerInventory>(config) {
private final String none = MythicLib.plugin.parseColors(config.getString("no-skill"));
private final Material emptyMaterial = Material
.valueOf(config.getString("empty-item").toUpperCase().replace("-", "_").replace(" ", "_"));
private final int emptyCMD = config.getInt("empty-custom-model-data", getModelData());
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
Skill selected = ((SkillViewerInventory) inv).selected.getSkill();
public Placeholders getPlaceholders(SkillViewerInventory inv, int n) {
Skill selected = inv.selected.getSkill();
Skill skill = inv.getPlayerData().hasSkillBound(n) ? inv.getPlayerData().getBoundSkill(n).getSkill() : null;
Placeholders holders = new Placeholders();
@ -91,7 +88,7 @@ public class SkillList extends EditableInventory {
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
public ItemStack display(SkillViewerInventory inv, int n) {
ItemStack item = super.display(inv, n);
if (!inv.getPlayerData().hasSkillBound(n)) {
item.setType(emptyMaterial);
@ -106,8 +103,8 @@ public class SkillList extends EditableInventory {
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return ((SkillViewerInventory) inv).binding;
public boolean canDisplay(SkillViewerInventory inv) {
return inv.binding;
}
@Override
@ -116,15 +113,15 @@ public class SkillList extends EditableInventory {
}
};
return new NoPlaceholderItem(config);
return new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new SkillViewerInventory(data, this);
}
public class SwitchItem extends NoPlaceholderItem {
private final InventoryPlaceholderItem binding, upgrading;
public class SwitchItem extends SimplePlaceholderItem<SkillViewerInventory> {
private final SimplePlaceholderItem binding, upgrading;
public SwitchItem(ConfigurationSection config) {
super(config);
@ -132,22 +129,22 @@ public class SkillList extends EditableInventory {
Validate.isTrue(config.contains("binding"), "Config must have 'binding'");
Validate.isTrue(config.contains("upgrading"), "Config must have 'upgrading'");
binding = new NoPlaceholderItem(config.getConfigurationSection("binding"));
upgrading = new NoPlaceholderItem(config.getConfigurationSection("upgrading"));
binding = new SimplePlaceholderItem(config.getConfigurationSection("binding"));
upgrading = new SimplePlaceholderItem(config.getConfigurationSection("upgrading"));
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
return ((SkillViewerInventory) inv).binding ? upgrading.display(inv) : binding.display(inv);
public ItemStack display(SkillViewerInventory inv, int n) {
return inv.binding ? upgrading.display(inv) : binding.display(inv);
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
public boolean canDisplay(SkillViewerInventory inv) {
return true;
}
}
public class LevelItem extends InventoryPlaceholderItem {
public class LevelItem extends InventoryItem<SkillViewerInventory> {
private final int offset;
public LevelItem(ConfigurationSection config) {
@ -162,9 +159,9 @@ public class SkillList extends EditableInventory {
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
public ItemStack display(SkillViewerInventory inv, int n) {
SkillInfo skill = ((SkillViewerInventory) inv).selected;
SkillInfo skill = inv.selected;
int skillLevel = inv.getPlayerData().getSkillLevel(skill.getSkill()) + n - offset;
if (skillLevel < 1)
return new ItemStack(Material.AIR);
@ -193,17 +190,17 @@ public class SkillList extends EditableInventory {
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
return null;
public Placeholders getPlaceholders(SkillViewerInventory inv, int n) {
return new Placeholders();
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return !((SkillViewerInventory) inv).binding;
public boolean canDisplay(SkillViewerInventory inv) {
return !inv.binding;
}
}
public class SkillItem extends InventoryPlaceholderItem {
public class SkillItem extends InventoryItem<SkillViewerInventory> {
private final int selectedSkillSlot;
public SkillItem(ConfigurationSection config) {
@ -218,13 +215,12 @@ public class SkillList extends EditableInventory {
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
public ItemStack display(SkillViewerInventory inv, int n) {
/*
* calculate placeholders
*/
SkillViewerInventory viewer = (SkillViewerInventory) inv;
SkillInfo skill = viewer.skills.get(mod(n + inv.getPlayerData().skillGuiDisplayOffset, viewer.skills.size()));
SkillInfo skill = inv.skills.get(mod(n + inv.getPlayerData().skillGuiDisplayOffset, inv.skills.size()));
Placeholders holders = getPlaceholders(inv.getPlayerData(), skill);
List<String> lore = new ArrayList<>(getLore());
@ -264,8 +260,8 @@ public class SkillList extends EditableInventory {
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
return null;
public Placeholders getPlaceholders(SkillViewerInventory inv, int n) {
return new Placeholders();
}
}

View File

@ -1,9 +1,5 @@
package net.Indyuce.mmocore.gui;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.event.PlayerChangeClassEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
@ -12,10 +8,12 @@ import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.SoundManager;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
public class SubclassConfirmation extends EditableInventory {
public SubclassConfirmation() {
@ -24,17 +22,17 @@ public class SubclassConfirmation extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equalsIgnoreCase("yes") ? new InventoryPlaceholderItem(config) {
return function.equalsIgnoreCase("yes") ? new InventoryItem<SubclassConfirmationInventory>(config) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
@Override
public Placeholders getPlaceholders(SubclassConfirmationInventory inv, int n) {
Placeholders holders = new Placeholders();
holders.register("class", ((SubclassConfirmationInventory) inv).profess.getName());
return holders;
}
} : new NoPlaceholderItem(config);
}
Placeholders holders = new Placeholders();
holders.register("class", inv.profess.getName());
return holders;
}
} : new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data, PlayerClass profess, PluginInventory last) {
return new SubclassConfirmationInventory(data, this, profess, last);

View File

@ -1,14 +1,8 @@
package net.Indyuce.mmocore.gui;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.ConfigMessage;
import net.Indyuce.mmocore.api.player.PlayerData;
@ -17,12 +11,17 @@ import net.Indyuce.mmocore.api.player.profess.Subclass;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.InventoryManager;
import net.Indyuce.mmocore.manager.SoundManager;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class SubclassSelect extends EditableInventory {
public SubclassSelect() {
@ -31,14 +30,14 @@ public class SubclassSelect extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equals("class") ? new ClassItem(config) : new NoPlaceholderItem(config);
return function.equals("class") ? new ClassItem(config) : new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new SubclassSelectionInventory(data, this);
}
public class ClassItem extends InventoryItem {
public class ClassItem extends SimplePlaceholderItem<SubclassSelectionInventory> {
private final String name;
private final List<String> lore;
@ -49,20 +48,19 @@ public class SubclassSelect extends EditableInventory {
this.lore = config.getStringList("lore");
}
@Override
public boolean hasDifferentDisplay() {
return true;
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
SubclassSelectionInventory generated = (SubclassSelectionInventory) inv;
if (n >= generated.subclasses.size())
public ItemStack display(SubclassSelectionInventory inv, int n) {
if (n >= inv.subclasses.size())
return null;
PlayerClass profess = generated.subclasses.get(n).getProfess();
PlayerClass profess = inv.subclasses.get(n).getProfess();
ItemStack item = profess.getIcon();
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(MythicLib.plugin.parseColors(name).replace("{name}", profess.getName()));
@ -88,7 +86,7 @@ public class SubclassSelect extends EditableInventory {
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
public boolean canDisplay(SubclassSelectionInventory inv) {
return true;
}
}

View File

@ -1,26 +1,23 @@
package net.Indyuce.mmocore.gui;
import java.util.ArrayList;
import java.util.List;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.Waypoint;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import org.apache.commons.lang.Validate;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.Waypoint;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import java.util.ArrayList;
import java.util.List;
public class WaypointViewer extends EditableInventory {
public WaypointViewer() {
@ -34,25 +31,24 @@ public class WaypointViewer extends EditableInventory {
return new WaypointItem(config);
if (function.equals("previous"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<WaypointViewerInventory>(config) {
@Override
public boolean canDisplay(GeneratedInventory inv) {
return ((WaypointViewerInventory) inv).page > 0;
public boolean canDisplay(WaypointViewerInventory inv) {
return inv.page > 0;
}
};
if (function.equals("next"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<WaypointViewerInventory>(config) {
@Override
public boolean canDisplay(GeneratedInventory inv) {
WaypointViewerInventory generated = (WaypointViewerInventory) inv;
return inv.getEditable().getByFunction("waypoint").getSlots().size() * (generated.page + 1) < generated.waypoints.size();
public boolean canDisplay(WaypointViewerInventory inv) {
return inv.getEditable().getByFunction("waypoint").getSlots().size() * (inv.page + 1) < inv.waypoints.size();
}
};
return new NoPlaceholderItem(config);
return new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
@ -63,7 +59,7 @@ public class WaypointViewer extends EditableInventory {
return new WaypointViewerInventory(data, this, waypoint);
}
public class WaypointDisplayItem extends InventoryPlaceholderItem {
public class WaypointDisplayItem extends InventoryItem<WaypointViewerInventory> {
private final Material notReady;
public WaypointDisplayItem(ConfigurationSection config) {
@ -74,28 +70,21 @@ public class WaypointViewer extends EditableInventory {
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
WaypointViewerInventory generated = (WaypointViewerInventory) inv;
public ItemStack display(WaypointViewerInventory inv, int n) {
ItemStack disp = super.display(inv, n);
Waypoint waypoint = generated.waypoints.get(generated.page * inv.getEditable().getByFunction("waypoint").getSlots().size() + n);
if (inv.getPlayerData().getStellium() < waypoint.getStelliumCost() || (generated.current == null && !waypoint.isDynamic()))
Waypoint waypoint = inv.waypoints.get(inv.page * inv.getEditable().getByFunction("waypoint").getSlots().size() + n);
if (inv.getPlayerData().getStellium() < waypoint.getStelliumCost() || (inv.current == null && !waypoint.isDynamic()))
disp.setType(notReady);
return NBTItem.get(disp).addTag(new ItemTag("waypointId", waypoint.getId())).toItem();
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
WaypointViewerInventory generated = (WaypointViewerInventory) inv;
public Placeholders getPlaceholders(WaypointViewerInventory inv, int n) {
Placeholders holders = new Placeholders();
Waypoint waypoint = generated.waypoints.get(generated.page * generated.getByFunction("waypoint").getSlots().size() + n);
Waypoint waypoint = inv.waypoints.get(inv.page * inv.getByFunction("waypoint").getSlots().size() + n);
holders.register("name", waypoint.getName());
holders.register("stellium", decimal.format(waypoint.getStelliumCost()));
@ -103,8 +92,8 @@ public class WaypointViewer extends EditableInventory {
}
}
public class WaypointItem extends InventoryItem {
private final InventoryPlaceholderItem noWaypoint, locked;
public class WaypointItem extends SimplePlaceholderItem<WaypointViewerInventory> {
private final SimplePlaceholderItem noWaypoint, locked;
private final WaypointDisplayItem availWaypoint;
public WaypointItem(ConfigurationSection config) {
@ -114,31 +103,26 @@ public class WaypointViewer extends EditableInventory {
Validate.notNull(config.getConfigurationSection("locked"), "Could not load 'locked' config");
Validate.notNull(config.getConfigurationSection("display"), "Could not load 'display' config");
noWaypoint = new NoPlaceholderItem(config.getConfigurationSection("no-waypoint"));
locked = new NoPlaceholderItem(config.getConfigurationSection("locked"));
noWaypoint = new SimplePlaceholderItem(config.getConfigurationSection("no-waypoint"));
locked = new SimplePlaceholderItem(config.getConfigurationSection("locked"));
availWaypoint = new WaypointDisplayItem(config.getConfigurationSection("display"));
}
@Override
public boolean hasDifferentDisplay() {
return true;
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
WaypointViewerInventory generated = (WaypointViewerInventory) inv;
public ItemStack display(WaypointViewerInventory inv, int n) {
int index = generated.page * inv.getEditable().getByFunction("waypoint").getSlots().size() + n;
if (index >= generated.waypoints.size())
int index = inv.page * inv.getEditable().getByFunction("waypoint").getSlots().size() + n;
if (index >= inv.waypoints.size())
return noWaypoint.display(inv, n);
Waypoint waypoint = generated.waypoints.get(index);
Waypoint waypoint = inv.waypoints.get(index);
return inv.getPlayerData().hasWaypoint(waypoint) ? availWaypoint.display(inv, n) : locked.display(inv);
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
}
public class WaypointViewerInventory extends GeneratedInventory {

View File

@ -1,27 +1,52 @@
package net.Indyuce.mmocore.gui.api.item;
import java.util.ArrayList;
import java.util.List;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import io.lumine.mythic.lib.MythicLib;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
public abstract class InventoryItem {
public abstract class InventoryItem<T extends GeneratedInventory> {
private final String id, function;
private final List<Integer> slots = new ArrayList<>();
public InventoryItem(ConfigurationSection config) {
this(config.getName(), config.getString("function"));
private final Material material;
private final String name, texture;
private final List<String> lore;
private final int modelData;
private final boolean placeholders, hideFlags;
config.getStringList("slots").forEach(str -> slots.add(Integer.parseInt(str)));
public InventoryItem(ConfigurationSection config) {
this(Material.valueOf(config.getString("item", "").toUpperCase().replace(" ", "_").replace("-", "_")), config);
}
public InventoryItem(String id, String function) {
this.id = id;
this.function = function == null ? "" : function.toLowerCase();
public InventoryItem(Material material, ConfigurationSection config) {
this.id = config.getName();
this.function = config.getString("function", "");
this.material = material;
this.name = config.getString("name");
this.lore = config.getStringList("lore");
this.hideFlags = config.getBoolean("hide-flags");
this.texture = config.getString("texture");
this.placeholders = config.getBoolean("placeholders");
this.modelData = config.getInt("custom-model-data");
config.getStringList("slots").forEach(str -> slots.add(Integer.parseInt(str)));
}
public String getId() {
@ -40,30 +65,103 @@ public abstract class InventoryItem {
return slots;
}
public boolean hasDifferentDisplay() {
return false;
public Material getMaterial() {
return material;
}
public void setDisplayed(Inventory inv, GeneratedInventory generated) {
public boolean hideFlags() {
return hideFlags;
}
public boolean hasName() {
return name != null;
}
public String getName() {
return name;
}
public boolean hasLore() {
return lore != null && !lore.isEmpty();
}
public List<String> getLore() {
return lore;
}
public int getModelData() {
return modelData;
}
public void setDisplayed(Inventory inv, T generated) {
generated.addLoaded(this);
if (!hasDifferentDisplay()) {
ItemStack display = display(generated);
for (int slot : getSlots())
inv.setItem(slot, display);
}
else
} else
for (int j = 0; j < slots.size(); j++)
inv.setItem(slots.get(j), display(generated, j));
}
public ItemStack display(GeneratedInventory inv) {
public boolean hasDifferentDisplay() {
return false;
}
public boolean canDisplay(T inv) {
return true;
}
public ItemStack display(T inv) {
return display(inv, 0);
}
public abstract ItemStack display(GeneratedInventory inv, int n);
public ItemStack display(T inv, int n) {
public abstract boolean canDisplay(GeneratedInventory inv);
Placeholders placeholders = getPlaceholders(inv, n);
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
if (texture != null && meta instanceof SkullMeta)
applyTexture(texture, (SkullMeta) meta);
if (hasName())
meta.setDisplayName(placeholders.apply(inv.getPlayer(), getName()));
if (hideFlags())
meta.addItemFlags(ItemFlag.values());
if (hasLore()) {
List<String> lore = new ArrayList<>();
getLore().forEach(line -> lore.add(ChatColor.GRAY + placeholders.apply(inv.getPlayer(), line)));
meta.setLore(lore);
}
if (MythicLib.plugin.getVersion().isStrictlyHigher(1, 13))
meta.setCustomModelData(getModelData());
item.setItemMeta(meta);
return item;
}
private void applyTexture(String value, SkullMeta meta) {
try {
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
profile.getProperties().put("textures", new Property("textures", value));
Field profileField = meta.getClass().getDeclaredField("profile");
profileField.setAccessible(true);
profileField.set(meta, profile);
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException exception) {
MMOCore.log(Level.WARNING, "Could not apply item texture value of " + getId());
}
}
public Placeholders getPlaceholders(T inv) {
return getPlaceholders(inv, 0);
}
public abstract Placeholders getPlaceholders(T inv, int n);
}

View File

@ -1,132 +0,0 @@
package net.Indyuce.mmocore.gui.api.item;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import io.lumine.mythic.lib.MythicLib;
public abstract class InventoryPlaceholderItem extends InventoryItem {
private final Material material;
private final String name, texture;
private final List<String> lore;
private final int modelData;
private final boolean placeholders, hideFlags;
public InventoryPlaceholderItem(ConfigurationSection config) {
this(Material.valueOf(config.getString("item", "").toUpperCase().replace(" ", "_").replace("-", "_")), config);
}
public InventoryPlaceholderItem(Material material, ConfigurationSection config) {
super(config);
this.material = material;
this.name = config.getString("name");
this.lore = config.getStringList("lore");
this.hideFlags = config.getBoolean("hide-flags");
this.texture = config.getString("texture");
this.placeholders = config.getBoolean("placeholders");
this.modelData = config.getInt("custom-model-data");
}
public Material getMaterial() {
return material;
}
public boolean hideFlags() {
return hideFlags;
}
public boolean hasName() {
return name != null;
}
public String getName() {
return name;
}
public boolean hasLore() {
return lore != null && !lore.isEmpty();
}
public List<String> getLore() {
return lore;
}
public int getModelData() {
return modelData;
}
public boolean supportPlaceholders() {
return placeholders;
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
public Placeholders getPlaceholders(PluginInventory inv) {
return getPlaceholders(inv, 0);
}
public abstract Placeholders getPlaceholders(PluginInventory inv, int n);
@Override
public ItemStack display(GeneratedInventory inv, int n) {
Placeholders placeholders = getPlaceholders(inv, n);
ItemStack item = new ItemStack(material);
ItemMeta meta = item.getItemMeta();
if (texture != null && meta instanceof SkullMeta)
applyTexture(texture, (SkullMeta) meta);
if (hasName())
meta.setDisplayName(placeholders.apply(inv.getPlayer(), getName()));
if (hideFlags())
meta.addItemFlags(ItemFlag.values());
if (hasLore()) {
List<String> lore = new ArrayList<>();
getLore().forEach(line -> lore.add(ChatColor.GRAY + placeholders.apply(inv.getPlayer(), line)));
meta.setLore(lore);
}
if (MythicLib.plugin.getVersion().isStrictlyHigher(1, 13))
meta.setCustomModelData(getModelData());
item.setItemMeta(meta);
return item;
}
private void applyTexture(String value, SkullMeta meta) {
try {
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
profile.getProperties().put("textures", new Property("textures", value));
Field profileField = meta.getClass().getDeclaredField("profile");
profileField.setAccessible(true);
profileField.set(meta, profile);
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException exception) {
MMOCore.log(Level.WARNING, "Could not apply item texture value of " + getId());
}
}
}

View File

@ -1,21 +0,0 @@
package net.Indyuce.mmocore.gui.api.item;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmocore.gui.api.PluginInventory;
public class NoPlaceholderItem extends InventoryPlaceholderItem {
public NoPlaceholderItem(ConfigurationSection config) {
super(config);
}
public NoPlaceholderItem(Material material, ConfigurationSection config) {
super(material, config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
return new Placeholders();
}
}

View File

@ -1,12 +1,11 @@
package net.Indyuce.mmocore.gui.api.item;
import net.Indyuce.mmocore.MMOCore;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.entity.Player;
import net.Indyuce.mmocore.MMOCore;
public class Placeholders {
private final Map<String, String> placeholders = new HashMap<>();
@ -16,16 +15,16 @@ public class Placeholders {
public String apply(Player player, String str) {
/*
* remove potential conditions, apply color codes and external
* placeholders if needed.
*/
/*
* Remove potential conditions, apply color codes
* and external placeholders if needed.
*/
str = MMOCore.plugin.placeholderParser.parse(player, removeCondition(str));
while (str.contains("{") && str.substring(str.indexOf("{")).contains("}")) {
String holder = str.substring(str.indexOf("{") + 1, str.indexOf("}"));
str = str.replace("{" + holder + "}", placeholders.getOrDefault(holder, "PHE"));
}
String holder = str.substring(str.indexOf("{") + 1, str.indexOf("}"));
str = str.replace("{" + holder + "}", placeholders.getOrDefault(holder, "Error"));
}
return str;
}

View File

@ -0,0 +1,20 @@
package net.Indyuce.mmocore.gui.api.item;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
public class SimplePlaceholderItem<T extends GeneratedInventory> extends InventoryItem<T> {
public SimplePlaceholderItem(ConfigurationSection config) {
super(config);
}
public SimplePlaceholderItem(Material material, ConfigurationSection config) {
super(material, config);
}
@Override
public Placeholders getPlaceholders(T inv, int n) {
return new Placeholders();
}
}

View File

@ -1,27 +1,26 @@
package net.Indyuce.mmocore.gui.api.item;
import org.bukkit.configuration.ConfigurationSection;
import io.lumine.mythic.lib.api.MMOLineConfig;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.quest.trigger.Trigger;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import io.lumine.mythic.lib.api.MMOLineConfig;
import org.bukkit.configuration.ConfigurationSection;
public class TriggerItem extends InventoryPlaceholderItem {
private final Trigger trigger;
public TriggerItem(ConfigurationSection config, String format) {
super(config);
trigger = MMOCore.plugin.loadManager.loadTrigger(new MMOLineConfig(format));
}
public class TriggerItem extends InventoryItem {
private final Trigger trigger;
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
return new Placeholders();
}
public Trigger getTrigger() {
return trigger;
}
public TriggerItem(ConfigurationSection config, String format) {
super(config);
trigger = MMOCore.plugin.loadManager.loadTrigger(new MMOLineConfig(format));
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
return new Placeholders();
}
public Trigger getTrigger() {
return trigger;
}
}

View File

@ -1,7 +1,17 @@
package net.Indyuce.mmocore.gui.social.friend;
import java.util.UUID;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.InventoryManager;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@ -14,20 +24,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.manager.InventoryManager;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import java.util.UUID;
public class EditableFriendList extends EditableInventory {
public EditableFriendList() {
@ -41,38 +38,42 @@ public class EditableFriendList extends EditableInventory {
return new FriendItem(config);
if (function.equals("previous"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<FriendListInventory>(config) {
@Override
public boolean canDisplay(GeneratedInventory inv) {
return ((FriendListInventory) inv).page > 0;
public boolean canDisplay(FriendListInventory inv) {
return inv.page > 0;
}
};
if (function.equals("next"))
return new NoPlaceholderItem(config) {
return new SimplePlaceholderItem<FriendListInventory>(config) {
@Override
public boolean canDisplay(GeneratedInventory inv) {
FriendListInventory generated = (FriendListInventory) inv;
return inv.getEditable().getByFunction("friend").getSlots().size() * generated.page < inv.getPlayerData().getFriends().size();
public boolean canDisplay(FriendListInventory inv) {
return inv.getEditable().getByFunction("friend").getSlots().size() * inv.page < inv.getPlayerData().getFriends().size();
}
};
return new NoPlaceholderItem(config);
return new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new FriendListInventory(data, this);
}
public static class OfflineFriendItem extends InventoryPlaceholderItem {
public static class OfflineFriendItem extends InventoryItem {
public OfflineFriendItem(ConfigurationSection config) {
super(config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
OfflinePlayer friend = Bukkit.getOfflinePlayer(inv.getPlayerData().getFriends().get(n));
Placeholders holders = new Placeholders();
@ -98,18 +99,23 @@ public class EditableFriendList extends EditableInventory {
}
}
public static class OnlineFriendItem extends InventoryPlaceholderItem {
public static class OnlineFriendItem extends SimplePlaceholderItem {
public OnlineFriendItem(ConfigurationSection config) {
super(config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
Player friend = Bukkit.getPlayer(inv.getPlayerData().getFriends().get(n));
PlayerData data = PlayerData.get(friend);
Placeholders holders = new Placeholders();
if(data.isOnline())
if (data.isOnline())
holders.register("name", data.getPlayer().getName());
holders.register("class", data.getProfess().getName());
holders.register("level", data.getLevel());
@ -134,7 +140,7 @@ public class EditableFriendList extends EditableInventory {
}
}
public static class FriendItem extends NoPlaceholderItem {
public static class FriendItem extends SimplePlaceholderItem {
private final OnlineFriendItem online;
private final OfflineFriendItem offline;

View File

@ -1,19 +1,16 @@
package net.Indyuce.mmocore.gui.social.friend;
import org.bukkit.OfflinePlayer;
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.OfflinePlayerData;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import org.bukkit.OfflinePlayer;
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
public class EditableFriendRemoval extends EditableInventory {
public EditableFriendRemoval() {
@ -23,16 +20,16 @@ public class EditableFriendRemoval extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return new InventoryPlaceholderItem(config) {
return new InventoryItem<ClassConfirmationInventory>(config) {
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
Placeholders holders = new Placeholders();
holders.register("name", ((ClassConfirmationInventory) inv).friend.getName());
return holders;
}
};
}
@Override
public Placeholders getPlaceholders(ClassConfirmationInventory inv, int n) {
Placeholders holders = new Placeholders();
holders.register("name", inv.friend.getName());
return holders;
}
};
}
public GeneratedInventory newInventory(PlayerData data, OfflinePlayer friend, GeneratedInventory last) {
return new ClassConfirmationInventory(data, this, friend, last);

View File

@ -1,7 +1,16 @@
package net.Indyuce.mmocore.gui.social.guild;
import java.util.UUID;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@ -14,19 +23,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import java.util.UUID;
public class EditableGuildAdmin extends EditableInventory {
public EditableGuildAdmin() {
@ -35,21 +32,30 @@ public class EditableGuildAdmin extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equals("member") ? new MemberItem(config) : new NoPlaceholderItem(config);
return function.equals("member") ? new MemberItem(config) : new SimplePlaceholderItem(config);
}
public static class MemberDisplayItem extends InventoryPlaceholderItem {
public GeneratedInventory newInventory(PlayerData data) {
return new GuildViewInventory(data, this);
}
public static class MemberDisplayItem extends InventoryItem {
public MemberDisplayItem(ConfigurationSection config) {
super(config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
PlayerData member = PlayerData.get(inv.getPlayerData().getGuild().getMembers().get(n));
Placeholders holders = new Placeholders();
if(member.isOnline())
if (member.isOnline())
holders.register("name", member.getPlayer().getName());
holders.register("class", member.getProfess().getName());
holders.register("level", "" + member.getLevel());
@ -66,7 +72,7 @@ public class EditableGuildAdmin extends EditableInventory {
if (meta instanceof SkullMeta)
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {
if(!member.isOnline()) return;
if (!member.isOnline()) return;
((SkullMeta) meta).setOwningPlayer(member.getPlayer());
disp.setItemMeta(meta);
});
@ -75,8 +81,8 @@ public class EditableGuildAdmin extends EditableInventory {
}
}
public static class MemberItem extends InventoryItem {
private final InventoryPlaceholderItem empty;
public static class MemberItem extends SimplePlaceholderItem {
private final InventoryItem empty;
private final MemberDisplayItem member;
public MemberItem(ConfigurationSection config) {
@ -85,7 +91,7 @@ public class EditableGuildAdmin extends EditableInventory {
Validate.notNull(config.contains("empty"), "Could not load empty config");
Validate.notNull(config.contains("member"), "Could not load member config");
empty = new NoPlaceholderItem(config.getConfigurationSection("empty"));
empty = new SimplePlaceholderItem(config.getConfigurationSection("empty"));
member = new MemberDisplayItem(config.getConfigurationSection("member"));
}
@ -98,15 +104,6 @@ public class EditableGuildAdmin extends EditableInventory {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
}
public GeneratedInventory newInventory(PlayerData data) {
return new GuildViewInventory(data, this);
}
public class GuildViewInventory extends GeneratedInventory {

View File

@ -1,19 +1,18 @@
package net.Indyuce.mmocore.gui.social.guild;
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.InventoryManager;
import net.Indyuce.mmocore.manager.data.GuildDataManager.GuildConfiguration.NamingRules;
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
public class EditableGuildCreation extends EditableInventory {
public EditableGuildCreation() {
@ -22,8 +21,8 @@ public class EditableGuildCreation extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return new NoPlaceholderItem(config);
}
return new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new GuildCreationInventory(data, this);

View File

@ -1,7 +1,17 @@
package net.Indyuce.mmocore.gui.social.guild;
import java.util.UUID;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.OfflinePlayerData;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@ -14,20 +24,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.OfflinePlayerData;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.input.PlayerInput.InputType;
import net.Indyuce.mmocore.api.util.math.format.DelayFormat;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.NBTItem;
import java.util.UUID;
public class EditableGuildView extends EditableInventory {
public EditableGuildView() {
@ -36,16 +33,21 @@ public class EditableGuildView extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equals("member") ? new MemberItem(config) : (function.equals("next") || function.equals("previous") || function.equals("disband") || function.equals("invite")) ? new ConditionalItem(function, config) : new NoPlaceholderItem(config);
return function.equals("member") ? new MemberItem(config) : (function.equals("next") || function.equals("previous") || function.equals("disband") || function.equals("invite")) ? new ConditionalItem(function, config) : new SimplePlaceholderItem(config);
}
public static class MemberDisplayItem extends InventoryPlaceholderItem {
public static class MemberDisplayItem extends InventoryItem {
public MemberDisplayItem(ConfigurationSection config) {
super(config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
UUID uuid = inv.getPlayerData().getGuild().getMembers().get(n);
Placeholders holders = new Placeholders();
/*
@ -79,8 +81,8 @@ public class EditableGuildView extends EditableInventory {
}
}
public class MemberItem extends InventoryItem {
private final InventoryPlaceholderItem empty;
public class MemberItem extends SimplePlaceholderItem<GuildViewInventory> {
private final InventoryItem empty;
private final MemberDisplayItem member;
public MemberItem(ConfigurationSection config) {
@ -89,13 +91,13 @@ public class EditableGuildView extends EditableInventory {
Validate.notNull(config.contains("empty"), "Could not load empty config");
Validate.notNull(config.contains("member"), "Could not load member config");
empty = new NoPlaceholderItem(config.getConfigurationSection("empty"));
empty = new SimplePlaceholderItem(config.getConfigurationSection("empty"));
member = new MemberDisplayItem(config.getConfigurationSection("member"));
}
@Override
public ItemStack display(GeneratedInventory inv, int n) {
int index = n * ((GuildViewInventory) inv).getPage();
public ItemStack display(GuildViewInventory inv, int n) {
int index = n * inv.getPage();
return inv.getPlayerData().getGuild().getMembers().count() > index ? member.display(inv, index) : empty.display(inv, index);
}
@ -103,14 +105,9 @@ public class EditableGuildView extends EditableInventory {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public boolean canDisplay(GeneratedInventory inv) {
return true;
}
}
public class ConditionalItem extends NoPlaceholderItem {
public class ConditionalItem extends SimplePlaceholderItem {
private final String function;
public ConditionalItem(String func, ConfigurationSection config) {

View File

@ -1,16 +1,15 @@
package net.Indyuce.mmocore.gui.social.party;
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import net.Indyuce.mmocore.manager.InventoryManager;
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.InventoryClickEvent;
public class EditablePartyCreation extends EditableInventory {
public EditablePartyCreation() {
@ -19,8 +18,8 @@ public class EditablePartyCreation extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return new NoPlaceholderItem(config);
}
return new SimplePlaceholderItem(config);
}
public GeneratedInventory newInventory(PlayerData data) {
return new ClassConfirmationInventory(data, this);

View File

@ -10,9 +10,8 @@ import net.Indyuce.mmocore.gui.api.EditableInventory;
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.api.item.InventoryItem;
import net.Indyuce.mmocore.gui.api.item.InventoryPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.NoPlaceholderItem;
import net.Indyuce.mmocore.gui.api.item.Placeholders;
import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@ -28,7 +27,6 @@ import org.bukkit.inventory.meta.SkullMeta;
import java.util.UUID;
public class EditablePartyView extends EditableInventory {
public EditablePartyView() {
super("party-view");
@ -36,20 +34,25 @@ public class EditablePartyView extends EditableInventory {
@Override
public InventoryItem load(String function, ConfigurationSection config) {
return function.equals("member") ? new MemberItem(config) : new NoPlaceholderItem(config);
return function.equals("member") ? new MemberItem(config) : new SimplePlaceholderItem(config);
}
public static class MemberDisplayItem extends InventoryPlaceholderItem {
public static class MemberDisplayItem extends InventoryItem {
public MemberDisplayItem(ConfigurationSection config) {
super(config);
}
@Override
public Placeholders getPlaceholders(PluginInventory inv, int n) {
public boolean hasDifferentDisplay() {
return true;
}
@Override
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
PlayerData member = inv.getPlayerData().getParty().getMembers().get(n);
Placeholders holders = new Placeholders();
if(member.isOnline())
if (member.isOnline())
holders.register("name", member.getPlayer().getName());
holders.register("class", member.getProfess().getName());
holders.register("level", "" + member.getLevel());
@ -69,7 +72,7 @@ public class EditablePartyView extends EditableInventory {
*/
if (meta instanceof SkullMeta)
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {
if(!member.isOnline()) return;
if (!member.isOnline()) return;
((SkullMeta) meta).setOwningPlayer(member.getPlayer());
disp.setItemMeta(meta);
});
@ -78,8 +81,8 @@ public class EditablePartyView extends EditableInventory {
}
}
public static class MemberItem extends InventoryItem {
private final InventoryPlaceholderItem empty;
public static class MemberItem extends SimplePlaceholderItem {
private final InventoryItem empty;
private final MemberDisplayItem member;
public MemberItem(ConfigurationSection config) {
@ -88,7 +91,7 @@ public class EditablePartyView extends EditableInventory {
Validate.notNull(config.contains("empty"), "Could not load empty config");
Validate.notNull(config.contains("member"), "Could not load member config");
empty = new NoPlaceholderItem(config.getConfigurationSection("empty"));
empty = new SimplePlaceholderItem(config.getConfigurationSection("empty"));
member = new MemberDisplayItem(config.getConfigurationSection("member"));
}