Fixup remaining critical startup issues
This commit is contained in:
parent
92b741ce0a
commit
bcd4ed56fc
@ -0,0 +1,48 @@
|
|||||||
|
package me.libraryaddict.disguise.utilities.reflection;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class ClassMappings {
|
||||||
|
private static HashMap<String, String> classLocations = new HashMap<>();
|
||||||
|
|
||||||
|
private static final String[] packages = getPackages();
|
||||||
|
|
||||||
|
public static String getClass(String packageHint, String className) {
|
||||||
|
String location = classLocations.get(className);
|
||||||
|
if (location != null)
|
||||||
|
return location;
|
||||||
|
location = className;
|
||||||
|
String[] arrayOfString;
|
||||||
|
int i;
|
||||||
|
byte b;
|
||||||
|
for (arrayOfString = packages, i = arrayOfString.length, b = 0; b < i; ) {
|
||||||
|
String pack = arrayOfString[b];
|
||||||
|
if (!pack.startsWith(packageHint)) {
|
||||||
|
b++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String toTry = pack + "." + className;
|
||||||
|
try {
|
||||||
|
Class.forName(toTry);
|
||||||
|
location = pack + "." + className;
|
||||||
|
break;
|
||||||
|
} catch (Throwable throwable) {
|
||||||
|
b++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
classLocations.put(className, location);
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] getPackages() {
|
||||||
|
String[] s = {
|
||||||
|
"net.minecraft.core", "net.minecraft.core.particles", "net.minecraft.nbt", "net.minecraft.network.chat", "net.minecraft.network.protocol.game", "net.minecraft.network.syncher", "net.minecraft.resources", "net.minecraft.server.level", "net.minecraft.server", "net.minecraft.server.network",
|
||||||
|
"net.minecraft.sounds", "net.minecraft.world.damagesource", "net.minecraft.world.effect", "net.minecraft.world.entity.ambient", "net.minecraft.world.entity.animal.axolotl", "net.minecraft.world.entity.animal", "net.minecraft.world.entity.animal.goat", "net.minecraft.world.entity.animal.horse", "net.minecraft.world.entity.boss.enderdragon", "net.minecraft.world.entity.boss.wither",
|
||||||
|
"net.minecraft.world.entity.decoration", "net.minecraft.world.entity", "net.minecraft.world.entity.item", "net.minecraft.world.entity.monster", "net.minecraft.world.entity.monster.hoglin", "net.minecraft.world.entity.monster.piglin", "net.minecraft.world.entity.npc", "net.minecraft.world.entity.player", "net.minecraft.world.entity.projectile", "net.minecraft.world.entity.vehicle",
|
||||||
|
"net.minecraft.world.inventory", "net.minecraft.world.item", "net.minecraft.world.level.block", "net.minecraft.world.level.block.state", "net.minecraft.world.level", "net.minecraft.world.phys", "org.bukkit.craftbukkit.$version$.block.data", "org.bukkit.craftbukkit.$version$", "org.bukkit.craftbukkit.$version$.entity", "org.bukkit.craftbukkit.$version$.inventory",
|
||||||
|
"org.bukkit.craftbukkit.$version$.util" };
|
||||||
|
for (int i = 0; i < s.length; i++)
|
||||||
|
s[i] = s[i].replace("$version$", ReflectionManager.getBukkitVersion());
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
@ -117,7 +117,15 @@ public class ReflectionManager {
|
|||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
try {
|
try {
|
||||||
v1_18ReflectionManager = getReflectionManager(NmsVersion.v1_18);
|
// Load first because its necessary for 1.18+
|
||||||
|
if (NmsVersion.v1_14.isSupported()) {
|
||||||
|
entityPoseClass = getNmsClass("EntityPose");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NmsVersion.v1_18.isSupported()) {
|
||||||
|
v1_18ReflectionManager = getReflectionManager(NmsVersion.v1_18);
|
||||||
|
return;
|
||||||
|
}
|
||||||
boundingBoxConstructor = getNmsConstructor("AxisAlignedBB", double.class, double.class, double.class, double.class, double.class, double.class);
|
boundingBoxConstructor = getNmsConstructor("AxisAlignedBB", double.class, double.class, double.class, double.class, double.class, double.class);
|
||||||
|
|
||||||
setBoundingBoxMethod = getNmsMethod("Entity", "a", getNmsClass("AxisAlignedBB"));
|
setBoundingBoxMethod = getNmsMethod("Entity", "a", getNmsClass("AxisAlignedBB"));
|
||||||
@ -199,7 +207,6 @@ public class ReflectionManager {
|
|||||||
entityTypesAMethod = getNmsMethod("EntityTypes", "a", String.class);
|
entityTypesAMethod = getNmsMethod("EntityTypes", "a", String.class);
|
||||||
|
|
||||||
if (NmsVersion.v1_14.isSupported()) {
|
if (NmsVersion.v1_14.isSupported()) {
|
||||||
entityPoseClass = getNmsClass("EntityPose");
|
|
||||||
registryBlocksGetMethod = getNmsMethod("RegistryBlocks", "get", getNmsClass("MinecraftKey"));
|
registryBlocksGetMethod = getNmsMethod("RegistryBlocks", "get", getNmsClass("MinecraftKey"));
|
||||||
villagerDataConstructor = getNmsConstructor("VillagerData", getNmsClass("VillagerType"), getNmsClass("VillagerProfession"), int.class);
|
villagerDataConstructor = getNmsConstructor("VillagerData", getNmsClass("VillagerType"), getNmsClass("VillagerProfession"), int.class);
|
||||||
|
|
||||||
@ -348,6 +355,7 @@ public class ReflectionManager {
|
|||||||
if (NmsVersion.v1_18.isSupported()) {
|
if (NmsVersion.v1_18.isSupported()) {
|
||||||
return v1_18ReflectionManager.getIncrementedStateId(player);
|
return v1_18ReflectionManager.getIncrementedStateId(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Object container = playerInventoryContainer.get(getNmsEntity(player));
|
Object container = playerInventoryContainer.get(getNmsEntity(player));
|
||||||
|
|
||||||
@ -924,13 +932,7 @@ public class ReflectionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static WrappedGameProfile getGameProfile(UUID uuid, String playerName) {
|
public static WrappedGameProfile getGameProfile(UUID uuid, String playerName) {
|
||||||
try {
|
return ReflectionManagerAbstract.getGameProfile(uuid == null ? getRandomUUID() : uuid, playerName);
|
||||||
return new WrappedGameProfile(uuid != null ? uuid : getRandomUUID(),
|
|
||||||
playerName == null || playerName.length() < 17 ? playerName : playerName.substring(0, 16));
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static WrappedGameProfile getClonedProfile(WrappedGameProfile gameProfile) {
|
public static WrappedGameProfile getClonedProfile(WrappedGameProfile gameProfile) {
|
||||||
@ -968,6 +970,10 @@ public class ReflectionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String getLocation(String pack, String className) {
|
private static String getLocation(String pack, String className) {
|
||||||
|
if (NmsVersion.v1_18.isSupported()) {
|
||||||
|
return ClassMappings.getClass(pack, className);
|
||||||
|
}
|
||||||
|
|
||||||
String toReturn = classLocations.get(className);
|
String toReturn = classLocations.get(className);
|
||||||
|
|
||||||
if (toReturn != null) {
|
if (toReturn != null) {
|
||||||
@ -1677,6 +1683,10 @@ public class ReflectionManager {
|
|||||||
public static Object createDataWatcherItem(MetaIndex id, Object value) {
|
public static Object createDataWatcherItem(MetaIndex id, Object value) {
|
||||||
WrappedDataWatcherObject watcherObject = createDataWatcherObject(id, value);
|
WrappedDataWatcherObject watcherObject = createDataWatcherObject(id, value);
|
||||||
|
|
||||||
|
if (NmsVersion.v1_18.isSupported()) {
|
||||||
|
return v1_18ReflectionManager.createDataWatcherItem(watcherObject, convertInvalidMeta(value));
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return dataWatcherItemConstructor.newInstance(watcherObject.getHandle(), convertInvalidMeta(value));
|
return dataWatcherItemConstructor.newInstance(watcherObject.getHandle(), convertInvalidMeta(value));
|
||||||
} catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
|
} catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
|
||||||
@ -2253,7 +2263,7 @@ public class ReflectionManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Object nmsEntity = ReflectionManager.createEntityInstance(disguiseType, nmsEntityName);
|
Object nmsEntity = ReflectionManager.createEntityInstance(disguiseType, NmsVersion.v1_18.isSupported() ? disguiseType.getEntityType().getKey().getKey() : nmsEntityName);
|
||||||
|
|
||||||
if (nmsEntity == null) {
|
if (nmsEntity == null) {
|
||||||
DisguiseUtilities.getLogger().warning("Entity not found! (" + nmsEntityName + ")");
|
DisguiseUtilities.getLogger().warning("Entity not found! (" + nmsEntityName + ")");
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package me.libraryaddict.disguise.utilities.reflection;
|
package me.libraryaddict.disguise.utilities.reflection;
|
||||||
|
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
import com.comphenix.protocol.wrappers.EnumWrappers;
|
||||||
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||||
import com.mojang.authlib.ProfileLookupCallback;
|
import com.mojang.authlib.ProfileLookupCallback;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
@ -17,6 +18,7 @@ import org.bukkit.util.Vector;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public interface ReflectionManagerAbstract {
|
public interface ReflectionManagerAbstract {
|
||||||
boolean hasInvul(Entity entity);
|
boolean hasInvul(Entity entity);
|
||||||
@ -107,6 +109,8 @@ public interface ReflectionManagerAbstract {
|
|||||||
|
|
||||||
Object getVillagerProfession(Villager.Profession profession);
|
Object getVillagerProfession(Villager.Profession profession);
|
||||||
|
|
||||||
|
<T> Object createDataWatcherItem(WrappedDataWatcher.WrappedDataWatcherObject wrappedDataWatcherObject, T metaItem);
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
Object createSoundEffect(String minecraftKey);
|
Object createSoundEffect(String minecraftKey);
|
||||||
|
|
||||||
@ -137,4 +141,13 @@ public interface ReflectionManagerAbstract {
|
|||||||
Object getWorldServer(World w);
|
Object getWorldServer(World w);
|
||||||
|
|
||||||
ItemMeta getDeserializedItemMeta(Map<String, Object> meta);
|
ItemMeta getDeserializedItemMeta(Map<String, Object> meta);
|
||||||
|
|
||||||
|
static WrappedGameProfile getGameProfile(UUID uuid, String playerName) {
|
||||||
|
try {
|
||||||
|
return new WrappedGameProfile(uuid, playerName == null || playerName.length() < 17 ? playerName : playerName.substring(0, 16));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package me.libraryaddict.disguise.v1_18.utilities.reflection;
|
|||||||
|
|
||||||
import com.comphenix.protocol.wrappers.*;
|
import com.comphenix.protocol.wrappers.*;
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers.Direction;
|
import com.comphenix.protocol.wrappers.EnumWrappers.Direction;
|
||||||
|
import com.comphenix.protocol.wrappers.nbt.NbtWrapper;
|
||||||
import com.mojang.authlib.Agent;
|
import com.mojang.authlib.Agent;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.ProfileLookupCallback;
|
import com.mojang.authlib.ProfileLookupCallback;
|
||||||
@ -10,8 +11,11 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
|||||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.Vector3f;
|
||||||
import net.minecraft.network.chat.TextComponent;
|
import net.minecraft.network.chat.TextComponent;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
|
||||||
|
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||||
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.dedicated.DedicatedServer;
|
import net.minecraft.server.dedicated.DedicatedServer;
|
||||||
import net.minecraft.server.level.*;
|
import net.minecraft.server.level.*;
|
||||||
@ -26,6 +30,8 @@ import net.minecraft.world.entity.EntityDimensions;
|
|||||||
import net.minecraft.world.entity.npc.VillagerData;
|
import net.minecraft.world.entity.npc.VillagerData;
|
||||||
import net.minecraft.world.entity.npc.VillagerProfession;
|
import net.minecraft.world.entity.npc.VillagerProfession;
|
||||||
import net.minecraft.world.entity.npc.VillagerType;
|
import net.minecraft.world.entity.npc.VillagerType;
|
||||||
|
import net.minecraft.world.entity.projectile.FishingHook;
|
||||||
|
import net.minecraft.world.entity.projectile.ThrownEnderpearl;
|
||||||
import net.minecraft.world.level.GameType;
|
import net.minecraft.world.level.GameType;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
@ -102,7 +108,18 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
if (optional.isPresent()) {
|
if (optional.isPresent()) {
|
||||||
net.minecraft.world.entity.EntityType<?> entityType = optional.get();
|
net.minecraft.world.entity.EntityType<?> entityType = optional.get();
|
||||||
ServerLevel world = getWorldServer(Bukkit.getWorlds().get(0));
|
ServerLevel world = getWorldServer(Bukkit.getWorlds().get(0));
|
||||||
net.minecraft.world.entity.Entity entity = entityType.create(world);
|
net.minecraft.world.entity.Entity entity;
|
||||||
|
if (entityType == net.minecraft.world.entity.EntityType.PLAYER) {
|
||||||
|
WrappedGameProfile gameProfile = ReflectionManagerAbstract.getGameProfile(new UUID(0, 0), "Steve");
|
||||||
|
entity = new ServerPlayer(getMinecraftServer(), world, (GameProfile) gameProfile.getHandle());
|
||||||
|
}/* else if (entityType == net.minecraft.world.entity.EntityType.ENDER_PEARL) {
|
||||||
|
entity = new ThrownEnderpearl(world, (net.minecraft.world.entity.LivingEntity) createEntityInstance("cow"));
|
||||||
|
} else if (entityType == net.minecraft.world.entity.EntityType.FISHING_BOBBER) {
|
||||||
|
entity = new FishingHook((net.minecraft.world.entity.player.Player) createEntityInstance("player"), world, 0, 0);
|
||||||
|
}*/ else {
|
||||||
|
entity = entityType.create(world);
|
||||||
|
}
|
||||||
|
|
||||||
// Workaround for paper being 2 smart 4 me
|
// Workaround for paper being 2 smart 4 me
|
||||||
entity.setPos(1.0, 1.0, 1.0);
|
entity.setPos(1.0, 1.0, 1.0);
|
||||||
entity.setPos(0.0, 0.0, 0.0);
|
entity.setPos(0.0, 0.0, 0.0);
|
||||||
@ -291,13 +308,13 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vec3 convertVec3(Object object) {
|
public Vector3f convertVec3(Object object) {
|
||||||
if (object instanceof Vector3F) {
|
if (object instanceof Vector3F) {
|
||||||
Vector3F vector3F = (Vector3F) object;
|
Vector3F vector3F = (Vector3F) object;
|
||||||
return new Vec3(vector3F.getX(), vector3F.getY(), vector3F.getZ());
|
return new Vector3f(vector3F.getX(), vector3F.getY(), vector3F.getZ());
|
||||||
} else if (object instanceof EulerAngle) {
|
} else if (object instanceof EulerAngle) {
|
||||||
EulerAngle eulerAngle = (EulerAngle) object;
|
EulerAngle eulerAngle = (EulerAngle) object;
|
||||||
return new Vec3(eulerAngle.getX(), eulerAngle.getY(), eulerAngle.getZ());
|
return new Vector3f((float) eulerAngle.getX(), (float) eulerAngle.getY(), (float) eulerAngle.getZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -334,6 +351,10 @@ public class ReflectionManager implements ReflectionManagerAbstract {
|
|||||||
return Registry.VILLAGER_PROFESSION.get(CraftNamespacedKey.toMinecraft(profession.getKey()));
|
return Registry.VILLAGER_PROFESSION.get(CraftNamespacedKey.toMinecraft(profession.getKey()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> SynchedEntityData.DataItem<T> createDataWatcherItem(WrappedDataWatcher.WrappedDataWatcherObject wrappedDataWatcherObject, T metaItem) {
|
||||||
|
return new SynchedEntityData.DataItem<>((EntityDataAccessor<T>) wrappedDataWatcherObject.getHandle(), metaItem);
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public SoundEvent createSoundEffect(String minecraftKey) {
|
public SoundEvent createSoundEffect(String minecraftKey) {
|
||||||
return new SoundEvent(new ResourceLocation(minecraftKey));
|
return new SoundEvent(new ResourceLocation(minecraftKey));
|
||||||
|
Loading…
Reference in New Issue
Block a user