mirror of
https://gitlab.com/SamB440/rpgregions-2.git
synced 2025-12-28 19:29:16 +00:00
Add editing fields directly, add showing requirements in GUI
This commit is contained in:
@@ -43,6 +43,6 @@ public class DependencyRequirement extends RegionRequirement {
|
||||
|
||||
@Override
|
||||
public String getText(Player player) {
|
||||
return "regions " + String.join(", ", requiredRegions);
|
||||
return "Regions " + String.join(", ", requiredRegions);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ public class LevelRequirement extends RegionRequirement {
|
||||
|
||||
@Override
|
||||
public String getText(Player player) {
|
||||
return "level " + level;
|
||||
return "Level " + level;
|
||||
}
|
||||
|
||||
public int getLevel() {
|
||||
|
||||
@@ -35,6 +35,6 @@ public class MoneyRequirement extends RegionRequirement {
|
||||
|
||||
@Override
|
||||
public String getText(Player player) {
|
||||
return "money " + money;
|
||||
return "Money " + money;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ public class PlaceholderRequirement extends RegionRequirement {
|
||||
|
||||
@Override
|
||||
public String getText(Player player) {
|
||||
return "placeholder " + placeholder;
|
||||
return "Placeholder " + placeholder;
|
||||
}
|
||||
|
||||
public String getPlaceholder() {
|
||||
|
||||
@@ -114,7 +114,6 @@ public class RPGRegionsCommand extends BaseCommand {
|
||||
@CommandCompletion("@regions")
|
||||
public void onEdit(Player player, ConfiguredRegion configuredRegion) {
|
||||
new EditorGUI(plugin, player, configuredRegion).open();
|
||||
player.sendMessage(ChatColor.YELLOW + "This feature is currently being worked on!");
|
||||
}
|
||||
|
||||
@Subcommand("list|discoveries")
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package net.islandearth.rpgregions.editor;
|
||||
|
||||
import net.islandearth.rpgregions.editor.annotate.EditableField;
|
||||
import net.islandearth.rpgregions.editor.field.EditField;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ClassEditor {
|
||||
|
||||
private final List<EditField> editable = new ArrayList<>();
|
||||
|
||||
public ClassEditor(ConfiguredRegion clazz) {
|
||||
for (Field declaredField : clazz.getClass().getDeclaredFields()) {
|
||||
if (declaredField.getAnnotation(EditableField.class) != null) {
|
||||
editable.add(new EditField(clazz, declaredField));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<EditField> getEditable() {
|
||||
return editable;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package net.islandearth.rpgregions.editor.annotate;
|
||||
|
||||
import net.islandearth.rpgregions.utils.XMaterial;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
public @interface EditableField {
|
||||
|
||||
XMaterial material() default XMaterial.OAK_SIGN;
|
||||
|
||||
String name();
|
||||
|
||||
String description();
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package net.islandearth.rpgregions.editor.field;
|
||||
|
||||
import net.islandearth.rpgregions.editor.annotate.EditableField;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
import net.islandearth.rpgregions.utils.XMaterial;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
public class EditField {
|
||||
|
||||
private final ConfiguredRegion clazz;
|
||||
private final Field field;
|
||||
private final XMaterial material;
|
||||
private final String name;
|
||||
private final String description;
|
||||
|
||||
public EditField(ConfiguredRegion clazz, Field field) {
|
||||
field.setAccessible(true);
|
||||
this.clazz = clazz;
|
||||
this.field = field;
|
||||
EditableField editableField = field.getAnnotation(EditableField.class);
|
||||
this.name = editableField.name();
|
||||
this.material = editableField.material();
|
||||
this.description = editableField.description();
|
||||
}
|
||||
|
||||
public Field getField() {
|
||||
return field;
|
||||
}
|
||||
|
||||
public XMaterial getMaterial() {
|
||||
return material;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public Object getValue() {
|
||||
try {
|
||||
return this.field.get(clazz);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String setValue(Object value) {
|
||||
if (Modifier.isTransient(field.getModifiers())) {
|
||||
return ChatColor.RED + "Field " + field.getName() + " is a non-modifiable field.";
|
||||
}
|
||||
|
||||
try {
|
||||
if (getValue().getClass().isEnum()) {
|
||||
field.set(clazz, Enum.valueOf((Class<Enum>) field.getType(), String.valueOf(value)));
|
||||
} else if (getValue() instanceof Boolean) {
|
||||
field.setBoolean(clazz, (boolean) value);
|
||||
} else {
|
||||
try {
|
||||
field.set(clazz, Integer.valueOf(String.valueOf(value)));
|
||||
} catch (NumberFormatException e2) {
|
||||
try {
|
||||
field.set(clazz, Double.valueOf(String.valueOf(value)));
|
||||
} catch (NumberFormatException e3) {
|
||||
field.set(clazz, field.getType().cast(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ChatColor.GREEN + "Field " + field.getName() + " has been updated with new value " + value;
|
||||
} catch (ReflectiveOperationException e) {
|
||||
return ChatColor.RED + "Could not set field: " + e.getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.command.IconCommand;
|
||||
import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
import net.islandearth.rpgregions.requirements.RegionRequirement;
|
||||
import net.islandearth.rpgregions.translation.Translations;
|
||||
import net.islandearth.rpgregions.utils.ItemStackBuilder;
|
||||
import net.islandearth.rpgregions.utils.StringUtils;
|
||||
@@ -216,6 +217,18 @@ public class DiscoveryGUI extends RPGRegionsGUI {
|
||||
&& hasDiscovered
|
||||
? Translations.TELEPORT.get(player)
|
||||
: null;
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
boolean requirements = true;
|
||||
if (!player.hasPermission("rpgregions.bypassentry") && configuredRegion.getRequirements() != null) {
|
||||
for (RegionRequirement requirement : configuredRegion.getRequirements()) {
|
||||
if (!requirement.meetsRequirements(player)) {
|
||||
requirements = false;
|
||||
stringBuilder.append(ChatColor.RED + "\u2718 " + requirement.getText(player));
|
||||
} else {
|
||||
stringBuilder.append(ChatColor.GREEN + "\u2714 " + requirement.getText(player));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<String> translatedDiscoveredLore = new ArrayList<>();
|
||||
if (configuredRegion.getDiscoveredLore() != null) {
|
||||
@@ -230,12 +243,14 @@ public class DiscoveryGUI extends RPGRegionsGUI {
|
||||
new ItemStackBuilder(configuredRegion.getUndiscoveredIcon())
|
||||
.build();
|
||||
|
||||
boolean finalRequirements = requirements;
|
||||
items.add(new GuiItem(new ItemStackBuilder(item)
|
||||
.withName(colour + configuredRegion.getCustomName())
|
||||
.withLore(lore)
|
||||
.withLore(lore2)
|
||||
.withLore(hint)
|
||||
.withLore(" ")
|
||||
.withLore(stringBuilder.toString())
|
||||
.withLore(teleport)
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build(),
|
||||
@@ -245,7 +260,7 @@ public class DiscoveryGUI extends RPGRegionsGUI {
|
||||
&& player.hasPermission("rpgregions.teleport")
|
||||
&& hasDiscovered) {
|
||||
if (!account.getCooldowns().contains(RPGRegionsAccount.AccountCooldown.TELEPORT)) {
|
||||
if (configuredRegion.getWorld() == null) {
|
||||
if (configuredRegion.getWorld() == null || !finalRequirements) {
|
||||
Translations.CANNOT_TELEPORT.send(player);
|
||||
} else {
|
||||
if (configuredRegion.getLocation() != null) PaperLib.teleportAsync(player, configuredRegion.getLocation());
|
||||
|
||||
@@ -2,128 +2,255 @@ package net.islandearth.rpgregions.gui;
|
||||
|
||||
import com.github.stefvanschie.inventoryframework.Gui;
|
||||
import com.github.stefvanschie.inventoryframework.GuiItem;
|
||||
import com.github.stefvanschie.inventoryframework.pane.OutlinePane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.PaginatedPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.StaticPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.util.Mask;
|
||||
import me.arcaniax.hdb.api.HeadDatabaseAPI;
|
||||
import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.editor.ClassEditor;
|
||||
import net.islandearth.rpgregions.editor.field.EditField;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
import net.islandearth.rpgregions.translation.Translations;
|
||||
import net.islandearth.rpgregions.utils.ItemStackBuilder;
|
||||
import net.islandearth.rpgregions.utils.XMaterial;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.wesjd.anvilgui.AnvilGUI;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class EditorGUI extends RPGRegionsGUI {
|
||||
|
||||
private final Gui gui;
|
||||
private static final ItemStack SET_COOLDOWN_ITEM = new ItemStackBuilder(XMaterial.NETHER_STAR.parseMaterial(true))
|
||||
.withName(ChatColor.GREEN + "Set teleport cooldown")
|
||||
.withLore(Arrays.asList(ChatColor.WHITE + "Set the cooldown for teleportation", ChatColor.GRAY + "int, ticks"))
|
||||
.build();
|
||||
private static final ItemStack SET_NAME_ITEM = new ItemStackBuilder(XMaterial.NAME_TAG.parseMaterial(true))
|
||||
.withName(ChatColor.GREEN + "Set name")
|
||||
.withLore(Arrays.asList(ChatColor.WHITE + "Set the display name of the region", ChatColor.GRAY + "string"))
|
||||
.build();
|
||||
private static final ItemStack SET_LOCATION_ITEM = new ItemStackBuilder(XMaterial.ENDER_PEARL.parseMaterial(true))
|
||||
.withName(ChatColor.GREEN + "Set teleport location")
|
||||
.withLore(Arrays.asList(ChatColor.WHITE + "Set the teleport location to your current location", ChatColor.GRAY + "location"))
|
||||
.build();
|
||||
private static final ItemStack EXIT_ITEM = new ItemStackBuilder(XMaterial.BARRIER.parseMaterial(true))
|
||||
.withName(ChatColor.RED + "Exit and save")
|
||||
.build();
|
||||
|
||||
public EditorGUI(RPGRegions plugin, Player player, ConfiguredRegion region) {
|
||||
super(plugin, player);
|
||||
this.gui = new Gui(plugin, 1, region.getCustomName());
|
||||
this.gui = new Gui(plugin, 6, region.getCustomName());
|
||||
gui.setOnGlobalClick(click -> click.setCancelled(true));
|
||||
|
||||
StaticPane pane = new StaticPane(0, 0, 9, 1);
|
||||
pane.addItem(new GuiItem(SET_NAME_ITEM, event -> new AnvilGUI.Builder()
|
||||
.onComplete((responder, text) -> {
|
||||
region.setCustomName(text);
|
||||
player.sendMessage(ChatColor.GREEN + "Region display name has been set.");
|
||||
Bukkit.getScheduler().runTaskLater(plugin, this::open, 20L);
|
||||
return AnvilGUI.Response.close();
|
||||
})
|
||||
.preventClose()
|
||||
.text(region.getCustomName())
|
||||
.item(new ItemStack(Material.NAME_TAG))
|
||||
.title("Set display name") // only works in 1.14+
|
||||
.plugin(plugin)
|
||||
.open(player)), 0, 0);
|
||||
pane.addItem(new GuiItem(SET_LOCATION_ITEM, event -> {
|
||||
region.setLocation(player.getLocation());
|
||||
player.sendMessage(ChatColor.GREEN + "Region teleport location has been set.");
|
||||
this.open();
|
||||
}), 1, 0);
|
||||
pane.addItem(new GuiItem(SET_COOLDOWN_ITEM, event -> new AnvilGUI.Builder()
|
||||
.onComplete((responder, text) -> {
|
||||
try {
|
||||
int cooldown = Integer.parseInt(text);
|
||||
region.setTeleportCooldown(cooldown);
|
||||
player.sendMessage(ChatColor.GREEN + "Region teleport cooldown has been set.");
|
||||
Bukkit.getScheduler().runTaskLater(plugin, this::open, 20L);
|
||||
return AnvilGUI.Response.close();
|
||||
} catch (NumberFormatException e) {
|
||||
return AnvilGUI.Response.text("Please provide a number");
|
||||
}
|
||||
})
|
||||
.preventClose()
|
||||
.text("" + region.getTeleportCooldown())
|
||||
.item(new ItemStack(Material.NAME_TAG))
|
||||
.title("Set teleport cooldown") // only works in 1.14+
|
||||
.plugin(plugin)
|
||||
.open(player)), 2, 0);
|
||||
Material toggleTeleportMaterial = region.isTeleportable() ? XMaterial.GREEN_WOOL.parseMaterial(true) : XMaterial.RED_WOOL.parseMaterial(true);
|
||||
ItemStack toggleTeleport = new ItemStackBuilder(toggleTeleportMaterial)
|
||||
.withName(ChatColor.GREEN + "Toggle teleport")
|
||||
.withLore(Arrays.asList(ChatColor.WHITE + "Toggle whether this region can be teleported to", ChatColor.GRAY + "boolean"))
|
||||
.build();
|
||||
pane.addItem(new GuiItem(toggleTeleport, event -> {
|
||||
region.setTeleportable(!region.isTeleportable());
|
||||
player.closeInventory();
|
||||
new EditorGUI(plugin, player, region).open();
|
||||
player.sendMessage(ChatColor.GREEN + "Region teleporting has been toggled");
|
||||
}), 3, 0);
|
||||
Material toggleDiscoverableMaterial = region.isDiscoverable() ? XMaterial.GREEN_WOOL.parseMaterial(true) : XMaterial.RED_WOOL.parseMaterial(true);
|
||||
ItemStack toggleDiscoverable = new ItemStackBuilder(toggleDiscoverableMaterial)
|
||||
.withName(ChatColor.GREEN + "Toggle discoverable")
|
||||
.withLore(Arrays.asList(ChatColor.WHITE + "Toggle whether this region can be discovered", ChatColor.GRAY + "boolean"))
|
||||
.build();
|
||||
pane.addItem(new GuiItem(toggleDiscoverable, event -> {
|
||||
region.setDiscoverable(!region.isDiscoverable());
|
||||
player.closeInventory();
|
||||
new EditorGUI(plugin, player, region).open();
|
||||
player.sendMessage(ChatColor.GREEN + "Region discovering has been toggled");
|
||||
}), 4, 0);
|
||||
Material toggleHiddenMaterial = region.isHidden() ? XMaterial.GREEN_WOOL.parseMaterial(true) : XMaterial.RED_WOOL.parseMaterial(true);
|
||||
ItemStack toggleHidden = new ItemStackBuilder(toggleHiddenMaterial)
|
||||
.withName(ChatColor.GREEN + "Toggle hidden")
|
||||
.withLore(Arrays.asList(ChatColor.WHITE + "Toggle whether this region is hidden", ChatColor.GRAY + "boolean"))
|
||||
.build();
|
||||
pane.addItem(new GuiItem(toggleHidden, event -> {
|
||||
region.setHidden(!region.isHidden());
|
||||
player.closeInventory();
|
||||
new EditorGUI(plugin, player, region).open();
|
||||
player.sendMessage(ChatColor.GREEN + "Region visibility has been toggled");
|
||||
}), 5, 0);
|
||||
pane.addItem(new GuiItem(EXIT_ITEM, event -> {
|
||||
player.closeInventory();
|
||||
ClassEditor classEditor = new ClassEditor(region);
|
||||
// I wish there was a cleaner way to do this :(
|
||||
int backX = plugin.getConfig().getInt("settings.server.gui.back.posX");
|
||||
int backY = plugin.getConfig().getInt("settings.server.gui.back.posY");
|
||||
int backL = plugin.getConfig().getInt("settings.server.gui.back.length");
|
||||
int backH = plugin.getConfig().getInt("settings.server.gui.back.height");
|
||||
int forwardX = plugin.getConfig().getInt("settings.server.gui.forward.posX");
|
||||
int forwardY = plugin.getConfig().getInt("settings.server.gui.forward.posY");
|
||||
int forwardL = plugin.getConfig().getInt("settings.server.gui.forward.length");
|
||||
int forwardH = plugin.getConfig().getInt("settings.server.gui.forward.height");
|
||||
int exitX = plugin.getConfig().getInt("settings.server.gui.exit.posX");
|
||||
int exitY = plugin.getConfig().getInt("settings.server.gui.exit.posY");
|
||||
int exitL = plugin.getConfig().getInt("settings.server.gui.exit.length");
|
||||
int exitH = plugin.getConfig().getInt("settings.server.gui.exit.height");
|
||||
int paneX = plugin.getConfig().getInt("settings.server.gui.pane.posX");
|
||||
int paneY = plugin.getConfig().getInt("settings.server.gui.pane.posY");
|
||||
int paneL = plugin.getConfig().getInt("settings.server.gui.pane.length");
|
||||
int paneH = plugin.getConfig().getInt("settings.server.gui.pane.height");
|
||||
int oPaneX = plugin.getConfig().getInt("settings.server.gui.outlinePane.posX");
|
||||
int oPaneY = plugin.getConfig().getInt("settings.server.gui.outlinePane.posY");
|
||||
int oPaneL = plugin.getConfig().getInt("settings.server.gui.outlinePane.length");
|
||||
int oPaneH = plugin.getConfig().getInt("settings.server.gui.outlinePane.height");
|
||||
int iPaneX = plugin.getConfig().getInt("settings.server.gui.innerPane.posX");
|
||||
int iPaneY = plugin.getConfig().getInt("settings.server.gui.innerPane.posY");
|
||||
int iPaneL = plugin.getConfig().getInt("settings.server.gui.innerPane.length");
|
||||
int iPaneH = plugin.getConfig().getInt("settings.server.gui.innerPane.height");
|
||||
PaginatedPane pane = new PaginatedPane(paneX, paneY, paneL, paneH);
|
||||
OutlinePane oPane = new OutlinePane(oPaneX, oPaneY, oPaneL, oPaneH);
|
||||
OutlinePane innerPane = new OutlinePane(iPaneX, iPaneY, iPaneL, iPaneH);
|
||||
StaticPane back = new StaticPane(backX, backY, backL, backH);
|
||||
StaticPane forward = new StaticPane(forwardX, forwardY, forwardL, forwardH);
|
||||
StaticPane exit = new StaticPane(exitX, exitY, exitL, exitH);
|
||||
|
||||
// Inner pane
|
||||
if (plugin.getConfig().getBoolean("settings.server.gui.innerPane.show")) {
|
||||
innerPane.setRepeat(true);
|
||||
List<String> mask = plugin.getConfig().getStringList("settings.server.gui.innerPane.mask");
|
||||
innerPane.applyMask(new Mask(mask.toArray(new String[]{})));
|
||||
innerPane.setOnClick(inventoryClickEvent -> inventoryClickEvent.setCancelled(true));
|
||||
|
||||
innerPane.addItem(new GuiItem(new ItemStackBuilder(XMaterial.matchXMaterial(
|
||||
plugin.getConfig().getString("settings.server.gui.innerPane.innerPane")).get().parseItem(true))
|
||||
.withName(" ")
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build()));
|
||||
|
||||
gui.addPane(innerPane);
|
||||
}
|
||||
|
||||
// Outline pane
|
||||
if (plugin.getConfig().getBoolean("settings.server.gui.outlinePane.show")) {
|
||||
oPane.setRepeat(true);
|
||||
List<String> mask = plugin.getConfig().getStringList("settings.server.gui.outlinePane.mask");
|
||||
oPane.applyMask(new Mask(mask.toArray(new String[]{})));
|
||||
oPane.setOnClick(inventoryClickEvent -> inventoryClickEvent.setCancelled(true));
|
||||
|
||||
oPane.addItem(new GuiItem(new ItemStackBuilder(XMaterial.matchXMaterial(
|
||||
plugin.getConfig().getString("settings.server.gui.outlinePane.outlinePane")).get().parseItem(true))
|
||||
.withName(" ")
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build()));
|
||||
|
||||
gui.addPane(oPane);
|
||||
}
|
||||
|
||||
// Back item
|
||||
String bm = plugin.getConfig().getString("settings.server.gui.back.back");
|
||||
ItemStack backItem = bm.startsWith("hdb-") && plugin.hasHeadDatabase()
|
||||
?
|
||||
new ItemStackBuilder(new HeadDatabaseAPI().getItemHead(bm.replace("hdb-", "")))
|
||||
.withName(Translations.PREVIOUS_PAGE.get(player))
|
||||
.withLore(Translations.PREVIOUS_PAGE_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build()
|
||||
:
|
||||
new ItemStackBuilder(XMaterial.matchXMaterial(
|
||||
plugin.getConfig().getString("settings.server.gui.back.back")).get().parseItem(true))
|
||||
.withName(Translations.PREVIOUS_PAGE.get(player))
|
||||
.withLore(Translations.PREVIOUS_PAGE_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build();
|
||||
|
||||
back.addItem(new GuiItem(backItem, event -> {
|
||||
event.setCancelled(true);
|
||||
if (pane.getPages() == 0 || pane.getPages() == 1) return;
|
||||
|
||||
pane.setPage(pane.getPage() - 1);
|
||||
|
||||
forward.setVisible(true);
|
||||
gui.update();
|
||||
}), 0, 0);
|
||||
|
||||
// Forward item
|
||||
String fm = plugin.getConfig().getString("settings.server.gui.forward.forward");
|
||||
ItemStack forwardItem = fm.startsWith("hdb-") && plugin.hasHeadDatabase()
|
||||
?
|
||||
new ItemStackBuilder(new HeadDatabaseAPI().getItemHead(fm.replace("hdb-", "")))
|
||||
.withName(Translations.NEXT_PAGE.get(player))
|
||||
.withLore(Translations.NEXT_PAGE_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build()
|
||||
:
|
||||
new ItemStackBuilder(XMaterial.matchXMaterial(
|
||||
plugin.getConfig().getString("settings.server.gui.forward.forward")).get().parseItem(true))
|
||||
.withName(Translations.NEXT_PAGE.get(player))
|
||||
.withLore(Translations.NEXT_PAGE_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build();
|
||||
|
||||
forward.addItem(new GuiItem(forwardItem, event -> {
|
||||
event.setCancelled(true);
|
||||
if (pane.getPages() == 0 || pane.getPages() == 1) return;
|
||||
|
||||
pane.setPage(pane.getPage() + 1);
|
||||
|
||||
back.setVisible(true);
|
||||
gui.update();
|
||||
}), 0, 0);
|
||||
|
||||
// Exit item
|
||||
if (plugin.getConfig().getBoolean("settings.server.gui.exit.show")) {
|
||||
String em = plugin.getConfig().getString("settings.server.gui.exit.exit");
|
||||
ItemStack item = em.startsWith("hdb-") && plugin.hasHeadDatabase()
|
||||
?
|
||||
new ItemStackBuilder(new HeadDatabaseAPI().getItemHead(em.replace("hdb-", "")))
|
||||
.withName(Translations.EXIT.get(player))
|
||||
.withLore(Translations.EXIT_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build()
|
||||
:
|
||||
new ItemStackBuilder(XMaterial.matchXMaterial(
|
||||
plugin.getConfig().getString("settings.server.gui.exit.exit")).get().parseItem(true))
|
||||
.withName(Translations.EXIT.get(player))
|
||||
.withLore(Translations.EXIT_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build();
|
||||
exit.addItem(new GuiItem(item, event -> {
|
||||
event.setCancelled(true);
|
||||
gui.update();
|
||||
player.closeInventory();
|
||||
String command = plugin.getConfig().getString("settings.server.gui.exit.command");
|
||||
if (!command.isEmpty()) player.performCommand(command
|
||||
.replace("%player%", player.getName()));
|
||||
try {
|
||||
player.sendMessage(ChatColor.GREEN + "Saving data...");
|
||||
long startTime = System.currentTimeMillis();
|
||||
region.save(plugin);
|
||||
long endTime = System.currentTimeMillis();
|
||||
long totalTime = endTime - startTime;
|
||||
player.sendMessage(ChatColor.GREEN + "Done! (" + totalTime + "ms)");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}), 0, 0);
|
||||
|
||||
gui.addPane(exit);
|
||||
}
|
||||
|
||||
gui.addPane(back);
|
||||
gui.addPane(forward);
|
||||
|
||||
List<GuiItem> guiItems = new ArrayList<>();
|
||||
for (EditField editField : classEditor.getEditable()) {
|
||||
ItemStack itemStack = new ItemStackBuilder(editField.getMaterial().parseMaterial(true))
|
||||
.withName(ChatColor.GREEN + editField.getName())
|
||||
.withLore(Arrays.asList(ChatColor.WHITE + editField.getDescription(),
|
||||
ChatColor.GRAY + editField.getValue().getClass().getSimpleName().toLowerCase()))
|
||||
.build();
|
||||
if (editField.getValue() instanceof Boolean) {
|
||||
Boolean bool = (Boolean) editField.getValue();
|
||||
if (bool) {
|
||||
itemStack.setType(XMaterial.GREEN_WOOL.parseMaterial(true));
|
||||
} else {
|
||||
itemStack.setType(XMaterial.RED_WOOL.parseMaterial(true));
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
player.sendMessage(ChatColor.GREEN + "Saving data...");
|
||||
long startTime = System.currentTimeMillis();
|
||||
region.save(plugin);
|
||||
long endTime = System.currentTimeMillis();
|
||||
long totalTime = endTime - startTime;
|
||||
player.sendMessage(ChatColor.GREEN + "Done! (" + totalTime + "ms)");
|
||||
} catch (IOException e) {
|
||||
if (editField.getField().get(region) instanceof Location) {
|
||||
guiItems.add(new GuiItem(itemStack, event -> {
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(editField.setValue(player.getLocation())));
|
||||
this.open();
|
||||
}));
|
||||
} else if (editField.getField().get(region) instanceof Boolean) {
|
||||
Boolean bool = (Boolean) editField.getField().get(region);
|
||||
guiItems.add(new GuiItem(itemStack, event -> {
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(editField.setValue(!bool)));
|
||||
player.closeInventory();
|
||||
new EditorGUI(plugin, player, region).open();
|
||||
}));
|
||||
} else {
|
||||
guiItems.add(new GuiItem(itemStack, event -> {
|
||||
new AnvilGUI.Builder()
|
||||
.onComplete((responder, text) -> {
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(editField.setValue(text)));
|
||||
Bukkit.getScheduler().runTaskLater(plugin, this::open, 20L);
|
||||
return AnvilGUI.Response.close();
|
||||
})
|
||||
.preventClose()
|
||||
.text(region.getCustomName())
|
||||
.item(new ItemStack(Material.NAME_TAG))
|
||||
.title("Set display name") // only works in 1.14+
|
||||
.plugin(plugin)
|
||||
.open(player);
|
||||
}));
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}), 8, 0);
|
||||
}
|
||||
|
||||
pane.populateWithGuiItems(guiItems);
|
||||
gui.addPane(pane);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.google.gson.Gson;
|
||||
import me.arcaniax.hdb.api.HeadDatabaseAPI;
|
||||
import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.command.IconCommand;
|
||||
import net.islandearth.rpgregions.editor.annotate.EditableField;
|
||||
import net.islandearth.rpgregions.effects.RegionEffect;
|
||||
import net.islandearth.rpgregions.regenerate.Regenerate;
|
||||
import net.islandearth.rpgregions.requirements.LevelRequirement;
|
||||
@@ -40,28 +41,37 @@ public class ConfiguredRegion {
|
||||
|
||||
private final UUID world;
|
||||
private final String id;
|
||||
@EditableField(material = XMaterial.NAME_TAG, name = "Set name", description = "Set the display name of the region")
|
||||
private String customName;
|
||||
private final List<DiscoveryReward> rewards;
|
||||
private final Sound sound;
|
||||
private final String icon;
|
||||
private final String undiscoveredIcon;
|
||||
private final List<IconCommand> iconCommand;
|
||||
private final boolean showCoords;
|
||||
@EditableField(description = "Toggle whether the coordinates of the region are shown", name = "Toggle coordinates")
|
||||
private boolean showCoords;
|
||||
@EditableField(material = XMaterial.ENDER_PEARL, name = "Set teleport location", description = "Set the teleport location to your current location")
|
||||
private Location location;
|
||||
private final List<String> hints;
|
||||
private final boolean showHint;
|
||||
@EditableField(description = "Toggle whether the hint is shown", name = "Toggle hint")
|
||||
private boolean showHint;
|
||||
@EditableField(description = "Toggle whether this region can be teleported to", name = "Toggle teleportable")
|
||||
private boolean teleportable;
|
||||
@EditableField(name = "Toggle hidden", description = "Toggle whether this region is hidden")
|
||||
private boolean hidden;
|
||||
@EditableField(name = "Toggle discoverable", description = "Toggle whether this region can be discovered")
|
||||
private boolean discoverable;
|
||||
private final List<RegionEffect> effects;
|
||||
private final List<RegionRequirement> requirements;
|
||||
private final List<String> discoveredLore;
|
||||
private final boolean alwaysShowTitles;
|
||||
@EditableField(description = "Toggle whether the title is always shown on entry after discovery", name = "Toggle always showing titles")
|
||||
private boolean alwaysShowTitles;
|
||||
private List<String> title;
|
||||
private List<String> subtitle;
|
||||
private List<String> discoveredTitle;
|
||||
private List<String> discoveredSubtitle;
|
||||
private Regenerate regenerate;
|
||||
@EditableField(material = XMaterial.NETHER_STAR, name = "Set teleport cooldown", description = "Set the cooldown for teleportation")
|
||||
private int teleportCooldown;
|
||||
|
||||
public ConfiguredRegion(@Nullable World world, String id, String customName,
|
||||
|
||||
Reference in New Issue
Block a user