diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/ai/AIManager.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/ai/AIManager.java index 1ed59d98..9f8383cf 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/ai/AIManager.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/ai/AIManager.java @@ -19,7 +19,6 @@ package de.steamwar.fightsystem.ai; -import de.steamwar.Reflection; import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.fight.FightTeam; @@ -30,28 +29,30 @@ import org.bukkit.Material; import java.util.Arrays; import java.util.List; import java.util.function.BooleanSupplier; +import java.util.function.Function; import java.util.stream.Collectors; @AllArgsConstructor public class AIManager { private static final List AIs = Arrays.asList( - new AIManager(DummyAI.class, Material.STONE, () -> ArenaMode.Test.contains(Config.mode)) + new AIManager("DummyAI", DummyAI::new, Material.STONE, () -> ArenaMode.Test.contains(Config.mode)) ); public static List availableAIs() { return AIs.stream().filter(manager -> manager.available.getAsBoolean()).collect(Collectors.toList()); } - private final Class aiClass; + private final String name; + private final Function constructor; @Getter private final Material icon; private final BooleanSupplier available; public String name() { - return aiClass.getSimpleName(); + return name; } public void join(FightTeam team) { - Reflection.getConstructor(aiClass, FightTeam.class).invoke(team); + constructor.apply(team); } } diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/Recording.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/Recording.java index 24735f58..2a7fdcae 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/Recording.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/Recording.java @@ -83,9 +83,8 @@ public class Recording implements Listener { } public static final Class primedTnt = PrimedTnt.class; - private static final Reflection.Method getBukkitEntity = Reflection.getTypedMethod(net.minecraft.world.entity.Entity.class, "getBukkitEntity", null); public static void iterateOverEntities(Predicate filter, Consumer consumer) { - CraftbukkitWrapper.impl.entityIterator().filter(filter).map(entity -> (Entity) getBukkitEntity.invoke(entity)).forEach(consumer); + CraftbukkitWrapper.impl.entityIterator().filter(filter).map(net.minecraft.world.entity.Entity::getBukkitEntity).forEach(consumer); } public Recording() { diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/BlockIdWrapper.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/BlockIdWrapper.java index b6c3fd56..a91de770 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/BlockIdWrapper.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/BlockIdWrapper.java @@ -21,12 +21,10 @@ package de.steamwar.fightsystem.utils; import com.comphenix.tinyprotocol.TinyProtocol; import com.mojang.authlib.GameProfile; -import de.steamwar.Reflection; import de.steamwar.core.ProtocolWrapper; import de.steamwar.fightsystem.FightSystem; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.block.state.BlockState; import org.bukkit.GameMode; import org.bukkit.Material; @@ -34,19 +32,11 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.block.CraftBlockState; -import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.util.CraftMagicNumbers; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; public class BlockIdWrapper { - public static final Class worldServer = ServerLevel.class; - public static final Reflection.Method getWorldHandle = Reflection.getTypedMethod(CraftWorld.class, "getHandle", worldServer); - - public static final Class craftPlayer = CraftPlayer.class; - public static final Class entityPlayer = ServerPlayer.class; - public static final Reflection.Method getPlayer = Reflection.getTypedMethod(craftPlayer, "getHandle", entityPlayer); - public static final BlockIdWrapper impl = new BlockIdWrapper(); public Material idToMaterial(int blockState) { diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper.java index 3a9dbbe7..6a4518c8 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/CraftbukkitWrapper.java @@ -19,14 +19,10 @@ package de.steamwar.fightsystem.utils; -import de.steamwar.Reflection; import de.steamwar.fightsystem.Config; import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; -import net.minecraft.world.level.entity.LevelEntityGetter; -import org.bukkit.Chunk; import org.bukkit.GameRule; import org.bukkit.World; import org.bukkit.craftbukkit.CraftWorld; @@ -41,26 +37,16 @@ import java.util.stream.StreamSupport; public class CraftbukkitWrapper { public static final CraftbukkitWrapper impl = new CraftbukkitWrapper(); - private static final Reflection.Method getWorld = Reflection.getMethod(CraftWorld.class, "getHandle"); - private static final Reflection.Method getChunk = Reflection.getTypedMethod(ServerLevel.class, null, LevelChunk.class, int.class, int.class); - private static final Reflection.Method getChunkSections = Reflection.getTypedMethod(LevelChunk.class, null, LevelChunkSection[].class); - private LevelChunkSection[] getChunkSections(World world, int x, int z) { - return (LevelChunkSection[]) getChunkSections.invoke(getChunk.invoke(getWorld.invoke(world), x, z)); - } - - private static final Reflection.Method getEntity = Reflection.getTypedMethod(CraftEntity.class, "getHandle", net.minecraft.world.entity.Entity.class); protected net.minecraft.world.entity.Entity getEntity(Entity e) { - return (net.minecraft.world.entity.Entity) getEntity.invoke(e); + return ((CraftEntity) e).getHandle(); } public float headRotation(Entity e) { return getEntity(e).getYHeadRot(); } - private static final Reflection.Method getWorldEntities = Reflection.getTypedMethod(ServerLevel.class, null, LevelEntityGetter.class); - private static final Reflection.Method getIterable = Reflection.getTypedMethod(LevelEntityGetter.class, null, Iterable.class); - public Stream entityIterator() { - return StreamSupport.stream(((Iterable) getIterable.invoke(getWorldEntities.invoke(getWorld.invoke(Config.world)))).spliterator(), false); + public Stream entityIterator() { + return StreamSupport.stream(((CraftWorld) Config.world).getHandle().getEntities().getAll().spliterator(), false); } public void setupGamerule() { diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHiderWrapper.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHiderWrapper.java index 35203a20..378c3efc 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHiderWrapper.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHiderWrapper.java @@ -19,7 +19,6 @@ package de.steamwar.fightsystem.utils; -import de.steamwar.Reflection; import de.steamwar.fightsystem.Config; import it.unimi.dsi.fastutil.shorts.Short2ObjectArrayMap; import net.minecraft.core.BlockPos; @@ -34,12 +33,11 @@ import java.util.List; public class HullHiderWrapper { public static final HullHiderWrapper impl = new HullHiderWrapper(); - private static final Reflection.Method getState = Reflection.getTypedMethod(CraftBlockData.class, "getState", BlockState.class); public Object generateBlockChangePacket(List changes) { Object[] blockdata = new Object[changes.size()]; for(int i = 0; i < blockdata.length; i++) { Hull.IntVector change = changes.get(i); - blockdata[i] = getState.invoke(Config.world.getBlockData(change.getX(), change.getY(), change.getZ())); + blockdata[i] = ((CraftBlockData) Config.world.getBlockData(change.getX(), change.getY(), change.getZ())).getState(); } return generateBlockChangePacket(changes, blockdata); diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/Reflection.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/Reflection.java index 5b5d88d2..3230e84e 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/Reflection.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/Reflection.java @@ -206,18 +206,10 @@ public final class Reflection { return getField(target, name, fieldType, 0); } - public static Field getField(String className, String name, Class fieldType) { - return getField(getClass(className), name, fieldType, 0); - } - public static Field getField(Class target, Class fieldType, int index) { return getField(target, null, fieldType, index); } - public static Field getField(String className, Class fieldType, int index) { - return getField(getClass(className), fieldType, index); - } - public static Field getField(Class target, Class fieldType, int index, Class... parameters) { return getField(target, null, fieldType, index, parameters); } @@ -268,14 +260,6 @@ public final class Reflection { } } - public static Method getMethod(String className, String methodName, Class... params) { - return getTypedMethod(getClass(className), methodName, null, params); - } - - public static Method getMethod(Class clazz, String methodName, Class... params) { - return getTypedMethod(clazz, methodName, null, params); - } - public static Method getTypedMethod(Class clazz, String methodName, Class returnType, Class... params) { for (final java.lang.reflect.Method method : clazz.getDeclaredMethods()) { if ((methodName == null || method.getName().equals(methodName)) @@ -306,10 +290,6 @@ public final class Reflection { } } - public static Constructor getConstructor(String className, Class... params) { - return getConstructor(getClass(className), params); - } - public static Constructor getConstructor(Class clazz, Class... params) { for (final java.lang.reflect.Constructor constructor : clazz.getDeclaredConstructors()) { if (Arrays.equals(constructor.getParameterTypes(), params)) { @@ -323,12 +303,8 @@ public final class Reflection { public static Object newInstance(Class clazz) { try { - if (Core.getVersion() > 15) { - return Unsafe.getUnsafe().allocateInstance(clazz); - } else { - return clazz.newInstance(); - } - } catch (InstantiationException | IllegalAccessException e) { + return Unsafe.getUnsafe().allocateInstance(clazz); + } catch (InstantiationException e) { throw new SecurityException("Could not create object", e); } } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/BountifulWrapper.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/BountifulWrapper.java index 2803cf87..713de0eb 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/BountifulWrapper.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/BountifulWrapper.java @@ -47,18 +47,14 @@ public class BountifulWrapper { player.spigot().sendMessage(type, msg); } - private static final Class dataWatcherObject = EntityDataAccessor.class; private static final Class dataWatcherRegistry = EntityDataSerializers.class; private static final Class dataWatcherSerializer = EntityDataSerializer.class; - private static final Reflection.Constructor dataWatcherObjectConstructor = Reflection.getConstructor(dataWatcherObject, int.class, dataWatcherSerializer); public Object getDataWatcherObject(int index, Class type) { - return dataWatcherObjectConstructor.invoke(index, Reflection.getField(dataWatcherRegistry, dataWatcherSerializer, 0, type).get(null)); + return new EntityDataAccessor<>(index, (EntityDataSerializer) Reflection.getField(dataWatcherRegistry, dataWatcherSerializer, 0, type).get(null)); } - private static final Class item = SynchedEntityData.DataItem.class; - private static final Reflection.Constructor itemConstructor = Reflection.getConstructor(item, dataWatcherObject, Object.class); public Object getDataWatcherItem(Object dwo, Object value) { - return itemConstructor.invoke(dwo, value); + return new SynchedEntityData.DataItem<>((EntityDataAccessor) dwo, value); } public BountifulWrapper.PositionSetter getPositionSetter(Class packetClass, int fieldOffset) { diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/CheckpointUtilsJ9.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/CheckpointUtilsJ9.java index 31577e6e..04890d42 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/CheckpointUtilsJ9.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/CheckpointUtilsJ9.java @@ -93,7 +93,6 @@ class CheckpointUtilsJ9 { private static final Reflection.Field channelFutures = Reflection.getField(ServerConnectionListener.class, List.class, 0, ChannelFuture.class); - private static final Reflection.Method bind = Reflection.getMethod(ServerConnectionListener.class, null, InetAddress.class, int.class); private static void freezeInternal(Path path) throws Exception { Bukkit.getPluginManager().callEvent(new CRIUSleepEvent()); @@ -137,7 +136,7 @@ class CheckpointUtilsJ9 { } // Reopen socket - bind.invoke(serverConnection, InetAddress.getLoopbackAddress(), port); + serverConnection.startTcpServerListener(InetAddress.getLoopbackAddress(), port); if(Core.getVersion() > 12) { for(Object future : channels) { ((ChannelFuture) future).channel().config().setAutoRead(true); diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/FlatteningWrapper.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/FlatteningWrapper.java index b214330f..a9375b7a 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/FlatteningWrapper.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/FlatteningWrapper.java @@ -21,15 +21,15 @@ package de.steamwar.core; import com.destroystokyo.paper.profile.PlayerProfile; import de.steamwar.Reflection; -import net.minecraft.core.DefaultedRegistry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundSetObjectivePacket; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.ProgressListener; import net.minecraft.world.entity.Pose; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.util.CraftNamespacedKey; import org.bukkit.entity.EntityType; @@ -337,33 +337,18 @@ public class FlatteningWrapper { return displayName != null ? Optional.of(ChatWrapper.impl.stringToChatComponent(displayName)) : Optional.empty(); } - private static final Class registryBlocks = DefaultedRegistry.class; - private static final Class entityTypes = net.minecraft.world.entity.EntityType.class; - private static final Object entityTypesRegistry = Reflection.getField(BuiltInRegistries.class, registryBlocks, 0, entityTypes).get(null); - private static final Reflection.Method get = Reflection.getMethod(registryBlocks, null, ResourceLocation.class); - private static final Reflection.Field spawnType = Reflection.getField(ProtocolWrapper.spawnPacket, entityTypes, 0); - private static final Reflection.Field spawnLivingType = spawnType; - private static final Reflection.Method toMinecraft = Reflection.getMethod(CraftNamespacedKey.class, "toMinecraft", NamespacedKey.class); - private static final Map types = new HashMap<>(); - static { - types.put(EntityType.ARMOR_STAND, 1); - } + private static final Reflection.Field spawnType = Reflection.getField(ProtocolWrapper.spawnPacket, net.minecraft.world.entity.EntityType.class, 0); public void setSpawnPacketType(Object packet, EntityType type) { - if(type.isAlive()) { - spawnLivingType.set(packet, Core.getVersion() > 18 ? get.invoke(entityTypesRegistry, toMinecraft.invoke(null, type.getKey())) : types.get(type)); - } else { - spawnType.set(packet, get.invoke(entityTypesRegistry, toMinecraft.invoke(null, type.getKey()))); - } + ResourceLocation key = CraftNamespacedKey.toMinecraft(type.getKey()); + spawnType.set(packet, BuiltInRegistries.ENTITY_TYPE.get(key)); } public int getViewDistance(Player player) { return player.getClientViewDistance(); } - private static final Reflection.Method getHandle = Reflection.getMethod(CraftWorld.class, "getHandle"); - private static final Reflection.Method save = Reflection.getMethod(ServerLevel.class, null, ProgressListener.class, boolean.class, boolean.class); public void syncSave(World world) { - save.invoke(getHandle.invoke(world), null, true, false); + ((CraftWorld) world).getHandle().save(null, true, false); } public enum EntityPose { diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java index f4acdad5..63aed6a1 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/TPSWatcher.java @@ -19,7 +19,6 @@ package de.steamwar.core; -import de.steamwar.Reflection; import net.minecraft.server.MinecraftServer; import org.bukkit.Bukkit; @@ -80,11 +79,8 @@ public class TPSWatcher { } } - private static final Class minecraftServer = MinecraftServer.class; - private static final Reflection.Method getServer = Reflection.getTypedMethod(minecraftServer, "getServer", minecraftServer); - private static final Reflection.Field recentTps = Reflection.getField(minecraftServer, "recentTps", double[].class); private static double[] getSpigotTPS() { - return recentTps.get(getServer.invoke(null)); + return MinecraftServer.getServer().recentTps; } private static double round(double d) { diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java index cf6ab36a..8f87f63c 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java @@ -19,9 +19,7 @@ package de.steamwar.entity; -import de.steamwar.Reflection; import de.steamwar.core.BountifulWrapper; -import de.steamwar.core.Core; import lombok.Getter; import net.minecraft.world.level.block.state.BlockState; import org.bukkit.Location; @@ -60,12 +58,10 @@ public class RBlockDisplay extends RDisplay { sendPacket(updatePacketSink, this::getBlock); } - private static final Class iBlockDataClass = BlockState.class; - private static final Reflection.Method getState = Reflection.getTypedMethod(CraftBlockData.class, "getState", iBlockDataClass); - private static final Object blockWatcher = BountifulWrapper.impl.getDataWatcherObject(Core.getVersion() >= 21 ? 23 : 22, iBlockDataClass); + private static final Object blockWatcher = BountifulWrapper.impl.getDataWatcherObject(23, BlockState.class); private void getBlock(boolean ignoreDefault, BiConsumer packetSink) { if (ignoreDefault || !block.getAsString(true).equals(DEFAULT_BLOCK.getAsString(true))) { - packetSink.accept(blockWatcher, getState.invoke(block)); + packetSink.accept(blockWatcher, ((CraftBlockData) block).getState()); } } } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntity.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntity.java index 38184d28..e675a6be 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntity.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntity.java @@ -449,13 +449,11 @@ public class REntity { private static final Reflection.Field equipmentEntity = Reflection.getField(ProtocolWrapper.equipmentPacket, int.class, 0); private static final Reflection.Field equipmentSlots = Reflection.getField(ProtocolWrapper.equipmentPacket, List.class, 0); - private static final Class craftItemStack = CraftItemStack.class; - protected static final Reflection.Method asNMSCopy = Reflection.getTypedMethod(REntity.craftItemStack, "asNMSCopy", ProtocolWrapper.itemStack, ItemStack.class); protected Object getEquipmentPacket(Object slot, ItemStack stack){ Object packet = Reflection.newInstance(ProtocolWrapper.equipmentPacket); equipmentEntity.set(packet, entityId); equipmentSlots.set(packet, new ArrayList<>()); - ProtocolWrapper.impl.setEquipmentPacketStack(packet, slot, asNMSCopy.invoke(null, stack)); + ProtocolWrapper.impl.setEquipmentPacketStack(packet, slot, CraftItemStack.asNMSCopy(stack)); return packet; } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java index 00ce14b7..33d36170 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java @@ -19,8 +19,8 @@ package de.steamwar.entity; -import de.steamwar.Reflection; import com.comphenix.tinyprotocol.TinyProtocol; +import de.steamwar.Reflection; import de.steamwar.core.Core; import de.steamwar.core.FlatteningWrapper; import net.minecraft.network.protocol.game.ServerboundInteractPacket; @@ -54,13 +54,9 @@ public class REntityServer implements Listener { private static final Reflection.Field useEntityAction = Reflection.getField(useEntity, useEntityEnumAction, 0); private static final Function getEntityAction; static { - if(Core.getVersion() > 15) { - Class useEntityEnumActionType = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundInteractPacket$ActionType"); - Reflection.Method useEntityGetAction = Reflection.getTypedMethod(useEntityEnumAction, null, useEntityEnumActionType); - getEntityAction = value -> ((Enum) useEntityGetAction.invoke(value)).ordinal(); - } else { - getEntityAction = value -> ((Enum) value).ordinal(); - } + Class useEntityEnumActionType = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundInteractPacket$ActionType"); + Reflection.Method useEntityGetAction = Reflection.getTypedMethod(useEntityEnumAction, null, useEntityEnumActionType); + getEntityAction = value -> ((Enum) useEntityGetAction.invoke(value)).ordinal(); } private final ConcurrentHashMap entityMap = new ConcurrentHashMap<>(); diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java index 894ba21c..1d78cb8d 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java @@ -20,11 +20,11 @@ package de.steamwar.entity; import de.steamwar.core.BountifulWrapper; -import de.steamwar.core.Core; import de.steamwar.core.ProtocolWrapper; import lombok.Getter; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.EntityType; import org.bukkit.entity.ItemDisplay; import org.bukkit.inventory.ItemStack; @@ -61,14 +61,14 @@ public class RItemDisplay extends RDisplay { sendPacket(updatePacketSink, this::getItemStack); } - private static final Object itemStackWatcher = BountifulWrapper.impl.getDataWatcherObject(Core.getVersion() >= 21 ? 23 : 22, ProtocolWrapper.itemStack); + private static final Object itemStackWatcher = BountifulWrapper.impl.getDataWatcherObject(23, ProtocolWrapper.itemStack); private void getItemStack(boolean ignoreDefault, BiConsumer packetSink) { if (ignoreDefault || !itemStack.equals(DEFAULT_ITEM_STACK)) { - packetSink.accept(itemStackWatcher, asNMSCopy.invoke(null, itemStack)); + packetSink.accept(itemStackWatcher, CraftItemStack.asNMSCopy(itemStack)); } } - private static final Object itemDisplayTransformWatcher = BountifulWrapper.impl.getDataWatcherObject(Core.getVersion() >= 21 ? 24 : 23, Byte.class); + private static final Object itemDisplayTransformWatcher = BountifulWrapper.impl.getDataWatcherObject(24, Byte.class); public void setItemDisplayTransform(ItemDisplay.ItemDisplayTransform itemDisplayTransform) { this.itemDisplayTransform = itemDisplayTransform; sendPacket(updatePacketSink, this::getItemDisplayTransform); diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/BlockIds.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/BlockIds.java index 4cbee1d6..b5cc352c 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/BlockIds.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/BlockIds.java @@ -27,6 +27,7 @@ import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import org.bukkit.Material; +import org.bukkit.craftbukkit.util.CraftMagicNumbers; import java.util.HashSet; import java.util.Set; @@ -67,9 +68,8 @@ public class BlockIds { return ids; } - private static final Reflection.Method getBlock = Reflection.getTypedMethod(TechHider.craftMagicNumbers, "getBlock", TechHider.block, Material.class); private Object getBlock(Material material) { - return getBlock.invoke(null, material); + return CraftMagicNumbers.getBlock(material); } public int getCombinedId(Object blockData) { diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java index 7fc7c439..112970cf 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/ChunkHider.java @@ -23,11 +23,9 @@ import de.steamwar.Reflection; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import lombok.Getter; -import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.SimpleBitStorage; import net.minecraft.world.level.block.entity.BlockEntityType; import org.bukkit.entity.Player; @@ -94,14 +92,8 @@ public class ChunkHider { public static final Class tileEntity = Reflection.getClass("net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData$BlockEntityInfo"); protected static final Reflection.Field entityType = Reflection.getField(tileEntity, BlockEntityType.class, 0); - private static final Class builtInRegestries = BuiltInRegistries.class; - private static final Class registry = Registry.class; - private static final Reflection.Field nameField = Reflection.getField(builtInRegestries, "BLOCK_ENTITY_TYPE", registry); - private static final Class resourceLocation = ResourceLocation.class; - private static final Reflection.Method getKey = Reflection.getTypedMethod(registry, "getKey", resourceLocation, Object.class); - private static final Reflection.Method getName = Reflection.getTypedMethod(resourceLocation, "getPath", String.class); protected boolean tileEntityVisible(Set hiddenBlockEntities, Object tile) { - return !hiddenBlockEntities.contains(getName.invoke(getKey.invoke(nameField.get(null), entityType.get(tile)))); + return !hiddenBlockEntities.contains(BuiltInRegistries.BLOCK_ENTITY_TYPE.getKey(entityType.get(tile)).getPath()); } private void blocks(SectionHider section) { diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java index 4bac686e..b7c64954 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/techhider/TechHider.java @@ -25,13 +25,7 @@ import de.steamwar.core.Core; import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; -import net.minecraft.network.protocol.game.ClientboundBlockDestructionPacket; -import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.network.protocol.game.ClientboundBlockEventPacket; -import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; -import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; -import net.minecraft.network.protocol.game.ServerboundInteractPacket; -import net.minecraft.network.protocol.game.ServerboundUseItemOnPacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.bukkit.Material; @@ -56,16 +50,12 @@ public class TechHider { public static final Class iBlockData = BlockState.class; public static final Class block = Block.class; - private static final Reflection.Method getBlockDataByBlock = Reflection.getTypedMethod(block, null, iBlockData); - - public static final Class craftMagicNumbers = CraftMagicNumbers.class; - private static final Reflection.Method getBlockByMaterial = Reflection.getTypedMethod(craftMagicNumbers, "getBlock", block, Material.class); public boolean iBlockDataHidden(Object iBlockData) { return obfuscateIds.contains(BlockIds.impl.getCombinedId(iBlockData)); } - public static final Object AIR = getBlockDataByBlock.invoke(getBlockByMaterial.invoke(null, Material.AIR)); + public static final Object AIR = CraftMagicNumbers.getBlock(Material.AIR).defaultBlockState(); public static final int AIR_ID = BlockIds.impl.materialToId(Material.AIR); private final Map, BiFunction> techhiders = new HashMap<>(); @@ -84,7 +74,7 @@ public class TechHider { this.locationEvaluator = locationEvaluator; this.obfuscateIds = obfuscate.stream().flatMap(m -> BlockIds.impl.materialToAllIds(m).stream()).collect(Collectors.toSet()); this.hiddenBlockEntities = hiddenBlockEntities; - this.obfuscationTarget = getBlockDataByBlock.invoke(getBlockByMaterial.invoke(null, obfuscationTarget)); + this.obfuscationTarget = CraftMagicNumbers.getBlock(obfuscationTarget).defaultBlockState(); this.obfuscationTargetId = BlockIds.impl.materialToId(obfuscationTarget); techhiders.put(blockActionPacket, this::blockActionHider);