diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java b/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java index bc8e3f94..9ee7fa9a 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java @@ -20,12 +20,13 @@ import java.io.File; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.function.Supplier; public class CosmeticsMenu { - public static final String MAIN_MENU = "main"; - public static final String DYE_MENU = "dye-menu"; + public static final String DEFAULT_MAIN_MENU = "main"; + public static final String DEFAULT_DYE_MENU = "dye-menu"; private final HMCCosmetics plugin; private final CosmeticManager cosmeticManager; @@ -40,13 +41,19 @@ public class CosmeticsMenu { public void openMenu(final String id, final HumanEntity humanEntity) { final CosmeticGui cosmeticGui = this.getGui(id); + if (cosmeticGui instanceof final DyeSelectorGui dyeSelectorGui) { + final Optional optionalUser = this.plugin.getUserManager().get(humanEntity.getUniqueId()); + optionalUser.ifPresent(user -> dyeSelectorGui.getGui(user, user.getLastSetItem().getType()).open(humanEntity)); + return; + } + if (cosmeticGui != null) { cosmeticGui.open(humanEntity); } } public void openDefault(final HumanEntity humanEntity) { - this.openMenu(MAIN_MENU, humanEntity); + this.openMenu(DEFAULT_MAIN_MENU, humanEntity); } public void reload() { @@ -66,7 +73,7 @@ public class CosmeticsMenu { return; } - final CosmeticGui gui = this.getGui(DYE_MENU); + final CosmeticGui gui = this.getGui(DEFAULT_DYE_MENU); if (gui instanceof final DyeSelectorGui dyeSelectorGui) { dyeSelectorGui.getGui(user, type).open(player); @@ -80,6 +87,9 @@ public class CosmeticsMenu { return gui.copy(); } + private static final String GUI_TYPE = "gui-type"; + private static final String DYE_TYPE = "dye"; + public void load() { this.guiMap.clear(); final File file = Path.of(this.plugin.getDataFolder().getPath(), @@ -87,18 +97,18 @@ public class CosmeticsMenu { if (!Path.of(this.plugin.getDataFolder().getPath(), "menus", - MAIN_MENU + ".yml").toFile().exists()) { + DEFAULT_MAIN_MENU + ".yml").toFile().exists()) { this.plugin.saveResource( - new File("menus", MAIN_MENU + ".yml").getPath(), + new File("menus", DEFAULT_MAIN_MENU + ".yml").getPath(), false ); } if (!Path.of(this.plugin.getDataFolder().getPath(), "menus", - DYE_MENU + ".yml").toFile().exists()) { + DEFAULT_DYE_MENU + ".yml").toFile().exists()) { this.plugin.saveResource( - new File("menus", DYE_MENU + ".yml").getPath(), + new File("menus", DEFAULT_DYE_MENU + ".yml").getPath(), false ); } @@ -132,8 +142,17 @@ public class CosmeticsMenu { try { final ConfigurationNode source = loader.load(); + final ConfigurationNode typeNode = source.node(GUI_TYPE); - if (id.equals(DYE_MENU)) { + final String type; + + if (typeNode != null) { + type = typeNode.getString(); + } else { + type = ""; + } + + if (id.equals(DEFAULT_DYE_MENU) || DYE_TYPE.equals(type)) { this.guiMap.put(id, DyeGuiSerializer.INSTANCE.deserialize(DyeSelectorGui.class, source)); this.plugin.getLogger().info("Loaded dye gui: " + id); continue; diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/listener/RespawnListener.java b/src/main/java/io/github/fisher2911/hmccosmetics/listener/RespawnListener.java index 4e122aa2..f093cee2 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/listener/RespawnListener.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/listener/RespawnListener.java @@ -23,7 +23,7 @@ public class RespawnListener implements Listener { @EventHandler public void onPlayerRespawn(final PlayerRespawnEvent event) { - Bukkit.getScheduler().runTaskLaterAsynchronously(this.plugin, () -> { + Bukkit.getScheduler().runTaskLater(this.plugin, () -> { final Player player = event.getPlayer(); final Optional optionalUser = this.userManager.get(player.getUniqueId()); optionalUser.ifPresent(user -> { diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java index 0f0896e4..91701d7e 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java @@ -170,7 +170,6 @@ public class UserManager { if (!isAir && (!requireEmpty || ignoreRestrictions)) return itemStack; - if (equipment == null) return itemStack; final ItemStack equipped = equipment.getItem(slot); diff --git a/src/main/resources/menus/dye-menu.yml b/src/main/resources/menus/dye-menu.yml index d98affe0..f42de906 100644 --- a/src/main/resources/menus/dye-menu.yml +++ b/src/main/resources/menus/dye-menu.yml @@ -1,5 +1,6 @@ title: "" rows: 4 +gui-type: dye cosmetics-slots: 27: HAT 28: BACKPACK