NaturesAura/src/main/java/de/ellpeck/naturesaura/packet/PacketAuraChunk.java

76 lines
2.5 KiB
Java
Raw Normal View History

package de.ellpeck.naturesaura.packet;
import de.ellpeck.naturesaura.NaturesAura;
2018-11-12 22:04:40 +01:00
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.chunk.AuraChunk;
2020-01-22 23:21:52 +01:00
import de.ellpeck.naturesaura.events.ClientEvents;
2021-12-04 15:40:09 +01:00
import net.minecraft.network.FriendlyByteBuf;
2024-03-10 10:41:34 +01:00
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceLocation;
2021-12-04 15:40:09 +01:00
import net.minecraft.world.level.Level;
2024-03-10 10:41:34 +01:00
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
2023-06-27 09:44:19 +02:00
import java.util.ArrayList;
import java.util.Collection;
2024-03-10 10:41:34 +01:00
public class PacketAuraChunk implements CustomPacketPayload {
2024-03-10 10:41:34 +01:00
public static final ResourceLocation ID = new ResourceLocation(NaturesAura.MOD_ID, "aura_chunk");
private final int chunkX;
private final int chunkZ;
private final Collection<AuraChunk.DrainSpot> drainSpots;
2023-06-27 09:44:19 +02:00
public PacketAuraChunk(int chunkX, int chunkZ, Collection<AuraChunk.DrainSpot> drainSpots) {
2020-01-22 23:21:52 +01:00
this.chunkX = chunkX;
this.chunkZ = chunkZ;
this.drainSpots = drainSpots;
}
2024-03-10 10:41:34 +01:00
public PacketAuraChunk(FriendlyByteBuf buf) {
this.chunkX = buf.readInt();
this.chunkZ = buf.readInt();
2024-03-10 10:41:34 +01:00
this.drainSpots = new ArrayList<>();
2021-12-15 16:30:22 +01:00
var amount = buf.readInt();
2023-06-27 09:44:19 +02:00
for (var i = 0; i < amount; i++)
2024-03-10 10:41:34 +01:00
this.drainSpots.add(new AuraChunk.DrainSpot(buf.readNbt()));
}
2024-03-10 10:41:34 +01:00
@Override
public void write(FriendlyByteBuf buf) {
buf.writeInt(this.chunkX);
buf.writeInt(this.chunkZ);
2024-03-10 10:41:34 +01:00
buf.writeInt(this.drainSpots.size());
for (var entry : this.drainSpots)
2023-06-27 09:44:19 +02:00
buf.writeNbt(entry.serializeNBT());
}
2024-03-10 10:41:34 +01:00
@Override
public ResourceLocation id() {
return PacketAuraChunk.ID;
}
public static void onMessage(PacketAuraChunk message, PlayPayloadContext ctx) {
ctx.workHandler().execute(() -> ClientEvents.PENDING_AURA_CHUNKS.add(message));
2020-02-07 15:22:30 +01:00
}
2021-12-04 15:40:09 +01:00
public boolean tryHandle(Level level) {
try {
2021-12-15 16:30:22 +01:00
var chunk = level.getChunk(this.chunkX, this.chunkZ);
if (chunk.isEmpty())
return false;
2024-03-12 19:53:57 +01:00
var auraChunk = (AuraChunk) chunk.getData(NaturesAuraAPI.AURA_CHUNK_ATTACHMENT);
if (auraChunk == null)
return false;
auraChunk.setSpots(this.drainSpots);
return true;
} catch (Exception e) {
NaturesAura.LOGGER.error("There was an error handling an aura chunk packet", e);
return true;
}
2020-01-22 23:21:52 +01:00
}
2024-03-10 10:41:34 +01:00
2020-01-22 01:35:47 +01:00
}