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 06a0e93..8310cd7 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 @@ -12,6 +12,7 @@ import net.islandearth.rpgregions.regenerate.Regenerate; import net.islandearth.rpgregions.requirements.RegionRequirement; import net.islandearth.rpgregions.rewards.DiscoveryReward; import net.islandearth.rpgregions.translation.Translations; +import net.islandearth.rpgregions.utils.ItemStackBuilder; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -46,6 +47,7 @@ public class ConfiguredRegion { @NeedsGUI private Sound sound; @NeedsGUI private String icon; private int iconModel; + private int undiscoveredIconModel; @NeedsGUI private String undiscoveredIcon; private final List iconCommand; @EditableField(description = "Toggle whether the coordinates of the region are shown", name = "Toggle coordinates") @@ -142,8 +144,8 @@ public class ConfiguredRegion { @Nullable public ItemStack getIcon() { if (icon == null) return new ItemStack(Material.TOTEM_OF_UNDYING); - if (icon.startsWith("hdb-") && RPGRegionsAPI.getAPI().hasHeadDatabase()) return new ItemStack(new HeadDatabaseAPI().getItemHead(icon.replace("hdb-", ""))); - return new ItemStack(Material.valueOf(icon)); + if (icon.startsWith("hdb-") && RPGRegionsAPI.getAPI().hasHeadDatabase()) return new ItemStackBuilder(new HeadDatabaseAPI().getItemHead(icon.replace("hdb-", ""))).withModel(iconModel).build(); + return new ItemStackBuilder(Material.valueOf(icon)).withModel(iconModel).build(); } public void setIcon(@NotNull Material material) { @@ -161,14 +163,22 @@ public class ConfiguredRegion { @Nullable public ItemStack getUndiscoveredIcon() { if (undiscoveredIcon == null) return new ItemStack(Material.TOTEM_OF_UNDYING); - if (undiscoveredIcon.startsWith("hdb-") && RPGRegionsAPI.getAPI().hasHeadDatabase()) return new ItemStack(new HeadDatabaseAPI().getItemHead(undiscoveredIcon.replace("hdb-", ""))); - return new ItemStack(Material.valueOf(undiscoveredIcon)); + if (undiscoveredIcon.startsWith("hdb-") && RPGRegionsAPI.getAPI().hasHeadDatabase()) return new ItemStackBuilder(new HeadDatabaseAPI().getItemHead(undiscoveredIcon.replace("hdb-", ""))).withModel(undiscoveredIconModel).build(); + return new ItemStackBuilder(Material.valueOf(undiscoveredIcon)).withModel(undiscoveredIconModel).build(); } public void setUndiscoveredIcon(@NotNull Material material) { this.undiscoveredIcon = material.name(); } + public int getUndiscoveredIconModel() { + return undiscoveredIconModel; + } + + public void setUndiscoveredIconModel(int undiscoveredIconModel) { + this.undiscoveredIconModel = undiscoveredIconModel; + } + @NotNull public List getIconCommand() { return iconCommand == null ? new ArrayList<>() : iconCommand; diff --git a/api/src/main/java/net/islandearth/rpgregions/utils/ItemStackBuilder.java b/api/src/main/java/net/islandearth/rpgregions/utils/ItemStackBuilder.java index 973e37e..5d9a9e9 100644 --- a/api/src/main/java/net/islandearth/rpgregions/utils/ItemStackBuilder.java +++ b/api/src/main/java/net/islandearth/rpgregions/utils/ItemStackBuilder.java @@ -136,7 +136,7 @@ public class ItemStackBuilder { public ItemStackBuilder withModel(int model) { final ItemMeta meta = ITEM_STACK.getItemMeta(); - //meta.setCustomModelData(model); + meta.setCustomModelData(model); ITEM_STACK.setItemMeta(meta); return this; } diff --git a/build.gradle.kts b/build.gradle.kts index 3b07909..21932dc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ dependencies { allprojects { group = "net.islandearth.rpgregions" - version = "1.4.3" + version = "1.4.4" //tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is diff --git a/gradle.properties b/gradle.properties index 36f7b77..dbe98a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ pluginGroup=net.islandearth -pluginVersion=1.4.2 +pluginVersion=1.4.4 # Set to false if you don't have access to the UltraRegions API jar to make the plugin compilable. The purchased plugin has support for it. ultraRegionsSupport=true 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 2d133c3..caf8cd6 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java @@ -52,6 +52,7 @@ public class RegionCreateGUI extends RPGRegionsGUI { ItemStack regionInfoItem = new ItemStackBuilder(region.getIcon()).withModel(region.getIconModel()) .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.") + .withModel(region.getIconModel()) .build(); regionInfo.addItem(new GuiItem(regionInfoItem, event -> { region.save(plugin); @@ -59,10 +60,42 @@ public class RegionCreateGUI extends RPGRegionsGUI { }),0, 0); gui.addPane(regionInfo); + StaticPane undiscoveredModel = new StaticPane(7, 0, 1, 1, Pane.Priority.HIGH); + ItemStack undiscoveredModelItem = new ItemStackBuilder(region.getUndiscoveredIcon().getType()) + .withName("&6Set undiscovered icon material & model &7- &6" + region.getUndiscoveredIcon().getType() + " (" + region.getUndiscoveredIconModel() + ")") + .withLore("&7Set the material & custom model data of the icon.", "", "&e&lClick &7to set material and icon model.") + .withModel(region.getUndiscoveredIconModel()) + .build(); + undiscoveredModel.addItem(new GuiItem(undiscoveredModelItem, event -> { + new ReturnValueConversationPreset(player, "Enter the material and/or model, split using ':'. Example: TOTEM_OF_UNDYING:1", input -> { + final String[] split = input.split(":"); + try { + final Optional materialOptional = Enums.getIfPresent(Material.class, split[0]); + if (!materialOptional.isPresent()) { + player.sendMessage(ChatColor.RED + "'" + split[0] + "' is not a valid material."); + open(); + return; + } + + try { + final int potentialModel = Integer.parseInt(split[1]); + region.setUndiscoveredIconModel(potentialModel); + } catch (IndexOutOfBoundsException ignored) {} + region.setUndiscoveredIcon(materialOptional.get()); + } catch (NumberFormatException e) { + player.sendMessage(ChatColor.RED + "'" + split[1] + "' is not a valid number."); + } + open(); + }); + player.closeInventory(); + }),0, 0); + gui.addPane(undiscoveredModel); + StaticPane model = new StaticPane(8, 0, 1, 1, Pane.Priority.HIGH); - ItemStack modelItem = new ItemStackBuilder(Material.PAPER) + ItemStack modelItem = new ItemStackBuilder(region.getIcon().getType()) .withName("&6Set icon material & model &7- &6" + region.getIcon().getType() + " (" + region.getIconModel() + ")") .withLore("&7Set the material & custom model data of the icon.", "", "&e&lClick &7to set material and icon model.") + .withModel(region.getIconModel()) .build(); model.addItem(new GuiItem(modelItem, event -> { new ReturnValueConversationPreset(player, "Enter the material and/or model, split using ':'. Example: TOTEM_OF_UNDYING:1", input -> {