feat: we're not making progress chat :(
This commit is contained in:
parent
18afb84caa
commit
230acf439e
4 changed files with 31 additions and 33 deletions
|
@ -145,12 +145,12 @@ public class AppearanceManager {
|
|||
final boolean wasAllowedToFly = player.getAllowFlight();
|
||||
final int foodLevel = player.getFoodLevel();
|
||||
final WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn();
|
||||
//respawn.setDimension(world);
|
||||
respawn.setDimension(world);
|
||||
respawn.setSeed(world.getSeed());
|
||||
respawn.setGameMode(player.getGameMode());
|
||||
respawn.setPreviousGameMode(player.getGameMode());
|
||||
respawn.setCopyMetadata(true);
|
||||
//respawn.sendPacket(player);
|
||||
respawn.sendPacket(player);
|
||||
player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN);
|
||||
player.setAllowFlight(wasAllowedToFly);
|
||||
player.setFlying(wasFlying);
|
||||
|
|
|
@ -4,7 +4,6 @@ import com.comphenix.protocol.PacketType;
|
|||
import com.comphenix.protocol.events.ListeningWhitelist;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.events.PacketListener;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
import com.comphenix.protocol.wrappers.MinecraftKey;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -58,7 +57,6 @@ public class RespawnPacketListener implements PacketListener {
|
|||
}
|
||||
|
||||
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
|
||||
final Object packetHandle = event.getPacket().getHandle();
|
||||
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(component.getName());
|
||||
System.out.println(component.getType().getSimpleName());
|
||||
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-");
|
||||
component.getAccessor().setAccessible(false);
|
||||
}
|
||||
);
|
||||
|
||||
// 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)
|
||||
.get(commonSpawnData)); // wrap to ProtocolLib handle
|
||||
MinecraftKey key = MinecraftKey.fromHandle(commonSpawnData.getClass().getRecordComponents()[1]);
|
||||
System.out.println(key.getPrefix() + " / " + key.getKey() + " (" + key.getFullKey() + ")");
|
||||
for (World world : Bukkit.getWorlds()) {
|
||||
if (keysEquals(key, world.getKey())) {
|
||||
return Optional.of(world);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
package xyz.ineanto.nicko.wrapper;
|
||||
|
||||
public class WrapperCommonPlayerSpawnInfo {
|
||||
private final Object handle;
|
||||
|
||||
public WrapperCommonPlayerSpawnInfo(Object handle) {
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -4,16 +4,17 @@ import com.comphenix.protocol.PacketType;
|
|||
import com.comphenix.protocol.events.InternalStructure;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
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.wrappers.BukkitConverters;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
||||
import com.comphenix.protocol.wrappers.MinecraftKey;
|
||||
import com.google.common.hash.Hashing;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.World;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.RecordComponent;
|
||||
|
||||
/**
|
||||
* PacketPlayServerRespawn Wrapper class (1.20.X to 1.21.X)
|
||||
|
@ -55,27 +56,16 @@ public class WrapperPlayServerRespawn extends AbstractPacket {
|
|||
} else {
|
||||
// 1.20.5 to 1.21.1
|
||||
|
||||
final Class<?> commonPlayerInfoClazz = MinecraftReflection.getMinecraftClass("network.protocol.game.CommonPlayerSpawnInfo");
|
||||
try {
|
||||
final Field commonSpawnDataField = Accessors.getFieldAccessor(TYPE.getPacketClass(), commonPlayerInfoClazz, true).getField();
|
||||
commonSpawnDataField.setAccessible(true);
|
||||
final Object spawnInfoStructureHandle = spawnInfoStructure.getHandle();
|
||||
final RecordComponent[] components = spawnInfoStructureHandle.getClass().getRecordComponents();
|
||||
|
||||
final MinecraftKey key = MinecraftKey.fromHandle(
|
||||
Accessors.getFieldAccessor(
|
||||
commonPlayerInfoClazz,
|
||||
MinecraftReflection.getResourceKey(),
|
||||
true
|
||||
)
|
||||
.get(spawnInfoStructure));
|
||||
|
||||
Accessors.getFieldAccessor(
|
||||
commonPlayerInfoClazz,
|
||||
MinecraftReflection.getResourceKey(),
|
||||
true
|
||||
)
|
||||
.set(commonSpawnDataField.get(this), key);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
// Doesn't work!
|
||||
final Field levelKeyField = spawnInfoStructureHandle.getClass().getDeclaredField(components[1].getAccessor().getName());
|
||||
levelKeyField.setAccessible(true);
|
||||
levelKeyField.set(spawnInfoStructureHandle, BukkitConverters.getWorldKeyConverter().getGeneric(Bukkit.getWorld("world")));
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue