mirror of
https://github.com/RoinujNosde/SimpleClans.git
synced 2026-11-05 01:10:04 -05:00
Compare commits
17
Commits
l10n
...
customizable-gui
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af8edd0a24 | ||
|
|
2480bf47bc | ||
|
|
f9de9966ec | ||
|
|
f7304c00a7 | ||
|
|
cd451a2f1f | ||
|
|
707a6bfb66 | ||
|
|
f5ae7e23c3 | ||
|
|
91845abea3 | ||
|
|
7cb55f6177 | ||
|
|
949943fb5e | ||
|
|
56b4b64d21 | ||
|
|
b3324574da | ||
|
|
edd4c46a9e | ||
|
|
91c701a729 | ||
|
|
45ef2ce219 | ||
|
|
dd676565e2 | ||
|
|
6a570cf003 |
No files matched your search
@@ -16,8 +16,7 @@
|
||||
<filtering>true</filtering>
|
||||
<directory>${basedir}/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>plugin.yml</include>
|
||||
<include>config.yml</include>
|
||||
<include>**/*.yml</include>
|
||||
<include>*.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.events;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PostComponentsCreationEvent extends Event {
|
||||
|
||||
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||
|
||||
private final @NotNull SCFrame frame;
|
||||
|
||||
public PostComponentsCreationEvent(@NotNull SCFrame frame) {
|
||||
this.frame = frame;
|
||||
}
|
||||
|
||||
public SCFrame getFrame() {
|
||||
return frame;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return HANDLER_LIST;
|
||||
}
|
||||
|
||||
public static @NotNull HandlerList getHandlerList() {
|
||||
return HANDLER_LIST;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -330,7 +330,6 @@ public final class ClanManager {
|
||||
return clanPlayers.get(uuid);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Nullable
|
||||
public ClanPlayer getAnyClanPlayer(String playerName) {
|
||||
for (ClanPlayer cp : getAllClanPlayers()) {
|
||||
@@ -603,7 +602,7 @@ public final class ClanManager {
|
||||
}
|
||||
}
|
||||
|
||||
if (out.length() == 0) {
|
||||
if (out.isEmpty()) {
|
||||
out = lang("none", player);
|
||||
}
|
||||
|
||||
@@ -674,7 +673,7 @@ public final class ClanManager {
|
||||
out += ChatColor.WHITE + lang("weapon.A", player) + headColor + count;
|
||||
}
|
||||
|
||||
if (out.length() == 0) {
|
||||
if (out.isEmpty()) {
|
||||
out = lang("none", player);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,17 +3,22 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Rank;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType;
|
||||
@@ -30,6 +35,7 @@ public final class SettingsManager {
|
||||
|
||||
private final FileConfiguration config;
|
||||
private final File configFile;
|
||||
private final Map<Class<? extends SCFrame>, FileConfiguration> frameConfigs = new ConcurrentHashMap<>();
|
||||
|
||||
public SettingsManager(SimpleClans plugin) {
|
||||
this.plugin = plugin;
|
||||
@@ -95,6 +101,7 @@ public final class SettingsManager {
|
||||
SimpleClans.getInstance().getLogger().log(Level.SEVERE, ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
frameConfigs.clear();
|
||||
|
||||
save();
|
||||
}
|
||||
@@ -133,6 +140,30 @@ public final class SettingsManager {
|
||||
return new Locale(language);
|
||||
}
|
||||
|
||||
public FileConfiguration getConfig(Class<? extends SCFrame> clazz) {
|
||||
return frameConfigs.computeIfAbsent(clazz, this::readConfig);
|
||||
}
|
||||
|
||||
private FileConfiguration readConfig(Class<? extends SCFrame> clazz) {
|
||||
String configPath = clazz.getName().replace("net.sacredlabyrinth.phaed.simpleclans.ui.", "")
|
||||
.replace(".", File.separator) + ".yml";
|
||||
File externalFile = new File(plugin.getDataFolder(), configPath);
|
||||
InputStream resource = plugin.getResource(configPath);
|
||||
YamlConfiguration config = YamlConfiguration.loadConfiguration(externalFile);
|
||||
if (resource != null) {
|
||||
YamlConfiguration defaults = YamlConfiguration.loadConfiguration(new InputStreamReader(resource));
|
||||
config.setDefaults(defaults);
|
||||
if (!externalFile.exists()) {
|
||||
try {
|
||||
defaults.save(externalFile);
|
||||
} catch (IOException e) {
|
||||
plugin.getLogger().log(Level.SEVERE, String.format("Error saving defaults to %s", configPath), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
public List<Material> getItemList() {
|
||||
List<Material> itemsList = new ArrayList<>();
|
||||
for (String material : getStringList(ITEM_LIST)) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package net.sacredlabyrinth.phaed.simpleclans.ui;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.FrameOpenEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.PostComponentsCreationEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.WordWrapper;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -82,6 +83,7 @@ public class InventoryDrawer {
|
||||
frame.clear();
|
||||
try {
|
||||
frame.createComponents();
|
||||
Bukkit.getPluginManager().callEvent(new PostComponentsCreationEvent(frame));
|
||||
} catch (NoSuchFieldError ex) {
|
||||
runHelpCommand(frame.getViewer());
|
||||
return;
|
||||
@@ -93,7 +95,7 @@ public class InventoryDrawer {
|
||||
return;
|
||||
}
|
||||
for (SCComponent c : frame.getComponents()) {
|
||||
if (c.getSlot() >= frame.getSize()) {
|
||||
if (c.getSlot() >= frame.getSize() || !c.isEnabled()) {
|
||||
continue;
|
||||
}
|
||||
checkLorePermission(frame, c);
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.annotation.OverridingMethodsMustInvokeSuper;
|
||||
|
||||
public abstract class PageableFrame<T> extends SCFrame {
|
||||
|
||||
public PageableFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
|
||||
super(parent, viewer);
|
||||
}
|
||||
|
||||
@Override
|
||||
@OverridingMethodsMustInvokeSuper
|
||||
public void createComponents() {
|
||||
super.createComponents();
|
||||
SCComponent nextPage = new SCComponentImpl.Builder(getConfig(), "next_page")
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.next.page.title").build();
|
||||
setOneTimeListener(nextPage, this::nextPage, getPaginator().hasNextPage());
|
||||
add(nextPage);
|
||||
|
||||
SCComponent previousPage = new SCComponentImpl.Builder(getConfig(), "previous_page")
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.previous.page.title").build();
|
||||
setOneTimeListener(previousPage, this::previousPage, getPaginator().hasPreviousPage());
|
||||
add(previousPage);
|
||||
}
|
||||
|
||||
public abstract Paginator<T> getPaginator();
|
||||
|
||||
public int getPageSize() {
|
||||
return getConfig().getIntegerList("components.list.slots").size();
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (getPaginator().nextPage()) {
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (getPaginator().previousPage()) {
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
private void setOneTimeListener(final SCComponent component, final Runnable runnable, boolean pageCheck) {
|
||||
if (!pageCheck) {
|
||||
return;
|
||||
}
|
||||
component.setListener(ClickType.LEFT, () -> {
|
||||
component.setListener(ClickType.LEFT, null);
|
||||
runnable.run();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import java.util.Set;
|
||||
*/
|
||||
public abstract class SCComponent {
|
||||
|
||||
private boolean enabled = true;
|
||||
private final HashMap<ClickType, Runnable> listeners = new HashMap<>();
|
||||
private final HashMap<ClickType, Object> permissions = new HashMap<>();
|
||||
private final Set<ClickType> verified = new HashSet<>();
|
||||
@@ -30,6 +31,14 @@ public abstract class SCComponent {
|
||||
|
||||
public abstract int getSlot();
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ItemMeta getItemMeta() {
|
||||
return getItem().getItemMeta();
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.Components;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class SCComponentImpl extends SCComponent {
|
||||
|
||||
@@ -45,6 +55,7 @@ public class SCComponentImpl extends SCComponent {
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
||||
item.setItemMeta(itemMeta);
|
||||
}
|
||||
checkSlot(slot);
|
||||
this.slot = slot;
|
||||
}
|
||||
|
||||
@@ -58,34 +69,66 @@ public class SCComponentImpl extends SCComponent {
|
||||
return slot;
|
||||
}
|
||||
|
||||
private static void checkMaterial(String material) {
|
||||
if (material == null || material.isEmpty()) {
|
||||
throw new IllegalStateException("material cannot be null or empty");
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkSlot(int slot) {
|
||||
if (slot < 0) {
|
||||
throw new IllegalStateException("slot must be >= 0 and < 54");
|
||||
}
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private final SCComponentImpl component = new SCComponentImpl();
|
||||
private boolean enabled;
|
||||
private final ItemStack item;
|
||||
private String displayName;
|
||||
private int slot;
|
||||
private @Nullable List<String> lore;
|
||||
private Player viewer;
|
||||
|
||||
public Builder(@NotNull XMaterial material) {
|
||||
this(material.parseItem());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public Builder(@NotNull Material material) {
|
||||
component.item = new ItemStack(material);
|
||||
this(new ItemStack(material));
|
||||
}
|
||||
|
||||
public Builder(@Nullable ItemStack item) {
|
||||
if (item == null) {
|
||||
item = new ItemStack(Material.STONE);
|
||||
}
|
||||
component.item = item;
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public Builder(FileConfiguration config, String id) {
|
||||
String materialName = config.getString("components." + id + ".material");
|
||||
checkMaterial(materialName);
|
||||
item = Objects.requireNonNull(XMaterial.matchXMaterial(materialName).orElse(XMaterial.STONE).parseItem());
|
||||
slot = config.getInt("components." + id + ".slot");
|
||||
checkSlot(slot);
|
||||
enabled = config.getBoolean("components." + id + ".enabled");
|
||||
}
|
||||
|
||||
public Builder withViewer(@NotNull Player player) {
|
||||
this.viewer = player;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder withDisplayName(@Nullable String displayName) {
|
||||
ItemMeta itemMeta = component.getItemMeta();
|
||||
if (itemMeta != null) {
|
||||
itemMeta.setDisplayName(displayName);
|
||||
component.setItemMeta(itemMeta);
|
||||
}
|
||||
this.displayName = displayName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder withDisplayNameKey(@NotNull String key, Object... args) {
|
||||
if (viewer == null) throw new IllegalStateException("viewer is null");
|
||||
return withDisplayName(lang(key, viewer, args));
|
||||
}
|
||||
|
||||
public Builder withLore(@Nullable List<String> lore) {
|
||||
this.lore = lore;
|
||||
return this;
|
||||
@@ -99,18 +142,154 @@ public class SCComponentImpl extends SCComponent {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder withLoreKey(@NotNull String key, Object... args) {
|
||||
if (viewer == null) throw new IllegalStateException("viewer is null");
|
||||
return withLoreLine(lang(key, viewer, args));
|
||||
}
|
||||
|
||||
public Builder withSlot(int slot) {
|
||||
component.slot = slot;
|
||||
checkSlot(slot);
|
||||
this.slot = slot;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SCComponent build() {
|
||||
ItemMeta itemMeta = component.getItemMeta();
|
||||
SCComponentImpl component = new SCComponentImpl();
|
||||
component.item = item;
|
||||
component.setEnabled(enabled);
|
||||
ItemMeta itemMeta = item.getItemMeta();
|
||||
if (itemMeta != null) {
|
||||
itemMeta.setLore(lore);
|
||||
itemMeta.setDisplayName(displayName);
|
||||
component.setItemMeta(itemMeta);
|
||||
}
|
||||
component.slot = slot;
|
||||
return component;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ListBuilder<T> {
|
||||
private final boolean enabled;
|
||||
private final XMaterial material;
|
||||
private Function<T, ItemStack> item;
|
||||
private Function<T, OfflinePlayer> owningPlayer;
|
||||
private final List<Integer> slots;
|
||||
private final List<T> elements;
|
||||
private Player viewer;
|
||||
private Function<T, String> displayName = (t) -> null;
|
||||
private final List<Function<T, String>> lore = new ArrayList<>();
|
||||
private final Map<ClickType, Function<T, Runnable>> listeners = new HashMap<>();
|
||||
private final Map<ClickType, String> bukkitPermissions = new HashMap<>();
|
||||
private final Map<ClickType, RankPermission> rankPermissions = new HashMap<>();
|
||||
private final Set<ClickType> confirmationRequired = new HashSet<>();
|
||||
private String lorePermission;
|
||||
|
||||
public ListBuilder(@NotNull FileConfiguration config, @NotNull String id, @NotNull List<T> elements) {
|
||||
String materialName = config.getString("components." + id + ".material");
|
||||
checkMaterial(materialName);
|
||||
material = XMaterial.matchXMaterial(materialName).orElse(XMaterial.STONE);
|
||||
item = (t) -> Objects.requireNonNull(material.parseItem());
|
||||
slots = config.getIntegerList("components." + id + ".slots").stream().filter(i -> i >= 0 && i < 54)
|
||||
.collect(Collectors.toList());
|
||||
this.elements = elements;
|
||||
enabled = config.getBoolean("components." + id + ".enabled");
|
||||
}
|
||||
|
||||
public ListBuilder(@NotNull FileConfiguration config, @NotNull String id) {
|
||||
this(config, id, new ArrayList<>());
|
||||
slots.forEach(e -> elements.add(null));
|
||||
}
|
||||
|
||||
public ListBuilder<T> withItem(@NotNull Function<T, ItemStack> item) {
|
||||
this.item = (t) -> {
|
||||
ItemStack result = item.apply(t);
|
||||
return result == null ? material.parseItem() : result;
|
||||
};
|
||||
return this;
|
||||
}
|
||||
|
||||
public ListBuilder<T> withViewer(@NotNull Player player) {
|
||||
viewer = player;
|
||||
return this;
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
public final ListBuilder<T> withDisplayNameKey(@NotNull String key, Function<T, Object>... args) {
|
||||
displayName = (t) -> processLang(key, t, args);
|
||||
return this;
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
public final ListBuilder<T> withLoreKey(@NotNull String key, Function<T, Object>... args) {
|
||||
lore.add((t) -> processLang(key, t, args));
|
||||
return this;
|
||||
}
|
||||
|
||||
public final ListBuilder<T> withLoreLine(Function<T, String> line) {
|
||||
lore.add(line);
|
||||
return this;
|
||||
}
|
||||
|
||||
public final ListBuilder<T> withOwningPlayer(Function<T, OfflinePlayer> owningPlayer) {
|
||||
this.owningPlayer = owningPlayer;
|
||||
return this;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private String processLang(@NotNull String key, T t, Function<T, Object>[] args) {
|
||||
Object[] processedArgs = Arrays.stream(args).map(func -> func.apply(t)).toArray();
|
||||
if (viewer == null) throw new IllegalStateException("viewer is null");
|
||||
return lang(key, viewer, processedArgs);
|
||||
}
|
||||
|
||||
public ListBuilder<T> withLorePermission(@Nullable String permission) {
|
||||
lorePermission = permission;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ListBuilder<T> withListener(@NotNull ClickType click, @Nullable Function<T, Runnable> runnable, @Nullable String permission) {
|
||||
bukkitPermissions.put(click, permission);
|
||||
listeners.put(click, runnable);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ListBuilder<T> withListener(@NotNull ClickType click, @Nullable Function<T, Runnable> runnable, @Nullable RankPermission permission) {
|
||||
rankPermissions.put(click, permission);
|
||||
listeners.put(click, runnable);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ListBuilder<T> withConfirmationRequired(@NotNull ClickType click) {
|
||||
confirmationRequired.add(click);
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<SCComponent> build() {
|
||||
List<SCComponent> components = new ArrayList<>();
|
||||
for (int i = 0; i < elements.size() && i < slots.size(); i++) {
|
||||
T t = elements.get(i);
|
||||
SCComponentImpl component = new SCComponentImpl();
|
||||
component.setEnabled(enabled);
|
||||
component.item = item.apply(t);
|
||||
component.slot = slots.get(i);
|
||||
ItemMeta itemMeta = component.getItemMeta();
|
||||
if (itemMeta != null) {
|
||||
itemMeta.setDisplayName(displayName.apply(t));
|
||||
List<String> processedLore = lore.stream().map(f -> f.apply(t)).collect(Collectors.toList());
|
||||
itemMeta.setLore(processedLore);
|
||||
if (itemMeta instanceof SkullMeta && owningPlayer != null) {
|
||||
Components.setOwningPlayer(((SkullMeta) itemMeta), owningPlayer.apply(t));
|
||||
}
|
||||
component.setItemMeta(itemMeta);
|
||||
}
|
||||
component.setLorePermission(lorePermission);
|
||||
listeners.forEach((click, fn) -> component.setListener(click, fn.apply(t)));
|
||||
bukkitPermissions.forEach(component::setPermission);
|
||||
rankPermissions.forEach(component::setPermission);
|
||||
confirmationRequired.forEach(component::setConfirmationRequired);
|
||||
components.add(component);
|
||||
}
|
||||
return components;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,19 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import javax.annotation.OverridingMethodsMustInvokeSuper;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RoinujNosde
|
||||
@@ -17,7 +24,7 @@ public abstract class SCFrame {
|
||||
private final SCFrame parent;
|
||||
private final Player viewer;
|
||||
private final Set<SCComponent> components = ConcurrentHashMap.newKeySet();
|
||||
|
||||
|
||||
public SCFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
|
||||
this.parent = parent;
|
||||
this.viewer = viewer;
|
||||
@@ -36,9 +43,27 @@ public abstract class SCFrame {
|
||||
return parent;
|
||||
}
|
||||
|
||||
public abstract int getSize();
|
||||
public int getSize() {
|
||||
return getConfig().getInt("rows", 6) * 9;
|
||||
}
|
||||
|
||||
public abstract void createComponents();
|
||||
@OverridingMethodsMustInvokeSuper
|
||||
public void createComponents() {
|
||||
SCComponent back = new SCComponentImpl.Builder(getConfig(), "back")
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.back.title").build();
|
||||
back.setListener(ClickType.LEFT, () -> InventoryDrawer.open(getParent()));
|
||||
add(back);
|
||||
|
||||
ConfigurationSection decorSection = getConfig().getConfigurationSection("components.decorations");
|
||||
if (decorSection != null) {
|
||||
for (String key : decorSection.getKeys(false)) {
|
||||
addAll(new SCComponentImpl.ListBuilder<>(getConfig(), "decorations." + key)
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey(" ").build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public SCComponent getComponent(int slot) {
|
||||
@@ -51,18 +76,34 @@ public abstract class SCFrame {
|
||||
}
|
||||
|
||||
public void add(@NotNull SCComponent c) {
|
||||
SCComponent old = getComponent(c.getSlot());
|
||||
if (old != null) {
|
||||
components.remove(old);
|
||||
}
|
||||
components.add(c);
|
||||
}
|
||||
|
||||
|
||||
public void addAll(@NotNull Collection<SCComponent> collection) {
|
||||
collection.forEach(this::add);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
components.clear();
|
||||
}
|
||||
|
||||
public void update() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<SCComponent> getComponents() {
|
||||
return components;
|
||||
}
|
||||
|
||||
protected FileConfiguration getConfig() {
|
||||
return SimpleClans.getInstance().getSettingsManager().getConfig(getClass());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other instanceof SCFrame) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
@@ -10,77 +9,46 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class AddAllyFrame extends SCFrame {
|
||||
private final List<Clan> notAllies;
|
||||
private final Paginator paginator;
|
||||
public class AddAllyFrame extends PageableFrame<Clan> {
|
||||
private final Paginator<Clan> paginator;
|
||||
|
||||
public AddAllyFrame(SCFrame parent, Player viewer, Clan subject) {
|
||||
super(parent, viewer);
|
||||
SimpleClans plugin = SimpleClans.getInstance();
|
||||
notAllies = plugin.getClanManager().getClans().stream()
|
||||
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
|
||||
.collect(Collectors.toList());
|
||||
paginator = new Paginator(getSize() - 9, notAllies);
|
||||
}
|
||||
public AddAllyFrame(SCFrame parent, Player viewer, Clan subject) {
|
||||
super(parent, viewer);
|
||||
SimpleClans plugin = SimpleClans.getInstance();
|
||||
List<Clan> notAllies = plugin.getClanManager().getClans().stream()
|
||||
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
|
||||
.collect(Collectors.toList());
|
||||
paginator = new Paginator<>(getPageSize(), notAllies);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
@Override
|
||||
public void createComponents() {
|
||||
super.createComponents();
|
||||
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withLoreKey("gui.add.ally.clan.lore")
|
||||
.withListener(ClickType.LEFT, this::addAlly, RankPermission.ALLY_ADD)
|
||||
.build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
private Runnable addAlly(Clan clan) {
|
||||
return () -> InventoryController.runSubcommand(getViewer(), "ally add", false, clan.getTag());
|
||||
}
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
@Override
|
||||
public Paginator<Clan> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
Clan notRival = notAllies.get(i);
|
||||
SCComponent c = new SCComponentImpl(
|
||||
lang("gui.clanlist.clan.title", getViewer(), notRival.getColorTag(), notRival.getName()),
|
||||
Collections.singletonList(lang("gui.add.ally.clan.lore", getViewer())), XMaterial.CYAN_BANNER,
|
||||
slot);
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.add.ally.title", getViewer());
|
||||
}
|
||||
|
||||
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
|
||||
"ally add", false, notRival.getTag()));
|
||||
c.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.add.ally.title",getViewer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 6 * 9;
|
||||
}
|
||||
}
|
||||
+30
-51
@@ -1,23 +1,27 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Helper;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Rank;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class AddPermissionFrame extends SCFrame {
|
||||
private final String[] availablePermissions;
|
||||
private final Paginator paginator;
|
||||
public class AddPermissionFrame extends PageableFrame<String> {
|
||||
private final List<String> availablePermissions;
|
||||
private final Paginator<String> paginator;
|
||||
private final Rank rank;
|
||||
|
||||
public AddPermissionFrame(SCFrame parent, Player viewer, Rank rank) {
|
||||
@@ -25,63 +29,38 @@ public class AddPermissionFrame extends SCFrame {
|
||||
this.rank = rank;
|
||||
Set<String> rankPerms = rank.getPermissions();
|
||||
availablePermissions = Arrays.stream(Helper.fromPermissionArray()).filter(p -> !rankPerms.contains(p))
|
||||
.toArray(String[]::new);
|
||||
paginator = new Paginator(getSize() - 9, availablePermissions.length);
|
||||
.collect(Collectors.toList());
|
||||
paginator = new Paginator<>(getPageSize(), availablePermissions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
|
||||
String permission = availablePermissions[i];
|
||||
|
||||
SCComponent c = new SCComponentImpl(
|
||||
lang("gui.add.permission.permission.title",getViewer(), permission),
|
||||
Collections.singletonList(lang("gui.add.permission.permission.lore",getViewer())),
|
||||
XMaterial.PAPER, slot);
|
||||
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
|
||||
"rank permissions add", true, rank.getName(), permission));
|
||||
c.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
super.createComponents();
|
||||
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.add.permission.permission.title", p -> p)
|
||||
.withLoreKey("gui.add.permission.permission.lore")
|
||||
.withListener(ClickType.LEFT, this::addPermission, "simpleclans.leader.rank.permissions.add")
|
||||
.build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
private Runnable addPermission(String permission) {
|
||||
return () -> {
|
||||
availablePermissions.remove(permission);
|
||||
InventoryController.runSubcommand(getViewer(), "rank permissions add", true,
|
||||
rank.getName(), permission);
|
||||
};
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
@Override
|
||||
public Paginator<String> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.add.permission.title",getViewer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 3 * 9;
|
||||
return lang("gui.add.permission.title", getViewer());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
@@ -10,79 +9,45 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class AddRivalFrame extends SCFrame {
|
||||
public class AddRivalFrame extends PageableFrame<Clan> {
|
||||
|
||||
private final List<Clan> notRivals;
|
||||
private final Paginator paginator;
|
||||
private final Paginator<Clan> paginator;
|
||||
|
||||
public AddRivalFrame(SCFrame parent, Player viewer, Clan subject) {
|
||||
super(parent, viewer);
|
||||
SimpleClans plugin = SimpleClans.getInstance();
|
||||
notRivals = plugin.getClanManager().getClans().stream()
|
||||
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
|
||||
.collect(Collectors.toList());
|
||||
paginator = new Paginator(getSize() - 9, notRivals.size());
|
||||
}
|
||||
public AddRivalFrame(SCFrame parent, Player viewer, Clan subject) {
|
||||
super(parent, viewer);
|
||||
SimpleClans plugin = SimpleClans.getInstance();
|
||||
List<Clan> notRivals = plugin.getClanManager().getClans().stream().filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag())).collect(Collectors.toList());
|
||||
paginator = new Paginator<>(getPageSize(), notRivals);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
@Override
|
||||
public void createComponents() {
|
||||
super.createComponents();
|
||||
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
|
||||
.withLoreKey("gui.add.rival.clan.lore")
|
||||
.withListener(ClickType.LEFT, this::addRival, RankPermission.RIVAL_ADD)
|
||||
.withConfirmationRequired(ClickType.LEFT).build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
private Runnable addRival(Clan clan) {
|
||||
return () -> InventoryController.runSubcommand(getViewer(), "rival add", false, clan.getTag());
|
||||
}
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
@Override
|
||||
public Paginator<Clan> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
Clan notRival = notRivals.get(i);
|
||||
SCComponent c = new SCComponentImpl(
|
||||
lang("gui.clanlist.clan.title",getViewer(), notRival.getColorTag(), notRival.getName()),
|
||||
Collections.singletonList(lang("gui.add.rival.clan.lore", getViewer())), XMaterial.RED_BANNER,
|
||||
slot);
|
||||
|
||||
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
|
||||
"rival add", false, notRival.getTag()));
|
||||
c.setConfirmationRequired(ClickType.LEFT);
|
||||
c.setPermission(ClickType.LEFT, RankPermission.RIVAL_ADD);
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.add.rival.title",getViewer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 6 * 9;
|
||||
}
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.add.rival.title", getViewer());
|
||||
}
|
||||
}
|
||||
@@ -1,94 +1,64 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class AlliesFrame extends SCFrame {
|
||||
private final SimpleClans plugin = SimpleClans.getInstance();
|
||||
private final Paginator paginator;
|
||||
private final List<String> allies;
|
||||
private final Clan subject;
|
||||
public class AlliesFrame extends PageableFrame<Clan> {
|
||||
private final Paginator<Clan> paginator;
|
||||
private final Clan subject;
|
||||
|
||||
public AlliesFrame(Player viewer, SCFrame parent, Clan subject) {
|
||||
super(parent, viewer);
|
||||
this.subject = subject;
|
||||
allies = subject.getAllies();
|
||||
paginator = new Paginator(getSize() - 9, allies.size());
|
||||
}
|
||||
public AlliesFrame(Player viewer, SCFrame parent, Clan subject) {
|
||||
super(parent, viewer);
|
||||
this.subject = subject;
|
||||
ClanManager manager = SimpleClans.getInstance().getClanManager();
|
||||
List<Clan> allies = subject.getAllies().stream().map(manager::getClan).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
paginator = new Paginator<>(getPageSize(), allies);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 4 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
@Override
|
||||
public void createComponents() {
|
||||
super.createComponents();
|
||||
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
SCComponent add = new SCComponentImpl.Builder(getConfig(), "add")
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.allies.add.title")
|
||||
.build();
|
||||
add.setVerifiedOnly(ClickType.LEFT);
|
||||
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddAllyFrame(this, getViewer(), subject)));
|
||||
add.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
|
||||
add(add);
|
||||
|
||||
SCComponent add = new SCComponentImpl(lang("gui.allies.add.title",getViewer()), null,
|
||||
XMaterial.CYAN_WOOL, 4);
|
||||
add.setVerifiedOnly(ClickType.LEFT);
|
||||
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddAllyFrame(this, getViewer(), subject)));
|
||||
add.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
|
||||
add(add);
|
||||
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
|
||||
.withLoreKey("gui.allies.clan.lore")
|
||||
.withListener(ClickType.RIGHT, (clan) -> () -> InventoryController.runSubcommand(getViewer(),
|
||||
"ally remove", false, clan.getTag()), RankPermission.ALLY_REMOVE)
|
||||
.build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
@Override
|
||||
public Paginator<Clan> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
|
||||
Clan clan = plugin.getClanManager().getClan(allies.get(i));
|
||||
if (clan == null)
|
||||
continue;
|
||||
SCComponent c = new SCComponentImpl(
|
||||
lang("gui.clanlist.clan.title",getViewer(), clan.getColorTag(), clan.getName()),
|
||||
Collections.singletonList(lang("gui.allies.clan.lore",getViewer())), XMaterial.CYAN_BANNER, slot);
|
||||
c.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
|
||||
"ally remove", false, clan.getTag()));
|
||||
c.setPermission(ClickType.RIGHT, RankPermission.ALLY_REMOVE);
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.allies.title",getViewer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 6 * 9;
|
||||
}
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.allies.title", getViewer());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,31 +1,28 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SHOW_UNVERIFIED_ON_LIST;
|
||||
|
||||
public class ClanListFrame extends SCFrame {
|
||||
public class ClanListFrame extends PageableFrame<Clan> {
|
||||
private final List<Clan> clans;
|
||||
private final Paginator paginator;
|
||||
private final Paginator<Clan> paginator;
|
||||
private final RankingNumberResolver<Clan, BigDecimal> rankingResolver;
|
||||
|
||||
public ClanListFrame(SCFrame parent, Player viewer) {
|
||||
@@ -34,8 +31,8 @@ public class ClanListFrame extends SCFrame {
|
||||
SettingsManager sm = plugin.getSettingsManager();
|
||||
clans = plugin.getClanManager().getClans().stream()
|
||||
.filter(clan -> clan.isVerified() || sm.is(SHOW_UNVERIFIED_ON_LIST)).collect(Collectors.toList());
|
||||
paginator = new Paginator(getSize() - 9, clans);
|
||||
plugin.getClanManager().sortClansByKDR(clans);
|
||||
paginator = new Paginator<>(getPageSize(), clans);
|
||||
|
||||
rankingResolver = new RankingNumberResolver<>(clans, c -> KDRFormat.toBigDecimal(c.getTotalKDR()), false,
|
||||
sm.getRankingType());
|
||||
@@ -43,57 +40,26 @@ public class ClanListFrame extends SCFrame {
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
Clan clan = clans.get(i);
|
||||
ItemStack banner = clan.getBanner() != null ? clan.getBanner() : XMaterial.BLACK_BANNER.parseItem();
|
||||
SCComponent c = new SCComponentImpl(
|
||||
lang("gui.clanlist.clan.title", getViewer(), clan.getColorTag(), clan.getName()),
|
||||
Arrays.asList(lang("gui.clanlist.clan.lore.position", getViewer(),
|
||||
rankingResolver.getRankingNumber(clan)),
|
||||
lang("gui.clanlist.clan.lore.kdr", getViewer(), KDRFormat.format(clan.getTotalKDR())),
|
||||
lang("gui.clanlist.clan.lore.members", getViewer(), clan.getMembers().size())),
|
||||
banner, slot);
|
||||
c.setLorePermission("simpleclans.anyone.list");
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
super.createComponents();
|
||||
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withItem(Clan::getBanner)
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
|
||||
.withLoreKey("gui.clanlist.clan.lore.position", rankingResolver::getRankingNumber)
|
||||
.withLoreKey("gui.clanlist.clan.lore.kdr", clan -> KDRFormat.format(clan.getTotalKDR()))
|
||||
.withLoreKey("gui.clanlist.clan.lore.members", clan -> clan.getMembers().size())
|
||||
.withLorePermission("simpleclans.anyone.list").build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
@Override
|
||||
public Paginator<Clan> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.clanlist.title",getViewer(), clans.size());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 6 * 9;
|
||||
return lang("gui.clanlist.title", getViewer(), clans.size());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -147,6 +148,7 @@ public class Components {
|
||||
return c;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static SCComponent getBackComponent(@Nullable SCFrame parent, int slot, Player viewer) {
|
||||
SCComponent back = new SCComponentImpl(lang("gui.back.title", viewer), null,
|
||||
XMaterial.ARROW, slot);
|
||||
@@ -154,11 +156,13 @@ public class Components {
|
||||
return back;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static SCComponent getPanelComponent(int slot) {
|
||||
return new SCComponentImpl(" ", null, XMaterial.GRAY_STAINED_GLASS_PANE, slot);
|
||||
}
|
||||
|
||||
public static @NotNull SCComponent getPreviousPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator paginator, @NotNull Player viewer) {
|
||||
@Deprecated
|
||||
public static @NotNull SCComponent getPreviousPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator<?> paginator, @NotNull Player viewer) {
|
||||
if (!paginator.hasPreviousPage()) {
|
||||
return getPanelComponent(slot);
|
||||
}
|
||||
@@ -168,7 +172,8 @@ public class Components {
|
||||
return c;
|
||||
}
|
||||
|
||||
public static @NotNull SCComponent getNextPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator paginator, @NotNull Player viewer) {
|
||||
@Deprecated
|
||||
public static @NotNull SCComponent getNextPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator<?> paginator, @NotNull Player viewer) {
|
||||
if (!paginator.hasNextPage()) {
|
||||
return getPanelComponent(slot);
|
||||
}
|
||||
@@ -187,18 +192,23 @@ public class Components {
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void setOwningPlayer(@NotNull ItemStack item, @NotNull OfflinePlayer player) {
|
||||
SkullMeta itemMeta = (SkullMeta) item.getItemMeta();
|
||||
if (itemMeta == null || player.getName() == null) {
|
||||
if (player.getName() == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
itemMeta.setOwningPlayer(player);
|
||||
} catch (NoSuchMethodError e) {
|
||||
itemMeta.setOwner(player.getName());
|
||||
ItemMeta itemMeta = item.getItemMeta();
|
||||
if (itemMeta instanceof SkullMeta) {
|
||||
setOwningPlayer((SkullMeta) itemMeta, player);
|
||||
item.setItemMeta(itemMeta);
|
||||
}
|
||||
}
|
||||
|
||||
item.setItemMeta(itemMeta);
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void setOwningPlayer(@NotNull SkullMeta skullMeta, @NotNull OfflinePlayer player) {
|
||||
try {
|
||||
skullMeta.setOwningPlayer(player);
|
||||
} catch (NoSuchMethodError e) {
|
||||
skullMeta.setOwner(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,9 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -17,83 +13,63 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class CoordsFrame extends SCFrame {
|
||||
public class CoordsFrame extends PageableFrame<ClanPlayer> {
|
||||
|
||||
private final List<ClanPlayer> allMembers;
|
||||
private final Paginator paginator;
|
||||
private final List<ClanPlayer> allMembers;
|
||||
private final Paginator<ClanPlayer> paginator;
|
||||
|
||||
public CoordsFrame(Player viewer, SCFrame parent, Clan subject) {
|
||||
super(parent, viewer);
|
||||
allMembers = VanishUtils.getNonVanished(getViewer(), subject);
|
||||
allMembers.sort((cp1, cp2) -> Boolean.compare(cp1.isLeader(), cp2.isLeader()));
|
||||
public CoordsFrame(Player viewer, SCFrame parent, Clan subject) {
|
||||
super(parent, viewer);
|
||||
allMembers = VanishUtils.getNonVanished(getViewer(), subject);
|
||||
allMembers.sort((cp1, cp2) -> Boolean.compare(cp1.isLeader(), cp2.isLeader()));
|
||||
|
||||
paginator = new Paginator(getSize() - 9, allMembers);
|
||||
}
|
||||
paginator = new Paginator<>(getPageSize(), allMembers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
@Override
|
||||
public void createComponents() {
|
||||
super.createComponents();
|
||||
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.playerdetails.player.title", ClanPlayer::getName)
|
||||
.withLoreKey("gui.coords.player.lore.distance", cp -> {
|
||||
Location cpLoc = Objects.requireNonNull(cp.toPlayer()).getLocation();
|
||||
return (int) Math.ceil(cpLoc.toVector().distance(getViewer().getLocation().toVector()));
|
||||
}).withLoreKey("gui.coords.player.lore.coords", this::getBlocks)
|
||||
.withLoreKey("gui.coords.player.lore.world", cp ->
|
||||
Objects.requireNonNull(cp.toPlayer()).getWorld().getName())
|
||||
.withOwningPlayer(ClanPlayer::toPlayer)
|
||||
.withListener(ClickType.LEFT, cp -> () -> {
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
|
||||
InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer));
|
||||
}, RankPermission.COORDS).build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
ClanPlayer cp = allMembers.get(i);
|
||||
Location cpLoc = Objects.requireNonNull(cp.toPlayer()).getLocation();
|
||||
int distance = (int) Math.ceil(cpLoc.toVector().distance(getViewer().getLocation().toVector()));
|
||||
private int[] getBlocks(ClanPlayer cp) {
|
||||
int[] blocks = new int[3];
|
||||
Location location = Objects.requireNonNull(cp.toPlayer()).getLocation();
|
||||
blocks[0] = location.getBlockX();
|
||||
blocks[1] = location.getBlockY();
|
||||
blocks[2] = location.getBlockZ();
|
||||
return blocks;
|
||||
}
|
||||
|
||||
SCComponent c = new SCComponentImpl(lang("gui.playerdetails.player.title",getViewer(), cp.getName()),
|
||||
Arrays.asList(lang("gui.coords.player.lore.distance",getViewer(), distance),
|
||||
lang("gui.coords.player.lore.coords",getViewer(), cpLoc.getBlockX(),
|
||||
cpLoc.getBlockY(), cpLoc.getBlockZ()),
|
||||
lang("gui.coords.player.lore.world",getViewer(), Objects.requireNonNull(cpLoc.getWorld()).getName())),
|
||||
XMaterial.PLAYER_HEAD, slot);
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
|
||||
Components.setOwningPlayer(c.getItem(), offlinePlayer);
|
||||
c.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer)));
|
||||
c.setLorePermission(RankPermission.COORDS);
|
||||
add(c);
|
||||
slot++;
|
||||
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public Paginator<ClanPlayer> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
@NotNull
|
||||
public String getTitle() {
|
||||
return lang("gui.coords.title", getViewer());
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String getTitle() {
|
||||
return lang("gui.coords.title",getViewer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 6 * 9;
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,20 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -21,87 +22,53 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_INVITE_PRICE;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_PURCHASE_CLAN_INVITE;
|
||||
|
||||
public class InviteFrame extends SCFrame {
|
||||
public class InviteFrame extends PageableFrame<Player> {
|
||||
|
||||
private final Paginator paginator;
|
||||
private final SimpleClans plugin;
|
||||
private final List<Player> players;
|
||||
private final Paginator<Player> paginator;
|
||||
private final SimpleClans plugin;
|
||||
|
||||
public InviteFrame(SCFrame parent, Player viewer) {
|
||||
super(parent, viewer);
|
||||
this.plugin = SimpleClans.getInstance();
|
||||
ClanManager cm = plugin.getClanManager();
|
||||
players = plugin.getServer().getOnlinePlayers().stream().filter(p -> cm.getClanPlayer(p) == null)
|
||||
.collect(Collectors.toList());
|
||||
paginator = new Paginator(getSize() - 9, players.size());
|
||||
public InviteFrame(SCFrame parent, Player viewer) {
|
||||
super(parent, viewer);
|
||||
this.plugin = SimpleClans.getInstance();
|
||||
ClanManager cm = plugin.getClanManager();
|
||||
List<Player> players = plugin.getServer().getOnlinePlayers().stream().filter(p -> cm.getClanPlayer(p) == null)
|
||||
.collect(Collectors.toList());
|
||||
paginator = new Paginator<>(getPageSize(), players);
|
||||
}
|
||||
|
||||
}
|
||||
@Override
|
||||
public void createComponents() {
|
||||
super.createComponents();
|
||||
SettingsManager settings = plugin.getSettingsManager();
|
||||
double price = settings.is(ECONOMY_PURCHASE_CLAN_INVITE) ? settings.getDouble(ECONOMY_INVITE_PRICE) : 0;
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
addHeader();
|
||||
ListBuilder<Player> builder = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.invite.player.title", Player::getName)
|
||||
.withOwningPlayer(p -> Bukkit.getOfflinePlayer(p.getUniqueId()))
|
||||
.withListener(ClickType.LEFT, this::invite, RankPermission.INVITE);
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
if (price != 0) {
|
||||
String formattedPrice = CurrencyFormat.format(price);
|
||||
builder.withLoreKey("gui.invite.player.price.lore", p -> formattedPrice);
|
||||
}
|
||||
builder.withLoreKey("gui.invite.player.lore")
|
||||
;
|
||||
|
||||
Player player = players.get(i);
|
||||
SCComponent c = createPlayerComponent(player, slot);
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private SCComponent createPlayerComponent(@NotNull Player player, int slot) {
|
||||
double price = plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_INVITE) ? plugin.getSettingsManager().getDouble(ECONOMY_INVITE_PRICE) : 0;
|
||||
List<String> lore = new ArrayList<>();
|
||||
if (price != 0) lore.add(lang("gui.invite.player.price.lore", getViewer(), CurrencyFormat.format(price)));
|
||||
lore.add(lang("gui.invite.player.lore", getViewer()));
|
||||
private Runnable invite(Player player) {
|
||||
return () -> InventoryController.runSubcommand(getViewer(), "invite", false, player.getName());
|
||||
}
|
||||
|
||||
SCComponent c = new SCComponentImpl(
|
||||
lang("gui.invite.player.title", getViewer(), player.getName()), lore, XMaterial.PLAYER_HEAD, slot);
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.getUniqueId());
|
||||
Components.setOwningPlayer(c.getItem(), offlinePlayer);
|
||||
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(), "invite", false, player.getName()));
|
||||
c.setPermission(ClickType.LEFT, RankPermission.INVITE);
|
||||
return c;
|
||||
}
|
||||
@Override
|
||||
public Paginator<Player> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
public void addHeader() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.invite.title", getViewer());
|
||||
}
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.invite.title",getViewer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 3 * 9;
|
||||
}
|
||||
}
|
||||
+31
-65
@@ -1,38 +1,32 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class LanguageSelectorFrame extends SCFrame {
|
||||
public class LanguageSelectorFrame extends PageableFrame<Locale> {
|
||||
|
||||
private final ClanPlayer clanPlayer;
|
||||
private final SimpleClans plugin;
|
||||
private final Paginator paginator;
|
||||
private final List<Locale> languages;
|
||||
private final Paginator<Locale> paginator;
|
||||
|
||||
public LanguageSelectorFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
|
||||
super(parent, viewer);
|
||||
plugin = SimpleClans.getInstance();
|
||||
clanPlayer = plugin.getClanManager().getCreateClanPlayer(viewer.getUniqueId());
|
||||
languages = LanguageResource.getAvailableLocales();
|
||||
paginator = new Paginator(getSize() - 9, languages);
|
||||
List<Locale> languages = LanguageResource.getAvailableLocales();
|
||||
paginator = new Paginator<>(getPageSize(), languages);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,44 +38,38 @@ public class LanguageSelectorFrame extends SCFrame {
|
||||
return lang("gui.languageselector.title", getViewer(), locale.toLanguageTag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 3 * 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
addHeader();
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
Locale locale = languages.get(i);
|
||||
addLanguage(slot, locale);
|
||||
slot++;
|
||||
}
|
||||
super.createComponents();
|
||||
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.languageselector.language.title",
|
||||
loc -> loc.toLanguageTag().replace("-", "_"))
|
||||
.withLoreKey("gui.languageselector.language.lore.left.click")
|
||||
.withLoreKey("gui.languageselector.language.lore.translation.status", LanguageResource::getTranslationStatus)
|
||||
.withLoreLine(loc -> !loc.equals(Locale.ENGLISH)
|
||||
? lang("gui.languageselector.language.lore.right.click", getViewer()) : "")
|
||||
.withListener(ClickType.LEFT, this::setLocale, (String) null)
|
||||
.withListener(ClickType.RIGHT, this::translate, (String) null).build();
|
||||
addAll(list);
|
||||
|
||||
}
|
||||
|
||||
private void addLanguage(int slot, Locale locale) {
|
||||
SCComponent c = new SCComponentImpl.Builder(XMaterial.PAPER)
|
||||
.withDisplayName(lang("gui.languageselector.language.title", getViewer(), locale.toLanguageTag().replace("-", "_")))
|
||||
.withSlot(slot).withLore(
|
||||
Arrays.asList(lang("gui.languageselector.language.lore.left.click", getViewer()),
|
||||
lang("gui.languageselector.language.lore.translation.status", getViewer(),
|
||||
LanguageResource.getTranslationStatus(locale)),
|
||||
!locale.equals(Locale.ENGLISH) ?
|
||||
lang("gui.languageselector.language.lore.right.click", getViewer()) : ""))
|
||||
.build();
|
||||
c.setListener(ClickType.LEFT, () -> {
|
||||
private Runnable setLocale(Locale locale) {
|
||||
return () -> {
|
||||
clanPlayer.setLocale(locale);
|
||||
plugin.getStorageManager().updateClanPlayer(clanPlayer);
|
||||
InventoryDrawer.open(this);
|
||||
});
|
||||
if (!locale.equals(Locale.ENGLISH)) {
|
||||
c.setListener(ClickType.RIGHT, () -> {
|
||||
};
|
||||
}
|
||||
|
||||
private Runnable translate(Locale locale) {
|
||||
return () -> {
|
||||
if (!locale.equals(Locale.ENGLISH)) {
|
||||
getViewer().sendMessage(lang("click.to.help.translating", getViewer(), getCrowdinLink(locale)));
|
||||
getViewer().closeInventory();
|
||||
});
|
||||
}
|
||||
add(c);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private String getCrowdinLink(@NotNull Locale locale) {
|
||||
@@ -97,31 +85,9 @@ public class LanguageSelectorFrame extends SCFrame {
|
||||
return base + locale.toLanguageTag();
|
||||
}
|
||||
|
||||
public void addHeader() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
@Override
|
||||
public Paginator<Locale> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
}
|
||||
+25
-55
@@ -1,30 +1,28 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class LeaderboardFrame extends SCFrame {
|
||||
public class LeaderboardFrame extends PageableFrame<ClanPlayer> {
|
||||
|
||||
private final Paginator paginator;
|
||||
private final Paginator<ClanPlayer> paginator;
|
||||
private final List<ClanPlayer> clanPlayers;
|
||||
private final RankingNumberResolver<ClanPlayer, BigDecimal> rankingResolver;
|
||||
|
||||
@@ -36,58 +34,35 @@ public class LeaderboardFrame extends SCFrame {
|
||||
|
||||
rankingResolver = new RankingNumberResolver<>(clanPlayers, c -> KDRFormat.toBigDecimal(c.getKDR()), false,
|
||||
plugin.getSettingsManager().getRankingType());
|
||||
paginator = new Paginator(getSize() - 9, this.clanPlayers);
|
||||
paginator = new Paginator<>(getPageSize(), this.clanPlayers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
ClanPlayer cp = clanPlayers.get(i);
|
||||
SCComponent c = new SCComponentImpl(
|
||||
lang("gui.leaderboard.player.title", getViewer(),
|
||||
rankingResolver.getRankingNumber(cp), cp.getName()),
|
||||
Arrays.asList(
|
||||
cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan", getViewer())
|
||||
: lang("gui.playerdetails.player.lore.clan", getViewer(),
|
||||
cp.getClan().getColorTag(), cp.getClan().getName()),
|
||||
lang("gui.playerdetails.player.lore.kdr", getViewer(), KDRFormat.format(cp.getKDR())),
|
||||
lang("gui.playerdetails.player.lore.last.seen", getViewer(), cp.getLastSeenString(getViewer()))),
|
||||
XMaterial.PLAYER_HEAD, slot);
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
|
||||
Components.setOwningPlayer(c.getItem(), offlinePlayer);
|
||||
c.setListener(ClickType.LEFT,
|
||||
() -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer)));
|
||||
c.setLorePermission("simpleclans.anyone.leaderboard");
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
super.createComponents();
|
||||
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.leaderboard.player.title", rankingResolver::getRankingNumber, ClanPlayer::getName)
|
||||
.withListener(ClickType.LEFT, this::openDetails, (String) null)
|
||||
.withLorePermission("simpleclans.anyone.leaderboard")
|
||||
.withLoreLine(cp ->
|
||||
cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan", getViewer())
|
||||
: lang("gui.playerdetails.player.lore.clan", getViewer()
|
||||
))
|
||||
.withLoreKey("gui.playerdetails.player.lore.kdr", cp -> KDRFormat.format(cp.getKDR()))
|
||||
.withLoreKey("gui.playerdetails.player.lore.last.seen", cp -> cp.getLastSeenString(getViewer()))
|
||||
.withOwningPlayer(cp -> Bukkit.getOfflinePlayer(cp.getUniqueId())).build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
private Runnable openDetails(ClanPlayer cp) {
|
||||
return () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this,
|
||||
Bukkit.getOfflinePlayer(cp.getUniqueId())));
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
@Override
|
||||
public Paginator<ClanPlayer> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,9 +70,4 @@ public class LeaderboardFrame extends SCFrame {
|
||||
return lang("gui.leaderboard.title", getViewer(), clanPlayers.size());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 6 * 9;
|
||||
}
|
||||
|
||||
}
|
||||
+40
-66
@@ -1,6 +1,5 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Rank;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
|
||||
@@ -8,80 +7,55 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
public class PermissionsFrame extends SCFrame {
|
||||
private final Rank rank;
|
||||
private final Paginator paginator;
|
||||
private final String[] permissions;
|
||||
public class PermissionsFrame extends PageableFrame<String> {
|
||||
private final Rank rank;
|
||||
private final Paginator<String> paginator;
|
||||
|
||||
public PermissionsFrame(SCFrame parent, Player viewer, Rank rank) {
|
||||
super(parent, viewer);
|
||||
this.rank = rank;
|
||||
permissions = rank.getPermissions().toArray(new String[0]);
|
||||
paginator = new Paginator(getSize() - 9, permissions.length);
|
||||
}
|
||||
public PermissionsFrame(SCFrame parent, Player viewer, Rank rank) {
|
||||
super(parent, viewer);
|
||||
this.rank = rank;
|
||||
paginator = new Paginator<>(getPageSize(), new ArrayList<>(rank.getPermissions()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 2 || slot == 4 || slot == 6 || slot == 7)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
@Override
|
||||
public void createComponents() {
|
||||
super.createComponents();
|
||||
|
||||
add(Components.getBackComponent(getParent(), 2, getViewer()));
|
||||
SCComponent add = new SCComponentImpl.Builder(getConfig(), "add")
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.permissions.add.title")
|
||||
.build();
|
||||
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddPermissionFrame(this, getViewer(), rank)));
|
||||
add.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
|
||||
add(add);
|
||||
|
||||
SCComponent add = new SCComponentImpl(lang("gui.permissions.add.title",getViewer()), null, XMaterial.WHITE_WOOL,
|
||||
4);
|
||||
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddPermissionFrame(this, getViewer(), rank)));
|
||||
add.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
|
||||
add(add);
|
||||
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.permissions.permission.title", p -> p)
|
||||
.withLoreKey("gui.permissions.permission.lore")
|
||||
.withListener(ClickType.RIGHT, this::removePermission, "simpleclans.leader.rank.permissions.remove")
|
||||
.build();
|
||||
addAll(list);
|
||||
}
|
||||
|
||||
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
|
||||
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
|
||||
private Runnable removePermission(String permission) {
|
||||
return () -> InventoryController.runSubcommand(getViewer(),
|
||||
"rank permissions remove", true, rank.getName(), permission);
|
||||
}
|
||||
|
||||
int slot = 9;
|
||||
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
|
||||
@Override
|
||||
public Paginator<String> getPaginator() {
|
||||
return paginator;
|
||||
}
|
||||
|
||||
String permission = permissions[i];
|
||||
|
||||
SCComponent c = new SCComponentImpl(lang("gui.permissions.permission.title",getViewer(), permission),
|
||||
Collections.singletonList(lang("gui.permissions.permission.lore",getViewer())), XMaterial.PAPER, slot);
|
||||
c.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
|
||||
"rank permissions remove", true, rank.getName(), permission));
|
||||
c.setPermission(ClickType.RIGHT, "simpleclans.leader.rank.permissions.remove");
|
||||
add(c);
|
||||
slot++;
|
||||
}
|
||||
}
|
||||
|
||||
private void previousPage() {
|
||||
if (paginator.previousPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void nextPage() {
|
||||
if (paginator.nextPage()) {
|
||||
updateFrame();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFrame() {
|
||||
InventoryDrawer.open(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.permissions.title",getViewer(), rank.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 3 * 9;
|
||||
}
|
||||
@Override
|
||||
public @NotNull String getTitle() {
|
||||
return lang("gui.permissions.title", getViewer(), rank.getName());
|
||||
}
|
||||
|
||||
}
|
||||
+19
-35
@@ -1,10 +1,8 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.ui.frames.staff;
|
||||
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.Components;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -25,20 +23,9 @@ public class StaffFrame extends SCFrame {
|
||||
return lang("gui.staff.title", getViewer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 3 * 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createComponents() {
|
||||
for (int slot = 0; slot < 9; slot++) {
|
||||
if (slot == 4)
|
||||
continue;
|
||||
add(Components.getPanelComponent(slot));
|
||||
}
|
||||
|
||||
add(Components.getBackComponent(getParent(), 4, getViewer()));
|
||||
super.createComponents();
|
||||
addClans();
|
||||
addPlayers();
|
||||
addGlobalFf();
|
||||
@@ -46,10 +33,11 @@ public class StaffFrame extends SCFrame {
|
||||
}
|
||||
|
||||
private void addClans() {
|
||||
SCComponent clanList = new SCComponentImpl.Builder(XMaterial.PURPLE_BANNER)
|
||||
.withDisplayName(lang("gui.main.clan.list.title", getViewer())).withSlot(9)
|
||||
.withLoreLine(lang("gui.staff.clan.list.lore.left.click", getViewer()))
|
||||
.withLoreLine(lang("gui.staff.clan.list.lore.right.click", getViewer())).build();
|
||||
SCComponent clanList = new SCComponentImpl.Builder(getConfig(), "clans")
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.main.clan.list.title")
|
||||
.withLoreKey("gui.staff.clan.list.lore.left.click")
|
||||
.withLoreKey("gui.staff.clan.list.lore.right.click").build();
|
||||
clanList.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new ClanListFrame(this, getViewer(),
|
||||
Type.ALL, null)));
|
||||
clanList.setListener(ClickType.RIGHT, () -> InventoryDrawer.open(new ClanListFrame(this, getViewer(),
|
||||
@@ -58,19 +46,19 @@ public class StaffFrame extends SCFrame {
|
||||
}
|
||||
|
||||
private void addPlayers() {
|
||||
SCComponent players = new SCComponentImpl.Builder(XMaterial.WHITE_BANNER)
|
||||
.withDisplayName(lang("gui.staff.player.list.title", getViewer())).withSlot(10)
|
||||
.withLoreLine(lang("gui.staff.player.list.lore.left.click", getViewer()))
|
||||
.withLoreLine(lang("gui.staff.player.list.lore.right.click", getViewer())).build();
|
||||
SCComponent players = new SCComponentImpl.Builder(getConfig(), "players")
|
||||
.withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.staff.player.list.title")
|
||||
.withLoreKey("gui.staff.player.list.lore.left.click")
|
||||
.withLoreKey("gui.staff.player.list.lore.right.click").build();
|
||||
players.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerListFrame(getViewer(), this, false)));
|
||||
players.setListener(ClickType.RIGHT, () -> InventoryDrawer.open(new PlayerListFrame(getViewer(), this, true)));
|
||||
add(players);
|
||||
}
|
||||
|
||||
private void addReload() {
|
||||
SCComponent reload = new SCComponentImpl.Builder(XMaterial.SPAWNER)
|
||||
.withDisplayName(lang("gui.staff.reload.title", getViewer())).withSlot(17)
|
||||
.withLoreLine(lang("gui.staff.reload.lore", getViewer())).build();
|
||||
SCComponent reload = new SCComponentImpl.Builder(getConfig(), "reload").withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.staff.reload.title").withLoreKey("gui.staff.reload.lore").build();
|
||||
reload.setPermission(ClickType.LEFT, "simpleclans.admin.reload");
|
||||
reload.setConfirmationRequired(ClickType.LEFT);
|
||||
reload.setListener(ClickType.LEFT, () ->
|
||||
@@ -82,18 +70,14 @@ public class StaffFrame extends SCFrame {
|
||||
SettingsManager sm = SimpleClans.getInstance().getSettingsManager();
|
||||
boolean globalffAllowed = sm.is(GLOBAL_FRIENDLY_FIRE);
|
||||
String status = globalffAllowed ? lang("allowed", getViewer()) : lang("auto", getViewer());
|
||||
SCComponent globalFf = new SCComponentImpl.Builder(XMaterial.DIAMOND_SWORD).withSlot(12)
|
||||
.withDisplayName(lang("gui.staff.global.ff.title", getViewer()))
|
||||
.withLoreLine(lang("gui.staff.global.ff.lore.status", getViewer(), status))
|
||||
.withLoreLine(lang("gui.staff.global.ff.lore.toggle", getViewer())).build();
|
||||
|
||||
SCComponent globalFf = new SCComponentImpl.Builder(getConfig(), "global_ff").withViewer(getViewer())
|
||||
.withDisplayNameKey("gui.staff.global.ff.title")
|
||||
.withLoreKey("gui.staff.global.ff.lore.status", status)
|
||||
.withLoreKey("gui.staff.global.ff.lore.toggle").build();
|
||||
globalFf.setPermission(ClickType.LEFT, "simpleclans.mod.globalff");
|
||||
globalFf.setListener(ClickType.LEFT, () -> {
|
||||
String arg;
|
||||
if (globalffAllowed) {
|
||||
arg = "auto";
|
||||
} else {
|
||||
arg = "allow";
|
||||
}
|
||||
String arg = globalffAllowed ? "auto" : "allow";
|
||||
InventoryController.runSubcommand(getViewer(), "mod globalff", true, arg);
|
||||
});
|
||||
add(globalFf);
|
||||
|
||||
@@ -2,19 +2,21 @@ package net.sacredlabyrinth.phaed.simpleclans.utils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RoinujNosde
|
||||
*
|
||||
*/
|
||||
public class Paginator {
|
||||
public class Paginator<T> {
|
||||
|
||||
private int currentPage;
|
||||
private final int sizePerPage;
|
||||
private int totalElements;
|
||||
private Collection<?> collection;
|
||||
private List<T> collection;
|
||||
|
||||
public Paginator(int sizePerPage, int totalElements) {
|
||||
if (sizePerPage < 1) {
|
||||
@@ -27,12 +29,17 @@ public class Paginator {
|
||||
this.totalElements = totalElements;
|
||||
}
|
||||
|
||||
public Paginator(int sizePerPage, @NotNull Collection<?> collection) {
|
||||
@Deprecated
|
||||
public Paginator(int sizePerPage, @NotNull Collection<T> collection) {
|
||||
this(sizePerPage, new ArrayList<>(collection));
|
||||
}
|
||||
|
||||
public Paginator(int sizePerPage, @NotNull List<T> list) {
|
||||
if (sizePerPage < 1) {
|
||||
throw new IllegalArgumentException("sizePerPage cannot be less than 1");
|
||||
}
|
||||
this.sizePerPage = sizePerPage;
|
||||
this.collection = collection;
|
||||
this.collection = list;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -81,7 +88,21 @@ public class Paginator {
|
||||
public int getCurrentPage() {
|
||||
return currentPage;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the elements in the current page
|
||||
*
|
||||
* @throws IllegalStateException if the underlining collection is null
|
||||
*/
|
||||
public @NotNull List<T> getCurrentElements() throws IllegalStateException {
|
||||
if (collection == null) {
|
||||
throw new IllegalStateException("the collection is null");
|
||||
}
|
||||
int maxIndex = Math.min(getMaxIndex(), collection.size());
|
||||
return collection.subList(getMinIndex(), maxIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* Increases the page number if there are elements to display
|
||||
*
|
||||
@@ -90,11 +111,11 @@ public class Paginator {
|
||||
* </p>
|
||||
*/
|
||||
public boolean nextPage() {
|
||||
if (!hasNextPage()) {
|
||||
return false;
|
||||
boolean hasNext = hasNextPage();
|
||||
if (hasNext) {
|
||||
currentPage++;
|
||||
}
|
||||
currentPage++;
|
||||
return true;
|
||||
return hasNext;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,11 +133,11 @@ public class Paginator {
|
||||
* </p>
|
||||
*/
|
||||
public boolean previousPage() {
|
||||
if (hasPreviousPage()) {
|
||||
boolean hasPrevious = hasPreviousPage();
|
||||
if (hasPrevious) {
|
||||
currentPage--;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return hasPrevious;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
rows: 6
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29, 30, 31, 32, 33, 34, 35,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
|
||||
material: CYAN_BANNER
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 4, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,24 @@
|
||||
rows: 3
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
|
||||
material: PAPER
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 4, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,27 @@
|
||||
rows: 6
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29, 30, 31, 32, 33, 34, 35,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
|
||||
material: RED_BANNER
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 4, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,31 @@
|
||||
rows: 6
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29, 30, 31, 32, 33, 34, 35,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
|
||||
material: CYAN_BANNER
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
add:
|
||||
enabled: true
|
||||
slot: 4
|
||||
material: CYAN_WOOL
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,27 @@
|
||||
rows: 6
|
||||
components:
|
||||
list:
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29, 30, 31, 32, 33, 34, 35,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
|
||||
material: BLACK_BANNER
|
||||
enabled: true
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
decorations:
|
||||
panels:
|
||||
slots: [0, 1, 3, 4, 5, 8]
|
||||
enabled: true
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,31 @@
|
||||
rows: 6
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29, 30, 31, 32, 33, 34, 35,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
|
||||
material: PLAYER_HEAD
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
add:
|
||||
enabled: true
|
||||
slot: 4
|
||||
material: CYAN_WOOL
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,28 @@
|
||||
rows: 3
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
|
||||
material: PLAYER_HEAD
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
add:
|
||||
enabled: true
|
||||
slot: 4
|
||||
material: CYAN_WOOL
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,24 @@
|
||||
rows: 3
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
|
||||
material: PAPER
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 4, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,27 @@
|
||||
rows: 6
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29, 30, 31, 32, 33, 34, 35,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
|
||||
material: PLAYER_HEAD
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
decorations:
|
||||
panels:
|
||||
slots: [0, 1, 3, 4, 5, 8]
|
||||
enabled: true
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,28 @@
|
||||
rows: 3
|
||||
components:
|
||||
list:
|
||||
enabled: true
|
||||
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
|
||||
material: PAPER
|
||||
next_page:
|
||||
enabled: true
|
||||
slot: 7
|
||||
material: STONE_BUTTON
|
||||
previous_page:
|
||||
enabled: true
|
||||
slot: 6
|
||||
material: STONE_BUTTON
|
||||
back:
|
||||
enabled: true
|
||||
slot: 2
|
||||
material: ARROW
|
||||
add:
|
||||
enabled: true
|
||||
slot: 4
|
||||
material: WHITE_WOOL
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 3, 5, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
@@ -0,0 +1,27 @@
|
||||
rows: 3
|
||||
components:
|
||||
decorations:
|
||||
panels:
|
||||
enabled: true
|
||||
slots: [ 0, 1, 2, 3, 5, 6, 7, 8 ]
|
||||
material: GRAY_STAINED_GLASS_PANE
|
||||
clans:
|
||||
enabled: true
|
||||
material: PURPLE_BANNER
|
||||
slot: 9
|
||||
players:
|
||||
enabled: true
|
||||
material: WHITE_BANNER
|
||||
slot: 10
|
||||
reload:
|
||||
enabled: true
|
||||
material: SPAWNER
|
||||
slot: 17
|
||||
global_ff:
|
||||
enabled: true
|
||||
material: DIAMOND_SWORD
|
||||
slot: 12
|
||||
back:
|
||||
enabled: true
|
||||
slot: 4
|
||||
material: ARROW
|
||||
Reference in new issue
Block a user