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 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,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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue