feat(wrapper): trying to debug the issue

This commit is contained in:
ineanto 2024-08-29 16:02:57 +02:00
parent c99c31ba37
commit 20af9e7328
Signed by: ineanto
GPG key ID: E511F9CAA2F9CE84
3 changed files with 60 additions and 18 deletions

View file

@ -1,9 +1,19 @@
package xyz.ineanto.nicko; package xyz.ineanto.nicko;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.reflect.accessors.Accessors;
import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.utility.MinecraftVersion;
import com.comphenix.protocol.wrappers.MinecraftKey;
import net.kyori.adventure.text.Component;
import org.bstats.bukkit.Metrics; import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import xyz.ineanto.nicko.appearance.random.RandomNameFetcher; import xyz.ineanto.nicko.appearance.random.RandomNameFetcher;
@ -132,6 +142,32 @@ public class Nicko extends JavaPlugin {
getServer().getPluginManager().registerEvents(new PlayerJoinListener(), this); getServer().getPluginManager().registerEvents(new PlayerJoinListener(), this);
getServer().getPluginManager().registerEvents(new PlayerQuitListener(), this); getServer().getPluginManager().registerEvents(new PlayerQuitListener(), this);
metrics = new Metrics(this, 20483); metrics = new Metrics(this, 20483);
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this,
ListenerPriority.HIGH,
PacketType.Play.Server.RESPAWN
) {
@Override
public void onPacketSending(PacketEvent event) {
try {
Bukkit.broadcast(Component.text("intercepting packet..."));
Class<?> commonPlayerInfoClazz = MinecraftReflection.getMinecraftClass("network.protocol.game.CommonPlayerSpawnInfo");
// access CommonPlayerSpawnInfo, first field of that type in the Respawn / Login packets
Object commonSpawnData = Accessors.getFieldAccessor(event.getPacket().getClass(), commonPlayerInfoClazz, true).getField().get(event.getPacket());
// get the key of the level the player is joining. Second field in the object. First of type ResourceKey
MinecraftKey key = MinecraftKey.fromHandle(Accessors.getFieldAccessor(commonPlayerInfoClazz, MinecraftReflection.getResourceKey(), true).get(commonSpawnData)); // wrap to ProtocolLib handle
for (World world : Bukkit.getWorlds()) {
if (key.getPrefix().equals(world.getKey().getNamespace()) && key.getKey().equals(world.getKey().getKey())) {
Bukkit.broadcast(Component.text("found world!"));
} else {
Bukkit.broadcast(Component.text("whoops, no matching world found"));
}
}
} catch (IllegalAccessException exception) {
throw new RuntimeException(exception);
}
}
});
} }
getLogger().info("Nicko has been enabled."); getLogger().info("Nicko has been enabled.");

View file

@ -146,12 +146,12 @@ public class AppearanceManager {
final boolean wasAllowedToFly = player.getAllowFlight(); final boolean wasAllowedToFly = player.getAllowFlight();
final int foodLevel = player.getFoodLevel(); final int foodLevel = player.getFoodLevel();
final WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn(); final WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn();
respawn.setDimension(world); //respawn.setDimension(world);
respawn.setSeed(world.getSeed()); respawn.setSeed(world.getSeed());
respawn.setGameMode(player.getGameMode()); respawn.setGameMode(player.getGameMode());
respawn.setPreviousGameMode(player.getGameMode()); respawn.setPreviousGameMode(player.getGameMode());
respawn.setCopyMetadata(true); respawn.setCopyMetadata(true);
respawn.sendPacket(player); //respawn.sendPacket(player);
player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN); player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN);
player.setAllowFlight(wasAllowedToFly); player.setAllowFlight(wasAllowedToFly);
player.setFlying(wasFlying); player.setFlying(wasFlying);

View file

@ -4,6 +4,8 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.InternalStructure; import com.comphenix.protocol.events.InternalStructure;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.reflect.accessors.Accessors;
import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.utility.MinecraftVersion;
import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.EnumWrappers;
import com.comphenix.protocol.wrappers.MinecraftKey; import com.comphenix.protocol.wrappers.MinecraftKey;
@ -52,8 +54,10 @@ public class WrapperPlayServerRespawn extends AbstractPacket {
// 1.20.5 to 1.21.1 // 1.20.5 to 1.21.1
// why is life so hard? // why is life so hard?
/**final Class<?> commonPlayerInfoClazz = MinecraftReflection.getMinecraftClass("network.protocol.game.CommonPlayerSpawnInfo"); final Class<?> commonPlayerInfoClazz = MinecraftReflection.getMinecraftClass("network.protocol.game.CommonPlayerSpawnInfo");
Object commonSpawnData = Accessors.getFieldAccessor(TYPE.getPacketClass(), commonPlayerInfoClazz, true).getField().get(TYPE.getPacketClass()); try {
final Object commonSpawnData = Accessors.getFieldAccessor(TYPE.getPacketClass(), commonPlayerInfoClazz, true).getField()
.get(this);
final MinecraftKey key = MinecraftKey.fromHandle( final MinecraftKey key = MinecraftKey.fromHandle(
Accessors.getFieldAccessor( Accessors.getFieldAccessor(
commonPlayerInfoClazz, commonPlayerInfoClazz,
@ -62,13 +66,15 @@ public class WrapperPlayServerRespawn extends AbstractPacket {
) )
.get(spawnInfoStructure)); .get(spawnInfoStructure));
// Set the key
Accessors.getFieldAccessor( Accessors.getFieldAccessor(
commonPlayerInfoClazz, commonPlayerInfoClazz,
MinecraftReflection.getResourceKey(), MinecraftReflection.getResourceKey(),
true true
) )
.set(commonSpawnData, key);*/ .set(commonSpawnData, key);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
} }
} }