Skip to content

Commit aad9b9e

Browse files
committed
- Login player with correct Entity Id (not duplicated)
1 parent a9553b0 commit aad9b9e

9 files changed

Lines changed: 124 additions & 6 deletions

File tree

src/main/java/com/manwe/dsl/dedicatedServer/proxy/ProxyDedicatedServer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.minecraft.*;
1212
import net.minecraft.server.*;
1313
import net.minecraft.server.dedicated.*;
14+
import net.minecraft.server.level.ServerPlayer;
1415
import net.minecraft.server.level.progress.ChunkProgressListenerFactory;
1516
import net.minecraft.server.packs.repository.PackRepository;
1617
import net.minecraft.server.players.GameProfileCache;
@@ -210,6 +211,12 @@ public void tickServer(BooleanSupplier pHasTimeLeft) {
210211
super.tickServer(pHasTimeLeft);
211212
}
212213

214+
@Override
215+
public void tickChildren(BooleanSupplier pHasTimeLeft) {
216+
//System.out.println("TICK CHILDREN");
217+
super.tickChildren(pHasTimeLeft);
218+
}
219+
213220
public boolean isProxy(){
214221
return DSLServerConfigs.IS_PROXY.get();
215222
}

src/main/java/com/manwe/dsl/dedicatedServer/proxy/RemotePlayerList.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,10 @@ public void placeNewPlayer(Connection pConnection, ServerPlayer pPlayer, CommonL
139139

140140
this.router.route(pPlayer.getUUID()).send(initPacket); //Send init to worker
141141

142+
/*
142143
//Defer this call until the worker has loaded the player (ack)
143144
this.router.route(pPlayer.getUUID()).getPacketListener().addPendingLogin(pPlayer.getUUID(),()->{
145+
144146
GameRules gamerules = serverlevel1.getGameRules();
145147
boolean flag = gamerules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN);
146148
boolean flag1 = gamerules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO);
@@ -161,5 +163,6 @@ public void placeNewPlayer(Connection pConnection, ServerPlayer pPlayer, CommonL
161163
)
162164
);
163165
});
166+
*/
164167
}
165168
}

src/main/java/com/manwe/dsl/dedicatedServer/worker/LocalPlayerList.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public LocalPlayerList(DedicatedServer pServer, LayeredRegistryAccess<RegistryLa
4242
super(pServer, pRegistries, pPlayerIo);
4343
}
4444

