ProtocolLib/src/test/java/com/comphenix/protocol/injector/EntityUtilitiesTest.java

60 lines
2.4 KiB
Java
Raw Normal View History

2019-05-05 04:41:32 +02:00
package com.comphenix.protocol.injector;
2022-02-20 12:16:11 +01:00
import static com.comphenix.protocol.utility.TestUtils.setFinalField;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
2019-05-05 04:41:32 +02:00
import com.comphenix.protocol.BukkitInitialization;
2021-06-13 21:57:23 +02:00
import com.comphenix.protocol.reflect.FuzzyReflection;
import com.comphenix.protocol.reflect.fuzzy.FuzzyFieldContract;
2021-11-30 20:10:03 +01:00
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
2022-02-20 12:16:11 +01:00
import java.lang.reflect.Field;
import net.minecraft.server.level.ChunkProviderServer;
import net.minecraft.server.level.PlayerChunkMap;
2021-06-13 21:57:23 +02:00
import net.minecraft.server.level.PlayerChunkMap.EntityTracker;
import net.minecraft.server.level.WorldServer;
import net.minecraft.world.entity.Entity;
2022-06-08 03:24:31 +02:00
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity;
2022-02-20 12:16:11 +01:00
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
2019-05-05 04:41:32 +02:00
public class EntityUtilitiesTest {
2022-02-20 12:16:11 +01:00
@BeforeAll
2019-05-05 04:41:32 +02:00
public static void beforeClass() {
2022-02-20 12:16:11 +01:00
BukkitInitialization.initializeAll();
2019-05-05 04:41:32 +02:00
}
@Test
2022-02-20 12:16:11 +01:00
public void testReflection() {
2019-05-05 04:41:32 +02:00
CraftWorld bukkit = mock(CraftWorld.class);
WorldServer world = mock(WorldServer.class);
when(bukkit.getHandle()).thenReturn(world);
ChunkProviderServer provider = mock(ChunkProviderServer.class);
2021-11-30 20:10:03 +01:00
when(world.k()).thenReturn(provider);
2019-05-05 04:41:32 +02:00
PlayerChunkMap chunkMap = mock(PlayerChunkMap.class);
2021-06-13 21:57:23 +02:00
Field chunkMapField = FuzzyReflection.fromClass(ChunkProviderServer.class, true)
.getField(FuzzyFieldContract.newBuilder().typeExact(PlayerChunkMap.class).build());
setFinalField(provider, chunkMapField, chunkMap);
2019-05-05 04:41:32 +02:00
CraftEntity bukkitEntity = mock(CraftEntity.class);
Entity fakeEntity = mock(Entity.class);
when(fakeEntity.getBukkitEntity()).thenReturn(bukkitEntity);
EntityTracker tracker = mock(EntityTracker.class);
Field trackerField = FuzzyReflection.fromClass(EntityTracker.class, true)
.getField(FuzzyFieldContract.newBuilder().typeExact(Entity.class).build());
setFinalField(tracker, trackerField, fakeEntity);
2019-05-05 04:41:32 +02:00
Int2ObjectMap<EntityTracker> trackerMap = new Int2ObjectOpenHashMap<>();
2019-05-05 04:41:32 +02:00
trackerMap.put(1, tracker);
Field trackedEntitiesField = FuzzyReflection.fromClass(PlayerChunkMap.class, true)
.getField(FuzzyFieldContract.newBuilder().typeExact(Int2ObjectMap.class).build());
setFinalField(chunkMap, trackedEntitiesField, trackerMap);
2019-05-05 04:41:32 +02:00
}
}