9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-23 08:59:27 +00:00

添加设置uuid和name

This commit is contained in:
XiaoMoMi
2025-04-16 20:10:25 +08:00
parent e2f414d4bf
commit 6dd9fdb1b0
7 changed files with 79 additions and 3 deletions

View File

@@ -130,6 +130,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
registerNMSPacketConsumer(PacketConsumers.PLAYER_INFO_UPDATE, Reflections.clazz$ClientboundPlayerInfoUpdatePacket);
registerNMSPacketConsumer(PacketConsumers.PLAYER_ACTION, Reflections.clazz$ServerboundPlayerActionPacket);
registerNMSPacketConsumer(PacketConsumers.SWING_HAND, Reflections.clazz$ServerboundSwingPacket);
registerNMSPacketConsumer(PacketConsumers.HELLO_C2S, Reflections.clazz$ServerboundHelloPacket);
registerNMSPacketConsumer(PacketConsumers.USE_ITEM_ON, Reflections.clazz$ServerboundUseItemOnPacket);
registerNMSPacketConsumer(PacketConsumers.PICK_ITEM_FROM_BLOCK, Reflections.clazz$ServerboundPickItemFromBlockPacket);
registerNMSPacketConsumer(PacketConsumers.SET_CREATIVE_SLOT, Reflections.clazz$ServerboundSetCreativeModeSlotPacket);

View File

@@ -1156,6 +1156,19 @@ public class PacketConsumers {
}
}
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> HELLO_C2S = (user, event, packet) -> {
try {
if (!user.isOnline()) return;
BukkitServerPlayer player = (BukkitServerPlayer) user;
String name = (String) Reflections.field$ServerboundHelloPacket$name.get(packet);
UUID uuid = (UUID) Reflections.field$ServerboundHelloPacket$uuid.get(packet);
player.setName(name);
player.setUUID(uuid);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ServerboundHelloPacket", e);
}
};
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> SWING_HAND = (user, event, packet) -> {
try {
if (!user.isOnline()) return;

View File

@@ -43,6 +43,8 @@ public class BukkitServerPlayer extends Player {
private final BukkitCraftEngine plugin;
// connection state
private final Channel channel;
private String name;
private UUID uuid;
private ConnectionState decoderState;
private ConnectionState encoderState;
// some references
@@ -94,6 +96,8 @@ public class BukkitServerPlayer extends Player {
public void setPlayer(org.bukkit.entity.Player player) {
this.playerRef = new WeakReference<>(player);
this.serverPlayerRef = new WeakReference<>(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player));
this.uuid = player.getUniqueId();
this.name = player.getName();
if (Reflections.method$CraftPlayer$setSimplifyContainerDesyncCheck != null) {
try {
Reflections.method$CraftPlayer$setSimplifyContainerDesyncCheck.invoke(player, true);
@@ -219,9 +223,24 @@ public class BukkitServerPlayer extends Player {
@Override
public String name() {
org.bukkit.entity.Player player = platformPlayer();
if (player == null) return "Unknown";
return player.getName();
return this.name;
}
@Override
public void setName(String name) {
if (this.name != null) return;
this.name = name;
}
@Override
public UUID uuid() {
return this.uuid;
}
@Override
public void setUUID(UUID uuid) {
if (this.uuid != null) return;
this.uuid = uuid;
}
@Override

View File

@@ -6437,4 +6437,23 @@ public class Reflections {
ReflectionUtils.getMethod(
clazz$CraftPlayer, new String[]{"setSimplifyContainerDesyncCheck"}, boolean.class
);
public static final Class<?> clazz$ServerboundHelloPacket = requireNonNull(
ReflectionUtils.getClazz(
BukkitReflectionUtils.assembleMCClass("network.protocol.game.ServerboundHelloPacket"),
BukkitReflectionUtils.assembleMCClass("network.protocol.game.PacketLoginInStart")
)
);
public static final Field field$ServerboundHelloPacket$name = requireNonNull(
ReflectionUtils.getDeclaredField(
clazz$ServerboundHelloPacket, String.class, 0
)
);
public static final Field field$ServerboundHelloPacket$uuid = requireNonNull(
ReflectionUtils.getDeclaredField(
clazz$ServerboundHelloPacket, UUID.class, 0
)
);
}

View File

@@ -0,0 +1,6 @@
package net.momirealms.craftengine.core.pack.host;
import java.util.UUID;
public record ResourcePackDownloadData(String url, UUID uuid, String sha1) {
}

View File

@@ -0,0 +1,11 @@
package net.momirealms.craftengine.core.pack.host;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
public interface ResourcePackHost {
CompletableFuture<ResourcePackDownloadData> requestOneTimeUrl(UUID player);
ResourcePackDownloadData getResourcePackUrl(UUID player);
}

View File

@@ -7,6 +7,7 @@ import org.jetbrains.annotations.ApiStatus;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public interface NetWorkUser {
boolean isOnline();
@@ -17,6 +18,12 @@ public interface NetWorkUser {
String name();
void setName(String name);
UUID uuid();
void setUUID(UUID uuid);
void sendPacket(Object packet, boolean immediately);
void receivePacket(Object packet);