feat(wrapper): trying to debug the issue
This commit is contained in:
parent
c99c31ba37
commit
20af9e7328
3 changed files with 60 additions and 18 deletions
|
@ -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.");
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue