diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/StationClientWorld.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/StationClientWorld.java new file mode 100644 index 000000000..e172fcc99 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/StationClientWorld.java @@ -0,0 +1,5 @@ +package net.modificationstation.stationapi.impl.world; + +public interface StationClientWorld { + boolean stationAPI$isModded(); +} diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java index de7741532..ebf3952fa 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java @@ -2,11 +2,14 @@ import net.minecraft.block.Block; import net.minecraft.class_454; +import net.minecraft.client.network.ClientNetworkHandler; import net.minecraft.world.World; import net.minecraft.world.dimension.Dimension; import net.minecraft.world.dimension.DimensionData; import net.modificationstation.stationapi.api.block.BlockState; +import net.modificationstation.stationapi.api.network.ModdedPacketHandler; import net.modificationstation.stationapi.impl.client.world.ClientBlockChange; +import net.modificationstation.stationapi.impl.world.StationClientWorld; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -17,13 +20,25 @@ import java.util.LinkedList; @Mixin(class_454.class) -abstract class ClientWorldMixin extends World { +abstract class ClientWorldMixin extends World implements StationClientWorld { + @Unique boolean isModded = false; + @Shadow private LinkedList field_1722; private ClientWorldMixin(DimensionData arg, String string, Dimension arg2, long l) { super(arg, string, arg2, l); } + @Inject(method = "", at = @At("RETURN")) + void mpCrashWorkaround(ClientNetworkHandler handler, long l, int i, CallbackInfo ci) { + isModded = ((ModdedPacketHandler) handler).isModded(); + } + + @Override + public boolean stationAPI$isModded() { + return isModded; + } + @ModifyConstant(method = "method_1494(IIZ)V", constant = @Constant(intValue = 0)) private int stationapi_changeMinHeight(int value) { return getBottomY(); diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java index d4501fa00..892bebd0f 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java @@ -7,6 +7,7 @@ import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.modificationstation.stationapi.api.network.ModdedPacketHandler; +import net.modificationstation.stationapi.impl.world.StationClientWorld; import net.modificationstation.stationapi.impl.world.chunk.FlattenedChunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -28,8 +29,7 @@ class MultiplayerChunkCacheMixin { cancellable = true ) public void stationapi_loadChunk(int i, int j, CallbackInfoReturnable cir) { - //noinspection deprecation - if (!((ModdedPacketHandler) ((Minecraft) FabricLoader.getInstance().getGameInstance()).getNetworkHandler()).isModded()) + if (!((StationClientWorld) field_2555).stationAPI$isModded()) return; ChunkPos vec2i = new ChunkPos(i, j); FlattenedChunk chunk = new FlattenedChunk(this.field_2555, i, j);