mirror of
https://gitlab.com/SamB440/rpgregions-2.git
synced 2025-12-26 18:29:16 +00:00
The new GUI editor is here!
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
package net.islandearth.rpgregions.effects;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.IGuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class RegionEffect {
|
||||
public abstract class RegionEffect implements IGuiEditable {
|
||||
|
||||
private final boolean wearingRequired;
|
||||
private final List<ItemStack> ignoreItems;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.islandearth.rpgregions.managers;
|
||||
|
||||
import net.islandearth.rpgregions.api.integrations.IntegrationManager;
|
||||
import net.islandearth.rpgregions.gui.element.IGuiFieldElementRegistry;
|
||||
import net.islandearth.rpgregions.managers.data.IRPGRegionsCache;
|
||||
import net.islandearth.rpgregions.managers.data.IStorageManager;
|
||||
import net.islandearth.rpgregions.managers.registry.IRPGRegionsRegistry;
|
||||
@@ -15,5 +16,7 @@ public interface IRPGRegionsManagers {
|
||||
|
||||
IRegenerationManager getRegenerationManager();
|
||||
|
||||
IGuiFieldElementRegistry getGuiFieldElementRegistry();
|
||||
|
||||
IRPGRegionsRegistry<?> getRegistry(Class<? extends IRPGRegionsRegistry<?>> clazz);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package net.islandearth.rpgregions.requirements;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.IGuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public abstract class RegionRequirement {
|
||||
public abstract class RegionRequirement implements IGuiEditable {
|
||||
|
||||
private final IRPGRegionsAPI api;
|
||||
private final transient IRPGRegionsAPI api;
|
||||
private final PreventType preventType;
|
||||
|
||||
public RegionRequirement(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package net.islandearth.rpgregions.rewards;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.IGuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public abstract class DiscoveryReward {
|
||||
public abstract class DiscoveryReward implements IGuiEditable {
|
||||
|
||||
private final IRPGRegionsAPI api;
|
||||
private final transient IRPGRegionsAPI api;
|
||||
|
||||
public DiscoveryReward(IRPGRegionsAPI api) {
|
||||
this.api = api;
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package net.islandearth.rpgregions.chat;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.conversations.ConversationContext;
|
||||
import org.bukkit.conversations.ConversationPrefix;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class RPGRegionsConversationPrefix implements ConversationPrefix {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getPrefix(@NotNull ConversationContext context) {
|
||||
return ChatColor.GOLD + "RPGRegions > " + ChatColor.AQUA;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package net.islandearth.rpgregions.chat;
|
||||
|
||||
import org.bukkit.conversations.ConversationContext;
|
||||
import org.bukkit.conversations.Prompt;
|
||||
import org.bukkit.conversations.StringPrompt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class RPGRegionsStringPrompt extends StringPrompt {
|
||||
|
||||
private final String promptText;
|
||||
|
||||
public RPGRegionsStringPrompt(String promptText) {
|
||||
this.promptText = promptText;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getPromptText(@NotNull ConversationContext context) {
|
||||
return promptText;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Prompt acceptInput(@NotNull ConversationContext context, @Nullable String input) {
|
||||
context.setSessionData("input", input);
|
||||
return Prompt.END_OF_CONVERSATION;
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@ import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.api.RPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.api.integrations.IntegrationType;
|
||||
import net.islandearth.rpgregions.gui.DiscoveryGUI;
|
||||
import net.islandearth.rpgregions.gui.EditorGUI;
|
||||
import net.islandearth.rpgregions.gui.RegionCreateGUI;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
import net.islandearth.rpgregions.managers.data.region.WorldDiscovery;
|
||||
import net.islandearth.rpgregions.regenerate.Regenerate;
|
||||
@@ -116,7 +116,7 @@ public class RPGRegionsCommand extends BaseCommand {
|
||||
@CommandPermission("rpgregions.edit")
|
||||
@CommandCompletion("@regions")
|
||||
public void onEdit(Player player, ConfiguredRegion configuredRegion) {
|
||||
new EditorGUI(plugin, player, configuredRegion).open();
|
||||
new RegionCreateGUI(plugin, player, configuredRegion).open();
|
||||
}
|
||||
|
||||
@Subcommand("list|discoveries")
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package net.islandearth.rpgregions.gui;
|
||||
|
||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||
import com.github.stefvanschie.inventoryframework.pane.PaginatedPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.Pane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.StaticPane;
|
||||
import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.effects.RegionEffect;
|
||||
import net.islandearth.rpgregions.effects.RegionEffectRegistry;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
import net.islandearth.rpgregions.managers.registry.IRPGRegionsRegistry;
|
||||
import net.islandearth.rpgregions.requirements.RegionRequirement;
|
||||
import net.islandearth.rpgregions.requirements.RegionRequirementRegistry;
|
||||
import net.islandearth.rpgregions.rewards.DiscoveryReward;
|
||||
import net.islandearth.rpgregions.rewards.RegionRewardRegistry;
|
||||
import net.islandearth.rpgregions.translation.Translations;
|
||||
import net.islandearth.rpgregions.utils.ItemStackBuilder;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class AddRegionElementGUI extends RPGRegionsGUI {
|
||||
|
||||
private final RPGRegions plugin;
|
||||
private final Player player;
|
||||
private final ConfiguredRegion region;
|
||||
private final IRPGRegionsRegistry<?> registry;
|
||||
private ChestGui gui;
|
||||
|
||||
protected AddRegionElementGUI(RPGRegions plugin, Player player, ConfiguredRegion region, IRPGRegionsRegistry<?> registry) {
|
||||
super(plugin, player);
|
||||
this.plugin = plugin;
|
||||
this.player = player;
|
||||
this.region = region;
|
||||
this.registry = registry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
this.gui = new ChestGui(6, region.getId());
|
||||
gui.setOnGlobalClick(click -> click.setCancelled(true));
|
||||
|
||||
PaginatedPane pane = super.generateDefaultConfig();
|
||||
StaticPane exit = new StaticPane(exitX, exitY, exitL, exitH, Pane.Priority.HIGHEST);
|
||||
// Exit item
|
||||
Material em = Material.valueOf(plugin.getConfig().getString("settings.server.gui.exit.exit"));
|
||||
ItemStack exitItem = new ItemStackBuilder(em)
|
||||
.withName(Translations.EXIT.get(player))
|
||||
.withLore(Translations.EXIT_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build();
|
||||
exit.addItem(new GuiItem(exitItem, event -> {
|
||||
new RegionCreateGUI(plugin, player, region).open();
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_TRIPWIRE_CLICK_ON, 1f, 1f);
|
||||
}), 0, 0);
|
||||
gui.addPane(exit);
|
||||
|
||||
List<GuiItem> items = new ArrayList<>();
|
||||
registry.get().forEach((name, clazz) -> {
|
||||
ItemStack item = new ItemStackBuilder(Material.WRITTEN_BOOK).withName("&6" + name).generation(null).build();
|
||||
GuiItem guiItem = new GuiItem(item, click -> {
|
||||
Object newInstance = registry.getNew(name, plugin, region);
|
||||
if (newInstance == null) {
|
||||
player.sendMessage(ChatColor.RED + "This requires a plugin which is not installed.");
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_LAND, 1f, 1f);
|
||||
return;
|
||||
}
|
||||
|
||||
if (registry instanceof RegionEffectRegistry) {
|
||||
region.getEffects().add((RegionEffect) newInstance);
|
||||
} else if (registry instanceof RegionRewardRegistry) {
|
||||
region.getRewards().add((DiscoveryReward) newInstance);
|
||||
} else if (registry instanceof RegionRequirementRegistry) {
|
||||
region.getRequirements().add((RegionRequirement) newInstance);
|
||||
}
|
||||
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1f);
|
||||
});
|
||||
items.add(guiItem);
|
||||
});
|
||||
pane.populateWithGuiItems(items);
|
||||
gui.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChestGui getGui() {
|
||||
return gui;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||
import com.github.stefvanschie.inventoryframework.pane.OutlinePane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.PaginatedPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.Pane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.StaticPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.util.Mask;
|
||||
import io.papermc.lib.PaperLib;
|
||||
@@ -29,43 +30,26 @@ import java.util.List;
|
||||
|
||||
public class DiscoveryGUI extends RPGRegionsGUI {
|
||||
|
||||
private final ChestGui gui;
|
||||
private final RPGRegions plugin;
|
||||
private final Player player;
|
||||
private ChestGui gui;
|
||||
|
||||
public DiscoveryGUI(RPGRegions plugin, Player player) {
|
||||
super(plugin, player);
|
||||
this.plugin = plugin;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
this.gui = new ChestGui(plugin.getConfig().getInt("settings.server.gui.general.rows"), Translations.REGIONS.get(player));
|
||||
gui.setOnGlobalClick(click -> click.setCancelled(true));
|
||||
// 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);
|
||||
PaginatedPane pane = new PaginatedPane(paneX, paneY, paneL, paneH, Pane.Priority.HIGHEST);
|
||||
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);
|
||||
StaticPane back = new StaticPane(backX, backY, backL, backH, Pane.Priority.HIGHEST);
|
||||
StaticPane forward = new StaticPane(forwardX, forwardY, forwardL, forwardH, Pane.Priority.HIGHEST);
|
||||
StaticPane exit = new StaticPane(exitX, exitY, exitL, exitH, Pane.Priority.HIGH);
|
||||
|
||||
// Inner pane
|
||||
if (plugin.getConfig().getBoolean("settings.server.gui.innerPane.show")) {
|
||||
@@ -306,7 +290,6 @@ public class DiscoveryGUI extends RPGRegionsGUI {
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
pane.populateWithGuiItems(items);
|
||||
gui.addPane(pane);
|
||||
}).exceptionally(error -> {
|
||||
@@ -317,7 +300,7 @@ public class DiscoveryGUI extends RPGRegionsGUI {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open() {
|
||||
gui.show(getPlayer());
|
||||
public ChestGui getGui() {
|
||||
return gui;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
package net.islandearth.rpgregions.gui;
|
||||
|
||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||
import com.github.stefvanschie.inventoryframework.pane.PaginatedPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.Pane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.StaticPane;
|
||||
import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.effects.RegionEffect;
|
||||
import net.islandearth.rpgregions.effects.RegionEffectRegistry;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
import net.islandearth.rpgregions.managers.registry.IRPGRegionsRegistry;
|
||||
import net.islandearth.rpgregions.requirements.RegionRequirement;
|
||||
import net.islandearth.rpgregions.requirements.RegionRequirementRegistry;
|
||||
import net.islandearth.rpgregions.rewards.DiscoveryReward;
|
||||
import net.islandearth.rpgregions.rewards.RegionRewardRegistry;
|
||||
import net.islandearth.rpgregions.translation.Translations;
|
||||
import net.islandearth.rpgregions.utils.ItemStackBuilder;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class EditRegionElementGUI extends RPGRegionsGUI {
|
||||
|
||||
private final RPGRegions plugin;
|
||||
private final Player player;
|
||||
private final ConfiguredRegion region;
|
||||
private final IRPGRegionsRegistry<?> registry;
|
||||
private ChestGui gui;
|
||||
|
||||
public EditRegionElementGUI(RPGRegions plugin, Player player, ConfiguredRegion region, IRPGRegionsRegistry<?> registry) {
|
||||
super(plugin, player);
|
||||
this.plugin = plugin;
|
||||
this.player = player;
|
||||
this.region = region;
|
||||
this.registry = registry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
this.gui = new ChestGui(6, region.getId());
|
||||
gui.setOnGlobalClick(click -> click.setCancelled(true));
|
||||
|
||||
PaginatedPane pane = super.generateDefaultConfig();
|
||||
StaticPane exit = new StaticPane(exitX, exitY, exitL, exitH, Pane.Priority.HIGHEST);
|
||||
// Exit item
|
||||
Material em = Material.valueOf(plugin.getConfig().getString("settings.server.gui.exit.exit"));
|
||||
ItemStack exitItem = new ItemStackBuilder(em)
|
||||
.withName(Translations.EXIT.get(player))
|
||||
.withLore(Translations.EXIT_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build();
|
||||
exit.addItem(new GuiItem(exitItem, event -> {
|
||||
new RegionCreateGUI(plugin, player, region).open();
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_TRIPWIRE_CLICK_ON, 1f, 1f);
|
||||
}), 0, 0);
|
||||
gui.addPane(exit);
|
||||
|
||||
List<GuiItem> items = new ArrayList<>();
|
||||
if (registry instanceof RegionEffectRegistry) {
|
||||
for (RegionEffect effect : region.getEffects()) {
|
||||
items.add(getDefaultGuiItem(effect, registry));
|
||||
}
|
||||
} else if (registry instanceof RegionRewardRegistry) {
|
||||
for (DiscoveryReward reward : region.getRewards()) {
|
||||
items.add(getDefaultGuiItem(reward, registry));
|
||||
}
|
||||
} else if (registry instanceof RegionRequirementRegistry) {
|
||||
for (RegionRequirement requirement : region.getRequirements()) {
|
||||
items.add(getDefaultGuiItem(requirement, registry));
|
||||
}
|
||||
}
|
||||
pane.populateWithGuiItems(items);
|
||||
gui.update();
|
||||
}
|
||||
|
||||
public GuiItem getDefaultGuiItem(IGuiEditable guiEditable, IRPGRegionsRegistry<?> registry) {
|
||||
ItemStack item = new ItemStackBuilder(registry.getIcon())
|
||||
.withName("&6" + guiEditable.getName())
|
||||
.withLore("&7No additional data to display")
|
||||
.build();
|
||||
return new GuiItem(item, click -> {
|
||||
new EditGuiElementGUI(plugin, player, region, guiEditable).open();
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1f);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChestGui getGui() {
|
||||
return gui;
|
||||
}
|
||||
}
|
||||
@@ -29,41 +29,28 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @deprecated It is preferable to use the new RegionCreateGUI class.
|
||||
* This will be removed in version 1.3.6.
|
||||
* @see net.islandearth.rpgregions.gui.RegionCreateGUI
|
||||
*/
|
||||
@Deprecated
|
||||
public class EditorGUI extends RPGRegionsGUI {
|
||||
|
||||
private final RPGRegions plugin;
|
||||
private final Player player;
|
||||
private final ConfiguredRegion region;
|
||||
private final ChestGui gui;
|
||||
|
||||
public EditorGUI(RPGRegions plugin, Player player, ConfiguredRegion region) {
|
||||
super(plugin, player);
|
||||
this.plugin = plugin;
|
||||
this.player = player;
|
||||
this.region = region;
|
||||
this.gui = new ChestGui(6, region.getCustomName());
|
||||
gui.setOnGlobalClick(click -> click.setCancelled(true));
|
||||
|
||||
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);
|
||||
@@ -250,7 +237,12 @@ public class EditorGUI extends RPGRegionsGUI {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open() {
|
||||
gui.show(getPlayer());
|
||||
public void render() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChestGui getGui() {
|
||||
return gui;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,79 @@
|
||||
package net.islandearth.rpgregions.gui;
|
||||
|
||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||
import com.github.stefvanschie.inventoryframework.pane.OutlinePane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.PaginatedPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.Pane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.StaticPane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.util.Mask;
|
||||
import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.translation.Translations;
|
||||
import net.islandearth.rpgregions.utils.ItemStackBuilder;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class RPGRegionsGUI {
|
||||
|
||||
private final RPGRegions plugin;
|
||||
private final Player player;
|
||||
protected final int backX;
|
||||
protected final int backY;
|
||||
protected final int backL;
|
||||
protected final int backH;
|
||||
protected final int forwardX;
|
||||
protected final int forwardY;
|
||||
protected final int forwardL;
|
||||
protected final int forwardH;
|
||||
protected final int exitX;
|
||||
protected final int exitY;
|
||||
protected final int exitL;
|
||||
protected final int exitH;
|
||||
protected final int paneX;
|
||||
protected final int paneY;
|
||||
protected final int paneL;
|
||||
protected final int paneH;
|
||||
protected final int oPaneX;
|
||||
protected final int oPaneY;
|
||||
protected final int oPaneL;
|
||||
protected final int oPaneH;
|
||||
protected final int iPaneX;
|
||||
protected final int iPaneY;
|
||||
protected final int iPaneL;
|
||||
protected final int iPaneH;
|
||||
|
||||
protected RPGRegionsGUI(RPGRegions plugin, Player player) {
|
||||
this.plugin = plugin;
|
||||
this.player = player;
|
||||
// I wish there was a cleaner way to do this :(
|
||||
this.backX = plugin.getConfig().getInt("settings.server.gui.back.posX");
|
||||
this.backY = plugin.getConfig().getInt("settings.server.gui.back.posY");
|
||||
this.backL = plugin.getConfig().getInt("settings.server.gui.back.length");
|
||||
this.backH = plugin.getConfig().getInt("settings.server.gui.back.height");
|
||||
this.forwardX = plugin.getConfig().getInt("settings.server.gui.forward.posX");
|
||||
this.forwardY = plugin.getConfig().getInt("settings.server.gui.forward.posY");
|
||||
this.forwardL = plugin.getConfig().getInt("settings.server.gui.forward.length");
|
||||
this.forwardH = plugin.getConfig().getInt("settings.server.gui.forward.height");
|
||||
this.exitX = plugin.getConfig().getInt("settings.server.gui.exit.posX");
|
||||
this.exitY = plugin.getConfig().getInt("settings.server.gui.exit.posY");
|
||||
this.exitL = plugin.getConfig().getInt("settings.server.gui.exit.length");
|
||||
this.exitH = plugin.getConfig().getInt("settings.server.gui.exit.height");
|
||||
this.paneX = plugin.getConfig().getInt("settings.server.gui.pane.posX");
|
||||
this.paneY = plugin.getConfig().getInt("settings.server.gui.pane.posY");
|
||||
this.paneL = plugin.getConfig().getInt("settings.server.gui.pane.length");
|
||||
this.paneH = plugin.getConfig().getInt("settings.server.gui.pane.height");
|
||||
this.oPaneX = plugin.getConfig().getInt("settings.server.gui.outlinePane.posX");
|
||||
this.oPaneY = plugin.getConfig().getInt("settings.server.gui.outlinePane.posY");
|
||||
this.oPaneL = plugin.getConfig().getInt("settings.server.gui.outlinePane.length");
|
||||
this.oPaneH = plugin.getConfig().getInt("settings.server.gui.outlinePane.height");
|
||||
this.iPaneX = plugin.getConfig().getInt("settings.server.gui.innerPane.posX");
|
||||
this.iPaneY = plugin.getConfig().getInt("settings.server.gui.innerPane.posY");
|
||||
this.iPaneL = plugin.getConfig().getInt("settings.server.gui.innerPane.length");
|
||||
this.iPaneH = plugin.getConfig().getInt("settings.server.gui.innerPane.height");
|
||||
}
|
||||
|
||||
public RPGRegions getPlugin() {
|
||||
@@ -21,5 +84,117 @@ public abstract class RPGRegionsGUI {
|
||||
return player;
|
||||
}
|
||||
|
||||
public abstract void open();
|
||||
public abstract void render();
|
||||
|
||||
public PaginatedPane generateDefaultConfig() {
|
||||
ChestGui gui = getGui();
|
||||
|
||||
gui.setOnGlobalClick(click -> click.setCancelled(true));
|
||||
|
||||
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);
|
||||
|
||||
pane.setPriority(Pane.Priority.HIGHEST);
|
||||
back.setPriority(Pane.Priority.HIGH);
|
||||
forward.setPriority(Pane.Priority.HIGH);
|
||||
exit.setPriority(Pane.Priority.HIGH);
|
||||
|
||||
// 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(Material.valueOf(
|
||||
plugin.getConfig().getString("settings.server.gui.innerPane.innerPane")))
|
||||
.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(Material.valueOf(
|
||||
plugin.getConfig().getString("settings.server.gui.outlinePane.outlinePane")))
|
||||
.withName(" ")
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build()));
|
||||
|
||||
gui.addPane(oPane);
|
||||
}
|
||||
|
||||
// Back item
|
||||
Material bm = Material.valueOf(plugin.getConfig().getString("settings.server.gui.back.back"));
|
||||
ItemStack backItem = new ItemStackBuilder(bm)
|
||||
.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
|
||||
Material fm = Material.valueOf(plugin.getConfig().getString("settings.server.gui.forward.forward"));
|
||||
ItemStack forwardItem = new ItemStackBuilder(fm)
|
||||
.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
|
||||
Material em = Material.valueOf(plugin.getConfig().getString("settings.server.gui.exit.exit"));
|
||||
ItemStack item = new ItemStackBuilder(em)
|
||||
.withName(Translations.EXIT.get(player))
|
||||
.withLore(Translations.EXIT_LORE.getList(player))
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build();
|
||||
exit.addItem(new GuiItem(item, event -> {
|
||||
gui.update();
|
||||
player.closeInventory();
|
||||
}), 0, 0);
|
||||
|
||||
gui.addPane(exit);
|
||||
gui.addPane(back);
|
||||
gui.addPane(forward);
|
||||
gui.addPane(pane);
|
||||
|
||||
return pane;
|
||||
}
|
||||
|
||||
public abstract ChestGui getGui();
|
||||
|
||||
public void open() {
|
||||
player.closeInventory();
|
||||
render();
|
||||
getGui().show(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,248 @@
|
||||
package net.islandearth.rpgregions.gui;
|
||||
|
||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||
import com.github.stefvanschie.inventoryframework.pane.OutlinePane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.Pane;
|
||||
import com.github.stefvanschie.inventoryframework.pane.StaticPane;
|
||||
import net.islandearth.rpgregions.RPGRegions;
|
||||
import net.islandearth.rpgregions.chat.RPGRegionsConversationPrefix;
|
||||
import net.islandearth.rpgregions.chat.RPGRegionsStringPrompt;
|
||||
import net.islandearth.rpgregions.effects.RegionEffectRegistry;
|
||||
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
|
||||
import net.islandearth.rpgregions.requirements.RegionRequirementRegistry;
|
||||
import net.islandearth.rpgregions.rewards.RegionRewardRegistry;
|
||||
import net.islandearth.rpgregions.utils.ItemStackBuilder;
|
||||
import net.islandearth.rpgregions.utils.XSound;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.conversations.Conversation;
|
||||
import org.bukkit.conversations.ConversationFactory;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class RegionCreateGUI extends RPGRegionsGUI {
|
||||
|
||||
private final RPGRegions plugin;
|
||||
private final Player player;
|
||||
private final ConfiguredRegion region;
|
||||
private ChestGui gui;
|
||||
|
||||
public RegionCreateGUI(RPGRegions plugin, Player player, ConfiguredRegion region) {
|
||||
super(plugin, player);
|
||||
this.plugin = plugin;
|
||||
this.player = player;
|
||||
this.region = region;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
this.gui = new ChestGui(6, region.getId());
|
||||
gui.setOnGlobalClick(click -> click.setCancelled(true));
|
||||
|
||||
OutlinePane oPane = new OutlinePane(0, 1, 9, 1, Pane.Priority.HIGHEST);
|
||||
oPane.setRepeat(true);
|
||||
oPane.addItem(new GuiItem(new ItemStackBuilder(Material.GRAY_STAINED_GLASS_PANE)
|
||||
.withName(" ")
|
||||
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.build()));
|
||||
gui.addPane(oPane);
|
||||
|
||||
StaticPane questInfo = new StaticPane(4, 0, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack questInfoItem = new ItemStackBuilder(Material.TOTEM_OF_UNDYING)
|
||||
.withName("&6" + region.getCustomName())
|
||||
.withLore("&7" + region.getDiscoveredLore(), "&e&lClick &7to save the region.")
|
||||
.build();
|
||||
questInfo.addItem(new GuiItem(questInfoItem, event -> {
|
||||
region.save(plugin);
|
||||
player.playSound(player.getLocation(), Sound.ITEM_ARMOR_EQUIP_GENERIC, 1f, 1f);
|
||||
}),0, 0);
|
||||
gui.addPane(questInfo);
|
||||
|
||||
StaticPane displayName = new StaticPane(0, 2, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack displayNameItem = new ItemStackBuilder(Material.PAPER)
|
||||
.withName("&6Set region display name &7- &6" + region.getCustomName())
|
||||
.withLore("&7Your region can be renamed at any time.", "&e&lClick &7to rename the region.")
|
||||
.build();
|
||||
displayName.addItem(new GuiItem(displayNameItem, event -> {
|
||||
ConversationFactory factory = new ConversationFactory(plugin)
|
||||
.withModality(true)
|
||||
.withPrefix(new RPGRegionsConversationPrefix())
|
||||
.withFirstPrompt(new RPGRegionsStringPrompt("What display name should this region have?"))
|
||||
.withEscapeSequence("quit")
|
||||
.withLocalEcho(true)
|
||||
.withTimeout(60);
|
||||
Conversation conversation = factory.buildConversation(player);
|
||||
conversation.begin();
|
||||
conversation.addConversationAbandonedListener(abandonedEvent -> {
|
||||
region.setCustomName((String) abandonedEvent.getContext().getSessionData("input"));
|
||||
open();
|
||||
});
|
||||
player.closeInventory();
|
||||
}),0, 0);
|
||||
gui.addPane(displayName);
|
||||
|
||||
/*StaticPane description = new StaticPane(0, 3, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack descriptionItem = new ItemStackBuilder(Material.PAPER)
|
||||
.withName("&6Set region description &7- &6" + region.getDiscoveredLore())
|
||||
.withLore("&7What description the region should have.", "&e&lClick &7to set the region description.")
|
||||
.build();
|
||||
description.addItem(new GuiItem(descriptionItem, event -> {
|
||||
ConversationFactory factory = new ConversationFactory(plugin)
|
||||
.withModality(true)
|
||||
.withPrefix(new RPGRegionsConversationPrefix())
|
||||
.withFirstPrompt(new RPGRegionsStringPrompt("What description should this region have?"))
|
||||
.withEscapeSequence("quit")
|
||||
.withLocalEcho(true)
|
||||
.withTimeout(60);
|
||||
Conversation conversation = factory.buildConversation(player);
|
||||
conversation.begin();
|
||||
conversation.addConversationAbandonedListener(abandonedEvent -> {
|
||||
region.setDescription((String) abandonedEvent.getContext().getSessionData("input"));
|
||||
open();
|
||||
});
|
||||
player.closeInventory();
|
||||
}),0, 0);
|
||||
gui.addPane(description);*/
|
||||
|
||||
StaticPane delete = new StaticPane(0, 3, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack deleteItem = new ItemStackBuilder(Material.REDSTONE)
|
||||
.withName("&c&lDelete Region")
|
||||
.withLore(" ", "&cThis action cannot be undone.", " ", "&c&lShift-Click &7to delete the region.")
|
||||
.build();
|
||||
delete.addItem(new GuiItem(deleteItem, event -> {
|
||||
if (event.getClick() == ClickType.SHIFT_LEFT) {
|
||||
//TODO chat delete
|
||||
}
|
||||
player.closeInventory();
|
||||
}),0, 0);
|
||||
gui.addPane(delete);
|
||||
|
||||
StaticPane requirements = new StaticPane(4, 2, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack requirementsItem = new ItemStackBuilder(Material.COMPARATOR)
|
||||
.withName("&6Requirements")
|
||||
.withLore("&7Requirements before a region can", "&7be entered by a player", "&e&lClick &7to edit region requirements.")
|
||||
.build();
|
||||
requirements.addItem(new GuiItem(requirementsItem, event -> {
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1f, 1f);
|
||||
ItemStack editRequirements = new ItemStackBuilder(Material.WRITABLE_BOOK)
|
||||
.withName("&6Edit requirements")
|
||||
.build();
|
||||
ItemStack addObjectives = new ItemStackBuilder(Material.WRITABLE_BOOK)
|
||||
.withName("&6Add requirements")
|
||||
.build();
|
||||
GuiItem editRequirementGuiItem = new GuiItem(editRequirements, click -> {
|
||||
new EditRegionElementGUI(plugin, player, region, plugin.getManagers().getRegistry(RegionRequirementRegistry.class)).open();
|
||||
XSound.ITEM_BOOK_PAGE_TURN.play(player, 1f, 1f);
|
||||
});
|
||||
GuiItem addRequirementGuiItem = new GuiItem(addObjectives, click -> {
|
||||
new AddRegionElementGUI(plugin, player, region, plugin.getManagers().getRegistry(RegionRequirementRegistry.class)).open();
|
||||
XSound.ITEM_BOOK_PAGE_TURN.play(player, 1f, 1f);
|
||||
});
|
||||
new QueryGUI(plugin, player, Arrays.asList(addRequirementGuiItem, editRequirementGuiItem)).open();
|
||||
}),0, 0);
|
||||
gui.addPane(requirements);
|
||||
|
||||
StaticPane effects = new StaticPane(6, 2, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack effectsItem = new ItemStackBuilder(Material.WRITABLE_BOOK)
|
||||
.withName("&6Effects")
|
||||
.withLore("&7Effects that are present within a region.", "&e&lClick &7to edit region effects.")
|
||||
.build();
|
||||
effects.addItem(new GuiItem(effectsItem, event -> {
|
||||
XSound.ITEM_BOOK_PAGE_TURN.play(player);
|
||||
ItemStack editEffects = new ItemStackBuilder(Material.WRITABLE_BOOK)
|
||||
.withName("&6Edit effects")
|
||||
.build();
|
||||
ItemStack addEffects = new ItemStackBuilder(Material.WRITABLE_BOOK)
|
||||
.withName("&6Add effects")
|
||||
.build();
|
||||
GuiItem editEffectGuiItem = new GuiItem(editEffects, click -> {
|
||||
new EditRegionElementGUI(plugin, player, region, plugin.getManagers().getRegistry(RegionEffectRegistry.class)).open();
|
||||
XSound.ITEM_BOOK_PAGE_TURN.play(player);
|
||||
});
|
||||
GuiItem addEffectGuiItem = new GuiItem(addEffects, click -> {
|
||||
new AddRegionElementGUI(plugin, player, region, plugin.getManagers().getRegistry(RegionEffectRegistry.class)).open();
|
||||
XSound.ITEM_BOOK_PAGE_TURN.play(player);
|
||||
});
|
||||
new QueryGUI(plugin, player, Arrays.asList(addEffectGuiItem, editEffectGuiItem)).open();
|
||||
}),0, 0);
|
||||
gui.addPane(effects);
|
||||
|
||||
StaticPane hidden = new StaticPane(6, 3, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack hiddenItem = new ItemStackBuilder(Material.ORANGE_BANNER)
|
||||
.withName("&6Toggle hidden region &7- &6" + region.isHidden())
|
||||
.withLore("&7A hidden region does", "&7not appear in GUIs.", "&c&lShift-Click &7to toggle hidden region.")
|
||||
.build();
|
||||
hidden.addItem(new GuiItem(hiddenItem, event -> {
|
||||
if (event.getClick() == ClickType.SHIFT_LEFT) {
|
||||
region.setHidden(!region.isHidden());
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_TRIPWIRE_CLICK_ON, 1f, 1f);
|
||||
open();
|
||||
}
|
||||
}),0, 0);
|
||||
gui.addPane(hidden);
|
||||
|
||||
StaticPane discoverable = new StaticPane(6, 4, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack discoverableItem = new ItemStackBuilder(Material.GREEN_BANNER)
|
||||
.withName("&6Toggle discoverable &7- &6" + region.isDiscoverable())
|
||||
.withLore("&7Whether this region can be discovered.", "&c&lShift-Click &7to toggle restartable.")
|
||||
.build();
|
||||
discoverable.addItem(new GuiItem(discoverableItem, event -> {
|
||||
if (event.getClick() == ClickType.SHIFT_LEFT) {
|
||||
region.setDiscoverable(!region.isDiscoverable());
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_TRIPWIRE_CLICK_ON, 1f, 1f);
|
||||
open();
|
||||
}
|
||||
}),0, 0);
|
||||
gui.addPane(discoverable);
|
||||
|
||||
StaticPane teleportable = new StaticPane(6, 5, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack teleportableItem = new ItemStackBuilder(Material.RED_BANNER)
|
||||
.withName("&6Toggle teleportable &7- &6" + region.isTeleportable())
|
||||
.withLore("&7Whether this region can be teleported to.", "&c&lShift-Click &7to toggle teleportable.")
|
||||
.build();
|
||||
teleportable.addItem(new GuiItem(teleportableItem, event -> {
|
||||
if (event.getClick() == ClickType.SHIFT_LEFT) {
|
||||
region.setTeleportable(!region.isTeleportable());
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_TRIPWIRE_CLICK_ON, 1f, 1f);
|
||||
open();
|
||||
}
|
||||
}),0, 0);
|
||||
gui.addPane(teleportable);
|
||||
|
||||
StaticPane rewards = new StaticPane(8, 2, 1, 1, Pane.Priority.HIGH);
|
||||
ItemStack rewardsItem = new ItemStackBuilder(Material.CHEST)
|
||||
.withName("&6Rewards")
|
||||
.withLore("&7Rewards are granted upon region discovery", "&e&lClick &7to edit region rewards.")
|
||||
.build();
|
||||
rewards.addItem(new GuiItem(rewardsItem, event -> {
|
||||
player.playSound(player.getLocation(), Sound.BLOCK_CHEST_OPEN, 1f, 1f);
|
||||
ItemStack editRewards = new ItemStackBuilder(Material.WRITABLE_BOOK)
|
||||
.withName("&6Edit rewards")
|
||||
.build();
|
||||
ItemStack addRewards = new ItemStackBuilder(Material.WRITABLE_BOOK)
|
||||
.withName("&6Add rewards")
|
||||
.build();
|
||||
GuiItem editRewardGuiItem = new GuiItem(editRewards, click -> {
|
||||
new EditRegionElementGUI(plugin, player, region, plugin.getManagers().getRegistry(RegionRewardRegistry.class)).open();
|
||||
XSound.ITEM_BOOK_PAGE_TURN.play(player);
|
||||
});
|
||||
GuiItem addRewardGuiItem = new GuiItem(addRewards, click -> {
|
||||
new AddRegionElementGUI(plugin, player, region, plugin.getManagers().getRegistry(RegionRewardRegistry.class)).open();
|
||||
XSound.ITEM_BOOK_PAGE_TURN.play(player);
|
||||
});
|
||||
new QueryGUI(plugin, player, Arrays.asList(addRewardGuiItem, editRewardGuiItem)).open();
|
||||
}),0, 0);
|
||||
gui.addPane(rewards);
|
||||
gui.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChestGui getGui() {
|
||||
return gui;
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,11 @@ import net.islandearth.rpgregions.command.IconCommand;
|
||||
import net.islandearth.rpgregions.effects.PotionRegionEffect;
|
||||
import net.islandearth.rpgregions.effects.RegionEffect;
|
||||
import net.islandearth.rpgregions.effects.RegionEffectRegistry;
|
||||
import net.islandearth.rpgregions.gui.element.BooleanGuiFieldElement;
|
||||
import net.islandearth.rpgregions.gui.element.GuiFieldElementRegistry;
|
||||
import net.islandearth.rpgregions.gui.element.IGuiFieldElementRegistry;
|
||||
import net.islandearth.rpgregions.gui.element.IntegerGuiFieldElement;
|
||||
import net.islandearth.rpgregions.gui.element.ItemStackGuiFieldElement;
|
||||
import net.islandearth.rpgregions.managers.data.IRPGRegionsCache;
|
||||
import net.islandearth.rpgregions.managers.data.IStorageManager;
|
||||
import net.islandearth.rpgregions.managers.data.RPGRegionsCache;
|
||||
@@ -61,6 +66,7 @@ public class RPGRegionsManagers implements IRPGRegionsManagers {
|
||||
private final IRPGRegionsCache regionsCache;
|
||||
private final IRegenerationManager regenerationManager;
|
||||
private final Map<Class<? extends RPGRegionsRegistry<?>>, RPGRegionsRegistry<?>> registry;
|
||||
private final IGuiFieldElementRegistry guiFieldElementRegistry;
|
||||
|
||||
public RPGRegionsManagers(RPGRegions plugin) throws ReflectiveOperationException, IllegalStateException, IOException {
|
||||
StorageType.valueOf(plugin.getConfig().getString("settings.storage.mode").toUpperCase())
|
||||
@@ -154,6 +160,11 @@ public class RPGRegionsManagers implements IRPGRegionsManagers {
|
||||
if (Bukkit.getPluginManager().getPlugin("Plan") != null) {
|
||||
new PlanRegistryManager(plugin);
|
||||
}
|
||||
|
||||
this.guiFieldElementRegistry = new GuiFieldElementRegistry();
|
||||
guiFieldElementRegistry.register(new BooleanGuiFieldElement());
|
||||
guiFieldElementRegistry.register(new IntegerGuiFieldElement());
|
||||
guiFieldElementRegistry.register(new ItemStackGuiFieldElement());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -176,6 +187,11 @@ public class RPGRegionsManagers implements IRPGRegionsManagers {
|
||||
return regenerationManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IGuiFieldElementRegistry getGuiFieldElementRegistry() {
|
||||
return guiFieldElementRegistry;
|
||||
}
|
||||
|
||||
public Map<Class<? extends RPGRegionsRegistry<?>>, RPGRegionsRegistry<?>> getRegistry() {
|
||||
return registry;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package net.islandearth.rpgregions.requirements;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class LevelRequirement extends RegionRequirement {
|
||||
|
||||
@GuiEditable("Level")
|
||||
private final int level;
|
||||
|
||||
public LevelRequirement(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
package net.islandearth.rpgregions.requirements;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
|
||||
public class MoneyRequirement extends RegionRequirement {
|
||||
|
||||
|
||||
@GuiEditable("Money")
|
||||
private final double money;
|
||||
|
||||
public MoneyRequirement(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -4,13 +4,14 @@ import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public final class PermissionRequirement extends QuestRequirement {
|
||||
public final class PermissionRequirement extends RegionRequirement {
|
||||
|
||||
@GuiEditable("Permission")
|
||||
private String permission;
|
||||
private final String permission;
|
||||
|
||||
public PermissionRequirement(IRPGRegionsAPI api) {
|
||||
super(api);
|
||||
this.permission = "rpgregions.admin";
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -22,4 +23,9 @@ public final class PermissionRequirement extends QuestRequirement {
|
||||
public String getName() {
|
||||
return "Permission";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Player player) {
|
||||
return "Permission " + permission;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,17 +2,21 @@ package net.islandearth.rpgregions.requirements;
|
||||
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PlaceholderRequirement extends RegionRequirement {
|
||||
|
||||
private final CompareType integerCompareType;
|
||||
@GuiEditable("The Placeholder")
|
||||
private final String placeholder;
|
||||
@GuiEditable("Value to equal")
|
||||
private final String equal;
|
||||
|
||||
public PlaceholderRequirement(IRPGRegionsAPI api) {
|
||||
this(api, "", "");
|
||||
}
|
||||
|
||||
public PlaceholderRequirement(IRPGRegionsAPI api, String placeholder, String equal) {
|
||||
super(api);
|
||||
this.integerCompareType = CompareType.GREATER_THAN_OR_EQUAL_TO;
|
||||
|
||||
@@ -4,6 +4,7 @@ import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
@@ -11,6 +12,7 @@ import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class QuestRequirement extends RegionRequirement {
|
||||
|
||||
@GuiEditable("Quest id")
|
||||
private final String questId;
|
||||
|
||||
public QuestRequirement(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -12,8 +12,8 @@ public final class RegionRequirementRegistry extends RPGRegionsRegistry<RegionRe
|
||||
@Override
|
||||
public @Nullable RegionRequirement getNew(Class<? extends RegionRequirement> clazz, IRPGRegionsAPI plugin, Object... data) {
|
||||
try {
|
||||
Constructor<?> constructor = clazz.getConstructor();
|
||||
return (RegionRequirement) constructor.newInstance();
|
||||
Constructor<?> constructor = clazz.getConstructor(IRPGRegionsAPI.class);
|
||||
return (RegionRequirement) constructor.newInstance(plugin);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package net.islandearth.rpgregions.rewards;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class ConsoleCommandReward extends DiscoveryReward {
|
||||
|
||||
@GuiEditable("Command")
|
||||
private final String command;
|
||||
|
||||
public ConsoleCommandReward(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package net.islandearth.rpgregions.rewards;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class ExperienceReward extends DiscoveryReward {
|
||||
|
||||
|
||||
@GuiEditable("Experience")
|
||||
private final int xp;
|
||||
|
||||
public ExperienceReward(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package net.islandearth.rpgregions.rewards;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ItemReward extends DiscoveryReward {
|
||||
|
||||
|
||||
@GuiEditable("Item")
|
||||
private final ItemStack item;
|
||||
|
||||
public ItemReward(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package net.islandearth.rpgregions.rewards;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
|
||||
public abstract class LevelReward extends DiscoveryReward {
|
||||
|
||||
@GuiEditable("Level")
|
||||
private final int level;
|
||||
|
||||
public LevelReward(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.islandearth.rpgregions.rewards;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -8,6 +9,7 @@ import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
|
||||
public class MoneyReward extends DiscoveryReward {
|
||||
|
||||
@GuiEditable("Money")
|
||||
private final int amount;
|
||||
|
||||
public MoneyReward(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package net.islandearth.rpgregions.rewards;
|
||||
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PlayerCommandReward extends DiscoveryReward {
|
||||
|
||||
@GuiEditable("Command")
|
||||
private final String command;
|
||||
|
||||
public PlayerCommandReward(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
|
||||
import net.islandearth.rpgregions.gui.GuiEditable;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
@@ -11,6 +12,7 @@ import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class QuestReward extends DiscoveryReward {
|
||||
|
||||
@GuiEditable("Quest id")
|
||||
private final String questId;
|
||||
|
||||
public QuestReward(IRPGRegionsAPI api) {
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package net.islandearth.rpgregions.utils;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class ReflectionUtils {
|
||||
|
||||
/**
|
||||
* Gets all fields from all super classes (up to Object.class) with the specified annotation.
|
||||
* @param target origin class
|
||||
* @param annotation annotation to find
|
||||
* @return {@link CompletableFuture} with a list of the annotated fields
|
||||
*/
|
||||
public static CompletableFuture<List<Field>> getSuperFieldsFromAnnotationAsync(Class<?> target, Class<? extends Annotation> annotation) {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
List<Field> fields = new ArrayList<>();
|
||||
Class<?> current = target;
|
||||
while (!current.equals(Object.class)) {
|
||||
for (Field declaredField : current.getDeclaredFields()) {
|
||||
if (declaredField.isAnnotationPresent(annotation)) {
|
||||
fields.add(declaredField);
|
||||
}
|
||||
}
|
||||
current = current.getSuperclass();
|
||||
}
|
||||
return fields;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user