From 67d0fad07101075c6005a2b095cbbd1884ea2802 Mon Sep 17 00:00:00 2001 From: lars Date: Thu, 16 Oct 2025 22:41:05 +0200 Subject: [PATCH] updated to 1.21.10 --- .idea/codeStyles/codeStyleConfig.xml | 2 +- .idea/compiler.xml | 2 +- .idea/misc.xml | 2 +- .idea/modules.xml | 1 - .idea/modules/Minigames.main.iml | 4 -- build.gradle | 8 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- .../java/eu/mhsl/minenet/minigames/Main.java | 30 ++++++----- .../privileged/SetMemorialCommand.java | 4 +- .../command/privileged/SetRewardCommand.java | 4 +- .../minenet/minigames/instance/Dimension.java | 25 ++++----- .../minigames/instance/MineNetInstance.java | 5 +- .../minenet/minigames/instance/game/Game.java | 4 +- .../game/stateless/StatelessGame.java | 5 +- .../config/GameConfigurationInventory.java | 20 +++---- .../instance/hub/inventory/HubInventory.java | 4 +- .../instance/hub/inventory/JoinInventory.java | 8 ++- .../inventory/MinigameSelectInventory.java | 5 +- .../score/tournament/Tournament.java | 8 +-- .../inventory/InteractableInventory.java | 52 ++++++++++++++----- .../minigames/shared/inventory/ItemClick.java | 45 ---------------- .../minenet/minigames/util/BatchUtil.java | 11 ++-- 22 files changed, 120 insertions(+), 131 deletions(-) delete mode 100644 src/main/java/eu/mhsl/minenet/minigames/shared/inventory/ItemClick.java diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml index 79ee123..a3d22bf 100644 --- a/.idea/codeStyles/codeStyleConfig.xml +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -1,5 +1,5 @@ - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b86273d..bcf4711 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 03872dd..0a6f7f2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 9522e33..774f6ac 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -4,7 +4,6 @@ - \ No newline at end of file diff --git a/.idea/modules/Minigames.main.iml b/.idea/modules/Minigames.main.iml index 33db1bc..a376b96 100644 --- a/.idea/modules/Minigames.main.iml +++ b/.idea/modules/Minigames.main.iml @@ -10,8 +10,4 @@ - - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index 2da2d83..64988a4 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { id 'java' - id "com.github.johnrengelman.shadow" version "7.1.0" + id "com.github.johnrengelman.shadow" version "8.1.1" } group 'eu.mhsl.minenet' @@ -35,7 +35,7 @@ allprojects { java { toolchain { - languageVersion = JavaLanguageVersion.of(21) + languageVersion = JavaLanguageVersion.of(25) } } @@ -44,7 +44,7 @@ dependencies { testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0' //https://jitpack.io/#Minestom/Minestom - implementation 'net.minestom:minestom-snapshots:fd51c8d17a' + implementation 'net.minestom:minestom:2025.10.11-1.21.10' //Tools implementation 'de.articdive:jnoise:3.0.2' @@ -87,5 +87,5 @@ tasks.register('copyJarToServer', Exec) { dependsOn shadowJar mustRunAfter shadowJar - commandLine 'scp', 'build/libs/Minigames-1.0-SNAPSHOT.jar', 'root@10.20.6.5:/root/minigames' + commandLine 'scp', 'build/libs/Minigames-1.0-SNAPSHOT.jar', '/home/lars/Documents/Minecraft/Server/Minestom/Minigames.jar' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b41..2e11132 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-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/eu/mhsl/minenet/minigames/Main.java b/src/main/java/eu/mhsl/minenet/minigames/Main.java index 6ed8de0..3503123 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/Main.java +++ b/src/main/java/eu/mhsl/minenet/minigames/Main.java @@ -3,12 +3,12 @@ package eu.mhsl.minenet.minigames; import eu.mhsl.minenet.minigames.api.HttpServer; import eu.mhsl.minenet.minigames.command.Commands; import eu.mhsl.minenet.minigames.handler.Listeners; +import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.lang.Languages; import eu.mhsl.minenet.minigames.server.tasks.TablistUpdateTask; +import net.minestom.server.Auth; import net.minestom.server.MinecraftServer; -import net.minestom.server.extras.bungee.BungeeCordProxy; import net.minestom.server.extras.lan.OpenToLAN; -import net.minestom.server.extras.velocity.VelocityProxy; import net.minestom.server.timer.TaskSchedule; import org.spongepowered.configurate.ConfigurateException; import org.spongepowered.configurate.ConfigurationNode; @@ -25,7 +25,7 @@ public class Main { public static ConfigurationNode globalConfig; @SuppressWarnings("ResultOfMethodCallIgnored") - public static void main(String[] args) throws ConfigurateException { + static void main() throws ConfigurateException { //noinspection ResultOfMethodCallIgnored Resource.values(); // This initializes and preloads the enum and extracts the resources Languages.getInstance(); //Preload languages into the jvm @@ -40,29 +40,35 @@ public class Main { logger.info("Initialize Minecraft server..."); - MinecraftServer server = MinecraftServer.init(); + MinecraftServer server = null; + if(serverConfig.node("open-to-lan").getBoolean()) OpenToLAN.open(); + + if(globalConfig.node("bungeecord", "enabled").getBoolean()) { + server = MinecraftServer.init(new Auth.Bungee()); + } + + if(globalConfig.node("velocity", "enabled").getBoolean()) { + server = MinecraftServer.init(new Auth.Velocity(Objects.requireNonNull(globalConfig.node("velocity", "secret").getString()))); + } + + if(server == null) server = MinecraftServer.init(); + // MinestomPvP.init(); MinecraftServer.setBrandName("mhsl.eu - minenet - credits to minestom"); MinecraftServer.setCompressionThreshold(serverConfig.node("compression-threshold").getInt(0)); System.setProperty("minestom.chunk-view-distance", String.valueOf(serverConfig.node("view-distance").getInt())); + System.setProperty("minestom.registry.unsafe-ops", "true"); Commands.values(); Listeners.values(); + Dimension.values(); new HttpServer(); MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20)); logger.info("Starting Minecraft server ... "); - if(serverConfig.node("open-to-lan").getBoolean()) OpenToLAN.open(); - - if(globalConfig.node("bungeecord", "enabled").getBoolean()) BungeeCordProxy.enable(); - - if(globalConfig.node("velocity", "enabled").getBoolean()) { - VelocityProxy.enable(Objects.requireNonNull(globalConfig.node("velocity", "secret").getString())); - } - server.start("0.0.0.0", serverConfig.node("port").getInt(25565)); System.gc(); diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java index 7724d7e..829f9e6 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java +++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetMemorialCommand.java @@ -21,7 +21,7 @@ public class SetMemorialCommand extends PrivilegedCommand { ArgumentString loreArgument = ArgumentType.String("lore"); materialArgument.setSuggestionCallback( - (sender, context, suggestion) -> Material + (_, _, suggestion) -> Material .values() .stream() .map(material -> new SuggestionEntry(material.name(), Component.text(material.name()))) @@ -35,7 +35,7 @@ public class SetMemorialCommand extends PrivilegedCommand { .getTournament() .setMemorialConfiguration( new MemorialConfiguration( - Material.fromNamespaceId(context.get(materialArgument)), + Material.fromKey(context.get(materialArgument)), context.get(titleArgument), context.get(loreArgument) ) diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java index 3e058e5..d1e1d2a 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java +++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/SetRewardCommand.java @@ -23,7 +23,7 @@ public class SetRewardCommand extends PrivilegedCommand { ArgumentStringArray amountsArgument = ArgumentType.StringArray("amount"); materialArgument.setSuggestionCallback( - (sender, context, suggestion) -> Material + (_, _, suggestion) -> Material .values() .stream() .map(material -> new SuggestionEntry(material.name(), Component.text(material.name()))) @@ -37,7 +37,7 @@ public class SetRewardCommand extends PrivilegedCommand { .getTournament() .setRewardConfiguration( new RewardConfiguration( - Material.fromNamespaceId(context.get(materialArgument)), + Material.fromKey(context.get(materialArgument)), Arrays.stream(context.get(amountsArgument)).map(Integer::valueOf).collect(Collectors.toList()) ) ); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java b/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java index cf5085c..82c7621 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/Dimension.java @@ -1,49 +1,50 @@ package eu.mhsl.minenet.minigames.instance; +import net.kyori.adventure.key.Key; import net.minestom.server.MinecraftServer; -import net.minestom.server.registry.DynamicRegistry; -import net.minestom.server.utils.NamespaceID; +import net.minestom.server.registry.RegistryKey; import net.minestom.server.world.DimensionType; +import org.jetbrains.annotations.NotNull; /** * Prebuilt dimensions */ public enum Dimension { OVERWORLD( - NamespaceID.from("minenet:fullbright_overworld"), + Key.key("minenet:fullbright_overworld"), DimensionType .builder() - .ambientLight(2.0f) + .ambientLight(1.0f) .build() ), NETHER( - NamespaceID.from("minenet:fullbright_nether"), + Key.key("minenet:fullbright_nether"), DimensionType .builder() - .ambientLight(2.0f) + .ambientLight(1.0f) .effects("minecraft:the_nether") .build() ), THE_END( - NamespaceID.from("minenet:fullbright_end"), + Key.key("minenet:fullbright_end"), DimensionType .builder() - .ambientLight(2.0f) + .ambientLight(1.0f) .effects("minecraft:the_end") .build() ); public final DimensionType DIMENSION; - public final NamespaceID namespaceID; - public final DynamicRegistry.Key key; + public final Key namespaceID; + public final RegistryKey<@NotNull DimensionType> key; - Dimension(NamespaceID namespaceID, DimensionType dimType) { + Dimension(Key namespaceID, DimensionType dimType) { this.DIMENSION = dimType; this.namespaceID = namespaceID; - this.key = MinecraftServer.getDimensionTypeRegistry().register(namespaceID, this.DIMENSION); + this.key = MinecraftServer.getDimensionTypeRegistry().register(this.namespaceID, this.DIMENSION); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java b/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java index 45a47c6..a78ad3b 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/MineNetInstance.java @@ -7,14 +7,15 @@ import net.minestom.server.event.instance.AddEntityToInstanceEvent; import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent; import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceContainer; -import net.minestom.server.registry.DynamicRegistry; +import net.minestom.server.registry.RegistryKey; import net.minestom.server.timer.TaskSchedule; import net.minestom.server.world.DimensionType; +import org.jetbrains.annotations.NotNull; import java.util.UUID; public class MineNetInstance extends InstanceContainer { - public MineNetInstance(DynamicRegistry.Key type) { + public MineNetInstance(RegistryKey<@NotNull DimensionType> type) { super(UUID.randomUUID(), type); MinecraftServer.getInstanceManager().registerInstance(this); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java index 1a9581a..a59050a 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java @@ -16,7 +16,7 @@ import net.minestom.server.event.item.ItemDropEvent; import net.minestom.server.event.player.PlayerBlockBreakEvent; import net.minestom.server.event.player.PlayerBlockPlaceEvent; import net.minestom.server.event.player.PlayerMoveEvent; -import net.minestom.server.registry.DynamicRegistry; +import net.minestom.server.registry.RegistryKey; import net.minestom.server.timer.ExecutionType; import net.minestom.server.timer.TaskSchedule; import net.minestom.server.world.DimensionType; @@ -34,7 +34,7 @@ public abstract class Game extends MineNetInstance implements Spawnable { protected boolean isRunning = false; protected boolean isBeforeBeginning = true; - public Game(DynamicRegistry.Key dimensionType) { + public Game(RegistryKey<@NotNull DimensionType> dimensionType) { super(dimensionType); MinecraftServer.getInstanceManager().registerInstance(this); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java index 846d143..f5f04fc 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java @@ -9,11 +9,12 @@ import eu.mhsl.minenet.minigames.score.Score; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.minestom.server.registry.DynamicRegistry; +import net.minestom.server.registry.RegistryKey; import net.minestom.server.timer.ExecutionType; import net.minestom.server.timer.Task; import net.minestom.server.timer.TaskSchedule; import net.minestom.server.world.DimensionType; +import org.jetbrains.annotations.NotNull; import java.time.Duration; import java.util.concurrent.CompletableFuture; @@ -26,7 +27,7 @@ public class StatelessGame extends Game { private int timeLimit = 0; private int timePlayed = 0; - public StatelessGame(DynamicRegistry.Key dimensionType, String gameName, Score score) { + public StatelessGame(RegistryKey<@NotNull DimensionType> dimensionType, String gameName, Score score) { super(dimensionType); this.score = score; this.name = gameName; diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/config/GameConfigurationInventory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/config/GameConfigurationInventory.java index 5f8d0c3..bc92d02 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/config/GameConfigurationInventory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/config/GameConfigurationInventory.java @@ -15,8 +15,7 @@ import net.minestom.server.entity.Player; import net.minestom.server.event.instance.AddEntityToInstanceEvent; import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent; import net.minestom.server.inventory.InventoryType; -import net.minestom.server.inventory.click.ClickType; -import net.minestom.server.inventory.condition.InventoryConditionResult; +import net.minestom.server.inventory.click.Click; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import net.minestom.server.sound.SoundEvent; @@ -34,13 +33,14 @@ public class GameConfigurationInventory extends InteractableInventory { public GameConfigurationInventory(Room room, Player p, GameFactory factory) { super(InventoryType.CHEST_5_ROW, factory.name().getAssembled(p)); + System.out.println("GameConfigurationInventory"); this.room = room; this.p = p; this.factory = factory; room.eventNode() - .addListener(AddEntityToInstanceEvent.class, addEntityToInstanceEvent -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton)) - .addListener(RemoveEntityFromInstanceEvent.class, removeEntityFromInstanceEvent -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton)); + .addListener(AddEntityToInstanceEvent.class, _ -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton)) + .addListener(RemoveEntityFromInstanceEvent.class, _ -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton)); ConfigManager config = factory.configuration(); @@ -53,7 +53,10 @@ public class GameConfigurationInventory extends InteractableInventory { ) .build(), 0, - itemClick -> itemClick.getPlayer().closeInventory(), + itemClick -> { + System.out.println("Booot callback ist da!"); + itemClick.player().closeInventory(); + }, true ); @@ -106,8 +109,7 @@ public class GameConfigurationInventory extends InteractableInventory { } @Override - protected void onClick(Player player, int slot, ClickType clickType, InventoryConditionResult inventoryConditionResult) { - inventoryConditionResult.setCancel(true); + protected void onClick(Player player, int slot, Click clickType) { if(!this.map.containsKey(slot)) return; @@ -133,7 +135,7 @@ public class GameConfigurationInventory extends InteractableInventory { .lore(restrictionHandler.getWarnings(restrictionData).stream().map(translatedComponent -> translatedComponent.getAssembled(this.p)).collect(Collectors.toList())) .build(), 8, - itemClick -> Game.initialize(this.factory, this.map.values().stream().toList(), itemClick.getPlayer()), + itemClick -> Game.initialize(this.factory, this.map.values().stream().toList(), itemClick.player()), true ); @@ -155,7 +157,7 @@ public class GameConfigurationInventory extends InteractableInventory { this.updatePlayButton(); return; } - itemClick.getPlayer().playSound(Sound.sound(SoundEvent.ENTITY_SILVERFISH_DEATH, Sound.Source.AMBIENT, 1f, 1f)); + itemClick.player().playSound(Sound.sound(SoundEvent.ENTITY_SILVERFISH_DEATH, Sound.Source.AMBIENT, 1f, 1f)); }, false ); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/HubInventory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/HubInventory.java index b49a5db..0457725 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/HubInventory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/HubInventory.java @@ -19,7 +19,7 @@ public class HubInventory extends InteractableInventory { .lore(TranslatedComponent.assemble("hub#create_description", p)) .build(), 12, - itemClick -> Room.createRoom(itemClick.getPlayer()), + itemClick -> Room.createRoom(itemClick.player()), true ); @@ -30,7 +30,7 @@ public class HubInventory extends InteractableInventory { .lore(TranslatedComponent.assemble("hub#join_description", p)) .build(), 14, - itemClick -> itemClick.getPlayer().openInventory(new JoinInventory(itemClick.getPlayer())) + itemClick -> itemClick.player().openInventory(new JoinInventory(itemClick.player())) ); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/JoinInventory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/JoinInventory.java index 0fd70dc..86a6e63 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/JoinInventory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/hub/inventory/JoinInventory.java @@ -11,8 +11,7 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; import net.minestom.server.event.player.PlayerPacketEvent; import net.minestom.server.inventory.InventoryType; -import net.minestom.server.inventory.click.ClickType; -import net.minestom.server.inventory.condition.InventoryConditionResult; +import net.minestom.server.inventory.click.Click; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import net.minestom.server.network.packet.client.play.ClientNameItemPacket; @@ -32,7 +31,7 @@ public class JoinInventory extends InteractableInventory { .customName(Component.text(this.prefix)) .build(), 0, - itemClick -> { + _ -> { } ); @@ -45,9 +44,8 @@ public class JoinInventory extends InteractableInventory { } @Override - protected void onClick(Player player, int slot, ClickType clickType, InventoryConditionResult inventoryConditionResult) { + protected void onClick(Player player, int slot, Click clickType) { if(slot != 2) return; - inventoryConditionResult.setCancel(true); player.closeInventory(); this.typedText = this.formatInput(this.typedText); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameSelectInventory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameSelectInventory.java index f8709ec..8752f56 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameSelectInventory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameSelectInventory.java @@ -33,7 +33,7 @@ public class MinigameSelectInventory extends InteractableInventory { .lore(type.getDescription().addWrap().getWrappedAssembled(p)) .build(), itemAlignment.next().get(), - itemClick -> this.drawGames(type) + _ -> this.drawGames(type) ); } @@ -62,7 +62,8 @@ public class MinigameSelectInventory extends InteractableInventory { .lore(gameFactory.description().addWrap().getWrappedAssembled(this.p)) .build(), offset + itemAlignment.next().get(), - itemClick -> itemClick.getPlayer().openInventory(new GameConfigurationInventory(this.room, itemClick.getPlayer(), gameFactory)) + itemClick -> itemClick.player().openInventory(new GameConfigurationInventory(this.room, itemClick.player(), gameFactory)), + true ); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/tournament/Tournament.java b/src/main/java/eu/mhsl/minenet/minigames/score/tournament/Tournament.java index e91523e..617c149 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/score/tournament/Tournament.java +++ b/src/main/java/eu/mhsl/minenet/minigames/score/tournament/Tournament.java @@ -24,8 +24,8 @@ public class Tournament { for(Player player : players) { int points = (game.getScores().size() - count) + this.boost(count, game.getScores().size()); - data.computeIfPresent(player, (existingPlayer, existingPoints) -> existingPoints + points); - data.computeIfAbsent(player, newPlayer -> points); + data.computeIfPresent(player, (_, existingPoints) -> existingPoints + points); + data.computeIfAbsent(player, _ -> points); } } }); @@ -44,11 +44,11 @@ public class Tournament { } return new Rewards( - this.memorialConfiguration.memorialMaterial().namespace().value(), + this.memorialConfiguration.memorialMaterial().key().value(), this.memorialConfiguration.memorialTitle(), this.memorialConfiguration.memorialLore(), this.getGameScores().keySet().stream().map(Player::getUuid).toList(), - this.rewardConfiguration.item().namespace().value(), + this.rewardConfiguration.item().key().value(), itemCount ); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/shared/inventory/InteractableInventory.java b/src/main/java/eu/mhsl/minenet/minigames/shared/inventory/InteractableInventory.java index 13a1eab..d7eee74 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/shared/inventory/InteractableInventory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/shared/inventory/InteractableInventory.java @@ -2,38 +2,64 @@ package eu.mhsl.minenet.minigames.shared.inventory; import net.kyori.adventure.text.Component; import net.minestom.server.entity.Player; +import net.minestom.server.event.inventory.InventoryPreClickEvent; import net.minestom.server.inventory.Inventory; import net.minestom.server.inventory.InventoryType; -import net.minestom.server.inventory.click.ClickType; -import net.minestom.server.inventory.condition.InventoryConditionResult; +import net.minestom.server.inventory.click.Click; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.HashMap; +import java.util.Map; import java.util.function.Consumer; public class InteractableInventory extends Inventory { + private final Map clickableItems = new HashMap<>(); + + public record ItemClick(Player player, InteractableInventory inventory, int clickedSlot, ItemStack item, Click clickType) { } + public record ClickableItem(ItemStack item, int slot, Consumer callback, boolean closeAfterClick) { } + /** * Defines an Inventory with direct callbacks for ItemSlots */ protected InteractableInventory(@NotNull InventoryType inventoryType, @NotNull Component title) { super(inventoryType, title); - this.addInventoryCondition(this::onClick); + this.eventNode().addListener( + InventoryPreClickEvent.class, + inventoryPreClickEvent -> this.onClick( + inventoryPreClickEvent.getPlayer(), + inventoryPreClickEvent.getSlot(), + inventoryPreClickEvent.getClick() + ) + ); + + this.eventNode().addListener(InventoryPreClickEvent.class, inventoryPreClickEvent -> { + @Nullable ClickableItem selectedItem = this.clickableItems.values().stream() + .filter(clickableItem -> clickableItem.slot() == inventoryPreClickEvent.getSlot()) + .findFirst() + .orElse(null); + if(selectedItem == null) { + inventoryPreClickEvent.setCancelled(true); + return; + } + if(selectedItem.closeAfterClick()) inventoryPreClickEvent.getPlayer().closeInventory(); + selectedItem.callback().accept( + new ItemClick(inventoryPreClickEvent.getPlayer(), this, inventoryPreClickEvent.getSlot(), selectedItem.item(), inventoryPreClickEvent.getClick()) + ); + inventoryPreClickEvent.setCancelled(true); + }); } /** * Set Item with Callback */ protected void setClickableItem(ItemStack item, int slot, Consumer callback, boolean closeAfter) { - this.setItemStack(slot, item); - this.addInventoryCondition((player, clickedSlot, clickType, inventoryConditionResult) -> { - if(clickedSlot == slot) { - if(closeAfter) player.closeInventory(); - callback.accept(new ItemClick(player, this, clickedSlot, item, clickType)); - } - inventoryConditionResult.setCancel(true); - }); + ClickableItem clickableItem = new ClickableItem(item, slot, callback, closeAfter); + this.setItemStack(clickableItem.slot(), clickableItem.item()); + this.clickableItems.put(clickableItem.slot(), clickableItem); } protected void setClickableItem(ItemStack item, int slot, Consumer callback) { @@ -47,7 +73,7 @@ public class InteractableInventory extends Inventory { this.setClickableItem( item, slot, - itemClick -> { + _ -> { } ); } @@ -62,7 +88,7 @@ public class InteractableInventory extends Inventory { /** * You may want to Override this method to get more generic click events */ - protected void onClick(Player player, int slot, ClickType clickType, InventoryConditionResult inventoryConditionResult) { + protected void onClick(Player player, int slot, Click clickType) { } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/shared/inventory/ItemClick.java b/src/main/java/eu/mhsl/minenet/minigames/shared/inventory/ItemClick.java deleted file mode 100644 index f28ab8f..0000000 --- a/src/main/java/eu/mhsl/minenet/minigames/shared/inventory/ItemClick.java +++ /dev/null @@ -1,45 +0,0 @@ -package eu.mhsl.minenet.minigames.shared.inventory; - -import net.minestom.server.entity.Player; -import net.minestom.server.inventory.Inventory; -import net.minestom.server.inventory.click.ClickType; -import net.minestom.server.item.ItemStack; - -public class ItemClick { - private final Player player; - private final InteractableInventory inventory; - private final int clickedSlot; - private final ItemStack item; - private final ClickType clickType; - - /** - * Describes a click on an Item from an IntractableInventory - */ - public ItemClick(Player player, InteractableInventory inventory, int clickedSlot, ItemStack item, ClickType clickType) { - this.player = player; - this.inventory = inventory; - this.clickedSlot = clickedSlot; - this.item = item; - this.clickType = clickType; - } - - public Player getPlayer() { - return this.player; - } - - public Inventory getInventory() { - return this.inventory; - } - - public int getClickedSlot() { - return this.clickedSlot; - } - - public ItemStack getItem() { - return this.item; - } - - public ClickType getClickType() { - return this.clickType; - } -} diff --git a/src/main/java/eu/mhsl/minenet/minigames/util/BatchUtil.java b/src/main/java/eu/mhsl/minenet/minigames/util/BatchUtil.java index 6e9a312..2d2c398 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/util/BatchUtil.java +++ b/src/main/java/eu/mhsl/minenet/minigames/util/BatchUtil.java @@ -1,12 +1,12 @@ package eu.mhsl.minenet.minigames.util; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import net.minestom.server.instance.InstanceContainer; import net.minestom.server.instance.batch.Batch; import net.minestom.server.instance.batch.ChunkBatch; import net.minestom.server.utils.chunk.ChunkUtils; import java.lang.reflect.Field; +import java.util.Map; import java.util.concurrent.CompletableFuture; public class BatchUtil { @@ -16,10 +16,13 @@ public class BatchUtil { field.setAccessible(true); @SuppressWarnings("unchecked") - Long2ObjectMap chunkBatchesMap = (Long2ObjectMap) field.get(batch); + Map chunkBatchesMap = (Map) field.get(batch); - return chunkBatchesMap.keySet().toLongArray(); - } catch(NoSuchFieldException | IllegalAccessException e) { + long[] out = new long[chunkBatchesMap.size()]; + int i = 0; + for (Long k : chunkBatchesMap.keySet()) out[i++] = k; + return out; + } catch (NoSuchFieldException | IllegalAccessException e) { throw new RuntimeException(e); } }