161 lines
5.2 KiB
Java
161 lines
5.2 KiB
Java
package com.comphenix.protocol.utility;
|
|
|
|
import com.comphenix.protocol.BukkitInitialization;
|
|
import com.mojang.authlib.GameProfile;
|
|
import net.minecraft.nbt.NBTCompressedStreamTools;
|
|
import net.minecraft.network.chat.IChatBaseComponent;
|
|
import net.minecraft.network.protocol.game.PacketPlayOutUpdateAttributes;
|
|
import net.minecraft.network.protocol.status.ServerPing;
|
|
import net.minecraft.network.syncher.DataWatcher;
|
|
import net.minecraft.server.network.PlayerConnection;
|
|
import net.minecraft.util.MinecraftEncryption;
|
|
import net.minecraft.world.level.ChunkCoordIntPair;
|
|
import net.minecraft.world.level.block.state.IBlockData;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.junit.jupiter.api.AfterAll;
|
|
import org.junit.jupiter.api.BeforeAll;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static com.comphenix.protocol.utility.TestUtils.assertItemsEqual;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.times;
|
|
import static org.mockito.Mockito.verify;
|
|
|
|
public class MinecraftReflectionTest {
|
|
|
|
@BeforeAll
|
|
public static void initializeBukkit() {
|
|
BukkitInitialization.initializeAll();
|
|
}
|
|
|
|
@AfterAll
|
|
public static void undoMocking() {
|
|
// NOP
|
|
MinecraftReflection.minecraftPackage = null;
|
|
}
|
|
|
|
@Test
|
|
public void testBukkitMethod() {
|
|
FakeEntity entity = mock(FakeEntity.class);
|
|
FakeBlock block = mock(FakeBlock.class);
|
|
|
|
MinecraftReflection.getBukkitEntity(entity);
|
|
MinecraftReflection.getBukkitEntity(block);
|
|
|
|
verify(entity, times(1)).getBukkitEntity();
|
|
verify(block, times(1)).getBukkitEntity();
|
|
}
|
|
|
|
@Test
|
|
public void testIllegalClass() {
|
|
assertThrows(IllegalArgumentException.class, () -> MinecraftReflection.getBukkitEntity("Hello"));
|
|
}
|
|
|
|
@Test
|
|
public void testNullable() {
|
|
assertNull(MinecraftReflection.getNullableNMS("ProtocolLib"));
|
|
}
|
|
|
|
@Test
|
|
public void testAttributeSnapshot() {
|
|
assertEquals(PacketPlayOutUpdateAttributes.AttributeSnapshot.class,
|
|
MinecraftReflection.getAttributeSnapshotClass());
|
|
}
|
|
|
|
@Test
|
|
public void testChatComponent() {
|
|
assertEquals(IChatBaseComponent.class, MinecraftReflection.getIChatBaseComponentClass());
|
|
}
|
|
|
|
@Test
|
|
public void testChatSerializer() {
|
|
assertEquals(IChatBaseComponent.ChatSerializer.class, MinecraftReflection.getChatSerializerClass());
|
|
}
|
|
|
|
@Test
|
|
public void testChunkCoordIntPair() {
|
|
assertEquals(ChunkCoordIntPair.class, MinecraftReflection.getChunkCoordIntPair());
|
|
}
|
|
|
|
@Test
|
|
public void testIBlockData() {
|
|
assertEquals(IBlockData.class, MinecraftReflection.getIBlockDataClass());
|
|
}
|
|
|
|
@Test
|
|
public void testPlayerConnection() {
|
|
assertEquals(PlayerConnection.class, MinecraftReflection.getPlayerConnectionClass());
|
|
}
|
|
|
|
@Test
|
|
public void testServerPing() {
|
|
assertEquals(ServerPing.class, MinecraftReflection.getServerPingClass());
|
|
}
|
|
|
|
@Test
|
|
public void testServerPingPlayerSample() {
|
|
assertEquals(ServerPing.ServerPingPlayerSample.class, MinecraftReflection.getServerPingPlayerSampleClass());
|
|
}
|
|
|
|
@Test
|
|
public void testServerPingServerData() {
|
|
assertEquals(ServerPing.ServerData.class, MinecraftReflection.getServerPingServerDataClass());
|
|
}
|
|
|
|
@Test
|
|
public void testNbtStreamTools() {
|
|
assertEquals(NBTCompressedStreamTools.class, MinecraftReflection.getNbtCompressedStreamToolsClass());
|
|
}
|
|
|
|
@Test
|
|
public void testDataWatcherItem() {
|
|
assertEquals(DataWatcher.Item.class, MinecraftReflection.getDataWatcherItemClass());
|
|
}
|
|
|
|
@Test
|
|
public void testLoginSignature() {
|
|
assertEquals(MinecraftEncryption.b.class, MinecraftReflection.getSaltedSignatureClass());
|
|
}
|
|
|
|
@Test
|
|
public void testItemStacks() {
|
|
ItemStack stack = new ItemStack(Material.GOLDEN_SWORD);
|
|
Object nmsStack = MinecraftReflection.getMinecraftItemStack(stack);
|
|
assertItemsEqual(stack, MinecraftReflection.getBukkitItemStack(nmsStack));
|
|
|
|
// The NMS handle for CraftItemStack is null with Material.AIR, make sure it is handled correctly
|
|
assertNotNull(
|
|
MinecraftReflection.getMinecraftItemStack(CraftItemStack.asCraftCopy(new ItemStack(Material.AIR))));
|
|
}
|
|
|
|
@Test
|
|
public void testGameProfile() {
|
|
assertEquals(GameProfile.class, MinecraftReflection.getGameProfileClass());
|
|
}
|
|
|
|
@Test
|
|
public void testEnumEntityUseAction() {
|
|
// this class is package-private in PacketPlayInUseEntity, so we can only check if no exception is thrown during retrieval
|
|
MinecraftReflection.getEnumEntityUseActionClass();
|
|
}
|
|
|
|
// Mocking objects
|
|
private interface FakeEntity {
|
|
|
|
Entity getBukkitEntity();
|
|
}
|
|
|
|
private interface FakeBlock {
|
|
|
|
Block getBukkitEntity();
|
|
}
|
|
}
|