45-
public Runnable placeNewPlayer(Connection pConnection, ServerPlayer pPlayer, CommonListenerCookie pCookie, ChannelPipeline sharedPipeline, Map<UUID, Connection> playerConnections) {
45+
public Runnable placeNewPlayer(Connection pConnection, ServerPlayer pPlayer, CommonListenerCookie pCookie, ChannelPipeline sharedPipeline) {
4646
GameProfile gameprofile = pPlayer.getGameProfile();
4747
GameProfileCache gameprofilecache = this.getServer().getProfileCache();
4848
if (gameprofilecache != null) gameprofilecache.add(gameprofile);
@@ -75,8 +75,31 @@ public Runnable placeNewPlayer(Connection pConnection, ServerPlayer pPlayer, Com
7575
LevelData leveldata = serverlevel1.getLevelData();
7676
pPlayer.loadGameTypes(optional1.orElse(null));
7777

78-
System.out.println("Sending player init ack"); //Tell proxy to send LoginPacket
79-
sharedPipeline.writeAndFlush(new ProxyBoundPlayerInitACKPacket(pPlayer.getUUID()));
78+
//System.out.println("Sending player init ack"); //Tell proxy to send LoginPacket
79+
//sharedPipeline.writeAndFlush(new ProxyBoundPlayerInitACKPacket(pPlayer.getUUID()));
80+
81+
82+
/////////////////////////////////////////////////////////////
83+
GameRules gamerules = serverlevel1.getGameRules();
84+
boolean flag = gamerules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN);
85+
boolean flag1 = gamerules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO);
86+
boolean flag2 = gamerules.getBoolean(GameRules.RULE_LIMITED_CRAFTING);
87+
pConnection.send(
88+
new ClientboundLoginPacket(
89+
pPlayer.getId(),
90+
leveldata.isHardcore(),
91+
getServer().levelKeys(),
92+
this.getMaxPlayers(),
93+
this.getViewDistance(),
94+
this.getSimulationDistance(),
95+
flag1,
96+
!flag,
97+
flag2,
98+
pPlayer.createCommonSpawnInfo(serverlevel1),
99+
getServer().enforceSecureProfile()
100+
)
101+
);
102+
/////////////////////////////////////////////////////////////
80103

81104
System.out.println("Sending rest of client bound packets");
82105
pConnection.send(new ClientboundChangeDifficultyPacket(leveldata.getDifficulty(), leveldata.isDifficultyLocked()));

src/main/java/com/manwe/dsl/dedicatedServer/worker/listeners/WorkerGamePacketListenerImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.minecraft.network.protocol.common.ServerboundKeepAlivePacket;
1212
import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket;
1313
import net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket;
14+
import net.minecraft.network.protocol.game.ServerboundChunkBatchReceivedPacket;
1415
import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
1516
import net.minecraft.server.MinecraftServer;
1617
import net.minecraft.server.level.ServerLevel;
@@ -251,6 +252,12 @@ public void handleKeepAlive(ServerboundKeepAlivePacket pPacket) {
251252
System.out.println("(NO debería) keep alive recibido en el worker");
252253
}
253254

255+
@Override
256+
public void handleChunkBatchReceived(ServerboundChunkBatchReceivedPacket pPacket) {
257+
System.out.println("handleChunkBatchReceived");
258+
super.handleChunkBatchReceived(pPacket);
259+
}
260+
254261
@Override
255262
protected void keepConnectionAlive() {
256263
//Desactiva el keep alive del worker, esto lo maneja solo el proxy

src/main/java/com/manwe/dsl/dedicatedServer/worker/listeners/WorkerListenerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void handlePlayerLogin(WorkerBoundPlayerInitPacket packet) {
143143
System.out.println(Thread.currentThread());
144144
if(!(server.getPlayerList() instanceof LocalPlayerList localPlayerList)) throw new RuntimeException("PlayerList is not an instance of LocalPlayerList");
145145

146-
Runnable pending = localPlayerList.placeNewPlayer(proxyConnection, player, cookie, sharedPipeline,playerConnections);
146+
Runnable pending = localPlayerList.placeNewPlayer(proxyConnection, player, cookie, sharedPipeline);
147147

148148
pendingLogin.put(player.getUUID(),pending);
149149

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.manwe.dsl.mixin.log;
2+
3+
import net.minecraft.client.multiplayer.ClientLevel;
4+
import net.minecraft.world.entity.Entity;
5+
import net.minecraft.world.level.entity.LevelEntityGetter;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.gen.Invoker;
8+
9+
@Mixin(ClientLevel.class)
10+
public interface ClientLevelInvoker {
11+
@Invoker("getEntities")
12+
LevelEntityGetter<Entity> invokeGetEntities();
13+
}

src/main/java/com/manwe/dsl/mixin/log/ClientLevelMixin.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.manwe.dsl.mixin.log;
22

3+
import net.minecraft.client.Minecraft;
34
import net.minecraft.client.multiplayer.ClientLevel;
5+
import net.minecraft.world.entity.Entity;
46
import net.minecraft.world.level.entity.EntityTickList;
57
import org.spongepowered.asm.mixin.Final;
68
import org.spongepowered.asm.mixin.Mixin;
@@ -19,4 +21,20 @@ public void tickEntities(CallbackInfo ci){
1921
//System.out.println("Tick entities");
2022
//this.tickingEntities.forEach(System.out::println);
2123
}
24+
25+
@Inject(method = "addEntity",at = @At("HEAD"))
26+
public void addEntity(Entity pEntity, CallbackInfo ci){
27+
System.out.println("addEntity: "+ pEntity.getName().getString() + " id:" + pEntity.getId());
28+
}
29+
30+
@Inject(method = "removeEntity",at = @At("HEAD"))
31+
public void removeEntity(int pEntityId, Entity.RemovalReason pReason, CallbackInfo ci){
32+
if(Minecraft.getInstance().player == null) return;
33+
int me = Minecraft.getInstance().player.getId();
34+
35+
if(pEntityId == me) {
36+
System.out.println("ELIMINADO JUGADOR "+ pReason.name());
37+
Thread.dumpStack();
38+
}
39+
}
2240
}

src/main/java/com/manwe/dsl/mixin/log/ClientPacketListenerMixin.java

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.manwe.dsl.mixin.log;
22

3+
import net.minecraft.client.Minecraft;
34
import net.minecraft.client.multiplayer.ClientPacketListener;
5+
import net.minecraft.client.player.LocalPlayer;
46
import net.minecraft.network.protocol.game.*;
7+
import net.minecraft.server.level.ServerPlayer;
8+
import net.minecraft.world.entity.Entity;
9+
import net.minecraft.world.entity.player.Player;
510
import org.checkerframework.checker.units.qual.A;
611
import org.spongepowered.asm.mixin.Mixin;
712
import org.spongepowered.asm.mixin.injection.At;
@@ -61,6 +66,8 @@ public void handleServerData(ClientboundServerDataPacket pPacket, CallbackInfo c
6166
@Inject(method = "handlePlayerInfoUpdate",at = @At("HEAD"))
6267
public void handlePlayerInfoUpdate(ClientboundPlayerInfoUpdatePacket pPacket, CallbackInfo ci){
6368
System.out.println("handlePlayerInfoUpdate");
69+
pPacket.actions().forEach(action -> System.out.println(action));
70+
6471
}
6572
@Inject(method = "handleInitializeBorder",at = @At("HEAD"))
6673
public void handleInitializeBorder(ClientboundInitializeBorderPacket pPacket, CallbackInfo ci){
@@ -96,14 +103,53 @@ public void handleSetHealth(ClientboundSetHealthPacket pPacket, CallbackInfo ci)
96103
}
97104
@Inject(method = "handleLevelChunkWithLight", at = @At("HEAD"))
98105
public void handleLevelChunkWithLight(ClientboundLevelChunkWithLightPacket pPacket, CallbackInfo ci){
99-
System.out.println("handleLevelChunkWithLight");
106+
System.out.printf("chunk %d,%d arrived (player %d,%d)%n",
107+
pPacket.getX(), pPacket.getZ(),
108+
Minecraft.getInstance().player.getBlockX() >> 4,
109+
Minecraft.getInstance().player.getBlockZ() >> 4);
100110
}
101111
@Inject(method = "handleChunkBatchFinished", at = @At("HEAD"))
102112
public void handleChunkBatchFinished(ClientboundChunkBatchFinishedPacket pPacket, CallbackInfo ci){
103-
System.out.println("handleChunkBatchFinished");
113+
System.out.println("handleChunkBatchFinished size: "+pPacket.batchSize());
104114
}
105115
@Inject(method = "handleChunkBatchStart", at = @At("HEAD"))
106116
public void handleChunkBatchStart(ClientboundChunkBatchStartPacket pPacket, CallbackInfo ci){
107117
System.out.println("handleChunkBatchStart");
108118
}
119+
120+
@Inject(method = "handleForgetLevelChunk", at = @At("HEAD"))
121+
public void handleForgetLevelChunk(ClientboundForgetLevelChunkPacket pPacket, CallbackInfo ci){
122+
System.out.printf("chunk %d,%d UNLOADED%n", pPacket.pos().x, pPacket.pos().z);
123+
}
124+
125+
@Inject(method = "handleRemoveEntities", at = @At("HEAD"))
126+
public void handleRemoveEntities(ClientboundRemoveEntitiesPacket pPacket, CallbackInfo ci){
127+
/*
128+
int me = Minecraft.getInstance().player.getId();
129+
System.out.println("handleRemoveEntities player id " + me);
130+
131+
if(Minecraft.getInstance().level == null) {
132+
System.out.println("level == null");
133+
} else {
134+
for(Integer id : pPacket.getEntityIds()){
135+
Entity entity = ((ClientLevelInvoker) Minecraft.getInstance().level).invokeGetEntities().get(id);
136+
if(entity != null){
137+
System.out.println("Removed entity: " + entity.getName().getString());
138+
} else {
139+
System.out.println("Removed unknown with id: " +id);
140+
}
141+
}
142+
}
143+
*/
144+
}
145+
@Inject(method = "handleRespawn", at = @At("HEAD"))
146+
public void handleRespawn(ClientboundRespawnPacket pPacket, CallbackInfo ci){
147+
System.out.println("handleRespawn");
148+
}
149+
@Inject(method = "handlePlayerInfoRemove", at = @At("HEAD"))
150+
public void handlePlayerInfoRemove(ClientboundPlayerInfoRemovePacket pPacket, CallbackInfo ci){
151+
System.out.println("handlePlayerInfoRemove UUIDS:");
152+
pPacket.profileIds().forEach(System.out::println);
153+
}
154+
109155
}

src/main/resources/dsl.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"log.ServerPlayerMixin"
2121
],
2222
"client": [
23+
"log.ClientLevelInvoker",
2324
"log.ClientLevelMixin",
2425
"log.ClientPacketListenerMixin",
2526
"log.LocalPlayerMixin"

0 commit comments

Comments
 (0)