diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/ServerEntityBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/ServerEntityBridge.java new file mode 100644 index 00000000..6e5db8ef --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/ServerEntityBridge.java @@ -0,0 +1,19 @@ +package io.izzel.arclight.common.bridge.core.world; + +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.entity.Entity; + +import java.util.Set; + +public interface ServerEntityBridge { + + void bridge$setTrackedPlayers(Set trackedPlayers); + + Entity bridge$getTrackingEntity(); + + boolean bridge$syncPosition(); + + boolean bridge$instantSyncPosition(); + + boolean bridge$instantSyncMotion(); +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/TrackedEntityBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/TrackedEntityBridge.java deleted file mode 100644 index 8368ae7d..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/TrackedEntityBridge.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.izzel.arclight.common.bridge.core.world; - -import java.util.Set; -import net.minecraft.server.level.ServerPlayer; - -public interface TrackedEntityBridge { - - void bridge$setTrackedPlayers(Set trackedPlayers); -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/server/ChunkMap_TrackedEntityBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/server/ChunkMap_TrackedEntityBridge.java new file mode 100644 index 00000000..e6b68a15 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/server/ChunkMap_TrackedEntityBridge.java @@ -0,0 +1,8 @@ +package io.izzel.arclight.common.bridge.core.world.server; + +import net.minecraft.server.level.ServerEntity; + +public interface ChunkMap_TrackedEntityBridge { + + ServerEntity bridge$getServerEntity(); +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ChunkMap_TrackedEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ChunkMap_TrackedEntityMixin.java index 68a0c808..87eafa5a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ChunkMap_TrackedEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ChunkMap_TrackedEntityMixin.java @@ -1,9 +1,10 @@ package io.izzel.arclight.common.mixin.core.server.level; -import io.izzel.arclight.common.bridge.core.world.TrackedEntityBridge; +import io.izzel.arclight.common.bridge.core.world.ServerEntityBridge; +import io.izzel.arclight.common.bridge.core.world.server.ChunkMap_TrackedEntityBridge; import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerEntity; -import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -15,15 +16,20 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Set; @Mixin(ChunkMap.TrackedEntity.class) -public abstract class ChunkMap_TrackedEntityMixin { +public abstract class ChunkMap_TrackedEntityMixin implements ChunkMap_TrackedEntityBridge { // @formatter:off @Shadow @Final ServerEntity serverEntity; - @Shadow @Final public Set seenBy; + @Shadow @Final public Set seenBy; // @formatter:on @Inject(method = "", at = @At("RETURN")) private void arclight$setTrackedPlayers(ChunkMap outer, Entity entity, int range, int updateFrequency, boolean sendVelocityUpdates, CallbackInfo ci) { - ((TrackedEntityBridge) this.serverEntity).bridge$setTrackedPlayers(this.seenBy); + ((ServerEntityBridge) this.serverEntity).bridge$setTrackedPlayers(this.seenBy); + } + + @Override + public ServerEntity bridge$getServerEntity() { + return this.serverEntity; } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ServerEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ServerEntityMixin.java index 0b7c6478..e3d2932b 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ServerEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/level/ServerEntityMixin.java @@ -3,7 +3,7 @@ package io.izzel.arclight.common.mixin.core.server.level; import com.google.common.collect.Lists; import com.mojang.datafixers.util.Pair; import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBridge; -import io.izzel.arclight.common.bridge.core.world.TrackedEntityBridge; +import io.izzel.arclight.common.bridge.core.world.ServerEntityBridge; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundAddMobPacket; import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket; @@ -20,6 +20,7 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; import net.minecraft.util.Mth; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; @@ -54,7 +55,7 @@ import java.util.Set; import java.util.function.Consumer; @Mixin(ServerEntity.class) -public abstract class ServerEntityMixin implements TrackedEntityBridge { +public abstract class ServerEntityMixin implements ServerEntityBridge { // @formatter:off @Shadow @Final private Entity entity; @@ -79,7 +80,7 @@ public abstract class ServerEntityMixin implements TrackedEntityBridge { @Shadow protected abstract void broadcastAndSend(Packet packet); // @formatter:on - private Set trackedPlayers; + private Set trackedPlayers; @Inject(method = "", at = @At("RETURN")) private void arclight$init(ServerLevel serverWorld, Entity entity, int updateFrequency, boolean sendVelocityUpdates, Consumer> packetConsumer, CallbackInfo ci) { @@ -90,13 +91,13 @@ public abstract class ServerEntityMixin implements TrackedEntityBridge { throw new NullPointerException(); } - public void arclight$constructor(ServerLevel serverWorld, Entity entity, int updateFrequency, boolean sendVelocityUpdates, Consumer> packetConsumer, Set set) { + public void arclight$constructor(ServerLevel serverWorld, Entity entity, int updateFrequency, boolean sendVelocityUpdates, Consumer> packetConsumer, Set set) { arclight$constructor(serverWorld, entity, updateFrequency, sendVelocityUpdates, packetConsumer); this.trackedPlayers = set; } @Override - public void bridge$setTrackedPlayers(Set trackedPlayers) { + public void bridge$setTrackedPlayers(Set trackedPlayers) { this.trackedPlayers = trackedPlayers; } @@ -116,7 +117,8 @@ public abstract class ServerEntityMixin implements TrackedEntityBridge { if (this.tickCount % 10 == 0 && itemstack.getItem() instanceof MapItem) { MapItemSavedData mapdata = MapItem.getSavedData(itemstack, this.level); if (mapdata != null) { - for (ServerPlayer serverplayerentity : this.trackedPlayers) { + for (ServerPlayerConnection connection : this.trackedPlayers) { + var serverplayerentity = connection.getPlayer(); mapdata.tickCarriedBy(serverplayerentity, itemstack); Packet ipacket = ((MapItem) itemstack.getItem()).getUpdatePacket(itemstack, this.level, serverplayerentity); if (ipacket != null) {