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 48815bc..06a0e93 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 @@ -45,6 +45,7 @@ public class ConfiguredRegion { private final List rewards; @NeedsGUI private Sound sound; @NeedsGUI private String icon; + private int iconModel; @NeedsGUI private String undiscoveredIcon; private final List iconCommand; @EditableField(description = "Toggle whether the coordinates of the region are shown", name = "Toggle coordinates") @@ -149,6 +150,14 @@ public class ConfiguredRegion { this.icon = material.name(); } + public int getIconModel() { + return iconModel; + } + + public void setIconModel(int iconModel) { + this.iconModel = iconModel; + } + @Nullable public ItemStack getUndiscoveredIcon() { if (undiscoveredIcon == null) return new ItemStack(Material.TOTEM_OF_UNDYING); diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java index 11bfdac..4d3db21 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java @@ -228,6 +228,7 @@ public class DiscoveryGUI extends RPGRegionsGUI { ? new ItemStackBuilder(configuredRegion.getIcon()) .withLore(translatedDiscoveredLore) + .withModel(configuredRegion.getIconModel()) .build() : new ItemStackBuilder(configuredRegion.getUndiscoveredIcon()) 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 9419d5e..e073861 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/RegionCreateGUI.java @@ -5,6 +5,8 @@ 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 com.google.common.base.Enums; +import com.google.common.base.Optional; import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.chat.preset.ConfirmConversationPreset; import net.islandearth.rpgregions.chat.preset.ReturnValueConversationPreset; @@ -47,7 +49,7 @@ public class RegionCreateGUI extends RPGRegionsGUI { gui.addPane(oPane); StaticPane regionInfo = new StaticPane(4, 0, 1, 1, Pane.Priority.HIGH); - ItemStack regionInfoItem = new ItemStackBuilder(Material.TOTEM_OF_UNDYING) + 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.") .build(); @@ -57,6 +59,34 @@ public class RegionCreateGUI extends RPGRegionsGUI { }),0, 0); gui.addPane(regionInfo); + StaticPane model = new StaticPane(8, 0, 1, 1, Pane.Priority.HIGH); + ItemStack modelItem = new ItemStackBuilder(Material.PAPER) + .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.") + .build(); + model.addItem(new GuiItem(modelItem, event -> { + new ReturnValueConversationPreset(player, "Enter the material and 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; + } + + final int potentialModel = Integer.parseInt(split[1]); + region.setIconModel(potentialModel); + region.setIcon(materialOptional.get()); + } catch (NumberFormatException e) { + player.sendMessage(ChatColor.RED + "'" + split[1] + "' is not a valid number."); + } + open(); + }); + player.closeInventory(); + }),0, 0); + gui.addPane(model); + 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())