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);
}
}