feat: we're not making progress chat :(

This commit is contained in:
ineanto 2024-09-29 20:31:07 +02:00
parent 18afb84caa
commit 230acf439e
Signed by: ineanto
GPG key ID: E511F9CAA2F9CE84
4 changed files with 31 additions and 33 deletions

View file

@ -145,12 +145,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,7 +4,6 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.ListeningWhitelist; import com.comphenix.protocol.events.ListeningWhitelist;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.events.PacketListener; import com.comphenix.protocol.events.PacketListener;
import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.MinecraftKey; import com.comphenix.protocol.wrappers.MinecraftKey;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -58,7 +57,6 @@ public class RespawnPacketListener implements PacketListener {
} }
public Optional<World> getWorld(PacketEvent event) throws Throwable { public Optional<World> getWorld(PacketEvent event) throws Throwable {
final Class<?> commonPlayerInfoClazz = MinecraftReflection.getMinecraftClass("network.protocol.game.CommonPlayerSpawnInfo");
// access CommonPlayerSpawnInfo, first field of that type in the Respawn / Login packets // access CommonPlayerSpawnInfo, first field of that type in the Respawn / Login packets
final Object packetHandle = event.getPacket().getHandle(); final Object packetHandle = event.getPacket().getHandle();
final Object commonSpawnData = packetHandle.getClass().getRecordComponents()[0].getAccessor().invoke(packetHandle); final Object commonSpawnData = packetHandle.getClass().getRecordComponents()[0].getAccessor().invoke(packetHandle);
@ -68,19 +66,18 @@ public class RespawnPacketListener implements PacketListener {
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-"); System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-");
System.out.println(component.getName()); System.out.println(component.getName());
System.out.println(component.getType().getSimpleName()); System.out.println(component.getType().getSimpleName());
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-");
component.getAccessor().setAccessible(false); component.getAccessor().setAccessible(false);
} }
); );
// get the key of the level the player is joining. Second field in the object. First of type ResourceKey // 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(commonSpawnData.getClass(), MinecraftReflection.getResourceKey(), true) MinecraftKey key = MinecraftKey.fromHandle(commonSpawnData.getClass().getRecordComponents()[1]);
.get(commonSpawnData)); // wrap to ProtocolLib handle System.out.println(key.getPrefix() + " / " + key.getKey() + " (" + key.getFullKey() + ")");
for (World world : Bukkit.getWorlds()) { for (World world : Bukkit.getWorlds()) {
if (keysEquals(key, world.getKey())) { if (keysEquals(key, world.getKey())) {
return Optional.of(world); return Optional.of(world);
} }
}*/ }
return Optional.empty(); return Optional.empty();
} }
} }

View file

@ -0,0 +1,11 @@
package xyz.ineanto.nicko.wrapper;
public class WrapperCommonPlayerSpawnInfo {
private final Object handle;
public WrapperCommonPlayerSpawnInfo(Object handle) {
this.handle = handle;
}
}

View file

@ -4,16 +4,17 @@ 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.BukkitConverters;
import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.EnumWrappers;
import com.comphenix.protocol.wrappers.MinecraftKey; import com.comphenix.protocol.wrappers.MinecraftKey;
import com.google.common.hash.Hashing; import com.google.common.hash.Hashing;
import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.World; import org.bukkit.World;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.RecordComponent;
/** /**
* PacketPlayServerRespawn Wrapper class (1.20.X to 1.21.X) * PacketPlayServerRespawn Wrapper class (1.20.X to 1.21.X)
@ -55,27 +56,16 @@ public class WrapperPlayServerRespawn extends AbstractPacket {
} else { } else {
// 1.20.5 to 1.21.1 // 1.20.5 to 1.21.1
final Class<?> commonPlayerInfoClazz = MinecraftReflection.getMinecraftClass("network.protocol.game.CommonPlayerSpawnInfo");
try { try {
final Field commonSpawnDataField = Accessors.getFieldAccessor(TYPE.getPacketClass(), commonPlayerInfoClazz, true).getField(); final Object spawnInfoStructureHandle = spawnInfoStructure.getHandle();
commonSpawnDataField.setAccessible(true); final RecordComponent[] components = spawnInfoStructureHandle.getClass().getRecordComponents();
final MinecraftKey key = MinecraftKey.fromHandle( // Doesn't work!
Accessors.getFieldAccessor( final Field levelKeyField = spawnInfoStructureHandle.getClass().getDeclaredField(components[1].getAccessor().getName());
commonPlayerInfoClazz, levelKeyField.setAccessible(true);
MinecraftReflection.getResourceKey(), levelKeyField.set(spawnInfoStructureHandle, BukkitConverters.getWorldKeyConverter().getGeneric(Bukkit.getWorld("world")));
true } catch (NoSuchFieldException | IllegalAccessException e) {
) throw new RuntimeException();
.get(spawnInfoStructure));
Accessors.getFieldAccessor(
commonPlayerInfoClazz,
MinecraftReflection.getResourceKey(),
true
)
.set(commonSpawnDataField.get(this), key);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} }
} }
} }