diff --git a/api/src/main/java/net/islandearth/rpgregions/editor/annotate/NeedsGUI.java b/api/src/main/java/net/islandearth/rpgregions/editor/annotate/NeedsGUI.java new file mode 100644 index 0000000..a75e472 --- /dev/null +++ b/api/src/main/java/net/islandearth/rpgregions/editor/annotate/NeedsGUI.java @@ -0,0 +1,13 @@ +package net.islandearth.rpgregions.editor.annotate; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Specifies that a field needs GUI implementation + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface NeedsGUI { } diff --git a/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffectRegistry.java b/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffectRegistry.java index d84343d..dc84e9c 100644 --- a/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffectRegistry.java +++ b/api/src/main/java/net/islandearth/rpgregions/effects/RegionEffectRegistry.java @@ -6,6 +6,8 @@ import org.bukkit.Material; import org.jetbrains.annotations.Nullable; import java.lang.reflect.Constructor; +import java.util.Arrays; +import java.util.List; public final class RegionEffectRegistry extends RPGRegionsRegistry { @@ -22,7 +24,7 @@ public final class RegionEffectRegistry extends RPGRegionsRegistry @Override public String getRegistryName() { - return "effects"; + return "Effects"; } @Override @@ -32,6 +34,11 @@ public final class RegionEffectRegistry extends RPGRegionsRegistry @Override public Material getIcon() { - return Material.POTION; + return Material.WRITABLE_BOOK; + } + + @Override + public List getDescription() { + return Arrays.asList("&7Effects that are present within a region.", "&e&lClick &7to edit region effects."); } } diff --git a/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java b/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java index 5e2355f..04cf93c 100644 --- a/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java +++ b/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java @@ -6,6 +6,7 @@ import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.islandearth.rpgregions.api.RPGRegionsAPI; import net.islandearth.rpgregions.command.IconCommand; import net.islandearth.rpgregions.editor.annotate.EditableField; +import net.islandearth.rpgregions.editor.annotate.NeedsGUI; import net.islandearth.rpgregions.effects.RegionEffect; import net.islandearth.rpgregions.regenerate.Regenerate; import net.islandearth.rpgregions.requirements.RegionRequirement; @@ -40,31 +41,27 @@ public class ConfiguredRegion { private final UUID world; private final String id; - @EditableField(material = Material.NAME_TAG, name = "Set name", description = "Set the display name of the region") private String customName; private final List rewards; - private Sound sound; - private String icon; - private String undiscoveredIcon; + @NeedsGUI private Sound sound; + @NeedsGUI private String icon; + @NeedsGUI private String undiscoveredIcon; private final List iconCommand; @EditableField(description = "Toggle whether the coordinates of the region are shown", name = "Toggle coordinates") - private final boolean showCoords; + @NeedsGUI private final boolean showCoords; @EditableField(material = Material.ENDER_PEARL, name = "Set teleport location", description = "Set the teleport location to your current location") - private Location location; - private final List hints; + @NeedsGUI private Location location; + @NeedsGUI private final List hints; @EditableField(description = "Toggle whether the hint is shown", name = "Toggle hint") - private final boolean showHint; - @EditableField(description = "Toggle whether this region can be teleported to", name = "Toggle teleportable") + @NeedsGUI private final boolean showHint; 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 effects; private final List requirements; private final List discoveredLore; @EditableField(description = "Toggle whether the title is always shown on entry after discovery", name = "Toggle always showing titles") - private final boolean alwaysShowTitles; + @NeedsGUI private final boolean alwaysShowTitles; private List title; private List subtitle; private List discoveredTitle; @@ -72,11 +69,11 @@ public class ConfiguredRegion { private Regenerate regenerate; @EditableField(material = Material.NETHER_STAR, name = "Set teleport cooldown", description = "Set the cooldown for teleportation") private int teleportCooldown; - private boolean showActionbar; + @NeedsGUI private boolean showActionbar; @EditableField(material = Material.RED_DYE, name = "Hex display colour", description = "Set the colour of the region. It is a hex colour (e.g 0x42f4f1 for red) and is used in dynmap.") private final String colour; private final String lineColour; - private final boolean dynmap; + @NeedsGUI private final boolean dynmap; public ConfiguredRegion(@Nullable World world, String id, String customName, List rewards, List effects) { diff --git a/api/src/main/java/net/islandearth/rpgregions/managers/registry/IRPGRegionsRegistry.java b/api/src/main/java/net/islandearth/rpgregions/managers/registry/IRPGRegionsRegistry.java index a0b4548..6e972c3 100644 --- a/api/src/main/java/net/islandearth/rpgregions/managers/registry/IRPGRegionsRegistry.java +++ b/api/src/main/java/net/islandearth/rpgregions/managers/registry/IRPGRegionsRegistry.java @@ -6,6 +6,8 @@ import org.bukkit.Material; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + public interface IRPGRegionsRegistry { @NotNull @@ -29,4 +31,6 @@ public interface IRPGRegionsRegistry { Class getImplementation(); Material getIcon(); + + List getDescription(); } diff --git a/api/src/main/java/net/islandearth/rpgregions/managers/registry/RPGRegionsRegistry.java b/api/src/main/java/net/islandearth/rpgregions/managers/registry/RPGRegionsRegistry.java index e867682..3f5cbb4 100644 --- a/api/src/main/java/net/islandearth/rpgregions/managers/registry/RPGRegionsRegistry.java +++ b/api/src/main/java/net/islandearth/rpgregions/managers/registry/RPGRegionsRegistry.java @@ -6,6 +6,7 @@ import org.bukkit.Material; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -53,4 +54,9 @@ public abstract class RPGRegionsRegistry implements IRPGRegionsRegistry { @Override public abstract Material getIcon(); + + @Override + public List getDescription() { + return List.of(""); + } } diff --git a/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirementRegistry.java b/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirementRegistry.java index 287611c..c31a01c 100644 --- a/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirementRegistry.java +++ b/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirementRegistry.java @@ -7,6 +7,8 @@ import org.bukkit.Material; import org.jetbrains.annotations.Nullable; import java.lang.reflect.Constructor; +import java.util.Arrays; +import java.util.List; public final class RegionRequirementRegistry extends RPGRegionsRegistry { @@ -28,7 +30,7 @@ public final class RegionRequirementRegistry extends RPGRegionsRegistry getDescription() { + return Arrays.asList("&7Requirements before a region can", "&7be entered by a player", "&e&lClick &7to edit region requirements."); } } diff --git a/api/src/main/java/net/islandearth/rpgregions/rewards/RegionRewardRegistry.java b/api/src/main/java/net/islandearth/rpgregions/rewards/RegionRewardRegistry.java index 69898f7..ca48ccc 100644 --- a/api/src/main/java/net/islandearth/rpgregions/rewards/RegionRewardRegistry.java +++ b/api/src/main/java/net/islandearth/rpgregions/rewards/RegionRewardRegistry.java @@ -7,6 +7,8 @@ import org.bukkit.Material; import org.jetbrains.annotations.Nullable; import java.lang.reflect.Constructor; +import java.util.Arrays; +import java.util.List; public final class RegionRewardRegistry extends RPGRegionsRegistry { @@ -28,7 +30,7 @@ public final class RegionRewardRegistry extends RPGRegionsRegistry getDescription() { + return Arrays.asList("&7Rewards are granted upon region discovery", "&e&lClick &7to edit region rewards."); } } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java index 6b8cb33..90f6bba 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java @@ -73,7 +73,6 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.logging.Level; @@ -255,6 +254,7 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang return; } registry.register(PotionRegionEffect.class); + //registry.register(VanishEffect.class); //TODO } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/rpgregions/RPGRegionsIntegration.java b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/rpgregions/RPGRegionsIntegration.java index e494042..704b621 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/rpgregions/RPGRegionsIntegration.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/api/integrations/rpgregions/RPGRegionsIntegration.java @@ -5,8 +5,8 @@ import com.google.gson.Gson; import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.api.IRPGRegionsAPI; import net.islandearth.rpgregions.api.events.RegionsEnterEvent; -import net.islandearth.rpgregions.api.integrations.rpgregions.region.RPGRegionsRegion; import net.islandearth.rpgregions.api.integrations.IntegrationManager; +import net.islandearth.rpgregions.api.integrations.rpgregions.region.RPGRegionsRegion; import net.islandearth.rpgregions.commands.RPGRegionsIntegrationCommand; import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion; import org.bukkit.Bukkit; @@ -18,7 +18,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/effects/VanishEffect.java b/rpgregions/src/main/java/net/islandearth/rpgregions/effects/VanishEffect.java new file mode 100644 index 0000000..9017bd3 --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/effects/VanishEffect.java @@ -0,0 +1,27 @@ +package net.islandearth.rpgregions.effects; + +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import net.islandearth.rpgregions.api.RPGRegionsAPI; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +public class VanishEffect extends RegionEffect { + + public VanishEffect(IRPGRegionsAPI api) { + super(api); + } + + @Override + public void effect(Player player) { + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + onlinePlayer.hidePlayer((Plugin) RPGRegionsAPI.getAPI(), player); + player.hidePlayer((Plugin) RPGRegionsAPI.getAPI(), onlinePlayer); + } + } + + @Override + public String getName() { + return "Vanish"; + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/gson/AbstractAdapter.java b/rpgregions/src/main/java/net/islandearth/rpgregions/gson/AbstractAdapter.java index 839282d..d176119 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/gson/AbstractAdapter.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gson/AbstractAdapter.java @@ -35,7 +35,6 @@ public class AbstractAdapter implements JsonSerializer, JsonDeserializer items; private ChestGui gui; - public QueryGUI(RPGRegions plugin, Player player, List items) { + public QueryGUI(RPGRegions plugin, Player player, ConfiguredRegion region, IRPGRegionsRegistry registry) { super(plugin, player); - this.items = items; + this.items = new ArrayList<>(); + ItemStack edit = new ItemStackBuilder(Material.WRITABLE_BOOK) + .withName("&6Edit " + registry.getRegistryName()) + .build(); + ItemStack add = new ItemStackBuilder(Material.WRITABLE_BOOK) + .withName("&6Add " + registry.getRegistryName()) + .build(); + GuiItem editRegistryGuiItem = new GuiItem(edit, click -> { + new EditRegionElementGUI(plugin, player, region, registry).open(); + XSound.ITEM_BOOK_PAGE_TURN.play(player, 1f, 1f); + }); + GuiItem addRegistryGuiItem = new GuiItem(add, click -> { + new AddRegionElementGUI(plugin, player, region, registry).open(); + XSound.ITEM_BOOK_PAGE_TURN.play(player, 1f, 1f); + }); + items.add(editRegistryGuiItem); + items.add(addRegistryGuiItem); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java index 0b1e03a..b4e9783 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java @@ -8,12 +8,9 @@ import com.github.stefvanschie.inventoryframework.pane.StaticPane; import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.chat.preset.ConfirmConversationPreset; import net.islandearth.rpgregions.chat.preset.ReturnValueConversationPreset; -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.managers.registry.RPGRegionsRegistry; import net.islandearth.rpgregions.utils.ItemStackBuilder; -import net.islandearth.rpgregions.utils.XSound; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.Sound; @@ -22,8 +19,6 @@ 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; @@ -51,16 +46,16 @@ public class RegionCreateGUI extends RPGRegionsGUI { .build())); gui.addPane(oPane); - StaticPane questInfo = new StaticPane(4, 0, 1, 1, Pane.Priority.HIGH); - ItemStack questInfoItem = new ItemStackBuilder(Material.TOTEM_OF_UNDYING) + StaticPane regionInfo = new StaticPane(4, 0, 1, 1, Pane.Priority.HIGH); + ItemStack regionInfoItem = new ItemStackBuilder(Material.TOTEM_OF_UNDYING) .withName("&6" + region.getCustomName()) .withLore("&6Information:", "&fIt is recommended you edit the region file directly!", "&7&o" + region.getFile(plugin), "&7" + region.getDiscoveredLore(), "&e&lClick &7to save the region.") .build(); - questInfo.addItem(new GuiItem(questInfoItem, event -> { + regionInfo.addItem(new GuiItem(regionInfoItem, event -> { region.save(plugin); player.playSound(player.getLocation(), Sound.ITEM_ARMOR_EQUIP_GENERIC, 1f, 1f); }),0, 0); - gui.addPane(questInfo); + gui.addPane(regionInfo); StaticPane displayName = new StaticPane(0, 2, 1, 1, Pane.Priority.HIGH); ItemStack displayNameItem = new ItemStackBuilder(Material.PAPER) @@ -119,55 +114,22 @@ public class RegionCreateGUI extends RPGRegionsGUI { }),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); + int x = 4; + for (RPGRegionsRegistry registry : plugin.getManagers().getRegistries()) { + StaticPane registryPane = new StaticPane(x, 2, 1, 1, Pane.Priority.HIGH); + ItemStackBuilder registryItem = new ItemStackBuilder(registry.getIcon()) + .withName("&6" + registry.getRegistryName()); + for (String description : registry.getDescription()) { + registryItem.withLore(description); // Use this to translate colours + } - 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); + registryPane.addItem(new GuiItem(registryItem.build(), event -> { + player.playSound(player.getLocation(), Sound.BLOCK_ENDER_CHEST_OPEN, 1f, 1f); + new QueryGUI(plugin, player, region, registry).open(); + }),0, 0); + gui.addPane(registryPane); + x = x + 2; + } StaticPane hidden = new StaticPane(6, 3, 1, 1, Pane.Priority.HIGH); ItemStack hiddenItem = new ItemStackBuilder(Material.ORANGE_BANNER) @@ -210,31 +172,6 @@ public class RegionCreateGUI extends RPGRegionsGUI { } }),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(); } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java index f60626f..fd51b76 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java @@ -56,6 +56,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -222,4 +223,8 @@ public class RPGRegionsManagers implements IRPGRegionsManagers { public IRPGRegionsRegistry getRegistry(Class> clazz) { return registry.get(clazz); } + + public Collection> getRegistries() { + return registry.values(); + } }