9
0
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:
SamB440
2020-10-18 20:38:29 +01:00
parent 7b1741e6bd
commit 6b243eb607
11 changed files with 382 additions and 105 deletions

View File

@@ -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);
}
}

View File

@@ -23,7 +23,7 @@ public class LevelRequirement extends RegionRequirement {
@Override
public String getText(Player player) {
return "level " + level;
return "Level " + level;
}
public int getLevel() {

View File

@@ -35,6 +35,6 @@ public class MoneyRequirement extends RegionRequirement {
@Override
public String getText(Player player) {
return "money " + money;
return "Money " + money;
}
}

View File

@@ -61,7 +61,7 @@ public class PlaceholderRequirement extends RegionRequirement {
@Override
public String getText(Player player) {
return "placeholder " + placeholder;
return "Placeholder " + placeholder;
}
public String getPlaceholder() {

View File

@@ -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")

View File

@@ -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;
}
}

View File

@@ -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();
}

View File

@@ -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();
}
}
}

View File

@@ -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());

View File

@@ -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);
}

View File

@@ -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,