mirror of https://github.com/Minestom/Minestom.git
173 lines
5.9 KiB
Java
173 lines
5.9 KiB
Java
package net.minestom.server.entity;
|
|
|
|
import net.minestom.testing.Env;
|
|
import net.minestom.testing.EnvTest;
|
|
import net.minestom.server.coordinate.Pos;
|
|
import net.minestom.server.network.packet.server.play.SpawnEntityPacket;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
@EnvTest
|
|
public class EntityViewIntegrationTest {
|
|
|
|
@Test
|
|
public void emptyEntity(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var entity = new Entity(EntityType.ZOMBIE);
|
|
entity.setInstance(instance, new Pos(0, 40, 42)).join();
|
|
assertEquals(0, entity.getViewers().size());
|
|
}
|
|
|
|
@Test
|
|
public void emptyPlayer(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var player = env.createPlayer(instance, new Pos(0, 42, 0));
|
|
assertEquals(0, player.getViewers().size());
|
|
}
|
|
|
|
@Test
|
|
public void multiPlayers(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var p1 = env.createPlayer(instance, new Pos(0, 42, 42));
|
|
var p2 = env.createPlayer(instance, new Pos(0, 42, 42));
|
|
|
|
assertEquals(1, p1.getViewers().size());
|
|
p1.getViewers().forEach(p -> assertEquals(p2, p));
|
|
|
|
assertEquals(1, p2.getViewers().size());
|
|
p2.getViewers().forEach(p -> assertEquals(p1, p));
|
|
|
|
p2.remove();
|
|
assertEquals(0, p1.getViewers().size());
|
|
assertEquals(0, p2.getViewers().size());
|
|
|
|
var p3 = env.createPlayer(instance, new Pos(0, 42, 42));
|
|
assertEquals(1, p1.getViewers().size());
|
|
p1.getViewers().forEach(p -> assertEquals(p3, p));
|
|
}
|
|
|
|
@Test
|
|
public void manualViewers(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var p1 = env.createPlayer(instance, new Pos(0, 42, 0));
|
|
var p2 = env.createPlayer(instance, new Pos(0, 42, 5_000));
|
|
|
|
assertEquals(0, p1.getViewers().size());
|
|
assertEquals(0, p2.getViewers().size());
|
|
p1.addViewer(p2);
|
|
assertEquals(1, p1.getViewers().size());
|
|
assertEquals(0, p2.getViewers().size());
|
|
|
|
p2.teleport(new Pos(0, 42, 0)).join();
|
|
assertEquals(1, p1.getViewers().size());
|
|
assertEquals(1, p2.getViewers().size());
|
|
}
|
|
|
|
@Test
|
|
public void movements(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var p1 = env.createPlayer(instance, new Pos(0, 42, 0));
|
|
var p2 = env.createPlayer(instance, new Pos(0, 42, 96));
|
|
|
|
assertEquals(0, p1.getViewers().size());
|
|
assertEquals(0, p2.getViewers().size());
|
|
|
|
p2.teleport(new Pos(0, 42, 95)).join(); // Teleport in range (6 chunks)
|
|
assertEquals(1, p1.getViewers().size());
|
|
assertEquals(1, p2.getViewers().size());
|
|
}
|
|
|
|
@Test
|
|
public void autoViewable(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var p1 = env.createPlayer(instance, new Pos(0, 42, 0));
|
|
assertTrue(p1.isAutoViewable());
|
|
p1.setAutoViewable(false);
|
|
|
|
var p2 = env.createPlayer(instance, new Pos(0, 42, 0));
|
|
|
|
assertEquals(0, p1.getViewers().size());
|
|
assertEquals(1, p2.getViewers().size());
|
|
|
|
p1.setAutoViewable(true);
|
|
assertEquals(1, p1.getViewers().size());
|
|
assertEquals(1, p2.getViewers().size());
|
|
}
|
|
|
|
@Test
|
|
public void predictableViewers(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var p = env.createPlayer(instance, new Pos(0, 42, 0));
|
|
assertTrue(p.hasPredictableViewers());
|
|
p.setAutoViewable(false);
|
|
assertFalse(p.hasPredictableViewers());
|
|
p.setAutoViewable(true);
|
|
assertTrue(p.hasPredictableViewers());
|
|
// MANUAL VIEWERS
|
|
{
|
|
var tmpPlayer = env.createPlayer(instance, new Pos(0, 42, 0));
|
|
p.addViewer(tmpPlayer);
|
|
assertFalse(p.hasPredictableViewers());
|
|
p.removeViewer(tmpPlayer);
|
|
tmpPlayer.remove();
|
|
assertTrue(p.hasPredictableViewers());
|
|
}
|
|
// CHANGE RULE
|
|
{
|
|
p.updateViewableRule(player -> false);
|
|
assertFalse(p.hasPredictableViewers());
|
|
p.updateViewableRule(null);
|
|
assertTrue(p.hasPredictableViewers());
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void livingVehicle(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var connection = env.createConnection();
|
|
var player = connection.connect(instance, new Pos(0, 40, 0)).join();
|
|
|
|
var vehicle = new Entity(EntityType.ZOMBIE);
|
|
var passenger = new Entity(EntityType.ZOMBIE);
|
|
|
|
var tracker = connection.trackIncoming(SpawnEntityPacket.class);
|
|
|
|
vehicle.setInstance(instance, new Pos(0, 40, 0)).join();
|
|
vehicle.addPassenger(passenger);
|
|
// Verify packets
|
|
{
|
|
var results = tracker.collect();
|
|
assertEquals(2, results.size());
|
|
assertEquals(vehicle.getEntityId(), results.get(0).entityId());
|
|
assertEquals(passenger.getEntityId(), results.get(1).entityId());
|
|
}
|
|
// Verify viewers
|
|
{
|
|
assertEquals(0, player.getViewers().size());
|
|
assertEquals(1, vehicle.getViewers().size());
|
|
assertTrue(vehicle.isViewer(player));
|
|
assertEquals(1, passenger.getViewers().size());
|
|
assertTrue(passenger.isViewer(player));
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void vehicleInheritance(Env env) {
|
|
var instance = env.createFlatInstance();
|
|
var p1 = env.createPlayer(instance, new Pos(0, 40, 0));
|
|
var p2 = env.createPlayer(instance, new Pos(0, 40, 0));
|
|
|
|
var vehicle = new Entity(EntityType.ZOMBIE);
|
|
vehicle.setInstance(instance, new Pos(0, 40, 0)).join();
|
|
vehicle.addPassenger(p1);
|
|
|
|
var vehicle2 = new Entity(EntityType.ZOMBIE);
|
|
vehicle2.setInstance(instance, new Pos(0, 40, 0)).join();
|
|
vehicle2.addPassenger(p2);
|
|
|
|
assertEquals(2, vehicle.getViewers().size());
|
|
assertEquals(2, vehicle2.getViewers().size());
|
|
}
|
|
}
|