|
11 | 11 | import net.minecraft.world.phys.Vec3; |
12 | 12 |
|
13 | 13 | import java.io.IOException; |
14 | | -import java.util.Random; |
15 | | -import java.util.UUID; |
| 14 | +import java.util.*; |
16 | 15 |
|
17 | 16 | public class RedisMessage { |
18 | 17 |
|
@@ -62,17 +61,36 @@ public RedisMessage andWithPlayer(ServerPlayer player, boolean isVisible) { |
62 | 61 | return this; |
63 | 62 | } |
64 | 63 |
|
65 | | - private static final UUID MOCK_PLAYER_UUID = UUID.fromString("8f50bdf3-cb09-4e29-ab76-dc1cf9db86a1"); |
66 | | - public static RedisMessage mockPlayerPresence(Vec3 position) { |
67 | | - RedisMessage result = beginPlayerPresence(1); |
68 | | - result.content.writeUUID(MOCK_PLAYER_UUID); |
69 | | - result.content.writeBoolean(true); |
70 | | - result.content.writeUtf("MalayP"); |
71 | | - result.content.writeResourceKey(Level.OVERWORLD); |
72 | | - Vec3.STREAM_CODEC.encode(result.content, position); |
73 | | - result.content.writeFloat(0); |
74 | | - result.content.writeFloat(0); |
75 | | - result.content.writeFloat(0); |
| 64 | + private static final ArrayDeque<UUID> mockPlayers = new ArrayDeque<>(); |
| 65 | + private static final Random random = new Random(); |
| 66 | + |
| 67 | + public static List<RedisMessage> mockPlayerPresence() { |
| 68 | + List<RedisMessage> result = new ArrayList<>(); |
| 69 | + if (random.nextInt(100) < 1) { |
| 70 | + if (random.nextBoolean() || mockPlayers.size() >= 20) { |
| 71 | + if (!mockPlayers.isEmpty()) { |
| 72 | + UUID playerLeft = mockPlayers.pop(); |
| 73 | + RedisMessage absencePacket = playerAbsence(playerLeft); |
| 74 | + absencePacket.resetInitiator(0); |
| 75 | + result.add(absencePacket); |
| 76 | + } |
| 77 | + } else { |
| 78 | + mockPlayers.add(UUID.randomUUID()); |
| 79 | + } |
| 80 | + } |
| 81 | + RedisMessage presencePacket = beginPlayerPresence(mockPlayers.size()); |
| 82 | + for (UUID player : mockPlayers) { |
| 83 | + presencePacket.content.writeUUID(player); |
| 84 | + presencePacket.content.writeBoolean(true); |
| 85 | + presencePacket.content.writeUtf(player.toString().substring(0, 8)); |
| 86 | + presencePacket.content.writeResourceKey(Level.OVERWORLD); |
| 87 | + Vec3.STREAM_CODEC.encode(presencePacket.content, new Vec3(random.nextDouble(-10, 10), -60, random.nextDouble(-10, 10))); |
| 88 | + presencePacket.content.writeFloat(0); |
| 89 | + presencePacket.content.writeFloat(0); |
| 90 | + presencePacket.content.writeFloat(0); |
| 91 | + } |
| 92 | + presencePacket.resetInitiator(0); |
| 93 | + result.add(presencePacket); |
76 | 94 | return result; |
77 | 95 | } |
78 | 96 |
|
@@ -121,6 +139,14 @@ public boolean isFromSelf() { |
121 | 139 | return initiator == INSTANCE_ID; |
122 | 140 | } |
123 | 141 |
|
| 142 | + public void resetInitiator(long initiator) { |
| 143 | + this.initiator = initiator; |
| 144 | + int writerIndex = this.content.writerIndex(); |
| 145 | + this.content.writerIndex(1); |
| 146 | + this.content.writeLong(initiator); |
| 147 | + this.content.writerIndex(writerIndex); |
| 148 | + } |
| 149 | + |
124 | 150 | public enum Action { |
125 | 151 | PLAYER_PRESENCE, PLAYER_ABSENCE |
126 | 152 | } |
|
0 commit comments