diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java index 342caab4fe..6deef66d5b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java @@ -4,6 +4,7 @@ import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.helpers.ColorHelper; import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.networking.*; import net.minecraft.block.entity.*; import net.minecraft.nbt.*; import net.minecraft.registry.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java index 573c6c964f..af5b4ab924 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java @@ -67,6 +67,8 @@ else if (transferLooper.getTick() % 2 == 0) { if (cap || priority != Priority.GENERIC) { if (cap) { this.transferLooper.reset(); + // If someone complains about network usage I am going to fucking kill myself + SpectrumS2CPacketSender.syncPastelNetworkEdges(this, toNbt()); } try { this.transmissionLogic.tick(priority); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java index 5949d8f8a7..74cbd19ce6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java @@ -2,6 +2,7 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.networking.*; import net.minecraft.nbt.*; import net.minecraft.registry.*; import net.minecraft.server.world.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index f7354c7790..d2781fa1e1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -417,7 +417,13 @@ public NbtCompound toInitialChunkDataNbt() { @Override public void markRemoved() { super.markRemoved(); - Pastel.getInstance(world.isClient).removeNode(this, world.getBlockState(pos).getBlock() instanceof PastelNodeBlock ? NodeRemovalReason.UNLOADED : NodeRemovalReason.BROKEN); + // Hanky jacks + if (world.isClient()) { + Pastel.getInstance(true).removeNode(this, world.getBlockState(pos).getBlock() instanceof PastelNodeBlock ? NodeRemovalReason.UNLOADED : NodeRemovalReason.BROKEN); + } + else { + Pastel.getInstance(false).removeNode(this, NodeRemovalReason.UNLOADED); + } } public @NotNull UUID getInitialID() { diff --git a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketReceiver.java b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketReceiver.java index bfa501b103..a244d25059 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketReceiver.java +++ b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketReceiver.java @@ -6,6 +6,7 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; import de.dafuqs.spectrum.blocks.particle_spawner.*; +import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.blocks.pedestal.*; @@ -543,7 +544,19 @@ public static void registerS2CReceivers() { } }); })))); - + + ClientPlayNetworking.registerGlobalReceiver(SpectrumS2CPackets.PASTEL_NETWORK_EDGE_SYNC, (client, handler, buf, responseSender) -> { + var uuid = buf.readUuid(); + var nbt = buf.readNbt(); + + client.execute(() -> { + Pastel.getInstance(true).getNetwork(uuid).ifPresentOrElse( + n -> n.fromNbt(nbt), + () -> { + + }); + }); + }); } -} +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketSender.java b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketSender.java index ab9f5ee554..5c204b863a 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketSender.java +++ b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPacketSender.java @@ -1,5 +1,6 @@ package de.dafuqs.spectrum.networking; +import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.color.*; import de.dafuqs.spectrum.api.energy.*; @@ -18,6 +19,7 @@ import net.minecraft.entity.*; import net.minecraft.entity.player.*; import net.minecraft.item.*; +import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.particle.*; import net.minecraft.registry.*; @@ -488,4 +490,13 @@ public static void sendPastelNodeStatusUpdate(List nodes, } } + public static void syncPastelNetworkEdges(ServerPastelNetwork serverPastelNetwork, NbtCompound graphStorage) { + PacketByteBuf buf = PacketByteBufs.create(); + buf.writeUuid(serverPastelNetwork.getUUID()); + buf.writeNbt(graphStorage); + + assert SpectrumCommon.minecraftServer != null; //shhhh + for (ServerPlayerEntity player : PlayerLookup.all(SpectrumCommon.minecraftServer)) + ServerPlayNetworking.send(player, SpectrumS2CPackets.PASTEL_NETWORK_EDGE_SYNC, buf); + } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java index 06af40064e..60dc69a4f6 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java +++ b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java @@ -49,5 +49,6 @@ public class SpectrumS2CPackets { public static final Identifier BLACK_HOLE_CHEST_STATUS_UPDATE = SpectrumCommon.locate("black_hole_chest_status"); public static final Identifier RESTOCKING_CHEST_STATUS_UPDATE = SpectrumCommon.locate("restocking_chest_status"); public static final Identifier PASTEL_NODE_STATUS_UPDATE = SpectrumCommon.locate("pastel_node_status"); + public static final Identifier PASTEL_NETWORK_EDGE_SYNC = SpectrumCommon.locate("pastel_edge_sync"); }