From b157836887fd9ce3b83d8899161efda510498299 Mon Sep 17 00:00:00 2001 From: unurled Date: Tue, 31 Dec 2024 01:30:31 +0100 Subject: [PATCH 1/2] fix: switch to 2.0 invui and update of minecraft version --- build.gradle.kts | 18 +++--- gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 7 ++- gradlew.bat | 22 +++---- .../me/unurled/sacredrealms/sr/SRLoader.java | 4 +- .../unurled/sacredrealms/sr/gui/BackItem.java | 30 ++++++---- .../sacredrealms/sr/gui/ForwardItem.java | 35 +++++++---- .../sr/gui/attributes/AttributeItem.java | 56 ++++++------------ .../sr/gui/attributes/AttributesGUI.java | 7 +-- .../sr/gui/difficulty/DifficultyGUI.java | 9 ++- .../sr/gui/difficulty/DifficultyItem.java | 36 +++-------- .../sr/gui/entitytype/EntityArmorItem.java | 26 ++------ .../sr/gui/entitytype/EntityBehaviorItem.java | 29 ++------- .../sr/gui/entitytype/EntityExpItem.java | 31 +++------- .../sr/gui/entitytype/EntityItemDisplay.java | 29 ++------- .../sr/gui/entitytype/EntityLevelItem.java | 31 +++------- .../sr/gui/entitytype/EntityLootItem.java | 29 ++------- .../sr/gui/entitytype/EntityNameItem.java | 31 +++------- .../sr/gui/entitytype/EntityStatsItem.java | 29 ++------- .../sr/gui/entitytype/EntityTypeGUI.java | 9 ++- .../sr/gui/entitytype/EntityTypeItem.java | 33 +++-------- .../sr/gui/recordings/CutsceneItem.java | 40 ++++++------- .../sr/gui/recordings/StartRecordingGui.java | 4 +- .../sacredrealms/sr/gui/replay/ReplayGui.java | 4 +- .../sr/gui/replay/ReplayItem.java | 46 +++++++------- .../sr/gui/treasure/CancelItem.java | 28 ++------- .../sr/gui/treasure/ConfirmItem.java | 34 +++-------- .../sr/gui/treasure/DeleteItem.java | 26 ++------ .../sr/gui/treasure/TreasureGUI.java | 5 +- .../sacredrealms/sr/utils/SRPlayerUtils.java | 8 +-- 31 files changed, 233 insertions(+), 465 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index fdfb716..b63be28 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,12 +2,11 @@ import net.minecrell.pluginyml.bukkit.BukkitPluginDescription plugins { `java-library` - id("io.papermc.paperweight.userdev") version "1.7.3" - id("org.sonarqube") version "5.1.0.4882" - id("net.minecrell.plugin-yml.paper") version "0.6.0" + id("io.papermc.paperweight.userdev") version "2.0.0-beta.10" + id("org.sonarqube") version "6.0.1.5171" + id("de.eldoria.plugin-yml.paper") version "0.6.0" } -// from 1.20.5+ upward, spigot is not supported paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION @@ -15,13 +14,14 @@ group = "me.unurled.sacredrealms" version = "0.1.0" description = "The main SR plugin." -val mcVersion = "1.21.1-R0.1-SNAPSHOT" +val mcVersion = "1.21.4-R0.1-SNAPSHOT" val redisVersion = "5.2.0-beta4" -val invuiVersion = "1.36" +val invuiVersion = "2.0.0-alpha.6" val gsonVersion = "2.11.0" -val srcoreVersion = "0.1.2" +val srcoreVersion = "0.2.0" +val packeteventsVersion = "2.7.0" -val javaVersion = 21 +val javaVersion = 23 repositories { mavenCentral() @@ -52,7 +52,7 @@ dependencies { paperLibrary("redis.clients", "jedis", redisVersion) - paperLibrary("com.github.retrooper", "packetevents-spigot", "2.5.0") + paperLibrary("com.github.retrooper", "packetevents-spigot", packeteventsVersion) compileOnly("me.unurled:SR-Core:${srcoreVersion}") } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd4917707c1f8861d8cb53dd15194d4248596..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 34592 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 delta 34555 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b41..cea7a79 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a4..f5feea6 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..9d21a21 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java b/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java index 07ba1d0..227b49d 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java +++ b/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java @@ -21,12 +21,12 @@ public class SRLoader implements PluginLoader { public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) { MavenLibraryResolver resolver = new MavenLibraryResolver(); resolver.addDependency( - new Dependency(new DefaultArtifact("xyz.xenondevs.invui:invui:pom:1.36"), null)); + new Dependency(new DefaultArtifact("xyz.xenondevs.invui:invui:pom:2.0.0-alpha.6"), null)); resolver.addRepository( new RemoteRepository.Builder("invui", "default", "https://repo.xenondevs.xyz/releases/") .build()); - resolver.addDependency(new Dependency(new DefaultArtifact("me.unurled:SR-Core:0.1.1"), null)); + resolver.addDependency(new Dependency(new DefaultArtifact("me.unurled:SR-Core:0.2.0"), null)); resolver.addRepository( new RemoteRepository.Builder("srcore", "default", "https://repo.unurled.me/releases") .build()); diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java index 77b8bd3..d9fb429 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java @@ -1,26 +1,34 @@ package me.unurled.sacredrealms.sr.gui; import org.bukkit.Material; -import xyz.xenondevs.invui.gui.PagedGui; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.AbstractPagedGuiBoundItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.controlitem.PageItem; -public class BackItem extends PageItem { +public class BackItem extends AbstractPagedGuiBoundItem { - public BackItem() { - super(false); - } + public BackItem() {} @Override - public ItemProvider getItemProvider(PagedGui gui) { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { ItemBuilder builder = new ItemBuilder(Material.RED_STAINED_GLASS_PANE); builder - .setDisplayName("§cPrevious Page") + .setCustomName("§cPrevious Page") .addLoreLines( - gui.hasPreviousPage() - ? "§7Go to page §e" + gui.getCurrentPage() + "§7/§e" + gui.getPageAmount() + this.getGui().hasPreviousPage() + ? "§7Go to page §e" + + this.getGui().getPage() + + "§7/§e" + + this.getGui().getPageAmount() : "§cYou can't go further back"); return builder; } + + @Override + public void handleClick( + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) {} } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java index e26666f..28d26b8 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java @@ -1,27 +1,38 @@ package me.unurled.sacredrealms.sr.gui; +import static me.unurled.srcore.utils.Component.comp; + import org.bukkit.Material; -import xyz.xenondevs.invui.gui.PagedGui; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.AbstractPagedGuiBoundItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.controlitem.PageItem; -public class ForwardItem extends PageItem { +public class ForwardItem extends AbstractPagedGuiBoundItem { - public ForwardItem() { - super(true); - } + public ForwardItem() {} @Override - public ItemProvider getItemProvider(PagedGui gui) { + public @NotNull ItemProvider getItemProvider(@NotNull Player player) { ItemBuilder builder = new ItemBuilder(Material.GREEN_STAINED_GLASS_PANE); builder - .setDisplayName("§7Next page") + .setCustomName(comp("Next page")) .addLoreLines( - gui.hasNextPage() - ? "§7Go to page §e" + (gui.getCurrentPage() + 2) + "§7/§e" + gui.getPageAmount() - : "§cThere are no more pages"); + this.getGui().hasNextPage() + ? comp( + "Go to page §e" + + (this.getGui().getPage() + 2) + + "§7/§e" + + this.getGui().getPageAmount()) + : comp("There are no more pages")); return builder; } + + @Override + public void handleClick( + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) {} } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java index 87d40b4..796d27f 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java @@ -1,7 +1,7 @@ package me.unurled.sacredrealms.sr.gui.attributes; -import static me.unurled.srcore.utils.Component.comp; import static me.unurled.sacredrealms.sr.utils.SRPlayerUtils.syncSRToPlayer; +import static me.unurled.srcore.utils.Component.comp; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.player.PlayerManager; @@ -10,15 +10,11 @@ import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.inventoryaccess.component.AdventureComponentWrapper; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class AttributeItem extends AbstractItem { @@ -31,15 +27,8 @@ public class AttributeItem extends AbstractItem { this.targetPlayer = target; } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { double value = 0; if (targetPlayer != null) { @@ -50,38 +39,27 @@ public class AttributeItem extends AbstractItem { ItemBuilder ip = switch (attribute) { - case STRENGTH -> new ItemBuilder(Material.IRON_SWORD).setDisplayName("Strength " + value); - case AGILITY -> new ItemBuilder(Material.BOW).setDisplayName("Agility " + value); - case MANA -> new ItemBuilder(Material.ENCHANTING_TABLE).setDisplayName("Mana " + value); - case HEALTH -> new ItemBuilder(Material.GOLDEN_APPLE).setDisplayName("Health " + value); + case STRENGTH -> new ItemBuilder(Material.IRON_SWORD).setCustomName("Strength " + value); + case AGILITY -> new ItemBuilder(Material.BOW).setCustomName("Agility " + value); + case MANA -> new ItemBuilder(Material.ENCHANTING_TABLE).setCustomName("Mana " + value); + case HEALTH -> new ItemBuilder(Material.GOLDEN_APPLE).setCustomName("Health " + value); case LUCK -> - new ItemBuilder(Material.ENCHANTED_GOLDEN_APPLE).setDisplayName("Luck " + value); - case DEFENSE -> new ItemBuilder(Material.SHIELD).setDisplayName("Defense " + value); - case CHARISMA -> - new ItemBuilder(Material.PLAYER_HEAD).setDisplayName("Charisma " + value); + new ItemBuilder(Material.ENCHANTED_GOLDEN_APPLE).setCustomName("Luck " + value); + case DEFENSE -> new ItemBuilder(Material.SHIELD).setCustomName("Defense " + value); + case CHARISMA -> new ItemBuilder(Material.PLAYER_HEAD).setCustomName("Charisma " + value); }; - ip.addLoreLines(new AdventureComponentWrapper(comp("+1 Left Click to increase"))); - ip.addLoreLines(new AdventureComponentWrapper(comp("-1 Right Click to decrease"))); - ip.addLoreLines( - new AdventureComponentWrapper(comp("Shift + Left Click to increase by 10"))); - ip.addLoreLines( - new AdventureComponentWrapper(comp("Shift + Right Click to decrease by 10"))); + ip.addLoreLines(comp("+1 Left Click to increase")); + ip.addLoreLines(comp("-1 Right Click to decrease")); + ip.addLoreLines(comp("Shift + Left Click to increase by 10")); + ip.addLoreLines(comp("Shift + Right Click to decrease by 10")); return ip; } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { if (targetPlayer != null) { PlayerManager playerManager = Manager.getInstance(PlayerManager.class); diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java index 781acc5..ae8c213 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java @@ -8,9 +8,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; import xyz.xenondevs.invui.gui.Gui; -import xyz.xenondevs.invui.gui.Gui.Builder.Normal; +import xyz.xenondevs.invui.gui.Gui.Builder; import xyz.xenondevs.invui.item.Item; -import xyz.xenondevs.invui.item.impl.SimpleItem; public class AttributesGUI { @@ -20,8 +19,8 @@ public class AttributesGUI { tMeta.setOwningPlayer(target); tMeta.displayName(comp(target.getName())); t.setItemMeta(tMeta); - Item head = new SimpleItem(t); - Normal gui = + Item head = Item.simple(t); + Builder gui = Gui.normal() .setStructure(".........", "....h....", ".........", ".0123456.") .addIngredient('h', head); diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java index 6b6544b..63622c4 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java @@ -6,15 +6,14 @@ import static me.unurled.sacredrealms.sr.utils.Items.glassPane; import me.unurled.sacredrealms.sr.components.difficulty.Difficulty; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.invui.gui.Gui; -import xyz.xenondevs.invui.gui.Gui.Builder.Normal; +import xyz.xenondevs.invui.gui.Gui.Builder; import xyz.xenondevs.invui.item.Item; -import xyz.xenondevs.invui.item.impl.SimpleItem; public class DifficultyGUI { public static @NotNull Gui createGui() { - Item cancel = new SimpleItem(cancelItem()); - Item glass = new SimpleItem(glassPane()); - Normal gui = + Item cancel = Item.simple(cancelItem()); + Item glass = Item.simple(glassPane()); + Builder gui = Gui.normal() .setStructure(".........", "..1.2.3..", "....4....", "....5....") .addIngredient('5', cancel) diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java index c7bdad1..339abdd 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java @@ -7,14 +7,11 @@ import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class DifficultyItem extends AbstractItem { @@ -24,18 +21,12 @@ public class DifficultyItem extends AbstractItem { this.difficulty = difficulty; } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { return switch (difficulty) { case EASY -> new ItemBuilder(Material.BREAD) - .setDisplayName("Easy") + .setCustomName("Easy") .addLoreLines( "Is you are a new player or", "someone who just want to", @@ -44,7 +35,7 @@ public class DifficultyItem extends AbstractItem { "Click Here!"); case NORMAL -> new ItemBuilder(Material.GRASS_BLOCK) - .setDisplayName("Normal") + .setCustomName("Normal") .addLoreLines( "Is you are a regular player", "who want to enjoy the game", @@ -53,7 +44,7 @@ public class DifficultyItem extends AbstractItem { "Click Here!"); case HARD -> new ItemBuilder(Material.DIAMOND_SWORD) - .setDisplayName("Hard") + .setCustomName("Hard") .addLoreLines( "Is you are a hardcore player", "who want to enjoy the game", @@ -62,7 +53,7 @@ public class DifficultyItem extends AbstractItem { "Click Here!"); case INSANE -> new ItemBuilder(Material.NETHERITE_SWORD) - .setDisplayName("Insane") + .setCustomName("Insane") .addLoreLines( "Is you are a pro player", "who want to enjoy the game", @@ -73,18 +64,9 @@ public class DifficultyItem extends AbstractItem { }; } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { - // Set the player's difficulty + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { PlayerManager pm = Manager.getInstance(PlayerManager.class); if (pm.isSRPlayer(player.getUniqueId())) { SRPlayer sr = pm.getPlayer(player.getUniqueId()); diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java index 23f071d..3936e23 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java @@ -8,14 +8,12 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityArmorItem extends AbstractItem { @@ -57,28 +55,14 @@ public class EntityArmorItem extends AbstractItem { } } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { return new ItemBuilder(stack); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java index a8d9776..6bacaf0 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java @@ -4,14 +4,11 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityBehaviorItem extends AbstractItem { @@ -21,28 +18,14 @@ public class EntityBehaviorItem extends AbstractItem { // behavior = type.getBehavior(); } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.NETHERITE_SWORD).setDisplayName("Behavior: " + behavior); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + return new ItemBuilder(Material.NETHERITE_SWORD).setCustomName("Behavior: " + behavior); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java index c1a9a55..93c0587 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java @@ -4,45 +4,28 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityExpItem extends AbstractItem { private final Long exp; - public EntityExpItem(SREntityType type) { + public EntityExpItem(@NotNull SREntityType type) { exp = type.getExperience(); } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.EXPERIENCE_BOTTLE).setDisplayName("Experience: " + exp); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + return new ItemBuilder(Material.EXPERIENCE_BOTTLE).setCustomName("Experience: " + exp); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java index e00bc8c..2906236 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java @@ -4,14 +4,11 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityItemDisplay extends AbstractItem { @@ -21,28 +18,14 @@ public class EntityItemDisplay extends AbstractItem { name = type.getItem().getType().name(); } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.CREEPER_SPAWN_EGG).setDisplayName("Item Display: " + name); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + return new ItemBuilder(Material.CREEPER_SPAWN_EGG).setCustomName("Item Display: " + name); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java index 1b7b4e9..aea5fd6 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java @@ -4,45 +4,28 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityLevelItem extends AbstractItem { private final int level; - public EntityLevelItem(SREntityType type) { + public EntityLevelItem(@NotNull SREntityType type) { level = type.getLevel(); } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.DIAMOND).setDisplayName("Level: " + level); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + return new ItemBuilder(Material.DIAMOND).setCustomName("Level: " + level); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java index 1f6c91c..5ded234 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java @@ -3,39 +3,22 @@ package me.unurled.sacredrealms.sr.gui.entitytype; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityLootItem extends AbstractItem { - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.SKELETON_SKULL).setDisplayName("Death Loot"); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + return new ItemBuilder(Material.SKELETON_SKULL).setCustomName("Death Loot"); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java index 88eeffc..eec6f40 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java @@ -4,45 +4,28 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityNameItem extends AbstractItem { private final String name; - public EntityNameItem(SREntityType type) { + public EntityNameItem(@NotNull SREntityType type) { name = type.getName(); } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.NAME_TAG).setDisplayName(name); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + return new ItemBuilder(Material.NAME_TAG).setCustomName(name); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java index 677b056..fa3950a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java @@ -7,14 +7,11 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityStatsItem extends AbstractItem { @@ -24,32 +21,18 @@ public class EntityStatsItem extends AbstractItem { attributes = type.getAttributes(); } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - ItemBuilder builder = new ItemBuilder(Material.APPLE).setDisplayName("Add Stats"); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + ItemBuilder builder = new ItemBuilder(Material.APPLE).setCustomName("Add Stats"); for (Entry entry : attributes.entrySet()) { builder.addLoreLines(entry.getKey().getName() + ": " + entry.getValue()); } return builder; } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { /* TODO need to implements this */ } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java index 87ebd7f..88460a7 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java @@ -10,11 +10,10 @@ import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.Markers; import xyz.xenondevs.invui.gui.PagedGui; -import xyz.xenondevs.invui.gui.structure.Markers; import xyz.xenondevs.invui.item.Item; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.item.ItemBuilder; public class EntityTypeGUI { private EntityTypeGUI() {} @@ -23,7 +22,7 @@ public class EntityTypeGUI { EntityManager em = Manager.getInstance(EntityManager.class); List list = new ArrayList<>(); for (SREntityType type : em.getTypes()) { - SimpleItem simpleItem = new SimpleItem(new ItemBuilder(type.getItem())); + Item simpleItem = Item.simple(new ItemBuilder(type.getItem())); list.add(simpleItem); } return PagedGui.items() @@ -43,7 +42,7 @@ public class EntityTypeGUI { public static @NotNull Gui createGui(SREntityType type) { Item border = - new SimpleItem(new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).setDisplayName("§r")); + Item.simple(new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).setCustomName("§r")); return Gui.normal() .setStructure( diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java index 8d2cb0c..4077cc4 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java @@ -7,14 +7,11 @@ import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class EntityTypeItem extends AbstractItem { @@ -24,35 +21,21 @@ public class EntityTypeItem extends AbstractItem { this.type = type.getType(); } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.ZOMBIE_SPAWN_EGG).setDisplayName(type.name()); + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { + return new ItemBuilder(Material.ZOMBIE_SPAWN_EGG).setCustomName(type.name()); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { player.closeInventory(); player.sendMessage( comp( " entitytype edit " - + event.getView().title() + + player.getOpenInventory().title() + "type")); } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java index bfa7c6f..1631a93 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java @@ -12,14 +12,14 @@ import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; public class CutsceneItem extends AbstractItem { @@ -34,7 +34,7 @@ public class CutsceneItem extends AbstractItem { } @Override - public ItemProvider getItemProvider() { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { ItemStack itemStack = new ItemStack(Material.PAPER); ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.displayName(textComp(name)); @@ -46,26 +46,24 @@ public class CutsceneItem extends AbstractItem { @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { // get uuid - if (event.getCurrentItem() != null) { - String uuid = - event - .getCurrentItem() - .getItemMeta() - .getPersistentDataContainer() - .get(ID, PersistentDataType.STRING); + String uuid = + click + .getCursor() + .getItemMeta() + .getPersistentDataContainer() + .get(ID, PersistentDataType.STRING); - Cutscene cutscene = - Manager.getInstance(CutsceneManager.class).findByUUID(UUID.fromString(uuid)); + Cutscene cutscene = + Manager.getInstance(CutsceneManager.class).findByUUID(UUID.fromString(uuid)); - if (cutscene == null) { - player.sendMessage(textComp("Unexpected error.")); - return; - } - if (clickType.isLeftClick()) { - Manager.getInstance(RecordingManager.class).startRecording(cutscene, player); - } + if (cutscene == null) { + player.sendMessage(textComp("Unexpected error.")); + return; + } + if (clickType.isLeftClick()) { + Manager.getInstance(RecordingManager.class).startRecording(cutscene, player); } } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java index 9d1bc47..35e7c73 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java @@ -11,10 +11,10 @@ import me.unurled.sacredrealms.sr.gui.ForwardItem; import me.unurled.srcore.api.Manager; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.Markers; import xyz.xenondevs.invui.gui.PagedGui; -import xyz.xenondevs.invui.gui.structure.Markers; import xyz.xenondevs.invui.item.Item; -import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.ItemBuilder; public class StartRecordingGui { private StartRecordingGui() {} diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java index 1e52604..c619abb 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java @@ -11,10 +11,10 @@ import me.unurled.sacredrealms.sr.gui.ForwardItem; import me.unurled.srcore.api.Manager; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.gui.Markers; import xyz.xenondevs.invui.gui.PagedGui; -import xyz.xenondevs.invui.gui.structure.Markers; import xyz.xenondevs.invui.item.Item; -import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.ItemBuilder; public class ReplayGui { private ReplayGui() {} diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java index 31a13ed..90b574c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java @@ -12,14 +12,14 @@ import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; public class ReplayItem extends AbstractItem { private static NamespacedKey ID = null; @@ -33,7 +33,7 @@ public class ReplayItem extends AbstractItem { } @Override - public ItemProvider getItemProvider() { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { ItemStack itemStack = new ItemStack(Material.PAPER); ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.displayName(textComp(name)); @@ -44,29 +44,27 @@ public class ReplayItem extends AbstractItem { @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { - if (event.getCurrentItem() != null) { - String uuid = - event - .getCurrentItem() - .getItemMeta() - .getPersistentDataContainer() - .get(ID, PersistentDataType.STRING); + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { + String uuid = + click + .getCursor() + .getItemMeta() + .getPersistentDataContainer() + .get(ID, PersistentDataType.STRING); - if (uuid == null) { - return; - } + if (uuid == null) { + return; + } - Cutscene cutscene = - Manager.getInstance(CutsceneManager.class).findByUUID(UUID.fromString(uuid)); + Cutscene cutscene = + Manager.getInstance(CutsceneManager.class).findByUUID(UUID.fromString(uuid)); - if (cutscene == null) { - player.sendMessage(textComp("Unexpected error.")); - return; - } - if (clickType.isLeftClick()) { - Manager.getInstance(RecordingManager.class).startRecording(cutscene, player); - } + if (cutscene == null) { + player.sendMessage(textComp("Unexpected error.")); + return; + } + if (clickType.isLeftClick()) { + Manager.getInstance(RecordingManager.class).startRecording(cutscene, player); } } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java index ba1f061..c03172a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java @@ -2,44 +2,26 @@ package me.unurled.sacredrealms.sr.gui.treasure; import static me.unurled.sacredrealms.sr.utils.Items.cancelItem; -import me.unurled.sacredrealms.sr.components.treasure.Treasure; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class CancelItem extends AbstractItem { public CancelItem() {} - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { return new ItemBuilder(cancelItem()); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { player.closeInventory(); } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java index 12eaf59..0c43e11 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java @@ -1,7 +1,7 @@ package me.unurled.sacredrealms.sr.gui.treasure; -import static me.unurled.srcore.utils.Component.textComp; import static me.unurled.sacredrealms.sr.utils.Logger.log; +import static me.unurled.srcore.utils.Component.textComp; import java.util.HashMap; import java.util.Map; @@ -11,15 +11,13 @@ import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class ConfirmItem extends AbstractItem { @@ -29,14 +27,8 @@ public class ConfirmItem extends AbstractItem { this.treasure = treasure; } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { ItemStack confirm = new ItemStack(Material.GREEN_STAINED_GLASS_PANE); ItemMeta confirmMeta = confirm.getItemMeta(); confirmMeta.displayName(textComp("Confirm")); @@ -44,28 +36,16 @@ public class ConfirmItem extends AbstractItem { return new ItemBuilder(confirm); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { Map items = new HashMap<>(); for (int i = 0; i < player.getInventory().getContents().length; i++) { if (i < 9 || i > 35) { log("Skipping slot " + i); continue; } - if (event.getClickedInventory() == null) { - log("Clicked inventory is null"); - continue; - } - ItemStack content = event.getClickedInventory().getItem(i); + ItemStack content = player.getOpenInventory().getItem(i); if (content != null && content.getType() != Material.AIR) { items.put(i, content); log("Added item to items: " + content + " at slot " + i); diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java index 5a0fede..cbc43e2 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java @@ -8,15 +8,13 @@ import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import xyz.xenondevs.invui.item.Item; +import xyz.xenondevs.invui.item.AbstractItem; +import xyz.xenondevs.invui.item.Click; +import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; -import xyz.xenondevs.invui.item.builder.ItemBuilder; -import xyz.xenondevs.invui.item.impl.AbstractItem; -import xyz.xenondevs.invui.window.Window; public class DeleteItem extends AbstractItem { @@ -26,14 +24,8 @@ public class DeleteItem extends AbstractItem { this.treasure = treasure; } - /** - * Gets the {@link ItemProvider}. This method gets called every time a {@link Window} is notified - * ({@link #notifyWindows()}). - * - * @return The {@link ItemProvider} - */ @Override - public ItemProvider getItemProvider() { + public @NotNull ItemProvider getItemProvider(@NotNull Player viewer) { ItemStack delete = new ItemStack(Material.RED_STAINED_GLASS_PANE); ItemMeta deleteMeta = delete.getItemMeta(); deleteMeta.displayName(textComp("Delete")); @@ -41,17 +33,9 @@ public class DeleteItem extends AbstractItem { return new ItemBuilder(delete); } - /** - * A method called if the {@link ItemStack} associated to this {@link Item} has been clicked by a - * player. - * - * @param clickType The {@link ClickType} the {@link Player} performed. - * @param player The {@link Player} who clicked on the {@link ItemStack}. - * @param event The {@link InventoryClickEvent} associated with this click. - */ @Override public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { // delete treasure if (!player.hasPermission("sr.treasure.delete")) { return; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/TreasureGUI.java b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/TreasureGUI.java index 3caa159..17488e1 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/TreasureGUI.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/TreasureGUI.java @@ -11,7 +11,6 @@ import xyz.xenondevs.invui.inventory.Inventory; import xyz.xenondevs.invui.inventory.VirtualInventory; import xyz.xenondevs.invui.inventory.event.UpdateReason; import xyz.xenondevs.invui.item.Item; -import xyz.xenondevs.invui.item.impl.SimpleItem; public class TreasureGUI { @@ -20,10 +19,10 @@ public class TreasureGUI { @NotNull public static Gui createGui(@NotNull Treasure treasure) { ItemStack itemStack = glassPane(); - Item pane = new SimpleItem(itemStack); + Item pane = Item.simple(itemStack); Inventory inventory = new VirtualInventory(27); - inventory.setPreUpdateHandler( + inventory.addPreUpdateHandler( (itemPreUpdateEvent) -> { if (itemPreUpdateEvent.isAdd() || itemPreUpdateEvent.isRemove() diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java index fd327d0..9a96c33 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java @@ -40,11 +40,9 @@ public class SRPlayerUtils { float value = (float) ((speed + items) / 500.0f); value = Math.min(value, 1.0f); value = Math.max(value, 0f); - AttributeInstance attribute1 = - p.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED); + AttributeInstance attribute1 = p.getAttribute(org.bukkit.attribute.Attribute.MOVEMENT_SPEED); if (attribute1 != null) attribute1.setBaseValue(value); - AttributeInstance attribute2 = - p.getAttribute(org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED); + AttributeInstance attribute2 = p.getAttribute(org.bukkit.attribute.Attribute.FLYING_SPEED); if (attribute2 != null) attribute2.setBaseValue(value); p.setFlySpeed(value); p.setWalkSpeed(value); @@ -57,7 +55,7 @@ public class SRPlayerUtils { // default is 100 so 20 double health = (sr.getAttribute(Attribute.HEALTH) + sr.getTotalItemAttribute(Attribute.HEALTH)) / 5; - AttributeInstance attribute = p.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH); + AttributeInstance attribute = p.getAttribute(org.bukkit.attribute.Attribute.MAX_HEALTH); if (attribute != null) attribute.setBaseValue(health); p.sendHealthUpdate(); p.updateInventory(); From a3fbcbf32a1deedaf1a4be58fdbb42d9821e8f6f Mon Sep 17 00:00:00 2001 From: unurled Date: Wed, 25 Jun 2025 23:18:12 +0200 Subject: [PATCH 2/2] fix: switch to 2.0 invui and translation --- build.gradle.kts | 17 ++-- gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 9 +- gradlew.bat | 4 +- .../me/unurled/sacredrealms/sr/Manager.java | 52 ++++++++++++ .../me/unurled/sacredrealms/sr/Managers.java | 78 ++++++++++++++++++ .../java/me/unurled/sacredrealms/sr/SR.java | 55 ++++++------ .../me/unurled/sacredrealms/sr/SRLoader.java | 6 +- .../sr/commands/CommandManager.java | 2 +- .../sr/commands/admin/AttributeCommand.java | 6 +- .../sr/commands/admin/ClientBuildCommand.java | 9 +- .../sr/commands/admin/EntityTypeCommand.java | 21 +++-- .../sr/commands/admin/ItemCommand.java | 4 +- .../sr/commands/admin/LevelCommand.java | 2 +- .../sr/commands/admin/SpawnEntityCommand.java | 8 +- .../sr/commands/admin/TreasureCommand.java | 14 ++-- .../admin/cutscene/CreateCutsceneCommand.java | 11 +-- .../admin/cutscene/RecordCutsceneCommand.java | 8 +- .../admin/cutscene/ReplayCommand.java | 9 +- .../admin/cutscene/StopRecordingCommand.java | 11 +-- .../sr/commands/player/DifficultyCommand.java | 28 +++---- .../player/ResetAdventureCommand.java | 6 +- .../sr/components/block/BlockItem.java | 2 +- .../sr/components/block/BlockManager.java | 6 +- .../clientbuild/ClientBuildManager.java | 8 +- .../sr/components/combat/CombatManager.java | 4 +- .../components/cutscene/CreationListener.java | 4 +- .../components/cutscene/CutsceneManager.java | 9 +- .../components/cutscene/RecordingManager.java | 4 +- .../sr/components/cutscene/Replay.java | 3 +- .../sr/components/cutscene/ReplayManager.java | 2 +- .../cutscene/recording/Recording.java | 4 +- .../components/cutscene/tasks/ReplayTask.java | 4 +- .../cutscene/tasks/ScanEntityTracker.java | 2 +- .../cutscene/tasks/TickTracker.java | 2 +- .../cutscene/tasks/TrackLocationTask.java | 2 +- .../sr/components/difficulty/Difficulty.java | 2 +- .../sr/components/entity/EntityManager.java | 2 +- .../sr/components/entity/SREntity.java | 2 +- .../sacredrealms/sr/components/item/Item.java | 2 +- .../sr/components/item/ItemManager.java | 2 +- .../sr/components/npc/NPCManager.java | 22 ++++- .../components/pack/ResourcePackManager.java | 19 ++--- .../animatedjava/AnimatedJavaManager.java | 2 +- .../pack/background/BackgroundManager.java | 6 +- .../sr/components/packet/PacketManager.java | 2 +- .../sr/components/player/PlayerManager.java | 9 +- .../sr/components/player/SRPlayer.java | 2 +- .../player/listener/PlayerBlockEvent.java | 2 +- .../translation/TranslationManager.java | 29 +++++++ .../sr/components/treasure/Treasure.java | 2 +- .../treasure/TreasureGenerator.java | 2 +- .../components/treasure/TreasureManager.java | 4 +- .../sacredrealms/sr/config/ConfigManager.java | 16 ++-- .../sacredrealms/sr/config/Settings.java | 6 +- .../sacredrealms/sr/data/DataManager.java | 2 +- .../unurled/sacredrealms/sr/data/Redis.java | 8 +- .../sr/events/player/PlayerLevelUpEvent.java | 2 +- .../unurled/sacredrealms/sr/gui/BackItem.java | 6 +- .../sacredrealms/sr/gui/ForwardItem.java | 11 ++- .../sr/gui/attributes/AttributeItem.java | 6 +- .../sr/gui/attributes/AttributesGUI.java | 4 +- .../sr/gui/difficulty/DifficultyGUI.java | 2 +- .../sr/gui/difficulty/DifficultyItem.java | 4 +- .../sr/gui/entitytype/EntityArmorItem.java | 2 +- .../sr/gui/entitytype/EntityBehaviorItem.java | 2 +- .../sr/gui/entitytype/EntityExpItem.java | 2 +- .../sr/gui/entitytype/EntityItemDisplay.java | 2 +- .../sr/gui/entitytype/EntityLevelItem.java | 2 +- .../sr/gui/entitytype/EntityLootItem.java | 2 +- .../sr/gui/entitytype/EntityNameItem.java | 2 +- .../sr/gui/entitytype/EntityStatsItem.java | 2 +- .../sr/gui/entitytype/EntityTypeGUI.java | 6 +- .../sr/gui/entitytype/EntityTypeItem.java | 4 +- .../sr/gui/recordings/CutsceneItem.java | 25 +++--- .../sr/gui/recordings/StartRecordingGui.java | 4 +- .../sacredrealms/sr/gui/replay/ReplayGui.java | 4 +- .../sr/gui/replay/ReplayItem.java | 24 +++--- .../sr/gui/treasure/CancelItem.java | 2 +- .../sr/gui/treasure/ConfirmItem.java | 6 +- .../sr/gui/treasure/DeleteItem.java | 6 +- .../sacredrealms/sr/utils/CutsceneUtil.java | 5 +- .../unurled/sacredrealms/sr/utils/Items.java | 6 +- .../unurled/sacredrealms/sr/utils/Logger.java | 31 +++++++ .../sacredrealms/sr/utils/SRPlayerUtils.java | 6 +- .../sr/utils/component/Component.java | 77 +++++++++++++++++ .../utils/component/TranslatedComponent.java | 31 +++++++ src/main/resources/sr/Bundle_en_US.properties | 5 ++ 89 files changed, 573 insertions(+), 281 deletions(-) create mode 100644 src/main/java/me/unurled/sacredrealms/sr/Manager.java create mode 100644 src/main/java/me/unurled/sacredrealms/sr/Managers.java create mode 100644 src/main/java/me/unurled/sacredrealms/sr/components/translation/TranslationManager.java create mode 100644 src/main/java/me/unurled/sacredrealms/sr/utils/component/Component.java create mode 100644 src/main/java/me/unurled/sacredrealms/sr/utils/component/TranslatedComponent.java create mode 100644 src/main/resources/sr/Bundle_en_US.properties diff --git a/build.gradle.kts b/build.gradle.kts index b63be28..4ad92c3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import net.minecrell.pluginyml.bukkit.BukkitPluginDescription plugins { `java-library` - id("io.papermc.paperweight.userdev") version "2.0.0-beta.10" + id("io.papermc.paperweight.userdev") version "2.0.0-beta.17" id("org.sonarqube") version "6.0.1.5171" id("de.eldoria.plugin-yml.paper") version "0.6.0" } @@ -16,10 +16,10 @@ description = "The main SR plugin." val mcVersion = "1.21.4-R0.1-SNAPSHOT" val redisVersion = "5.2.0-beta4" -val invuiVersion = "2.0.0-alpha.6" +val invuiVersion = "2.0.0-alpha.14" val gsonVersion = "2.11.0" -val srcoreVersion = "0.2.0" val packeteventsVersion = "2.7.0" +val znpcsPlusVersion = "2.1.0-SNAPSHOT" val javaVersion = 23 @@ -33,14 +33,15 @@ repositories { name = "packetevents" url = uri("https://repo.codemc.io/repository/maven-releases/") } - maven { - name = "unurled" - url = uri("https://repo.unurled.me/releases") - } maven { name = "cubbossa" url = uri("https://nexus.leonardbausenwein.de/repository/maven-releases/") } + // ZNPCsPlus + maven { + name = "pyrSnapshots" + url = uri("https://repo.pyr.lol/snapshots") + } } dependencies { @@ -54,7 +55,7 @@ dependencies { paperLibrary("com.github.retrooper", "packetevents-spigot", packeteventsVersion) - compileOnly("me.unurled:SR-Core:${srcoreVersion}") + paperLibrary("lol.pyr", "znpcsplus-api", znpcsPlusVersion) } java { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9530d66f5e68d973ea569d8e19de379189..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 34943 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

    Gn4F+B~IivciU9^t0j-Mgao3 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 DDw4oP diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a79..ff23a68 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6..23d15a9 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9d21a21..db3a6ac 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/main/java/me/unurled/sacredrealms/sr/Manager.java b/src/main/java/me/unurled/sacredrealms/sr/Manager.java new file mode 100644 index 0000000..c827170 --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/Manager.java @@ -0,0 +1,52 @@ +package me.unurled.sacredrealms.sr; + +import org.bukkit.Bukkit; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +/** The Manager class is a class that is used to manage data and events. */ +public class Manager implements Listener { + + /** Create a new manager */ + public Manager() { + SR.plugin().managers().addManager(this); + Bukkit.getScheduler() + .runTaskAsynchronously( + SR.plugin(), + () -> { + load(); + Bukkit.getPluginManager().registerEvents(this, SR.plugin()); + }); + } + + /** + * Get an instance of a manager + * + * @param clazz The class of the manager + * @return The instance of the manager + * @param The type of the manager + */ + public static T getInstance(@NotNull Class clazz) { + return clazz.cast(SR.plugin().managers().getManager(clazz)); + } + + /** Load the manager */ + public void load() { + loadData(); + } + + /** Unload the manager */ + public void unload() { + saveData(); + } + + /** Save the data */ + public void saveData() { + /* method empty, so it isn't required by the extended child to implement it */ + } + + /** Load the data */ + public void loadData() { + /* method empty, so it isn't required by the extended child to implement it */ + } +} diff --git a/src/main/java/me/unurled/sacredrealms/sr/Managers.java b/src/main/java/me/unurled/sacredrealms/sr/Managers.java new file mode 100644 index 0000000..3554a33 --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/Managers.java @@ -0,0 +1,78 @@ +package me.unurled.sacredrealms.sr; + +import static me.unurled.sacredrealms.sr.utils.Logger.error; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** The Managers class is a class that is used to manage managers. */ +public class Managers { + private final List managerList; + + /** Create a new manager */ + protected Managers() { + managerList = new ArrayList<>(); + } + + /** + * Register a manager + * + * @param clazz The class of the manager + */ + public void register(@NotNull List> clazz) { + int i = 0; + for (Class c : clazz) { + Bukkit.getScheduler() + .runTaskLater( + SR.plugin(), + () -> { + try { + c.getDeclaredConstructor().newInstance(); + } catch (InstantiationException + | IllegalAccessException + | InvocationTargetException + | NoSuchMethodException e) { + error("Failed to register manager: " + c.getSimpleName()); + } + }, + 10L * i); + i++; + } + } + + /** + * Add a manager + * + * @param manager The manager + */ + public void addManager(Manager manager) { + managerList.add(manager); + } + + /** Unload all managers */ + public void unload() { + for (Manager manager : managerList) { + manager.unload(); + } + } + + /** + * Get a manager + * + * @param clazz The class of the manager + * @return The manager + */ + @Nullable + public Manager getManager(Class clazz) { + for (Manager manager : managerList) { + if (manager.getClass().equals(clazz)) { + return manager; + } + } + return null; + } +} diff --git a/src/main/java/me/unurled/sacredrealms/sr/SR.java b/src/main/java/me/unurled/sacredrealms/sr/SR.java index 0baf423..991e23c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/SR.java +++ b/src/main/java/me/unurled/sacredrealms/sr/SR.java @@ -16,18 +16,19 @@ import me.unurled.sacredrealms.sr.components.pack.ResourcePackManager; import me.unurled.sacredrealms.sr.components.pack.animatedjava.AnimatedJavaManager; import me.unurled.sacredrealms.sr.components.pack.background.BackgroundManager; import me.unurled.sacredrealms.sr.components.player.PlayerManager; +import me.unurled.sacredrealms.sr.components.translation.TranslationManager; import me.unurled.sacredrealms.sr.components.treasure.TreasureManager; import me.unurled.sacredrealms.sr.config.ConfigManager; import me.unurled.sacredrealms.sr.data.DataManager; -import me.unurled.srcore.SRCore; import org.bukkit.plugin.java.JavaPlugin; import xyz.xenondevs.invui.InvUI; public final class SR extends JavaPlugin { private static SR plugin; + private Managers managers; - public static SR getPlugin() { + public static SR plugin() { return plugin; } @@ -43,38 +44,40 @@ public final class SR extends JavaPlugin { public void onEnable() { plugin = this; - PacketEvents.getAPI().init(); + managers = new Managers(); - SRCore.getInstance().setPlugin(this); + PacketEvents.getAPI().init(); InvUI.getInstance().setPlugin(this); - SRCore.getInstance() - .getManagers() - .register( - List.of( - ConfigManager.class, - DataManager.class, - AnimatedJavaManager.class, - PlayerManager.class, - CombatManager.class, - ItemManager.class, - EntityManager.class, - NPCManager.class, - BlockManager.class, - ClientBuildManager.class, - TreasureManager.class, - BackgroundManager.class, - ResourcePackManager.class, - CutsceneManager.class, - RecordingManager.class, - ReplayManager.class)); + managers.register( + List.of( + TranslationManager.class, + ConfigManager.class, + DataManager.class, + AnimatedJavaManager.class, + PlayerManager.class, + CombatManager.class, + ItemManager.class, + EntityManager.class, + NPCManager.class, + BlockManager.class, + ClientBuildManager.class, + TreasureManager.class, + BackgroundManager.class, + ResourcePackManager.class, + CutsceneManager.class, + RecordingManager.class, + ReplayManager.class)); } @Override public void onDisable() { - SRCore.getInstance().unload(); - + managers.unload(); PacketEvents.getAPI().terminate(); } + + public Managers managers() { + return managers; + } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java b/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java index 227b49d..259d27c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java +++ b/src/main/java/me/unurled/sacredrealms/sr/SRLoader.java @@ -21,15 +21,11 @@ public class SRLoader implements PluginLoader { public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) { MavenLibraryResolver resolver = new MavenLibraryResolver(); resolver.addDependency( - new Dependency(new DefaultArtifact("xyz.xenondevs.invui:invui:pom:2.0.0-alpha.6"), null)); + new Dependency(new DefaultArtifact("xyz.xenondevs.invui:invui:pom:2.0.0-alpha.14"), null)); resolver.addRepository( new RemoteRepository.Builder("invui", "default", "https://repo.xenondevs.xyz/releases/") .build()); - resolver.addDependency(new Dependency(new DefaultArtifact("me.unurled:SR-Core:0.2.0"), null)); - resolver.addRepository( - new RemoteRepository.Builder("srcore", "default", "https://repo.unurled.me/releases") - .build()); classpathBuilder.addLibrary(resolver); PluginLibraries pluginLibraries = load(); diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/CommandManager.java b/src/main/java/me/unurled/sacredrealms/sr/commands/CommandManager.java index aaae323..b99a404 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/CommandManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/CommandManager.java @@ -9,6 +9,7 @@ import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; import java.util.Collection; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.commands.admin.AttributeCommand; import me.unurled.sacredrealms.sr.commands.admin.ClientBuildCommand; import me.unurled.sacredrealms.sr.commands.admin.EntityTypeCommand; @@ -21,7 +22,6 @@ import me.unurled.sacredrealms.sr.commands.admin.cutscene.RecordCutsceneCommand; import me.unurled.sacredrealms.sr.commands.admin.cutscene.StopRecordingCommand; import me.unurled.sacredrealms.sr.commands.player.DifficultyCommand; import me.unurled.sacredrealms.sr.commands.player.ResetAdventureCommand; -import me.unurled.srcore.api.Manager; import org.jetbrains.annotations.NotNull; public class CommandManager extends Manager { diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java index d251202..418b59d 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java @@ -1,7 +1,7 @@ package me.unurled.sacredrealms.sr.commands.admin; -import static me.unurled.srcore.utils.Component.comp; import static me.unurled.sacredrealms.sr.utils.SRPlayerUtils.syncSRToPlayer; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; @@ -9,11 +9,11 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; import me.unurled.sacredrealms.sr.gui.attributes.AttributesGUI; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -160,7 +160,7 @@ public class AttributeCommand implements BasicCommand { return; } Window window = - Window.single() + Window.mergedBuilder() .setViewer(p) .setTitle("Attributes") .setGui(AttributesGUI.createGui(target)) diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java index 1eacfe9..17d6e17 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java @@ -1,7 +1,5 @@ package me.unurled.sacredrealms.sr.commands.admin; -import static me.unurled.srcore.utils.Component.ERROR; -import static me.unurled.srcore.utils.Component.textComp; import static me.unurled.sacredrealms.sr.utils.Logger.log; import io.papermc.paper.command.brigadier.BasicCommand; @@ -12,11 +10,12 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map.Entry; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.clientbuild.ClientBuild; import me.unurled.sacredrealms.sr.components.clientbuild.ClientBuildManager; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; @@ -120,7 +119,7 @@ public class ClientBuildCommand implements BasicCommand, Listener { PlayerManager pm = Manager.getInstance(PlayerManager.class); SRPlayer sr = pm.getPlayer(p.getUniqueId()); if (sr == null) { - sender.sendMessage(textComp(ERROR)); + sender.sendMessage(TranslatedComponent.ERROR.component()); return; } sender.sendMessage("Modify the client build and save after you are finished."); @@ -155,7 +154,7 @@ public class ClientBuildCommand implements BasicCommand, Listener { PlayerManager pm = Manager.getInstance(PlayerManager.class); SRPlayer sr = pm.getPlayer(p.getUniqueId()); if (sr == null) { - sender.sendMessage(textComp(ERROR)); + sender.sendMessage(TranslatedComponent.ERROR.component()); return; } sender.sendMessage( diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java index 20b029c..224f1f1 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java @@ -1,18 +1,17 @@ package me.unurled.sacredrealms.sr.commands.admin; -import static me.unurled.srcore.utils.Component.NOT_PLAYER; -import static me.unurled.srcore.utils.Component.comp; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Arrays; import java.util.Collection; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.entity.EntityManager; import me.unurled.sacredrealms.sr.components.entity.SREntityType; import me.unurled.sacredrealms.sr.gui.entitytype.EntityTypeGUI; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import org.bukkit.command.CommandSender; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -23,7 +22,7 @@ public class EntityTypeCommand implements BasicCommand { private static void list(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { if (!(sender instanceof Player p)) { - sender.sendMessage(comp(NOT_PLAYER)); + sender.sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } EntityManager em = Manager.getInstance(EntityManager.class); @@ -33,7 +32,11 @@ public class EntityTypeCommand implements BasicCommand { } Window window = - Window.single().setViewer(p).setTitle("List").setGui(EntityTypeGUI.listGui()).build(); + Window.mergedBuilder() + .setViewer(p) + .setTitle("List") + .setGui(EntityTypeGUI.listGui()) + .build(); window.open(); } @@ -43,7 +46,7 @@ public class EntityTypeCommand implements BasicCommand { return; } if (!(sender instanceof Player p)) { - sender.sendMessage(comp(NOT_PLAYER)); + sender.sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } if (args.length < 3) { @@ -54,7 +57,7 @@ public class EntityTypeCommand implements BasicCommand { } SREntityType type = em.getType(args[1]); Window window = - Window.single() + Window.mergedBuilder() .setViewer(p) .setTitle(args[1]) .setGui(EntityTypeGUI.createGui(type)) @@ -109,7 +112,7 @@ public class EntityTypeCommand implements BasicCommand { if (sender instanceof Player p) { // opens gui Window window = - Window.single() + Window.mergedBuilder() .setViewer(p) .setTitle(args[1]) .setGui(EntityTypeGUI.createGui(type)) diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ItemCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ItemCommand.java index 4c6f782..0b729bf 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ItemCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ItemCommand.java @@ -1,13 +1,14 @@ package me.unurled.sacredrealms.sr.commands.admin; -import static me.unurled.srcore.utils.Component.comp; import static me.unurled.sacredrealms.sr.utils.Logger.error; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Arrays; import java.util.Collection; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.item.Item; import me.unurled.sacredrealms.sr.components.item.ItemManager; @@ -15,7 +16,6 @@ import me.unurled.sacredrealms.sr.components.item.ItemType; import me.unurled.sacredrealms.sr.components.item.Rarity; import me.unurled.sacredrealms.sr.components.item.abilities.Ability; import me.unurled.sacredrealms.sr.components.item.enchantments.Enchantment; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.CommandSender; diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/LevelCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/LevelCommand.java index ac3496c..76758ff 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/LevelCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/LevelCommand.java @@ -4,9 +4,9 @@ import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Collection; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/SpawnEntityCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/SpawnEntityCommand.java index d7edb66..2785e51 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/SpawnEntityCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/SpawnEntityCommand.java @@ -1,15 +1,13 @@ package me.unurled.sacredrealms.sr.commands.admin; -import static me.unurled.srcore.utils.Component.NO_PERMISSION; -import static me.unurled.srcore.utils.Component.textComp; - import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Collection; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.entity.EntityManager; import me.unurled.sacredrealms.sr.components.entity.SREntityType; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -57,7 +55,7 @@ public class SpawnEntityCommand implements BasicCommand { public void execute(@NotNull CommandSourceStack commandSourceStack, @NotNull String[] args) { CommandSender sender = commandSourceStack.getSender(); if (!sender.hasPermission("sr.spawn-entity")) { - sender.sendMessage(textComp(NO_PERMISSION)); + sender.sendMessage(TranslatedComponent.NO_PERMISSION.component()); return; } diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/TreasureCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/TreasureCommand.java index ebe5beb..0d74330 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/TreasureCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/TreasureCommand.java @@ -1,17 +1,17 @@ package me.unurled.sacredrealms.sr.commands.admin; -import static me.unurled.srcore.utils.Component.NOT_PLAYER; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Collection; import java.util.List; import java.util.Set; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.treasure.Treasure; import me.unurled.sacredrealms.sr.components.treasure.TreasureManager; import me.unurled.sacredrealms.sr.gui.treasure.TreasureGUI; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.block.Block; @@ -33,7 +33,7 @@ public class TreasureCommand implements BasicCommand { private static void delete(@NotNull CommandSender sender, TreasureManager instance) { Block block; if (!(sender instanceof Player p)) { - sender.sendMessage(NOT_PLAYER); + sender.sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } block = p.getTargetBlock(TRANSPARENT, 3); @@ -69,7 +69,7 @@ public class TreasureCommand implements BasicCommand { private static void modify(@NotNull CommandSender sender, TreasureManager instance) { Block block; if (!(sender instanceof Player p)) { - sender.sendMessage(NOT_PLAYER); + sender.sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } block = p.getTargetBlock(TRANSPARENT, 3); @@ -82,7 +82,7 @@ public class TreasureCommand implements BasicCommand { } // open the GUI Window window = - Window.single() + Window.mergedBuilder() .setViewer(p) .setTitle("Modifiy Treasure Chest") .setGui(TreasureGUI.createGui(treasure)) @@ -97,7 +97,7 @@ public class TreasureCommand implements BasicCommand { @NotNull CommandSender sender, @NotNull String @NotNull [] args, TreasureManager instance) { Block block; if (!(sender instanceof Player p)) { - sender.sendMessage(NOT_PLAYER); + sender.sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } block = p.getTargetBlock(TRANSPARENT, 3); diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/CreateCutsceneCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/CreateCutsceneCommand.java index 9522b80..27220c5 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/CreateCutsceneCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/CreateCutsceneCommand.java @@ -1,15 +1,12 @@ package me.unurled.sacredrealms.sr.commands.admin.cutscene; -import static me.unurled.srcore.utils.Component.NOT_PLAYER; -import static me.unurled.srcore.utils.Component.NO_PERMISSION; -import static me.unurled.srcore.utils.Component.textComp; - import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Collection; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.CutsceneManager; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -20,11 +17,11 @@ public class CreateCutsceneCommand implements BasicCommand { @Override public void execute(@NotNull CommandSourceStack sender, String[] args) { if (!(sender.getSender() instanceof Player p)) { - sender.getSender().sendMessage(textComp(NOT_PLAYER)); + sender.getSender().sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } if (!p.hasPermission("sr.cutscene.create")) { - p.sendMessage(textComp(NO_PERMISSION)); + p.sendMessage(TranslatedComponent.NO_PERMISSION.component()); return; } // get the name diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/RecordCutsceneCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/RecordCutsceneCommand.java index f496017..bef092a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/RecordCutsceneCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/RecordCutsceneCommand.java @@ -1,15 +1,13 @@ package me.unurled.sacredrealms.sr.commands.admin.cutscene; -import static me.unurled.srcore.utils.Component.NO_PERMISSION; -import static me.unurled.srcore.utils.Component.textComp; - import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.Cutscene; import me.unurled.sacredrealms.sr.components.cutscene.CutsceneManager; import me.unurled.sacredrealms.sr.components.cutscene.RecordingManager; import me.unurled.sacredrealms.sr.components.cutscene.recording.Recording; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -24,7 +22,7 @@ public class RecordCutsceneCommand implements BasicCommand { } if (!p.hasPermission("sr.cutscene.create")) { - p.sendMessage(textComp(NO_PERMISSION)); + p.sendMessage(TranslatedComponent.NO_PERMISSION.component()); return; } diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/ReplayCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/ReplayCommand.java index 185d14e..41d0a2c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/ReplayCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/ReplayCommand.java @@ -1,12 +1,9 @@ package me.unurled.sacredrealms.sr.commands.admin.cutscene; -import static me.unurled.srcore.utils.Component.NOT_PLAYER; -import static me.unurled.srcore.utils.Component.NO_PERMISSION; -import static me.unurled.srcore.utils.Component.textComp; - import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Collection; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -15,12 +12,12 @@ public class ReplayCommand implements BasicCommand { @Override public void execute(@NotNull CommandSourceStack stack, String[] args) { if (!(stack.getSender() instanceof Player p)) { - stack.getSender().sendMessage(textComp(NOT_PLAYER)); + stack.getSender().sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } if (!p.hasPermission("sr.cutscene.replay")) { - p.sendMessage(textComp(NO_PERMISSION)); + p.sendMessage(TranslatedComponent.NO_PERMISSION.component()); } // aaa diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/StopRecordingCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/StopRecordingCommand.java index 33882e0..96ef444 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/StopRecordingCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/cutscene/StopRecordingCommand.java @@ -1,14 +1,11 @@ package me.unurled.sacredrealms.sr.commands.admin.cutscene; -import static me.unurled.srcore.utils.Component.NOT_PLAYER; -import static me.unurled.srcore.utils.Component.NO_PERMISSION; -import static me.unurled.srcore.utils.Component.textComp; - import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Collection; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.RecordingManager; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -17,11 +14,11 @@ public class StopRecordingCommand implements BasicCommand { @Override public void execute(@NotNull CommandSourceStack stack, String[] args) { if (!(stack.getSender() instanceof Player p)) { - stack.getSender().sendMessage(textComp(NOT_PLAYER)); + stack.getSender().sendMessage(TranslatedComponent.NOT_PLAYER.component()); return; } if (!p.hasPermission("sr.cutscene.create")) { - p.sendMessage(textComp(NO_PERMISSION)); + p.sendMessage(TranslatedComponent.NO_PERMISSION.component()); return; } diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/player/DifficultyCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/player/DifficultyCommand.java index 200bda9..4d351b0 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/player/DifficultyCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/player/DifficultyCommand.java @@ -1,20 +1,18 @@ package me.unurled.sacredrealms.sr.commands.player; -import static me.unurled.srcore.utils.Component.NOT_PLAYER; -import static me.unurled.srcore.utils.Component.NO_PERMISSION; -import static me.unurled.srcore.utils.Component.PLAYER_NOT_FOUND; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; import java.util.Arrays; import java.util.Collection; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.difficulty.Difficulty; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; import me.unurled.sacredrealms.sr.gui.difficulty.DifficultyGUI; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.utils.component.TranslatedComponent; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; @@ -51,11 +49,11 @@ public class DifficultyCommand implements BasicCommand { private static void playerHandling( @NotNull CommandSender sender, @NotNull String[] args, @NotNull Player p) { if (!p.hasPermission(DIFFICULTY_SELF)) { - sender.sendMessage(textComp(NO_PERMISSION)); + sender.sendMessage(TranslatedComponent.NO_PERMISSION.component()); return; } if (args.length >= 1 && !p.hasPermission(DIFFICULTY_MANAGE)) { - sender.sendMessage(textComp(NO_PERMISSION)); + sender.sendMessage(TranslatedComponent.NO_PERMISSION.component()); usage(sender); return; } @@ -63,7 +61,7 @@ public class DifficultyCommand implements BasicCommand { if (args.length == 0) { // open gui for sender Window window = - Window.single() + Window.mergedBuilder() .setViewer(p) .setTitle(CHOOSE_DIFFICULTY) .setGui(DifficultyGUI.createGui()) @@ -76,11 +74,11 @@ public class DifficultyCommand implements BasicCommand { // open gui for target player Player target = p.getServer().getPlayer(args[0]); if (target == null) { - sender.sendMessage(textComp(PLAYER_NOT_FOUND)); + sender.sendMessage(TranslatedComponent.PLAYER_NOT_FOUND.component()); return; } Window window = - Window.single() + Window.mergedBuilder() .setViewer(p) .setTitle(CHOOSE_DIFFICULTY) .setGui(DifficultyGUI.createGui()) @@ -93,7 +91,7 @@ public class DifficultyCommand implements BasicCommand { // set difficulty for target player Player target = p.getServer().getPlayer(args[0]); if (target == null) { - sender.sendMessage(textComp(PLAYER_NOT_FOUND)); + sender.sendMessage(TranslatedComponent.PLAYER_NOT_FOUND.component()); return; } // set difficulty @@ -112,7 +110,7 @@ public class DifficultyCommand implements BasicCommand { Difficulty difficulty) { SRPlayer sr = pm.getPlayer(target.getUniqueId()); if (sr == null) { - sender.sendMessage(textComp(PLAYER_NOT_FOUND)); + sender.sendMessage(TranslatedComponent.PLAYER_NOT_FOUND.component()); return; } sr.setDifficulty(difficulty); @@ -127,19 +125,19 @@ public class DifficultyCommand implements BasicCommand { private static void consoleHandler( @NotNull CommandSender sender, @NotNull String @NotNull [] args) { if (args.length == 0) { - sender.sendMessage(textComp(NOT_PLAYER)); + sender.sendMessage(TranslatedComponent.NOT_PLAYER.component()); usage(sender); return; } Player target = Bukkit.getPlayer(args[0]); if (target == null) { - sender.sendMessage(textComp(PLAYER_NOT_FOUND)); + sender.sendMessage(TranslatedComponent.PLAYER_NOT_FOUND.component()); return; } if (args.length == 1) { Window window = - Window.single() + Window.mergedBuilder() .setViewer(target) .setTitle(CHOOSE_DIFFICULTY) .setGui(DifficultyGUI.createGui()) diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/player/ResetAdventureCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/player/ResetAdventureCommand.java index 923499b..c322380 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/player/ResetAdventureCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/player/ResetAdventureCommand.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.commands.player; -import static me.unurled.srcore.utils.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; @@ -9,10 +9,10 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Objects; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.data.DataManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; @@ -39,7 +39,7 @@ public class ResetAdventureCommand implements BasicCommand { } return; } - OfflinePlayer player = SR.getPlugin().getServer().getOfflinePlayer(args[0]); + OfflinePlayer player = SR.plugin().getServer().getOfflinePlayer(args[0]); boolean status = resetAdventure(player); if (status) { diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockItem.java b/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockItem.java index 8926f4a..5221621 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockItem.java @@ -1,7 +1,7 @@ package me.unurled.sacredrealms.sr.components.block; -import static me.unurled.srcore.utils.Component.textComp; import static me.unurled.sacredrealms.sr.utils.Logger.error; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockManager.java index d45cea4..c2be6eb 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/block/BlockManager.java @@ -4,8 +4,8 @@ import static me.unurled.sacredrealms.sr.utils.Items.locationToString; import java.util.HashMap; import java.util.Map; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -65,9 +65,9 @@ public class BlockManager extends Manager { public void load() { Bukkit.getScheduler() .runTask( - SR.getPlugin(), + SR.plugin(), () -> { - for (World world : SR.getPlugin().getServer().getWorlds()) { + for (World world : SR.plugin().getServer().getWorlds()) { if (world == null) { continue; } diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/clientbuild/ClientBuildManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/clientbuild/ClientBuildManager.java index 5254dcb..a9247f4 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/clientbuild/ClientBuildManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/clientbuild/ClientBuildManager.java @@ -11,11 +11,11 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.commands.admin.ClientBuildCommand; import me.unurled.sacredrealms.sr.data.DataHandler; import me.unurled.sacredrealms.sr.data.DataManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.data.BlockData; @@ -41,7 +41,7 @@ public class ClientBuildManager extends Manager { @Override public void load() { super.load(); - Bukkit.getPluginManager().registerEvents(new ClientBuildCommand(), SR.getPlugin()); + Bukkit.getPluginManager().registerEvents(new ClientBuildCommand(), SR.plugin()); } public List getBuilds() { @@ -83,7 +83,7 @@ public class ClientBuildManager extends Manager { if (dh == null) { error("Failed to get DataHandler instance, can't load client builds."); error("Retrying in 10 seconds."); - Bukkit.getScheduler().runTaskLaterAsynchronously(SR.getPlugin(), this::loadData, 200L); + Bukkit.getScheduler().runTaskLaterAsynchronously(SR.plugin(), this::loadData, 200L); return; } List keys = dh.getKeysAll("sr.clientbuild"); @@ -130,7 +130,7 @@ public class ClientBuildManager extends Manager { } Bukkit.getScheduler() .runTaskAsynchronously( - SR.getPlugin(), + SR.plugin(), () -> { for (String name : names) { ClientBuild build = getBuild(name); diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java index cebdb43..5289ba7 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/combat/CombatManager.java @@ -1,14 +1,15 @@ package me.unurled.sacredrealms.sr.components.combat; -import static me.unurled.srcore.utils.Component.comp; import static me.unurled.sacredrealms.sr.utils.SRPlayerUtils.spawnIndicator; import static me.unurled.sacredrealms.sr.utils.SRPlayerUtils.updateActionBar; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Random; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.entity.EntityManager; import me.unurled.sacredrealms.sr.components.entity.SREntity; @@ -16,7 +17,6 @@ import me.unurled.sacredrealms.sr.components.entity.SREntityType; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; import me.unurled.sacredrealms.sr.utils.Items; -import me.unurled.srcore.api.Manager; import org.bukkit.Particle; import org.bukkit.Sound; import org.bukkit.entity.LivingEntity; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CreationListener.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CreationListener.java index 12f0023..b53a5eb 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CreationListener.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CreationListener.java @@ -1,11 +1,11 @@ package me.unurled.sacredrealms.sr.components.cutscene; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import static org.bukkit.Material.RED_WOOL; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.utils.Region; import me.unurled.sacredrealms.sr.utils.RegionUtil; -import me.unurled.srcore.api.Manager; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Location; import org.bukkit.entity.Player; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CutsceneManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CutsceneManager.java index 73ad534..1dc6b39 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CutsceneManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/CutsceneManager.java @@ -1,16 +1,16 @@ package me.unurled.sacredrealms.sr.components.cutscene; import static me.unurled.sacredrealms.sr.utils.Items.cancelItem; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.cutscene.tasks.TickTracker; -import me.unurled.srcore.api.Manager; import net.kyori.adventure.text.TextComponent; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -32,10 +32,7 @@ public class CutsceneManager extends Manager { @Override public void load() { super.load(); - SR.getPlugin() - .getServer() - .getPluginManager() - .registerEvents(new CreationListener(), SR.getPlugin()); + SR.plugin().getServer().getPluginManager().registerEvents(new CreationListener(), SR.plugin()); TickTracker.startTracking(); cutscenes = new ArrayList<>(); cutsceneBeingCreated = new HashMap<>(); diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/RecordingManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/RecordingManager.java index 7470830..2638efd 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/RecordingManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/RecordingManager.java @@ -1,13 +1,13 @@ package me.unurled.sacredrealms.sr.components.cutscene; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.ArrayList; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.recording.Recordable; import me.unurled.sacredrealms.sr.components.cutscene.recording.Recording; import me.unurled.sacredrealms.sr.components.cutscene.tasks.TickTracker; -import me.unurled.srcore.api.Manager; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/Replay.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/Replay.java index 97a3e75..a83f84e 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/Replay.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/Replay.java @@ -21,8 +21,7 @@ public class Replay { // TODO: control cutscene replay replayTask = - Bukkit.getScheduler() - .runTaskTimerAsynchronously(SR.getPlugin(), new ReplayTask(this), 0L, 1L); + Bukkit.getScheduler().runTaskTimerAsynchronously(SR.plugin(), new ReplayTask(this), 0L, 1L); } public Player viewer() { diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/ReplayManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/ReplayManager.java index 78ab4c7..6fadbae 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/ReplayManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/ReplayManager.java @@ -2,8 +2,8 @@ package me.unurled.sacredrealms.sr.components.cutscene; import java.util.HashSet; import java.util.Set; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.recording.Recording; -import me.unurled.srcore.api.Manager; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/recording/Recording.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/recording/Recording.java index 34f5dad..fa5077a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/recording/Recording.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/recording/Recording.java @@ -37,9 +37,9 @@ public class Recording { this.endTick = 1; // TODO: get tick this.scanEntitiesTask = - Bukkit.getScheduler().runTaskTimer(SR.getPlugin(), new ScanEntityTracker(this), 0L, 20L); + Bukkit.getScheduler().runTaskTimer(SR.plugin(), new ScanEntityTracker(this), 0L, 20L); this.trackLocationTask = - Bukkit.getScheduler().runTaskTimer(SR.getPlugin(), new TrackLocationTask(this), 0L, 1L); + Bukkit.getScheduler().runTaskTimer(SR.plugin(), new TrackLocationTask(this), 0L, 1L); } public Map> recordables() { diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ReplayTask.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ReplayTask.java index d81a73d..5b43e38 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ReplayTask.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ReplayTask.java @@ -1,12 +1,12 @@ package me.unurled.sacredrealms.sr.components.cutscene.tasks; import static me.unurled.sacredrealms.sr.utils.Logger.error; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.Replay; import me.unurled.sacredrealms.sr.components.cutscene.ReplayManager; import me.unurled.sacredrealms.sr.components.cutscene.recording.Recordable; -import me.unurled.srcore.api.Manager; public class ReplayTask implements Runnable { diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ScanEntityTracker.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ScanEntityTracker.java index 0f69291..ba143e7 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ScanEntityTracker.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/ScanEntityTracker.java @@ -2,11 +2,11 @@ package me.unurled.sacredrealms.sr.components.cutscene.tasks; import java.util.ArrayList; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.Cutscene; import me.unurled.sacredrealms.sr.components.cutscene.RecordingManager; import me.unurled.sacredrealms.sr.components.cutscene.recording.Recording; import me.unurled.sacredrealms.sr.components.cutscene.recording.recordables.SpawnEntityRecordable; -import me.unurled.srcore.api.Manager; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TickTracker.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TickTracker.java index ef551e9..e32284a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TickTracker.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TickTracker.java @@ -7,7 +7,7 @@ public class TickTracker { private static long currentTick = 0; public static void startTracking() { - Bukkit.getScheduler().scheduleSyncRepeatingTask(SR.getPlugin(), () -> currentTick++, 0L, 1L); + Bukkit.getScheduler().scheduleSyncRepeatingTask(SR.plugin(), () -> currentTick++, 0L, 1L); } public static long currentTick() { diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TrackLocationTask.java b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TrackLocationTask.java index 9fec3dd..3a428bc 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TrackLocationTask.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/cutscene/tasks/TrackLocationTask.java @@ -1,10 +1,10 @@ package me.unurled.sacredrealms.sr.components.cutscene.tasks; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.RecordingManager; import me.unurled.sacredrealms.sr.components.cutscene.recording.Recording; import me.unurled.sacredrealms.sr.components.cutscene.recording.recordables.DespawnEntityRecordable; import me.unurled.sacredrealms.sr.components.cutscene.recording.recordables.LocationChangeRecordable; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/difficulty/Difficulty.java b/src/main/java/me/unurled/sacredrealms/sr/components/difficulty/Difficulty.java index f2321be..6bfca33 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/difficulty/Difficulty.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/difficulty/Difficulty.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.components.difficulty; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/entity/EntityManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/entity/EntityManager.java index 3640e22..c2131ae 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/entity/EntityManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/entity/EntityManager.java @@ -8,13 +8,13 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.item.ItemStackDeserializer; import me.unurled.sacredrealms.sr.components.item.ItemStackSerializer; import me.unurled.sacredrealms.sr.components.player.PotionEffectDeserializer; import me.unurled.sacredrealms.sr.data.DataHandler; import me.unurled.sacredrealms.sr.data.DataManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/entity/SREntity.java b/src/main/java/me/unurled/sacredrealms/sr/components/entity/SREntity.java index d7dfe20..b1e40c5 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/entity/SREntity.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/entity/SREntity.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.components.entity; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.UUID; import me.unurled.sacredrealms.sr.components.attributes.Attribute; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/item/Item.java b/src/main/java/me/unurled/sacredrealms/sr/components/item/Item.java index c2028e6..b119533 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/item/Item.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/item/Item.java @@ -1,8 +1,8 @@ package me.unurled.sacredrealms.sr.components.item; -import static me.unurled.srcore.utils.Component.textComp; import static me.unurled.sacredrealms.sr.utils.Items.lore; import static me.unurled.sacredrealms.sr.utils.Logger.error; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/item/ItemManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/item/ItemManager.java index b4319f0..6ba4a85 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/item/ItemManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/item/ItemManager.java @@ -6,9 +6,9 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.HashMap; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.data.DataHandler; import me.unurled.sacredrealms.sr.data.DataManager; -import me.unurled.srcore.api.Manager; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/npc/NPCManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/npc/NPCManager.java index e0a1af4..98d3501 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/npc/NPCManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/npc/NPCManager.java @@ -1,13 +1,14 @@ package me.unurled.sacredrealms.sr.components.npc; - import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.UUID; +import lol.pyr.znpcsplus.api.NpcApi; +import lol.pyr.znpcsplus.api.NpcApiProvider; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.utils.ChunkWrapper; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.world.ChunkLoadEvent; @@ -17,6 +18,19 @@ public class NPCManager extends Manager { private final Map> npcPerChunk = new HashMap<>(); public Map npcs = new HashMap<>(); + private NpcApi ncpApi; + + @Override + public void load() { + super.load(); + ncpApi = NpcApiProvider.get(); + } + + @Override + public void unload() { + super.unload(); + ncpApi = null; + } public void register(@NotNull NPCEntity entity) { // TODO: Register the entity @@ -41,7 +55,7 @@ public class NPCManager extends Manager { } public void addEntity(NPCEntity entity) { -// npcs.put(entity.getEntity().getUniqueId(), entity); + // npcs.put(entity.getEntity().getUniqueId(), entity); } @EventHandler @@ -52,7 +66,7 @@ public class NPCManager extends Manager { } Bukkit.getScheduler() .scheduleSyncDelayedTask( - SR.getPlugin(), + SR.plugin(), () -> { HashSet npc = npcPerChunk.get(cw); for (NPCEntity entity : npc) { diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/pack/ResourcePackManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/pack/ResourcePackManager.java index dbcf52e..8f3863c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/pack/ResourcePackManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/pack/ResourcePackManager.java @@ -12,13 +12,13 @@ import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.UUID; import java.util.zip.ZipOutputStream; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.pack.hosts.HostingProvider; import me.unurled.sacredrealms.sr.components.pack.hosts.RustProvider; import me.unurled.sacredrealms.sr.config.Settings; import me.unurled.sacredrealms.sr.data.DataHandler; import me.unurled.sacredrealms.sr.data.DataManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; @@ -36,18 +36,17 @@ public class ResourcePackManager extends Manager { @NotNull private static File packFile(String fileName) { try { - new File(SR.getPlugin().getDataFolder(), "pack").mkdirs(); + new File(SR.plugin().getDataFolder(), "pack").mkdirs(); String[] filesInclude = {"assets", "pack.mcmeta"}; - FileOutputStream fos = - new FileOutputStream(new File(SR.getPlugin().getDataFolder(), fileName)); + FileOutputStream fos = new FileOutputStream(new File(SR.plugin().getDataFolder(), fileName)); ZipOutputStream zipOut = new ZipOutputStream(fos); zipOut.setLevel(9); for (String filePath : filesInclude) { - File fileToZip = new File(SR.getPlugin().getDataFolder() + "/pack", filePath); + File fileToZip = new File(SR.plugin().getDataFolder() + "/pack", filePath); if (fileToZip.isDirectory()) { zipDirectory(fileToZip, fileToZip.getName(), zipOut); } else { @@ -60,7 +59,7 @@ public class ResourcePackManager extends Manager { } catch (IOException e) { error("Failed to create resource pack"); } - return new File(SR.getPlugin().getDataFolder(), fileName); + return new File(SR.plugin().getDataFolder(), fileName); } /** Save the data */ @@ -100,7 +99,7 @@ public class ResourcePackManager extends Manager { public void uploadAsync(final File file) { Bukkit.getScheduler() .runTaskAsynchronously( - SR.getPlugin(), + SR.plugin(), () -> { // start the call boolean success; @@ -120,13 +119,13 @@ public class ResourcePackManager extends Manager { @Override public void load() { super.load(); - String zipPath = SR.getPlugin().getDataFolder() + "/" + RESOURCE_PACK_ZIP; + String zipPath = SR.plugin().getDataFolder() + "/" + RESOURCE_PACK_ZIP; Bukkit.getScheduler() .runTaskAsynchronously( - SR.getPlugin(), + SR.plugin(), () -> { - if (new File(SR.getPlugin().getDataFolder(), "pack").exists() + if (new File(SR.plugin().getDataFolder(), "pack").exists() && new File(zipPath).exists()) { log("Resource pack exists"); // create a new zip with files diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/pack/animatedjava/AnimatedJavaManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/pack/animatedjava/AnimatedJavaManager.java index 46b444c..dbbafe4 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/pack/animatedjava/AnimatedJavaManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/pack/animatedjava/AnimatedJavaManager.java @@ -1,5 +1,5 @@ package me.unurled.sacredrealms.sr.components.pack.animatedjava; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.Manager; public class AnimatedJavaManager extends Manager {} diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/pack/background/BackgroundManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/pack/background/BackgroundManager.java index 05fbcaf..ec3801a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/pack/background/BackgroundManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/pack/background/BackgroundManager.java @@ -5,10 +5,10 @@ import static me.unurled.sacredrealms.sr.utils.Logger.warn; import java.io.File; import java.util.HashMap; import java.util.Map; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.utils.character.CharacterArranger; import me.unurled.sacredrealms.sr.utils.character.ConfiguredChar; -import me.unurled.srcore.api.Manager; import org.jetbrains.annotations.NotNull; public class BackgroundManager extends Manager { @@ -21,7 +21,7 @@ public class BackgroundManager extends Manager { @Override public void loadData() { - File bgFolder = new File(SR.getPlugin().getDataFolder(), "backgrounds"); + File bgFolder = new File(SR.plugin().getDataFolder(), "backgrounds"); if (!bgFolder.exists() && bgFolder.mkdirs()) { saveDefaultBackgrounds(); } @@ -133,7 +133,7 @@ public class BackgroundManager extends Manager { private void saveDefaultBackgrounds() { String[] bgList = new String[] {"b0", "b1", "b2", "b4", "b8", "b16", "b32", "b64", "b128"}; for (String bg : bgList) { - SR.getPlugin().saveResource("backgrounds" + File.separator + bg + ".png", false); + SR.plugin().saveResource("backgrounds" + File.separator + bg + ".png", false); } } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/packet/PacketManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/packet/PacketManager.java index 1f57cc9..791c054 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/packet/PacketManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/packet/PacketManager.java @@ -2,7 +2,7 @@ package me.unurled.sacredrealms.sr.components.packet; import com.github.retrooper.packetevents.PacketEvents; import com.github.retrooper.packetevents.wrapper.PacketWrapper; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.Manager; import org.bukkit.entity.Player; public class PacketManager extends Manager { diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java index 9a9f7a9..b92f6a9 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/player/PlayerManager.java @@ -3,7 +3,7 @@ package me.unurled.sacredrealms.sr.components.player; import static me.unurled.sacredrealms.sr.utils.Logger.error; import static me.unurled.sacredrealms.sr.utils.Logger.log; import static me.unurled.sacredrealms.sr.utils.SRPlayerUtils.updateActionBar; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent; import com.google.gson.Gson; @@ -11,13 +11,13 @@ import com.google.gson.GsonBuilder; import java.net.URI; import java.util.HashMap; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.pack.ResourcePackManager; import me.unurled.sacredrealms.sr.data.DataHandler; import me.unurled.sacredrealms.sr.data.DataManager; import me.unurled.sacredrealms.sr.events.player.PlayerLevelUpEvent; import me.unurled.sacredrealms.sr.utils.Items; -import me.unurled.srcore.api.Manager; import net.kyori.adventure.resource.ResourcePackInfo; import net.kyori.adventure.resource.ResourcePackRequest; import org.bukkit.Bukkit; @@ -139,8 +139,7 @@ public class PlayerManager extends Manager { // TODO: does not update when player health has changed for example BukkitTask task = Bukkit.getScheduler() - .runTaskTimerAsynchronously( - SR.getPlugin(), () -> updateActionBar(e.getPlayer()), 0, 20L); + .runTaskTimerAsynchronously(SR.plugin(), () -> updateActionBar(e.getPlayer()), 0, 20L); actionBarTasks.put(e.getPlayer().getUniqueId(), task); e.getPlayer().updateInventory(); @@ -259,7 +258,7 @@ public class PlayerManager extends Manager { public void levelUp(SRPlayer p, int previousLevel) { PlayerLevelUpEvent event = new PlayerLevelUpEvent(p, previousLevel); - Bukkit.getScheduler().runTaskAsynchronously(SR.getPlugin(), event::callEvent); + Bukkit.getScheduler().runTaskAsynchronously(SR.plugin(), event::callEvent); Player player = Bukkit.getPlayer(p.getUuid()); if (player != null) { player.sendMessage(event.getMessage()); diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java b/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java index bc49cd5..b959aef 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/player/SRPlayer.java @@ -10,11 +10,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.difficulty.Difficulty; import me.unurled.sacredrealms.sr.components.item.Item; import me.unurled.sacredrealms.sr.events.player.PlayerKillEvent; -import me.unurled.srcore.api.Manager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/player/listener/PlayerBlockEvent.java b/src/main/java/me/unurled/sacredrealms/sr/components/player/listener/PlayerBlockEvent.java index 84f5c4d..9d4d6a9 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/player/listener/PlayerBlockEvent.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/player/listener/PlayerBlockEvent.java @@ -1,8 +1,8 @@ package me.unurled.sacredrealms.sr.components.player.listener; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/translation/TranslationManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/translation/TranslationManager.java new file mode 100644 index 0000000..37cba64 --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/components/translation/TranslationManager.java @@ -0,0 +1,29 @@ +package me.unurled.sacredrealms.sr.components.translation; + +import java.util.Locale; +import java.util.ResourceBundle; +import me.unurled.sacredrealms.sr.Manager; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.translation.GlobalTranslator; +import net.kyori.adventure.translation.TranslationRegistry; +import net.kyori.adventure.util.UTF8ResourceBundleControl; + +public class TranslationManager extends Manager { + private TranslationRegistry registry; + + @Override + public void load() { + super.load(); + registry = TranslationRegistry.create(Key.key("sr:translations")); + ResourceBundle bundle = + ResourceBundle.getBundle("sr.Bundle", Locale.US, UTF8ResourceBundleControl.get()); + registry.registerAll(Locale.US, bundle, true); + GlobalTranslator.translator().addSource(registry); + } + + @Override + public void unload() { + super.unload(); + GlobalTranslator.translator().removeSource(registry); + } +} diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/treasure/Treasure.java b/src/main/java/me/unurled/sacredrealms/sr/components/treasure/Treasure.java index 7c837fe..e0f14d8 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/treasure/Treasure.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/treasure/Treasure.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.components.treasure; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureGenerator.java b/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureGenerator.java index 2acfc81..379fcca 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureGenerator.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureGenerator.java @@ -7,12 +7,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.item.Item; import me.unurled.sacredrealms.sr.components.item.ItemManager; import me.unurled.sacredrealms.sr.components.item.Rarity; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureManager.java b/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureManager.java index ddab63a..dd13a20 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/components/treasure/TreasureManager.java @@ -1,8 +1,8 @@ package me.unurled.sacredrealms.sr.components.treasure; -import static me.unurled.srcore.utils.Component.textComp; import static me.unurled.sacredrealms.sr.utils.Logger.error; import static me.unurled.sacredrealms.sr.utils.Logger.log; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -13,11 +13,11 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.annotation.Nullable; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; import me.unurled.sacredrealms.sr.data.DataHandler; import me.unurled.sacredrealms.sr.data.DataManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; diff --git a/src/main/java/me/unurled/sacredrealms/sr/config/ConfigManager.java b/src/main/java/me/unurled/sacredrealms/sr/config/ConfigManager.java index e0b3da9..dbabc1a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/config/ConfigManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/config/ConfigManager.java @@ -1,8 +1,8 @@ package me.unurled.sacredrealms.sr.config; import java.io.File; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; -import me.unurled.srcore.api.Manager; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -14,12 +14,12 @@ public class ConfigManager extends Manager { /** Load the data */ @Override public void loadData() { - if (!SR.getPlugin().getDataFolder().exists()) { - SR.getPlugin().getDataFolder().mkdirs(); + if (!SR.plugin().getDataFolder().exists()) { + SR.plugin().getDataFolder().mkdirs(); } - File configFile = new File(SR.getPlugin().getDataFolder(), CONFIG_YML); + File configFile = new File(SR.plugin().getDataFolder(), CONFIG_YML); if (!configFile.exists()) { - SR.getPlugin().saveResource(CONFIG_YML, false); + SR.plugin().saveResource(CONFIG_YML, false); config = YamlConfiguration.loadConfiguration(configFile); } config = YamlConfiguration.loadConfiguration(configFile); @@ -27,10 +27,10 @@ public class ConfigManager extends Manager { @Override public void saveData() { - if (!new File(SR.getPlugin().getDataFolder() + CONFIG_YML).exists()) { - SR.getPlugin().saveDefaultConfig(); + if (!new File(SR.plugin().getDataFolder() + CONFIG_YML).exists()) { + SR.plugin().saveDefaultConfig(); } else { - SR.getPlugin().saveConfig(); + SR.plugin().saveConfig(); } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/config/Settings.java b/src/main/java/me/unurled/sacredrealms/sr/config/Settings.java index 1aaa130..2c9d6bd 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/config/Settings.java +++ b/src/main/java/me/unurled/sacredrealms/sr/config/Settings.java @@ -4,8 +4,8 @@ import static me.unurled.sacredrealms.sr.utils.Logger.error; import java.io.File; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; -import me.unurled.srcore.api.Manager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.configuration.ConfigurationSection; @@ -37,9 +37,9 @@ public enum Settings { } public void setValue(Object value) { - SR.getPlugin().getConfig().set(path, value); + SR.plugin().getConfig().set(path, value); try { - SR.getPlugin().getConfig().save(new File(SR.getPlugin().getDataFolder(), "config.yml")); + SR.plugin().getConfig().save(new File(SR.plugin().getDataFolder(), "config.yml")); } catch (Exception e) { error("Failed to save config.yml"); } diff --git a/src/main/java/me/unurled/sacredrealms/sr/data/DataManager.java b/src/main/java/me/unurled/sacredrealms/sr/data/DataManager.java index 11a3d10..ee94762 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/data/DataManager.java +++ b/src/main/java/me/unurled/sacredrealms/sr/data/DataManager.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.data; -import me.unurled.srcore.api.Manager; +import me.unurled.sacredrealms.sr.Manager; /** The data and config manager */ public class DataManager extends Manager { diff --git a/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java b/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java index 15342f3..866fa1e 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java +++ b/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java @@ -3,10 +3,10 @@ package me.unurled.sacredrealms.sr.data; import static me.unurled.sacredrealms.sr.utils.Logger.error; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.config.ConfigManager; import me.unurled.sacredrealms.sr.config.Settings; -import me.unurled.srcore.api.Manager; import org.jetbrains.annotations.NotNull; import redis.clients.jedis.JedisPooled; @@ -21,7 +21,7 @@ public class Redis implements DataHandler { Integer port = Settings.REDIS_PORT.toInt(); if (host == null || port == null) { error("Failed to get Redis host or port from config, shutting down server."); - SR.getPlugin().getServer().shutdown(); + SR.plugin().getServer().shutdown(); return; } try { @@ -29,11 +29,11 @@ public class Redis implements DataHandler { client.get("test"); } catch (Exception e) { error("Failed to connect to Redis, shutting down server."); - SR.getPlugin().getServer().shutdown(); + SR.plugin().getServer().shutdown(); } } else { error("Failed to get DataManager instance. Can't connect to Redis, shutting down server."); - SR.getPlugin().getServer().shutdown(); + SR.plugin().getServer().shutdown(); } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/events/player/PlayerLevelUpEvent.java b/src/main/java/me/unurled/sacredrealms/sr/events/player/PlayerLevelUpEvent.java index 9234ba6..84dfc3a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/events/player/PlayerLevelUpEvent.java +++ b/src/main/java/me/unurled/sacredrealms/sr/events/player/PlayerLevelUpEvent.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.events.player; -import static me.unurled.srcore.utils.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import me.unurled.sacredrealms.sr.components.player.SRPlayer; import net.kyori.adventure.text.Component; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java index d9fb429..048a115 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/BackItem.java @@ -4,8 +4,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractPagedGuiBoundItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; @@ -19,11 +19,11 @@ public class BackItem extends AbstractPagedGuiBoundItem { builder .setCustomName("§cPrevious Page") .addLoreLines( - this.getGui().hasPreviousPage() + this.getGui().getPage() > 1 ? "§7Go to page §e" + this.getGui().getPage() + "§7/§e" - + this.getGui().getPageAmount() + + this.getGui().getPageCount() : "§cYou can't go further back"); return builder; } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java index 28d26b8..970b711 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/ForwardItem.java @@ -1,13 +1,13 @@ package me.unurled.sacredrealms.sr.gui; -import static me.unurled.srcore.utils.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractPagedGuiBoundItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; @@ -21,18 +21,17 @@ public class ForwardItem extends AbstractPagedGuiBoundItem { builder .setCustomName(comp("Next page")) .addLoreLines( - this.getGui().hasNextPage() + this.getGui().getPage() + 1 < this.getGui().getPageCount() ? comp( "Go to page §e" + (this.getGui().getPage() + 2) + "§7/§e" - + this.getGui().getPageAmount()) + + this.getGui().getPageCount()) : comp("There are no more pages")); return builder; } @Override - public void handleClick( - @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) {} + public void handleClick(ClickType clickType, Player player, Click click) {} } diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java index 796d27f..53d3eb5 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributeItem.java @@ -1,18 +1,18 @@ package me.unurled.sacredrealms.sr.gui.attributes; import static me.unurled.sacredrealms.sr.utils.SRPlayerUtils.syncSRToPlayer; -import static me.unurled.srcore.utils.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java index ae8c213..012b74c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/attributes/AttributesGUI.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.gui.attributes; -import static me.unurled.srcore.utils.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import org.bukkit.Material; @@ -21,7 +21,7 @@ public class AttributesGUI { t.setItemMeta(tMeta); Item head = Item.simple(t); Builder gui = - Gui.normal() + Gui.builder() .setStructure(".........", "....h....", ".........", ".0123456.") .addIngredient('h', head); for (int i = 0; i < Attribute.values().length; i++) { diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java index 63622c4..3da1266 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyGUI.java @@ -14,7 +14,7 @@ public class DifficultyGUI { Item cancel = Item.simple(cancelItem()); Item glass = Item.simple(glassPane()); Builder gui = - Gui.normal() + Gui.builder() .setStructure(".........", "..1.2.3..", "....4....", "....5....") .addIngredient('5', cancel) .addIngredient('.', glass) diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java index 339abdd..0160ca3 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/difficulty/DifficultyItem.java @@ -1,15 +1,15 @@ package me.unurled.sacredrealms.sr.gui.difficulty; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.difficulty.Difficulty; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java index 3936e23..230c3fc 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityArmorItem.java @@ -10,8 +10,8 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java index 6bacaf0..f2a92d0 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityBehaviorItem.java @@ -5,8 +5,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java index 93c0587..5db2dfc 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityExpItem.java @@ -5,8 +5,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java index 2906236..09c0bff 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityItemDisplay.java @@ -5,8 +5,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java index aea5fd6..eb1c993 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLevelItem.java @@ -5,8 +5,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java index 5ded234..fcb00c6 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityLootItem.java @@ -4,8 +4,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java index eec6f40..dd9a2da 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityNameItem.java @@ -5,8 +5,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java index fa3950a..db80d22 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityStatsItem.java @@ -8,8 +8,8 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java index 88460a7..06b5891 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeGUI.java @@ -2,11 +2,11 @@ package me.unurled.sacredrealms.sr.gui.entitytype; import java.util.ArrayList; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.entity.EntityManager; import me.unurled.sacredrealms.sr.components.entity.SREntityType; import me.unurled.sacredrealms.sr.gui.BackItem; import me.unurled.sacredrealms.sr.gui.ForwardItem; -import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.invui.gui.Gui; @@ -25,7 +25,7 @@ public class EntityTypeGUI { Item simpleItem = Item.simple(new ItemBuilder(type.getItem())); list.add(simpleItem); } - return PagedGui.items() + return PagedGui.itemsBuilder() .setStructure( "# # # # # # # # #", "# X X X X X X X #", @@ -44,7 +44,7 @@ public class EntityTypeGUI { Item border = Item.simple(new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).setCustomName("§r")); - return Gui.normal() + return Gui.builder() .setStructure( "# # # # # # # # #", "# T V O I S N L #", // Type, behaVior, lOot, Item display, Stats, Name, Level diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java index 4077cc4..5ae9863 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/entitytype/EntityTypeItem.java @@ -1,6 +1,6 @@ package me.unurled.sacredrealms.sr.gui.entitytype; -import static me.unurled.srcore.utils.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import me.unurled.sacredrealms.sr.components.entity.SREntityType; import org.bukkit.Material; @@ -8,8 +8,8 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java index 1631a93..6a6b40d 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/CutsceneItem.java @@ -1,13 +1,14 @@ package me.unurled.sacredrealms.sr.gui.recordings; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.Logger.error; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.cutscene.Cutscene; import me.unurled.sacredrealms.sr.components.cutscene.CutsceneManager; import me.unurled.sacredrealms.sr.components.cutscene.RecordingManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -16,8 +17,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; @@ -30,7 +31,7 @@ public class CutsceneItem extends AbstractItem { public CutsceneItem(String name, UUID uuid) { this.name = name; this.uuid = uuid; - ID = new NamespacedKey(SR.getPlugin(), "cutscene_id"); + ID = new NamespacedKey(SR.plugin(), "cutscene_id"); } @Override @@ -48,15 +49,13 @@ public class CutsceneItem extends AbstractItem { public void handleClick( @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { // get uuid - String uuid = - click - .getCursor() - .getItemMeta() - .getPersistentDataContainer() - .get(ID, PersistentDataType.STRING); - - Cutscene cutscene = - Manager.getInstance(CutsceneManager.class).findByUUID(UUID.fromString(uuid)); + error( + "Click on CutsceneItem.java: " + + this.uuid + + " by " + + player.getName() + + " it may misfire or fire for the wrong cutscene, I am not sure about the uuid handling here."); + Cutscene cutscene = Manager.getInstance(CutsceneManager.class).findByUUID(this.uuid); if (cutscene == null) { player.sendMessage(textComp("Unexpected error.")); diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java index 35e7c73..d2ee1ed 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/recordings/StartRecordingGui.java @@ -4,11 +4,11 @@ import static me.unurled.sacredrealms.sr.utils.Items.glassPane; import java.util.ArrayList; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.Cutscene; import me.unurled.sacredrealms.sr.components.cutscene.CutsceneManager; import me.unurled.sacredrealms.sr.gui.BackItem; import me.unurled.sacredrealms.sr.gui.ForwardItem; -import me.unurled.srcore.api.Manager; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.invui.gui.Gui; import xyz.xenondevs.invui.gui.Markers; @@ -28,7 +28,7 @@ public class StartRecordingGui { items.add(item); } - return PagedGui.items() + return PagedGui.itemsBuilder() .setStructure( "# # # # # # # # #", "# X X X X X X X #", diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java index c619abb..fac0077 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayGui.java @@ -4,11 +4,11 @@ import static me.unurled.sacredrealms.sr.utils.Items.glassPane; import java.util.ArrayList; import java.util.List; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.cutscene.Replay; import me.unurled.sacredrealms.sr.components.cutscene.ReplayManager; import me.unurled.sacredrealms.sr.gui.BackItem; import me.unurled.sacredrealms.sr.gui.ForwardItem; -import me.unurled.srcore.api.Manager; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.invui.gui.Gui; import xyz.xenondevs.invui.gui.Markers; @@ -25,7 +25,7 @@ public class ReplayGui { List items = new ArrayList<>(); for (Replay r : rm.replays()) {} - return PagedGui.items() + return PagedGui.itemsBuilder() .setStructure( "# # # # # # # # #", "# X X X X X X X #", diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java index 90b574c..4fca36a 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/replay/ReplayItem.java @@ -1,13 +1,14 @@ package me.unurled.sacredrealms.sr.gui.replay; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.Logger.error; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.UUID; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.cutscene.Cutscene; import me.unurled.sacredrealms.sr.components.cutscene.CutsceneManager; import me.unurled.sacredrealms.sr.components.cutscene.RecordingManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -16,8 +17,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; @@ -27,7 +28,7 @@ public class ReplayItem extends AbstractItem { private final UUID uuid; public ReplayItem(String name, UUID uuid) { - ID = new NamespacedKey(SR.getPlugin(), "cutscene_id"); + ID = new NamespacedKey(SR.plugin(), "cutscene_id"); this.name = name; this.uuid = uuid; } @@ -45,19 +46,18 @@ public class ReplayItem extends AbstractItem { @Override public void handleClick( @NotNull ClickType clickType, @NotNull Player player, @NotNull Click click) { - String uuid = - click - .getCursor() - .getItemMeta() - .getPersistentDataContainer() - .get(ID, PersistentDataType.STRING); + error( + "Click on CutsceneItem.java: " + + this.uuid + + " by " + + player.getName() + + " it may misfire or fire for the wrong cutscene, I am not sure about the uuid handling here."); if (uuid == null) { return; } - Cutscene cutscene = - Manager.getInstance(CutsceneManager.class).findByUUID(UUID.fromString(uuid)); + Cutscene cutscene = Manager.getInstance(CutsceneManager.class).findByUUID(this.uuid); if (cutscene == null) { player.sendMessage(textComp("Unexpected error.")); diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java index c03172a..a719131 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/CancelItem.java @@ -5,8 +5,8 @@ import static me.unurled.sacredrealms.sr.utils.Items.cancelItem; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java index 0c43e11..ec4f95c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/ConfirmItem.java @@ -1,21 +1,21 @@ package me.unurled.sacredrealms.sr.gui.treasure; import static me.unurled.sacredrealms.sr.utils.Logger.log; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.util.HashMap; import java.util.Map; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.treasure.Treasure; import me.unurled.sacredrealms.sr.components.treasure.TreasureManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java index cbc43e2..0b5b459 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java +++ b/src/main/java/me/unurled/sacredrealms/sr/gui/treasure/DeleteItem.java @@ -1,18 +1,18 @@ package me.unurled.sacredrealms.sr.gui.treasure; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.treasure.Treasure; import me.unurled.sacredrealms.sr.components.treasure.TreasureManager; -import me.unurled.srcore.api.Manager; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.invui.Click; import xyz.xenondevs.invui.item.AbstractItem; -import xyz.xenondevs.invui.item.Click; import xyz.xenondevs.invui.item.ItemBuilder; import xyz.xenondevs.invui.item.ItemProvider; diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/CutsceneUtil.java b/src/main/java/me/unurled/sacredrealms/sr/utils/CutsceneUtil.java index e8aadad..5ad46cb 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/CutsceneUtil.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/CutsceneUtil.java @@ -1,14 +1,11 @@ package me.unurled.sacredrealms.sr.utils; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import java.time.Duration; -import java.util.ArrayList; -import java.util.List; import net.kyori.adventure.key.Key; import net.kyori.adventure.title.Title; import net.kyori.adventure.title.Title.Times; -import org.bukkit.Location; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java b/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java index 1af206e..7e2a757 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/Items.java @@ -1,14 +1,15 @@ package me.unurled.sacredrealms.sr.utils; import static me.unurled.sacredrealms.sr.utils.SRPlayerUtils.syncSRToPlayer; -import static me.unurled.srcore.utils.Component.comp; -import static me.unurled.srcore.utils.Component.textComp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.textComp; import com.google.gson.JsonElement; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicReference; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.item.Item; import me.unurled.sacredrealms.sr.components.item.ItemManager; @@ -16,7 +17,6 @@ import me.unurled.sacredrealms.sr.components.item.ItemStackDeserializer; import me.unurled.sacredrealms.sr.components.item.ItemStackSerializer; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/Logger.java b/src/main/java/me/unurled/sacredrealms/sr/utils/Logger.java index 7fbfc31..2f945f8 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/Logger.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/Logger.java @@ -3,6 +3,7 @@ package me.unurled.sacredrealms.sr.utils; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.logger.slf4j.ComponentLogger; +/** The LoggerUtils class is a class that is used to log messages to the console. */ public class Logger { private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger("SR"); @@ -10,26 +11,56 @@ public class Logger { private Logger() {} + /** + * Log a message to the console + * + * @param message the message to log + */ public static void log(String message) { logger.info(message); } + /** + * Log a warning to the console + * + * @param message the message to log + */ public static void warn(String message) { logger.warning(message); } + /** + * Log an error to the console + * + * @param message the message to log + */ public static void error(String message) { logger.severe(message); } + /** + * Log a message to the console + * + * @param message the message to log + */ public static void log(Component message) { componentLogger.info(message); } + /** + * Log a warning to the console + * + * @param message the message to log + */ public static void warn(Component message) { componentLogger.warn(message); } + /** + * Log an error to the console + * + * @param message the message to log + */ public static void error(Component message) { componentLogger.error(message); } diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java index 9a96c33..2118cd6 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/SRPlayerUtils.java @@ -1,14 +1,14 @@ package me.unurled.sacredrealms.sr.utils; -import static me.unurled.srcore.utils.Component.comp; +import static me.unurled.sacredrealms.sr.utils.component.Component.comp; import java.util.List; import java.util.Random; +import me.unurled.sacredrealms.sr.Manager; import me.unurled.sacredrealms.sr.SR; import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.player.PlayerManager; import me.unurled.sacredrealms.sr.components.player.SRPlayer; -import me.unurled.srcore.api.Manager; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Display; import org.bukkit.entity.Entity; @@ -127,6 +127,6 @@ public class SRPlayerUtils { } height++; } - }.runTaskTimer(SR.getPlugin(), 0, 1); + }.runTaskTimer(SR.plugin(), 0, 1); } } diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/component/Component.java b/src/main/java/me/unurled/sacredrealms/sr/utils/component/Component.java new file mode 100644 index 0000000..70c361a --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/component/Component.java @@ -0,0 +1,77 @@ +package me.unurled.sacredrealms.sr.utils.component; + +import java.util.List; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.TranslatableComponent; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +/** Utility class for working with components. */ +public class Component { + private static MiniMessage miniMessage; + + private Component() {} + + /** + * Converts a string to a MiniMessage component. + * + * @param msg the string to convert + * @return the MiniMessage component + */ + public static net.kyori.adventure.text.@NotNull Component comp(String msg) { + if (miniMessage == null) { + miniMessage = MiniMessage.miniMessage(); + } + return miniMessage.deserialize(msg); + } + + /** + * Converts a string to a TextComponent. + * + * @param msg the string to convert + * @return the TextComponent + */ + public static net.kyori.adventure.text.@NotNull TextComponent textComp(String msg) { + if (miniMessage == null) { + miniMessage = MiniMessage.miniMessage(); + } + return (TextComponent) miniMessage.deserialize(msg); + } + + /** + * Converts a list of strings to a list of MiniMessage components. + * + * @param list the list of strings to convert + * @return the list of MiniMessage components + */ + public static List fromStringList( + @NotNull List list) { + return list.stream().map(Component::comp).toList(); + } + + /** + * Gets an audience for a player. + * + * @param player the player + * @return the audience + */ + @Contract(pure = true) + public static @NotNull Audience audience(Player player) { + return Audience.audience(player); + } + + /** + * Translates using the key and arguments. + * + * @param key the key + * @param args the arguments + * @return the translated string + */ + @Contract(value = "_, _ -> new", pure = true) + public static @NotNull TranslatableComponent translate(String key, TextComponent... args) { + return net.kyori.adventure.text.Component.translatable(key, args); + } +} diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/component/TranslatedComponent.java b/src/main/java/me/unurled/sacredrealms/sr/utils/component/TranslatedComponent.java new file mode 100644 index 0000000..ddddc8d --- /dev/null +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/component/TranslatedComponent.java @@ -0,0 +1,31 @@ +package me.unurled.sacredrealms.sr.utils.component; + +import static me.unurled.sacredrealms.sr.utils.component.Component.translate; + +import net.kyori.adventure.text.TranslatableComponent; + +public enum TranslatedComponent { + ERROR, + NOT_PLAYER, + NO_PERMISSION, + PLAYER_NOT_FOUND; + + TranslatableComponent component; + + TranslatedComponent() {} + + public static void init() { + ERROR.setComponent(translate("error")); + NOT_PLAYER.setComponent(translate("not.player")); + NO_PERMISSION.setComponent(translate("no.permission")); + PLAYER_NOT_FOUND.setComponent(translate("player.not.found")); + } + + private void setComponent(TranslatableComponent component) { + this.component = component; + } + + public TranslatableComponent component() { + return component; + } +} diff --git a/src/main/resources/sr/Bundle_en_US.properties b/src/main/resources/sr/Bundle_en_US.properties new file mode 100644 index 0000000..972c6f8 --- /dev/null +++ b/src/main/resources/sr/Bundle_en_US.properties @@ -0,0 +1,5 @@ +sacred.realms=Sacred Realms: {0} +player.not.found=Player not found. +error=An error occurred while executing this command. Please contact an admin. +no.permission=You do not have permission to use this command. +not.player=You must be a player to use this command. \ No newline at end of file