Skip to content

Commit 8c09946

Browse files
authored
Fix fake players not teleporting to unloaded chunks (gnembon#1665)
* fake-players-teleporting-fix: * Fix fake players not being moved on the chunkmap when teleporting * Fixes gnembon#1190 (Player bots cannot be teleported to unloaded chunks) * fake-players-teleporting-fix: * add missing access widener * Revert "fake-players-teleporting-fix:" This reverts commit 617702fca14035913103140d2e04fa33065bf628. * fake-players-teleporting-fix: * access awaitingTeleport in a nicer way * fake-players-teleporting-fix: * access awaitingTeleport in a nicer way
1 parent 40c789b commit 8c09946

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package carpet.mixins;
2+
3+
import net.minecraft.server.network.ServerGamePacketListenerImpl;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.gen.Accessor;
6+
7+
@Mixin(ServerGamePacketListenerImpl.class)
8+
public interface ServerGamePacketListenerImplAccessor {
9+
@Accessor("awaitingTeleport")
10+
public int getAwaitingTeleport();
11+
}

src/main/java/carpet/patches/NetHandlerPlayServerFake.java

+25
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package carpet.patches;
22

3+
import carpet.mixins.ServerGamePacketListenerImplAccessor;
34
import net.minecraft.network.Connection;
45
import net.minecraft.network.chat.Component;
56
import net.minecraft.network.chat.contents.TranslatableContents;
67
import net.minecraft.network.protocol.Packet;
8+
import net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket;
9+
import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
710
import net.minecraft.server.MinecraftServer;
811
import net.minecraft.server.network.ServerGamePacketListenerImpl;
12+
import net.minecraft.world.entity.RelativeMovement;
13+
import java.util.Set;
914

1015
public class NetHandlerPlayServerFake extends ServerGamePacketListenerImpl
1116
{
@@ -27,6 +32,26 @@ public void disconnect(Component message)
2732
((EntityPlayerMPFake) player).kill(message);
2833
}
2934
}
35+
private boolean hasSpawned = false;
36+
37+
@Override
38+
public void teleport(double d, double e, double f, float g, float h, Set<RelativeMovement> set)
39+
{
40+
super.teleport(d, e, f, g, h, set);
41+
42+
handleAcceptTeleportPacket(
43+
new ServerboundAcceptTeleportationPacket( ((ServerGamePacketListenerImplAccessor)this).getAwaitingTeleport() )
44+
);
45+
46+
if (!hasSpawned) {
47+
hasSpawned = true;
48+
} else {
49+
handleMovePlayer(
50+
new ServerboundMovePlayerPacket.PosRot(player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot(), false)
51+
);
52+
}
53+
}
54+
3055
}
3156

3257

src/main/resources/carpet.mixins.json

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"MobCategory_spawnMixin",
99
"Commands_customCommandsMixin",
1010
"ServerGamePacketListenerImplMixin",
11+
"ServerGamePacketListenerImplAccessor",
1112

1213
"PerfCommand_permissionMixin",
1314
"FillCommandMixin",

0 commit comments

Comments
 (0)