mirror of https://github.com/Minestom/Minestom.git
101 lines
4.0 KiB
Java
101 lines
4.0 KiB
Java
package net.minestom.server.instance;
|
|
|
|
import net.minestom.server.MinecraftServer;
|
|
import net.minestom.testing.Env;
|
|
import net.minestom.testing.EnvTest;
|
|
import net.minestom.server.coordinate.Pos;
|
|
import net.minestom.server.entity.Entity;
|
|
import net.minestom.server.entity.EntityType;
|
|
import net.minestom.server.entity.Player;
|
|
import net.minestom.server.network.packet.server.SendablePacket;
|
|
import net.minestom.server.network.player.PlayerConnection;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.net.SocketAddress;
|
|
import java.util.UUID;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
|
@EnvTest
|
|
public class EntityTrackerIntegrationTest {
|
|
|
|
@Test
|
|
public void maxDistance(Env env) {
|
|
final Instance instance = env.createFlatInstance();
|
|
final Instance anotherInstance = env.createFlatInstance();
|
|
final Pos spawnPos = new Pos(0, 41, 0);
|
|
final int viewDistanceInChunks = MinecraftServer.getEntityViewDistance();
|
|
|
|
final Player viewer = createTestPlayer();
|
|
final AtomicInteger viewersCount = new AtomicInteger();
|
|
final Entity entity = new Entity(EntityType.ZOMBIE) {
|
|
@Override
|
|
public void updateNewViewer(Player player) {
|
|
viewersCount.incrementAndGet();
|
|
}
|
|
@Override
|
|
public void updateOldViewer(Player player) {
|
|
viewersCount.decrementAndGet();
|
|
}
|
|
};
|
|
entity.setInstance(instance, spawnPos).join();
|
|
assertEquals(0, viewersCount.get());
|
|
viewer.setInstance(instance, spawnPos).join(); // viewer at spawn
|
|
assertEquals(1, viewersCount.get());
|
|
viewer.teleport(new Pos(viewDistanceInChunks * 16 + 15, 41, 0)).join(); // viewer at max chunk range
|
|
assertEquals(1, viewersCount.get());
|
|
viewer.teleport(new Pos(viewDistanceInChunks * 16 + 16, 41, 0)).join(); // viewer outside of chunk range
|
|
assertEquals(0, viewersCount.get());
|
|
viewer.teleport(new Pos(viewDistanceInChunks * 16 + 15, 41, 0)).join(); // viewer back to max chunk range
|
|
assertEquals(1, viewersCount.get());
|
|
}
|
|
|
|
@Test
|
|
public void cornerInstanceSwap(Env env) {
|
|
final Instance instance = env.createFlatInstance();
|
|
final Instance anotherInstance = env.createFlatInstance();
|
|
final Pos spawnPos = new Pos(0, 41, 0);
|
|
final int viewDistanceInChunks = MinecraftServer.getEntityViewDistance();
|
|
|
|
final Player viewer = createTestPlayer();
|
|
final AtomicInteger viewersCount = new AtomicInteger();
|
|
final Entity entity = new Entity(EntityType.ZOMBIE) {
|
|
@Override
|
|
public void updateNewViewer(Player player) {
|
|
viewersCount.incrementAndGet();
|
|
}
|
|
@Override
|
|
public void updateOldViewer(Player player) {
|
|
viewersCount.decrementAndGet();
|
|
}
|
|
};
|
|
entity.setInstance(instance, spawnPos).join();
|
|
assertEquals(0, viewersCount.get());
|
|
viewer.setInstance(instance, spawnPos).join(); // viewer at spawn
|
|
assertEquals(1, viewersCount.get());
|
|
viewer.teleport(new Pos(viewDistanceInChunks * 16 + 15, 41, 0)).join(); // viewer at max chunk range
|
|
assertEquals(1, viewersCount.get());
|
|
viewer.setInstance(anotherInstance, spawnPos).join(); // viewer swapped instance
|
|
assertEquals(0, viewersCount.get());
|
|
viewer.setInstance(instance, spawnPos).join(); // viewer back to spawn
|
|
assertEquals(1, viewersCount.get());
|
|
}
|
|
|
|
private Player createTestPlayer() {
|
|
return new Player(UUID.randomUUID(), "TestPlayer", new PlayerConnection() {
|
|
@Override
|
|
public void sendPacket(@NotNull SendablePacket packet) {
|
|
// nothing
|
|
}
|
|
|
|
@Override
|
|
public @NotNull SocketAddress getRemoteAddress() {
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|