First part of reflection cleanup

This commit is contained in:
libraryaddict 2025-02-01 16:47:36 +13:00
parent 7eadfb6127
commit d6ff57c718
16 changed files with 250 additions and 60 deletions

View File

@ -364,7 +364,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -394,4 +394,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return nmsItem.getTag().getAsString();
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -364,7 +364,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -394,4 +394,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return nmsItem.getTag().getAsString();
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -366,7 +366,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -397,4 +397,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return nmsItem.getTag().getAsString();
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -365,7 +365,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -384,4 +384,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return registry.getId(CraftArt.BukkitToNotch(type).value());
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -390,7 +390,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -409,4 +409,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return registry.getId(CraftArt.BukkitToNotch(type).value());
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -385,7 +385,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -404,4 +404,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return registry.getId(CraftArt.BukkitToNotch(type).value());
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -386,7 +386,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -405,4 +405,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return registry.getId(CraftArt.BukkitToNotch(type).value());
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -11,7 +11,6 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.resources.ResourceLocation;
@ -396,7 +395,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -448,4 +447,13 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return registry.getId(CraftArt.bukkitToMinecraft(type));
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -11,7 +11,6 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.resources.ResourceLocation;
@ -397,7 +396,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -448,4 +447,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
return registry.getId(CraftArt.bukkitToMinecraft(type));
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -396,7 +396,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -460,4 +460,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
public String getDataAsString(ItemStack itemStack) {
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -401,7 +401,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -465,4 +465,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
public String getDataAsString(ItemStack itemStack) {
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -404,7 +404,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -468,4 +468,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
public String getDataAsString(ItemStack itemStack) {
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -404,7 +404,7 @@ public class ReflectionManager implements ReflectionManagerAbstract {
}
@Override
public GameProfile getMCGameProfile(Player player) {
public GameProfile getProfile(Player player) {
return ((CraftPlayer) player).getProfile();
}
@ -468,4 +468,14 @@ public class ReflectionManager implements ReflectionManagerAbstract {
public String getDataAsString(ItemStack itemStack) {
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsComponentString() : null;
}
@Override
public void addEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).updatePlayer((ServerPlayer) serverPlayer);
}
@Override
public void clearEntityTracker(Object trackerEntry, Object serverPlayer) {
((ChunkMap.TrackedEntity) trackerEntry).removePlayer((ServerPlayer) serverPlayer);
}
}

View File

@ -13,10 +13,11 @@ import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Getter
public class ConfigLoader {
@Getter
private final List<String> configs = new ArrayList<>();
public ConfigLoader() {
@ -31,6 +32,40 @@ public class ConfigLoader {
configs.add(s);
}
// TODO Load from legacy if new doesn't exist
}
/**
* The configs that used to exist but don't anymore.
*/
private List<String> getLegacyConfigs() {
return Arrays.asList("combat.yml", "features.yml", "nametags.yml", "players.yml", "sanity.yml");
}
private void moveLegacyConfigs() {
File configsFolder = new File(LibsDisguises.getInstance().getDataFolder(), "configs");
for (String name : getLegacyConfigs()) {
File file = new File(configsFolder, name);
if (!file.exists()) {
continue;
}
File legacy = new File(configsFolder, "legacy/" + name);
if (legacy.exists()) {
file.delete();
continue;
}
if (!legacy.getParentFile().exists()) {
legacy.getParentFile().mkdirs();
}
file.renameTo(legacy);
}
}
public void saveMissingConfigs() {
@ -54,7 +89,7 @@ public class ConfigLoader {
}
}
public YamlConfiguration loadDefaults() {
private YamlConfiguration loadDefaults(List<String> configs) {
YamlConfiguration globalConfig = new YamlConfiguration();
for (String config : configs) {
@ -75,12 +110,21 @@ public class ConfigLoader {
}
return globalConfig;
}
public YamlConfiguration loadDefaults() {
return loadDefaults(configs);
}
public YamlConfiguration load() {
return load(configs);
}
public YamlConfiguration load(List<String> configNames) {
YamlConfiguration globalConfig = new YamlConfiguration();
for (String config : configs) {
for (String config : configNames) {
YamlConfiguration c = YamlConfiguration.loadConfiguration(new File(LibsDisguises.getInstance().getDataFolder(), config));
for (String k : c.getKeys(true)) {

View File

@ -206,8 +206,50 @@ public class ReflectionManager {
try {
nmsReflection = getReflectionManager(getVersion());
getGameProfile = getCraftMethod("CraftPlayer", "getProfile");
// Uses a private field
trackedPlayers = getNmsField("EntityTrackerEntry", "trackedPlayers");
trackerIsMoving = getNmsField("EntityTrackerEntry", NmsVersion.v1_20_R2.isSupported() ? "i" :
NmsVersion.v1_19_R1.isSupported() ? "p" :
NmsVersion.v1_17.isSupported() ? "r" : NmsVersion.v1_14.isSupported() ? "q" : "isMoving");
if (nmsReflection != null) {
sessionService = nmsReflection.getMinecraftSessionService();
}
// I don't think authlib is always going to be in sync enough that we can trust this to a specific nms version
try {
fillProfileProperties = sessionService.getClass().getMethod("fillProfileProperties", GameProfile.class, boolean.class);
} catch (Exception ignored) {
}
try {
propertyName = Property.class.getMethod("getName");
propertyValue = Property.class.getMethod("getValue");
propertySignature = Property.class.getMethod("getSignature");
} catch (Exception ignored) {
}
if (nmsReflection != null) {
return;
}
getServerMethod = getCraftMethod("CraftServer", "getServer");
Object minecraftServer = getMinecraftServer();
for (Method method : getNmsClass("MinecraftServer").getMethods()) {
if (!method.getReturnType().getSimpleName().equals("MinecraftSessionService")) {
continue;
}
sessionService = (MinecraftSessionService) method.invoke(minecraftServer);
break;
}
if (DisguiseUtilities.isRunningPaper() && !NmsVersion.v1_17.isSupported()) {
// Uses a private field
trackedPlayersMap = getNmsField("EntityTrackerEntry", "trackedPlayerMap");
}
// In 1.12 to 1.13, it's all in EntityTrackerEntry
// In 1.14+, we have it in EntityTracker in PlayerChunkMap
@ -221,46 +263,7 @@ public class ReflectionManager {
addEntityTracker = getNmsMethod("EntityTrackerEntry", "updatePlayer", getNmsClass("EntityPlayer"));
}
trackerIsMoving = getNmsField("EntityTrackerEntry", NmsVersion.v1_20_R2.isSupported() ? "i" :
NmsVersion.v1_19_R1.isSupported() ? "p" :
NmsVersion.v1_17.isSupported() ? "r" : NmsVersion.v1_14.isSupported() ? "q" : "isMoving");
if (DisguiseUtilities.isRunningPaper() && !NmsVersion.v1_17.isSupported()) {
trackedPlayersMap = getNmsField("EntityTrackerEntry", "trackedPlayerMap");
}
if (nmsReflection != null) {
sessionService = nmsReflection.getMinecraftSessionService();
} else {
getServerMethod = getCraftMethod("CraftServer", "getServer");
Object minecraftServer = getMinecraftServer();
for (Method method : getNmsClass("MinecraftServer").getMethods()) {
if (!method.getReturnType().getSimpleName().equals("MinecraftSessionService")) {
continue;
}
sessionService = (MinecraftSessionService) method.invoke(minecraftServer);
break;
}
}
try {
fillProfileProperties = sessionService.getClass().getMethod("fillProfileProperties", GameProfile.class, boolean.class);
} catch (Exception ignored) {
}
try {
propertyName = Property.class.getMethod("getName");
propertyValue = Property.class.getMethod("getValue");
propertySignature = Property.class.getMethod("getSignature");
} catch (Exception ignored) {
}
if (nmsReflection != null) {
return;
}
getGameProfile = getCraftMethod("CraftPlayer", "getProfile");
boundingBoxConstructor =
getNmsConstructor("AxisAlignedBB", double.class, double.class, double.class, double.class, double.class, double.class);
@ -1025,6 +1028,10 @@ public class ReflectionManager {
}
private static GameProfile getGameProfile(Player player) {
if (getNmsReflection() != null) {
return getNmsReflection().getProfile(player);
}
try {
return (GameProfile) getGameProfile.invoke(player);
@ -1203,11 +1210,19 @@ public class ReflectionManager {
@SneakyThrows
public static void clearEntityTracker(Object trackerEntry, Object player) {
if (getNmsReflection() != null) {
getNmsReflection().clearEntityTracker(trackerEntry, player);
}
clearEntityTracker.invoke(trackerEntry, player);
}
@SneakyThrows
public static void addEntityTracker(Object trackerEntry, Object player) {
if (getNmsReflection() != null) {
getNmsReflection().addEntityTracker(trackerEntry, player);
}
addEntityTracker.invoke(trackerEntry, player);
}

View File

@ -104,7 +104,7 @@ public interface ReflectionManagerAbstract {
ItemMeta getDeserializedItemMeta(Map<String, Object> meta);
GameProfile getMCGameProfile(Player player);
GameProfile getProfile(Player player);
static UserProfile getUserProfile(UUID uuid, String playerName) {
return new UserProfile(uuid, playerName == null || playerName.length() < 17 ? playerName : playerName.substring(0, 16));
@ -157,4 +157,8 @@ public interface ReflectionManagerAbstract {
default String getDataAsString(ItemStack itemStack) {
return itemStack.hasItemMeta() ? itemStack.getItemMeta().getAsString() : null;
}
void addEntityTracker(Object trackerEntry, Object serverPlayer);
void clearEntityTracker(Object trackerEntry, Object serverPlayer);
}