Skip to content

Commit

Permalink
misc: 基于玩家名生成玩家伪装的UUID
Browse files Browse the repository at this point in the history
  • Loading branch information
MATRIX-feather committed Jan 17, 2024
1 parent 403a0ca commit cc08458
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,36 @@
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EntityEquipment;
import org.jetbrains.annotations.Debug;
import xiamomc.morph.MorphPluginObject;
import xiamomc.morph.backends.server.renderer.network.datawatcher.values.AbstractValues;
import xiamomc.morph.backends.server.renderer.network.datawatcher.values.SingleValue;
import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.SingleWatcher;
import xiamomc.morph.backends.server.renderer.network.registries.EntryIndex;
import xiamomc.morph.backends.server.renderer.utilties.ProtocolRegistryUtils;
import xiamomc.morph.config.ConfigOption;
import xiamomc.morph.config.MorphConfigManager;
import xiamomc.morph.misc.DisguiseEquipment;
import xiamomc.morph.misc.MorphGameProfile;
import xiamomc.morph.misc.NmsRecord;
import xiamomc.morph.utilities.EntityTypeUtils;
import xiamomc.pluginbase.Annotations.Initializer;
import xiamomc.pluginbase.Bindables.Bindable;

import java.util.*;

public class PacketFactory extends MorphPluginObject
{
public static final String MORPH_PACKET_METAKEY = "fm";

private final Bindable<String> randomBase = new Bindable<>("Stateof");

@Initializer
private void load(MorphConfigManager config)
{
config.bind(randomBase, ConfigOption.UUID_RANDOM_BASE);
}

public List<PacketContainer> buildSpawnPackets(Player player, DisplayParameters parameters)
{
List<PacketContainer> packets = new ObjectArrayList<>();
Expand Down Expand Up @@ -62,7 +75,8 @@ public List<PacketContainer> buildSpawnPackets(Player player, DisplayParameters
{
//todo: Get random UUID from world to prevent duplicate UUID
//玩家在客户端的UUID会根据其GameProfile中的UUID设定,我们需要避免伪装的UUID和某一玩家自己的UUID冲突
gameProfile.setUUID(UUID.randomUUID());
var str = randomBase.get() + player.getName();
gameProfile.setUUID(UUID.nameUUIDFromBytes(str.getBytes()));
}

var lastUUID = parameters.getWatcher().getOrDefault(EntryIndex.TABLIST_UUID, null);
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/xiamomc/morph/config/ConfigOption.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package xiamomc.morph.config;

import org.apache.commons.lang3.RandomStringUtils;
import xiamomc.morph.MorphManager;
import xiamomc.morph.events.InteractionMirrorProcessor;
import xiamomc.morph.utilities.NbtUtils;
Expand Down Expand Up @@ -95,6 +96,8 @@ public enum ConfigOption

NOFLY_WORLDS(ConfigNode.create().append("nofly_worlds"), new ArrayList<String>()),

UUID_RANDOM_BASE(ConfigNode.create().append("uuid_random_base"), RandomStringUtils.randomAlphabetic(8)),

VERSION(ConfigNode.create().append("version"), 0);

public final ConfigNode node;
Expand Down

0 comments on commit cc08458

Please sign in to comment.