]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
Handle update spawn chunks
authorIrtimaled <irtimaled@gmail.com>
Sun, 12 May 2019 17:54:02 +0000 (10:54 -0700)
committerIrtimaled <irtimaled@gmail.com>
Sun, 12 May 2019 18:11:16 +0000 (11:11 -0700)
src/main/java/com/irtimaled/bbor/client/ClientProxy.java
src/main/java/com/irtimaled/bbor/client/ClientRenderer.java
src/main/java/com/irtimaled/bbor/client/events/UpdateWorldSpawnReceived.java [new file with mode: 0644]
src/main/java/com/irtimaled/bbor/common/CommonProxy.java
src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSPacketSpawnPosition.java [new file with mode: 0644]
src/main/resources/mixins.bbor.json

index 6ad3de95b29e25e2bb7d88b75d4a1256eb9e166e..bc1c281f8e721517af5a542614b7ec604dea062e 100644 (file)
@@ -48,6 +48,7 @@ public class ClientProxy extends CommonProxy {
         EventBus.subscribe(InitializeClientReceived.class, this::onInitializeClientReceived);
         EventBus.subscribe(AddBoundingBoxReceived.class, this::addBoundingBox);
         EventBus.subscribe(RemoveBoundingBoxReceived.class, this::onRemoveBoundingBoxReceived);
+        EventBus.subscribe(UpdateWorldSpawnReceived.class, this::onUpdateWorldSpawnReceived);
 
         renderer = new ClientRenderer(this::getCache);
         KeyListener.init();
@@ -90,10 +91,22 @@ public class ClientProxy extends CommonProxy {
         setWorldData(seed, spawnX, spawnZ);
     }
 
+    private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
+        int spawnX = event.getSpawnX();
+        int spawnZ = event.getSpawnZ();
+        setWorldSpawn(spawnX, spawnZ);
+    }
+
     @Override
     protected void setWorldData(long seed, int spawnX, int spawnZ) {
         super.setWorldData(seed, spawnX, spawnZ);
         renderer.setWorldData(seed, spawnX, spawnZ);
         ready = true;
     }
+
+    @Override
+    protected void setWorldSpawn(int spawnX, int spawnZ) {
+        super.setWorldSpawn(spawnX, spawnZ);
+        renderer.setWorldSpawn(spawnX, spawnZ);
+    }
 }
index 11a9ec9afd1c28b8a7b5e8e06e1bf65d11900e7e..4dcaceb3e43ac6cce10e5350aaa719adbe891376 100644 (file)
@@ -138,6 +138,10 @@ public class ClientRenderer {
         spawnChunkBoundingBoxes = getSpawnChunkBoundingBoxes(spawnX, spawnZ);
     }
 
+    void setWorldSpawn(int spawnX, int spawnZ) {
+        spawnChunkBoundingBoxes = getSpawnChunkBoundingBoxes(spawnX, spawnZ);
+    }
+
     private Set<AbstractBoundingBox> getSpawnChunkBoundingBoxes(int spawnX, int spawnZ) {
         Set<AbstractBoundingBox> boundingBoxes = new HashSet<>();
         boundingBoxes.add(getWorldSpawnBoundingBox(spawnX, spawnZ));
diff --git a/src/main/java/com/irtimaled/bbor/client/events/UpdateWorldSpawnReceived.java b/src/main/java/com/irtimaled/bbor/client/events/UpdateWorldSpawnReceived.java
new file mode 100644 (file)
index 0000000..c7c34c8
--- /dev/null
@@ -0,0 +1,19 @@
+package com.irtimaled.bbor.client.events;
+
+public class UpdateWorldSpawnReceived {
+    private final int spawnX;
+    private final int spawnZ;
+
+    public UpdateWorldSpawnReceived(int spawnX, int spawnZ) {
+        this.spawnX = spawnX;
+        this.spawnZ = spawnZ;
+    }
+
+    public int getSpawnX() {
+        return spawnX;
+    }
+
+    public int getSpawnZ() {
+        return spawnZ;
+    }
+}
index 3d84f1b864cef462cf3845081df588b2cddfe7c0..bb31aab9a2c67bd37b1295e857c9d6c50cddbac3 100644 (file)
@@ -45,6 +45,10 @@ public class CommonProxy {
         worldData = new WorldData(seed, spawnX, spawnZ);
     }
 
+    protected void setWorldSpawn(int spawnX, int spawnZ) {
+        worldData = new WorldData(worldData.getSeed(), spawnX, spawnZ);
+    }
+
     private void worldLoaded(WorldLoaded event) {
         int dimensionId = event.getDimensionId();
         long seed = event.getSeed();
diff --git a/src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSPacketSpawnPosition.java b/src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSPacketSpawnPosition.java
new file mode 100644 (file)
index 0000000..d0b6e86
--- /dev/null
@@ -0,0 +1,22 @@
+package com.irtimaled.bbor.mixin.network.play.server;
+
+import com.irtimaled.bbor.client.events.UpdateWorldSpawnReceived;
+import com.irtimaled.bbor.common.EventBus;
+import net.minecraft.network.play.server.SPacketSpawnPosition;
+import net.minecraft.util.math.BlockPos;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(SPacketSpawnPosition.class)
+public abstract class MixinSPacketSpawnPosition {
+    @Shadow
+    private BlockPos spawnBlockPos;
+
+    @Inject(method = "processPacket", at = @At("RETURN"))
+    private void afterProcessPacket(CallbackInfo ci) {
+        EventBus.publish(new UpdateWorldSpawnReceived(spawnBlockPos.getX(), spawnBlockPos.getZ()));
+    }
+}
index 3206923ed1acf46ca9f626877dec12b1e1f420db..63195deeffb5a60fe1c8c176f8b56b28e9418130 100644 (file)
@@ -18,6 +18,7 @@
     "client.gui.MixinGuiOptions",
     "client.renderer.MixinEntityRenderer",
     "network.play.server.MixinSPacketCustomPayload",
+    "network.play.server.MixinSPacketSpawnPosition",
     "client.multiplayer.MixinWorldClient",
     "client.network.MixinNetHandlerLoginClient",
     "client.network.MixinNetHandlerPlayClient",