Make fake players compatible with adventure platform lib and minor refactor around them (#1235)

* Make fake players compatible with adventure platform and minor refactor around them

Cleaner approach

* Remove no longer needed enderpearl mixin for fake players

Their ClientConnection now has an open channel so isOpen returns true
This commit is contained in:
altrisi authored and GitHub committed 2022-01-19 21:28:36 +01:00
1 parent c0bba54799
commit ec47dea267
9 files changed
+49 -93

No files matched your search

@@ -62,7 +62,7 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
}
EntityPlayerMPFake instance = new EntityPlayerMPFake(server, worldIn, gameprofile, false);
instance.fixStartingPosition = () -> instance.refreshPositionAndAngles(d0, d1, d2, (float) yaw, (float) pitch);
server.getPlayerManager().onPlayerConnect(new NetworkManagerFake(NetworkSide.SERVERBOUND), instance);
server.getPlayerManager().onPlayerConnect(new FakeClientConnection(NetworkSide.SERVERBOUND), instance);
instance.teleport(worldIn, d0, d1, d2, (float)yaw, (float)pitch);
instance.setHealth(20.0F);
instance.unsetRemoved();
@@ -83,7 +83,7 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
ServerWorld worldIn = player.getServerWorld();//.getWorld(player.dimension);
GameProfile gameprofile = player.getGameProfile();
EntityPlayerMPFake playerShadow = new EntityPlayerMPFake(server, worldIn, gameprofile, true);
server.getPlayerManager().onPlayerConnect(new NetworkManagerFake(NetworkSide.SERVERBOUND), playerShadow);
server.getPlayerManager().onPlayerConnect(new FakeClientConnection(NetworkSide.SERVERBOUND), playerShadow);
playerShadow.setHealth(player.getHealth());
playerShadow.networkHandler.requestTeleport(player.getX(), player.getY(), player.getZ(), player.getYaw(), player.getPitch());
@@ -0,0 +1,27 @@
package carpet.patches;
import carpet.fakes.ClientConnectionInterface;
import io.netty.channel.embedded.EmbeddedChannel;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.NetworkSide;
public class FakeClientConnection extends ClientConnection
{
public FakeClientConnection(NetworkSide p)
{
super(p);
// compat with adventure-platform-fabric. This does NOT trigger other vanilla handlers for establishing a channel
// also makes #isOpen return true, allowing enderpearls to teleport fake players
((ClientConnectionInterface)this).setChannel(new EmbeddedChannel());
}
@Override
public void disableAutoRead()
{
}
@Override
public void handleDisconnection()
{
}
}
@@ -4,13 +4,12 @@ import net.minecraft.network.ClientConnection;
import net.minecraft.network.Packet;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
public class NetHandlerPlayServerFake extends ServerPlayNetworkHandler
{
public NetHandlerPlayServerFake(MinecraftServer server, ClientConnection cc, ServerPlayerEntity playerIn)
public NetHandlerPlayServerFake(MinecraftServer server, ClientConnection cc, EntityPlayerMPFake playerIn)
{
super(server, cc, playerIn);
}
@@ -23,9 +22,9 @@ public class NetHandlerPlayServerFake extends ServerPlayNetworkHandler
@Override
public void disconnect(Text message)
{
if (player instanceof EntityPlayerMPFake && message instanceof TranslatableText && ((TranslatableText) message).getKey().equals("multiplayer.disconnect.idling"))
if (message instanceof TranslatableText text && (text.getKey().equals("multiplayer.disconnect.idling") || text.getKey().equals("multiplayer.disconnect.duplicate_login")))
{
((EntityPlayerMPFake) player).kill(new TranslatableText(((TranslatableText) message).getKey()));
((EntityPlayerMPFake) player).kill(message);
}
}
}
@@ -1,22 +0,0 @@
package carpet.patches;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.NetworkSide;
public class NetworkManagerFake extends ClientConnection
{
public NetworkManagerFake(NetworkSide p)
{
super(p);
}
@Override
public void disableAutoRead()
{
}
@Override
public void handleDisconnection()
{
}
}