1.20.2-pre1

This commit is contained in:
gnembon committed 2023-09-05 22:15:44 +02:00
1 parent ffbd1338b0
commit 5a77da26d4
12 files changed
+49 -54

No files matched your search

+2 -2
View File
@@ -3,10 +3,10 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
# check https://fabricmc.net/develop/ # check https://fabricmc.net/develop/
minecraft_version=23w35a minecraft_version=1.20.2-pre1
loader_version=0.14.22 loader_version=0.14.22
jsr305_version=3.0.2 jsr305_version=3.0.2
fabric_version=0.87.1+1.20.2 fabric_version=0.88.2+1.20.2
# Mod Properties # Mod Properties
mod_version = 1.4.115 mod_version = 1.4.115
@@ -7,5 +7,4 @@ public interface ServerPlayerInterface
EntityPlayerActionPack getActionPack(); EntityPlayerActionPack getActionPack();
void invalidateEntityObjectReference(); void invalidateEntityObjectReference();
boolean isInvalidEntityObject(); boolean isInvalidEntityObject();
String getLanguage();
} }
@@ -5,6 +5,7 @@ import carpet.network.ServerNetworkHandler;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.CommonListenerCookie;
import net.minecraft.server.players.PlayerList; import net.minecraft.server.players.PlayerList;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@@ -16,7 +17,7 @@ public class PlayerList_coreMixin
{ {
@Inject(method = "placeNewPlayer", at = @At("RETURN")) @Inject(method = "placeNewPlayer", at = @At("RETURN"))
private void onPlayerConnected(Connection connection, ServerPlayer player, int i, CallbackInfo ci) private void onPlayerConnected(Connection connection, ServerPlayer player, CommonListenerCookie i, CallbackInfo ci)
{ {
CarpetServer.onPlayerLoggedIn(player); CarpetServer.onPlayerLoggedIn(player);
} }
@@ -4,8 +4,10 @@ import com.mojang.authlib.GameProfile;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ClientInformation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.CommonListenerCookie;
import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.server.players.PlayerList; import net.minecraft.server.players.PlayerList;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
@@ -34,25 +36,25 @@ public abstract class PlayerList_fakePlayersMixin
} }
} }
@Redirect(method = "placeNewPlayer", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/Connection;Lnet/minecraft/server/level/ServerPlayer;I)Lnet/minecraft/server/network/ServerGamePacketListenerImpl;")) @Redirect(method = "placeNewPlayer", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/Connection;Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/server/network/CommonListenerCookie;)Lnet/minecraft/server/network/ServerGamePacketListenerImpl;"))
private ServerGamePacketListenerImpl replaceNetworkHandler( MinecraftServer server, Connection clientConnection, ServerPlayer playerIn, int i) private ServerGamePacketListenerImpl replaceNetworkHandler(MinecraftServer server, Connection clientConnection, ServerPlayer playerIn, CommonListenerCookie cookie)
{ {
if (playerIn instanceof EntityPlayerMPFake fake) if (playerIn instanceof EntityPlayerMPFake fake)
{ {
return new NetHandlerPlayServerFake(this.server, clientConnection, fake, i); return new NetHandlerPlayServerFake(this.server, clientConnection, fake, cookie);
} }
else else
{ {
return new ServerGamePacketListenerImpl(this.server, clientConnection, playerIn, i); return new ServerGamePacketListenerImpl(this.server, clientConnection, playerIn, cookie);
} }
} }
@Redirect(method = "respawn", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/server/level/ServerLevel;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/server/level/ServerPlayer;")) @Redirect(method = "respawn", at = @At(value = "NEW", target = "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/server/level/ServerLevel;Lcom/mojang/authlib/GameProfile;Lnet/minecraft/server/level/ClientInformation;)Lnet/minecraft/server/level/ServerPlayer;"))
public ServerPlayer makePlayerForRespawn(MinecraftServer minecraftServer, ServerLevel serverLevel, GameProfile gameProfile, ServerPlayer serverPlayer, boolean i) public ServerPlayer makePlayerForRespawn(MinecraftServer minecraftServer, ServerLevel serverLevel, GameProfile gameProfile, ClientInformation cli, ServerPlayer serverPlayer, boolean i)
{ {
if (serverPlayer instanceof EntityPlayerMPFake) { if (serverPlayer instanceof EntityPlayerMPFake) {
return EntityPlayerMPFake.respawnFake(minecraftServer, serverLevel, gameProfile); return EntityPlayerMPFake.respawnFake(minecraftServer, serverLevel, gameProfile, cli);
} }
return new ServerPlayer(minecraftServer, serverLevel, gameProfile); return new ServerPlayer(minecraftServer, serverLevel, gameProfile, cli);
} }
} }
@@ -4,6 +4,7 @@ import carpet.CarpetSettings;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.CommonListenerCookie;
import net.minecraft.server.network.ServerCommonPacketListenerImpl; import net.minecraft.server.network.ServerCommonPacketListenerImpl;
import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.server.network.ServerGamePacketListenerImpl;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -20,9 +21,9 @@ public abstract class ServerGamePacketListenerImpl_antiCheatDisabledMixin extend
@Shadow private int aboveGroundVehicleTickCount; @Shadow private int aboveGroundVehicleTickCount;
public ServerGamePacketListenerImpl_antiCheatDisabledMixin(final MinecraftServer minecraftServer, final Connection connection, final int i) public ServerGamePacketListenerImpl_antiCheatDisabledMixin(final MinecraftServer minecraftServer, final Connection connection, CommonListenerCookie cci)
{ {
super(minecraftServer, connection, i); super(minecraftServer, connection, cci);
} }
//@Shadow protected abstract boolean isSingleplayerOwner(); //@Shadow protected abstract boolean isSingleplayerOwner();
@@ -6,9 +6,9 @@ import net.minecraft.network.Connection;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.CommonListenerCookie;
import net.minecraft.server.network.ServerCommonPacketListenerImpl; import net.minecraft.server.network.ServerCommonPacketListenerImpl;
import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.server.network.ServerGamePacketListenerImpl;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@@ -20,7 +20,7 @@ public abstract class ServerGamePacketListenerImpl_coreMixin extends ServerCommo
@Shadow @Shadow
public ServerPlayer player; public ServerPlayer player;
public ServerGamePacketListenerImpl_coreMixin(final MinecraftServer minecraftServer, final Connection connection, final int i) public ServerGamePacketListenerImpl_coreMixin(final MinecraftServer minecraftServer, final Connection connection, final CommonListenerCookie i)
{ {
super(minecraftServer, connection, i); super(minecraftServer, connection, i);
} }
@@ -4,6 +4,7 @@ import carpet.fakes.ServerPlayerInterface;
import carpet.helpers.EntityPlayerActionPack; import carpet.helpers.EntityPlayerActionPack;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ClientInformation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -24,7 +25,7 @@ public abstract class ServerPlayer_actionPackMixin implements ServerPlayerInterf
} }
@Inject(method = "<init>", at = @At(value = "RETURN")) @Inject(method = "<init>", at = @At(value = "RETURN"))
private void onServerPlayerEntityContructor(MinecraftServer minecraftServer, ServerLevel serverLevel, GameProfile gameProfile, CallbackInfo ci) private void onServerPlayerEntityContructor(MinecraftServer minecraftServer, ServerLevel serverLevel, GameProfile gameProfile, ClientInformation cli, CallbackInfo ci)
{ {
this.actionPack = new EntityPlayerActionPack((ServerPlayer) (Object) this); this.actionPack = new EntityPlayerActionPack((ServerPlayer) (Object) this);
} }
@@ -5,7 +5,6 @@ import carpet.fakes.ServerPlayerInterface;
import carpet.script.EntityEventsGroup; import carpet.script.EntityEventsGroup;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.network.protocol.game.ServerboundClientInformationPacket;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@@ -129,20 +128,4 @@ public abstract class ServerPlayer_scarpetEventMixin extends Player implements S
{ {
return isInvalidReference; return isInvalidReference;
} }
//getting player language
@Unique
private String language;
@Override
public String getLanguage()
{
return this.language;
}
@Inject(method = "updateOptions", at = @At("HEAD"))
public void setLanguage(ServerboundClientInformationPacket packet, CallbackInfo ci)
{
this.language = packet.language();
}
} }
@@ -14,8 +14,10 @@ import net.minecraft.network.protocol.game.ServerboundClientCommandPacket;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.TickTask; import net.minecraft.server.TickTask;
import net.minecraft.server.level.ClientInformation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.CommonListenerCookie;
import net.minecraft.server.players.GameProfileCache; import net.minecraft.server.players.GameProfileCache;
import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
@@ -69,9 +71,9 @@ public class EntityPlayerMPFake extends ServerPlayer
{ {
current = p.get(); current = p.get();
} }
EntityPlayerMPFake instance = new EntityPlayerMPFake(server, worldIn, current, false); EntityPlayerMPFake instance = new EntityPlayerMPFake(server, worldIn, current, ClientInformation.createDefault(), false);
instance.fixStartingPosition = () -> instance.moveTo(pos.x, pos.y, pos.z, (float) yaw, (float) pitch); instance.fixStartingPosition = () -> instance.moveTo(pos.x, pos.y, pos.z, (float) yaw, (float) pitch);
server.getPlayerList().placeNewPlayer(new FakeClientConnection(PacketFlow.SERVERBOUND), instance, 0); server.getPlayerList().placeNewPlayer(new FakeClientConnection(PacketFlow.SERVERBOUND), instance, new CommonListenerCookie(current, 0, instance.clientInformation()));
instance.teleportTo(worldIn, pos.x, pos.y, pos.z, (float) yaw, (float) pitch); instance.teleportTo(worldIn, pos.x, pos.y, pos.z, (float) yaw, (float) pitch);
instance.setHealth(20.0F); instance.setHealth(20.0F);
instance.unsetRemoved(); instance.unsetRemoved();
@@ -95,9 +97,9 @@ public class EntityPlayerMPFake extends ServerPlayer
player.connection.disconnect(Component.translatable("multiplayer.disconnect.duplicate_login")); player.connection.disconnect(Component.translatable("multiplayer.disconnect.duplicate_login"));
ServerLevel worldIn = player.serverLevel();//.getWorld(player.dimension); ServerLevel worldIn = player.serverLevel();//.getWorld(player.dimension);
GameProfile gameprofile = player.getGameProfile(); GameProfile gameprofile = player.getGameProfile();
EntityPlayerMPFake playerShadow = new EntityPlayerMPFake(server, worldIn, gameprofile, true); EntityPlayerMPFake playerShadow = new EntityPlayerMPFake(server, worldIn, gameprofile, player.clientInformation(), true);
playerShadow.setChatSession(player.getChatSession()); playerShadow.setChatSession(player.getChatSession());
server.getPlayerList().placeNewPlayer(new FakeClientConnection(PacketFlow.SERVERBOUND), playerShadow, 0); server.getPlayerList().placeNewPlayer(new FakeClientConnection(PacketFlow.SERVERBOUND), playerShadow, new CommonListenerCookie(gameprofile, 0, player.clientInformation()));
playerShadow.setHealth(player.getHealth()); playerShadow.setHealth(player.getHealth());
playerShadow.connection.teleport(player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot()); playerShadow.connection.teleport(player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot());
@@ -114,14 +116,14 @@ public class EntityPlayerMPFake extends ServerPlayer
return playerShadow; return playerShadow;
} }
public static EntityPlayerMPFake respawnFake(MinecraftServer server, ServerLevel level, GameProfile profile) public static EntityPlayerMPFake respawnFake(MinecraftServer server, ServerLevel level, GameProfile profile, ClientInformation cli)
{ {
return new EntityPlayerMPFake(server, level, profile, false); return new EntityPlayerMPFake(server, level, profile, cli, false);
} }
private EntityPlayerMPFake(MinecraftServer server, ServerLevel worldIn, GameProfile profile, boolean shadow) private EntityPlayerMPFake(MinecraftServer server, ServerLevel worldIn, GameProfile profile, ClientInformation cli, boolean shadow)
{ {
super(server, worldIn, profile); super(server, worldIn, profile, cli);
isAShadow = shadow; isAShadow = shadow;
} }
@@ -6,13 +6,14 @@ import net.minecraft.network.chat.contents.TranslatableContents;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.CommonListenerCookie;
import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.world.entity.RelativeMovement; import net.minecraft.world.entity.RelativeMovement;
import java.util.Set; import java.util.Set;
public class NetHandlerPlayServerFake extends ServerGamePacketListenerImpl public class NetHandlerPlayServerFake extends ServerGamePacketListenerImpl
{ {
public NetHandlerPlayServerFake(final MinecraftServer minecraftServer, final Connection connection, final ServerPlayer serverPlayer, final int i) public NetHandlerPlayServerFake(final MinecraftServer minecraftServer, final Connection connection, final ServerPlayer serverPlayer, final CommonListenerCookie i)
{ {
super(minecraftServer, connection, serverPlayer, i); super(minecraftServer, connection, serverPlayer, i);
} }
+1 -1
View File
@@ -230,7 +230,7 @@ public class Vanilla
public static String ServerPlayer_getLanguage(ServerPlayer player) public static String ServerPlayer_getLanguage(ServerPlayer player)
{ {
return ((ServerPlayerInterface) player).getLanguage(); return player.clientInformation().language();
} }
public static GoalSelector Mob_getAI(Mob mob, boolean target) public static GoalSelector Mob_getAI(Mob mob, boolean target)
@@ -41,6 +41,8 @@ public class SnoopyCommandSource extends CommandSourceStack
private final List<Component> chatOutput; private final List<Component> chatOutput;
private final CommandSigningContext signingContext; private final CommandSigningContext signingContext;
private final TaskChainer taskChainer;
public SnoopyCommandSource(CommandSourceStack original, Component[] error, List<Component> chatOutput) public SnoopyCommandSource(CommandSourceStack original, Component[] error, List<Component> chatOutput)
{ {
super(CommandSource.NULL, original.getPosition(), original.getRotation(), original.getLevel(), Vanilla.MinecraftServer_getRunPermissionLevel(original.getServer()), super(CommandSource.NULL, original.getPosition(), original.getRotation(), original.getLevel(), Vanilla.MinecraftServer_getRunPermissionLevel(original.getServer()),
@@ -62,6 +64,7 @@ public class SnoopyCommandSource extends CommandSourceStack
this.error = error; this.error = error;
this.chatOutput = chatOutput; this.chatOutput = chatOutput;
this.signingContext = original.getSigningContext(); this.signingContext = original.getSigningContext();
this.taskChainer = TaskChainer.immediate(original.getServer());
} }
public SnoopyCommandSource(ServerPlayer player, Component[] error, List<Component> output) public SnoopyCommandSource(ServerPlayer player, Component[] error, List<Component> output)
@@ -85,15 +88,16 @@ public class SnoopyCommandSource extends CommandSourceStack
this.error = error; this.error = error;
this.chatOutput = output; this.chatOutput = output;
this.signingContext = CommandSigningContext.ANONYMOUS; this.signingContext = CommandSigningContext.ANONYMOUS;
this.taskChainer = TaskChainer.immediate(player.server);
} }
private SnoopyCommandSource(CommandSource output, Vec3 pos, Vec2 rot, ServerLevel world, int level, String simpleName, Component name, MinecraftServer server, @Nullable Entity entity, ResultConsumer<CommandSourceStack> consumer, EntityAnchorArgument.Anchor entityAnchor, CommandSigningContext context, private SnoopyCommandSource(CommandSource output, Vec3 pos, Vec2 rot, ServerLevel world, int level, String simpleName, Component name, MinecraftServer server, @Nullable Entity entity, ResultConsumer<CommandSourceStack> consumer, EntityAnchorArgument.Anchor entityAnchor, CommandSigningContext context, TaskChainer chainer,
Component[] error, List<Component> chatOutput Component[] error, List<Component> chatOutput
) )
{ {
super(output, pos, rot, world, level, super(output, pos, rot, world, level,
simpleName, name, server, entity, false, simpleName, name, server, entity, false,
consumer, entityAnchor, context, TaskChainer.immediate(server), i -> {}); consumer, entityAnchor, context, chainer, i -> {});
this.output = output; this.output = output;
this.position = pos; this.position = pos;
this.rotation = rot; this.rotation = rot;
@@ -108,30 +112,31 @@ public class SnoopyCommandSource extends CommandSourceStack
this.error = error; this.error = error;
this.chatOutput = chatOutput; this.chatOutput = chatOutput;
this.signingContext = context; this.signingContext = context;
this.taskChainer = chainer;
} }
@Override @Override
public CommandSourceStack withEntity(Entity entity) public CommandSourceStack withEntity(Entity entity)
{ {
return new SnoopyCommandSource(output, position, rotation, world, level, entity.getName().getString(), entity.getDisplayName(), server, entity, resultConsumer, entityAnchor, signingContext, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, entity.getName().getString(), entity.getDisplayName(), server, entity, resultConsumer, entityAnchor, signingContext, taskChainer, error, chatOutput);
} }
@Override @Override
public CommandSourceStack withPosition(Vec3 position) public CommandSourceStack withPosition(Vec3 position)
{ {
return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, signingContext, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, signingContext, taskChainer, error, chatOutput);
} }
@Override @Override
public CommandSourceStack withRotation(Vec2 rotation) public CommandSourceStack withRotation(Vec2 rotation)
{ {
return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, signingContext, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, signingContext, taskChainer, error, chatOutput);
} }
@Override @Override
public CommandSourceStack withCallback(ResultConsumer<CommandSourceStack> consumer) public CommandSourceStack withCallback(ResultConsumer<CommandSourceStack> consumer)
{ {
return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, consumer, entityAnchor, signingContext, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, consumer, entityAnchor, signingContext, taskChainer, error, chatOutput);
} }
@Override @Override
@@ -160,13 +165,13 @@ public class SnoopyCommandSource extends CommandSourceStack
@Override @Override
public CommandSourceStack withAnchor(EntityAnchorArgument.Anchor anchor) public CommandSourceStack withAnchor(EntityAnchorArgument.Anchor anchor)
{ {
return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, anchor, signingContext, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, anchor, signingContext, taskChainer, error, chatOutput);
} }
@Override @Override
public CommandSourceStack withSigningContext(CommandSigningContext commandSigningContext) public CommandSourceStack withSigningContext(CommandSigningContext commandSigningContext, TaskChainer taskChainer)
{ {
return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, commandSigningContext, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, commandSigningContext, taskChainer, error, chatOutput);
} }
@Override @Override
@@ -174,7 +179,7 @@ public class SnoopyCommandSource extends CommandSourceStack
{ {
double d = DimensionType.getTeleportationScale(this.world.dimensionType(), world.dimensionType()); double d = DimensionType.getTeleportationScale(this.world.dimensionType(), world.dimensionType());
Vec3 position = new Vec3(this.position.x * d, this.position.y, this.position.z * d); Vec3 position = new Vec3(this.position.x * d, this.position.y, this.position.z * d);
return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, signingContext, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, resultConsumer, entityAnchor, signingContext, taskChainer, error, chatOutput);
} }
@Override @Override