diff --git a/common/build.gradle.kts b/common/build.gradle.kts index d5d27046..2b1ab8b9 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { compileOnly("com.ticxo.modelengine:api:R3.0.1") compileOnly("com.github.oraxen:oraxen:-SNAPSHOT") compileOnly("com.github.LoneDev6:API-ItemsAdder:3.2.5") // TODO Work on this + compileOnly("com.hibiscus:hmccolor:0.1-SNAPSHOT") //compileOnly("com.github.Fisher2911:FisherLib:master-SNAPSHOT") implementation("net.kyori:adventure-api:4.11.0") @@ -34,4 +35,4 @@ tasks { java { toolchain.languageVersion.set(JavaLanguageVersion.of(17 )) -} \ No newline at end of file +} diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java index 7ff732f9..598039c9 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommand.java @@ -7,8 +7,10 @@ import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetics; import com.hibiscusmc.hmccosmetics.database.Database; import com.hibiscusmc.hmccosmetics.gui.Menu; import com.hibiscusmc.hmccosmetics.gui.Menus; +import com.hibiscusmc.hmccosmetics.gui.special.DyeMenu; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; +import io.th0rgal.oraxen.utils.logs.Logs; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; @@ -17,6 +19,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; + public class CosmeticCommand implements CommandExecutor { // cosmetics apply cosmetics playerName @@ -115,6 +119,15 @@ public class CosmeticCommand implements CommandExecutor { if (player == null) return true; Database.clearData(player.getUniqueId()); sender.sendMessage("Cleared data for " + player.getName()); + return true; + } + + else if (args[0].equalsIgnoreCase("dye") && args.length == 2) { + Player player = sender instanceof Player ? (Player) sender : null; + if (player == null) return true; + CosmeticUser user = CosmeticUsers.getUser(player); + if (user == null) return true; + DyeMenu.openMenu(user, user.getCosmetic(CosmeticSlot.valueOf(args[1]))); } return true; } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java index 8df73253..e3e50979 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/command/CosmeticCommandTabComplete.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -28,6 +29,7 @@ public class CosmeticCommandTabComplete implements TabCompleter { completions.add("menu"); completions.add("reload"); completions.add("dataclear"); + completions.add("dye"); } // This needs to be redone. @@ -44,6 +46,9 @@ public class CosmeticCommandTabComplete implements TabCompleter { for (Player player : Bukkit.getOnlinePlayers()) { completions.add(player.getName()); } + } else if (args[0].equalsIgnoreCase("dye")) { + completions.add(CosmeticSlot.BALLOON.name()); + completions.add(CosmeticSlot.BACKPACK.name()); } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/special/DyeMenu.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/special/DyeMenu.java index 17653d75..22db617f 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/special/DyeMenu.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/gui/special/DyeMenu.java @@ -1,17 +1,25 @@ package com.hibiscusmc.hmccosmetics.gui.special; +import com.hibiscusmc.hmccolor.HMCColorApi; +import com.hibiscusmc.hmccolor.gui.guis.Gui; +import com.hibiscusmc.hmccolor.gui.guis.GuiItem; import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticArmorType; import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBackpackType; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; +import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.hibiscusmc.hmccosmetics.util.misc.Adventure; import com.hibiscusmc.hmccosmetics.util.misc.Placeholder; import dev.triumphteam.gui.builder.item.ItemBuilder; -import dev.triumphteam.gui.guis.Gui; -import dev.triumphteam.gui.guis.GuiItem; import net.kyori.adventure.text.Component; +import org.bukkit.Color; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.PotionMeta; + +import java.util.Objects; public class DyeMenu { @@ -20,27 +28,31 @@ public class DyeMenu { public static void openMenu(CosmeticUser user, Cosmetic cosmetic) { - ItemStack originalItem = null; - - if (cosmetic instanceof CosmeticBackpackType) originalItem = ((CosmeticBackpackType) cosmetic).getBackpackItem(); - if (cosmetic instanceof CosmeticArmorType) originalItem = ((CosmeticArmorType) cosmetic).getCosmeticItem(); - if (originalItem == null) return; + ItemStack originalItem = user.getUserCosmeticItem(cosmetic); + if (originalItem == null || !cosmetic.isDyable()) return; Player player = user.getPlayer(); - final Component component = Adventure.MINI_MESSAGE.deserialize(Placeholder.applyPapiPlaceholders(player, "Dying Menu")); - Gui gui = Gui.gui(). - title(component). - rows(6). - create(); - - gui.setDefaultClickAction(event -> event.setCancelled(true)); - - gui.setItem(1, ItemBuilder.from(originalItem).asGuiItem()); - GuiItem guiItem = ItemBuilder.from(originalItem).asGuiItem(); + HMCColorApi hmcColorApi = new HMCColorApi(); + Gui gui = hmcColorApi.getColorMenu(); + gui.updateTitle(Placeholder.applyPapiPlaceholders(player, "Dyeing Menu")); + gui.setItem(19, new GuiItem(originalItem)); + gui.setDefaultTopClickAction(event -> { + if (event.getSlot() == 25) { + ItemStack item = event.getInventory().getItem(25); + if (item == null) return; + ItemMeta meta = item.getItemMeta(); + if (meta == null) return; + Color color = meta instanceof LeatherArmorMeta ? ((LeatherArmorMeta) meta).getColor() : + meta instanceof PotionMeta ? ((PotionMeta) meta).getColor() : null; + if (color == null) return; + //user.removeCosmeticSlot(cosmetic); + user.addPlayerCosmetic(cosmetic, color); + player.closeInventory(); + } else event.setCancelled(true); + }); + gui.setPlayerInventoryAction(event -> event.setCancelled(true)); + gui.setCloseGuiAction(event -> player.closeInventory()); gui.open(player); - } - - }