From 1667dd8640ed52089af7662f99a88a459bc8befa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 May 2026 08:10:03 +0000 Subject: [PATCH 1/4] Update dependency net.minestom:minestom to v2026.05.17-1.21.11 --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index f1acca5..094a123 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,7 +7,7 @@ dependencyResolutionManagement { versionCatalogs { create("libs") { - version("minestom", "2026.05.11-1.21.11") + version("minestom", "2026.05.17-1.21.11") version("junit", "6.0.3") library("minestom","net.minestom", "minestom").versionRef("minestom") From fe757df69589cc7b90a61d02bcd699fdd7d3efa1 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sun, 17 May 2026 10:18:24 +0200 Subject: [PATCH 2/4] chore: align test-related code with the main code base --- .../java/net/minestom/testing/Collector.java | 14 +++++++++++++- .../java/net/minestom/testing/EnvImpl.java | 16 +++++++++++----- .../minestom/testing/TestConnectionImpl.java | 18 ++++++++++++++++-- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/minestom/testing/Collector.java b/src/main/java/net/minestom/testing/Collector.java index 694c204..d1b720b 100644 --- a/src/main/java/net/minestom/testing/Collector.java +++ b/src/main/java/net/minestom/testing/Collector.java @@ -30,7 +30,7 @@ public interface Collector { * * @return a list of elements collected by this collector */ - @NotNull List<@NotNull T> collect(); + List collect(); /** * Assert a single element from the collection, check its type, and apply a consumer to it. @@ -69,6 +69,18 @@ default void assertCount(int count) { assertEquals(count, elements.size(), "Expected " + count + " element(s), got " + elements.size() + ": " + elements); } + /** + * Assert the count of elements matching a predicate in the collector. + * + * @param count expected number of elements matching the predicate + * @param predicate to match elements + */ + default void assertCount(int count, Predicate predicate) { + List elements = collect(); + long matchingCount = elements.stream().filter(predicate).count(); + assertEquals(count, matchingCount, "Expected " + count + " element(s) matching the predicate, got " + matchingCount + ": " + elements); + } + /** * Assert that the collector only contains a single element. */ diff --git a/src/main/java/net/minestom/testing/EnvImpl.java b/src/main/java/net/minestom/testing/EnvImpl.java index 2553f42..511e081 100644 --- a/src/main/java/net/minestom/testing/EnvImpl.java +++ b/src/main/java/net/minestom/testing/EnvImpl.java @@ -5,7 +5,7 @@ import net.minestom.server.event.EventFilter; import net.minestom.server.event.EventListener; import net.minestom.server.network.player.GameProfile; -import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.Assertions; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -20,13 +20,19 @@ public final class EnvImpl implements Env { public EnvImpl(ServerProcess process) { this.process = process; + // If exceptions reach the exception handler, by default fail the test. + process().exception().setExceptionHandler(EnvImpl::handleException); // Start the dispatcher threads if not already started. process().dispatcher().start(); // Use player provider to disable queued chunk sending. // Set here to allow an individual test to override if they want. - process.connection().setPlayerProvider(TestPlayerImpl::new); + process.connection().setPlayerProvider(TestConnectionImpl.TestPlayerImpl::new); + } + + static void handleException(Throwable exception) { + Assertions.fail("Server threw exception", exception); } @Override @@ -35,12 +41,12 @@ public ServerProcess process() { } @Override - public TestConnection createConnection(GameProfile profile) { - return new TestConnectionImpl(this, profile); + public TestConnection createConnection(GameProfile gameProfile) { + return new TestConnectionImpl(this, gameProfile); } @Override - public Collector trackEvent(Class eventType, EventFilter filter, @NotNull H actor) { + public Collector trackEvent(Class eventType, EventFilter filter, H actor) { var tracker = new EventCollector(actor); this.process.eventHandler().map(actor, filter).addListener(eventType, tracker.events::add); return tracker; diff --git a/src/main/java/net/minestom/testing/TestConnectionImpl.java b/src/main/java/net/minestom/testing/TestConnectionImpl.java index 0ab602c..01673f9 100644 --- a/src/main/java/net/minestom/testing/TestConnectionImpl.java +++ b/src/main/java/net/minestom/testing/TestConnectionImpl.java @@ -1,11 +1,13 @@ package net.minestom.testing; import net.kyori.adventure.translation.GlobalTranslator; +import net.minestom.server.ServerFlag; import net.minestom.server.ServerProcess; import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Player; import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.minestom.server.instance.Chunk; import net.minestom.server.instance.Instance; import net.minestom.server.network.ConnectionState; import net.minestom.server.network.packet.server.SendablePacket; @@ -89,7 +91,7 @@ private ServerPacket extractPacket(final SendablePacket packet) { final Player player = getPlayer(); if (player == null) return serverPacket; - if (MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && serverPacket instanceof ServerPacket.ComponentHolding) { + if (ServerFlag.AUTOMATIC_COMPONENT_TRANSLATION && serverPacket instanceof ServerPacket.ComponentHolding) { serverPacket = ((ServerPacket.ComponentHolding) serverPacket).copyWithOperator(component -> GlobalTranslator.render(component, Objects.requireNonNullElseGet(player.getLocale(), MinestomAdventure::getDefaultLocale))); } @@ -127,4 +129,16 @@ public List collect() { return List.copyOf(packets); } } -} + + static final class TestPlayerImpl extends Player { + public TestPlayerImpl(PlayerConnection playerConnection, GameProfile gameProfile) { + super(playerConnection, gameProfile); + } + + @Override + public void sendChunk(Chunk chunk) { + // Send immediately + sendPacket(chunk.getFullDataPacket()); + } + } +} \ No newline at end of file From e5f5f8d6adaef40d2655409edd5637c48745a150 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sun, 17 May 2026 10:19:49 +0200 Subject: [PATCH 3/4] chore: fix custom player test --- .../java/net/minestom/testing/TestPlayerIntegrationTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java b/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java index 31a6de0..dbbfd75 100644 --- a/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java +++ b/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java @@ -15,6 +15,7 @@ class TestPlayerIntegrationTest { @Test void testCustomPlayerCreation(@NotNull Env env) { + env.process().connection().setPlayerProvider(TestPlayerImpl::new); Instance instance = env.createFlatInstance(); assertNotNull(instance); Player player = env.createPlayer(instance); From 3e9c8d49fbde63f3bd66b63b1bd17b3a57c34161 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sun, 17 May 2026 10:24:05 +0200 Subject: [PATCH 4/4] chore: remove double test player definition --- src/main/java/net/minestom/testing/EnvImpl.java | 2 +- .../net/minestom/testing/TestConnectionImpl.java | 13 ------------- .../minestom/testing/TestPlayerIntegrationTest.java | 1 - 3 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/main/java/net/minestom/testing/EnvImpl.java b/src/main/java/net/minestom/testing/EnvImpl.java index 511e081..599f9ff 100644 --- a/src/main/java/net/minestom/testing/EnvImpl.java +++ b/src/main/java/net/minestom/testing/EnvImpl.java @@ -28,7 +28,7 @@ public EnvImpl(ServerProcess process) { // Use player provider to disable queued chunk sending. // Set here to allow an individual test to override if they want. - process.connection().setPlayerProvider(TestConnectionImpl.TestPlayerImpl::new); + process.connection().setPlayerProvider(TestPlayerImpl::new); } static void handleException(Throwable exception) { diff --git a/src/main/java/net/minestom/testing/TestConnectionImpl.java b/src/main/java/net/minestom/testing/TestConnectionImpl.java index 01673f9..8101290 100644 --- a/src/main/java/net/minestom/testing/TestConnectionImpl.java +++ b/src/main/java/net/minestom/testing/TestConnectionImpl.java @@ -7,7 +7,6 @@ import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Player; import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; -import net.minestom.server.instance.Chunk; import net.minestom.server.instance.Instance; import net.minestom.server.network.ConnectionState; import net.minestom.server.network.packet.server.SendablePacket; @@ -129,16 +128,4 @@ public List collect() { return List.copyOf(packets); } } - - static final class TestPlayerImpl extends Player { - public TestPlayerImpl(PlayerConnection playerConnection, GameProfile gameProfile) { - super(playerConnection, gameProfile); - } - - @Override - public void sendChunk(Chunk chunk) { - // Send immediately - sendPacket(chunk.getFullDataPacket()); - } - } } \ No newline at end of file diff --git a/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java b/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java index dbbfd75..31a6de0 100644 --- a/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java +++ b/src/test/java/net/minestom/testing/TestPlayerIntegrationTest.java @@ -15,7 +15,6 @@ class TestPlayerIntegrationTest { @Test void testCustomPlayerCreation(@NotNull Env env) { - env.process().connection().setPlayerProvider(TestPlayerImpl::new); Instance instance = env.createFlatInstance(); assertNotNull(instance); Player player = env.createPlayer(instance);