mirror of
https://github.com/XevianLight/Aphelion.git
synced 2026-05-11 10:00:54 +01:00
Environment Data saving and Floodfill. Added additional data to PartitionPayload and PartitionData for later
This commit is contained in:
@@ -11,6 +11,6 @@ public class PartitionPayloadHandler {
|
||||
public static void handleDataOnMain(PartitionPayload data, IPayloadContext context) {
|
||||
// Set our local partition state to the packet we just received.
|
||||
PartitionClientState.set(data);
|
||||
Aphelion.LOGGER.info("Partition packet received! id={}", data.id());
|
||||
Aphelion.LOGGER.info("Partition packet received! id={}", data.partitionData());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,16 +4,14 @@ package net.xevianlight.aphelion.network;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
|
||||
import net.neoforged.neoforge.event.tick.ServerTickEvent;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
import net.xevianlight.aphelion.Aphelion;
|
||||
import net.xevianlight.aphelion.core.space.SpacePartitionSavedData;
|
||||
import net.xevianlight.aphelion.core.saveddata.SpacePartitionSavedData;
|
||||
import net.xevianlight.aphelion.core.saveddata.types.PartitionData;
|
||||
import net.xevianlight.aphelion.network.packet.PartitionPayload;
|
||||
import net.xevianlight.aphelion.util.SpacePartitionHelper;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@EventBusSubscriber(modid = Aphelion.MOD_ID)
|
||||
@@ -44,14 +42,14 @@ public final class PartitionSync {
|
||||
}
|
||||
|
||||
private static PartitionPayload computePartitionFor(ServerPlayer sp) {
|
||||
// convert player position to partition coords
|
||||
int px = (int)Math.floor(sp.getX() / SpacePartitionHelper.SIZE);
|
||||
int pz = (int)Math.floor(sp.getZ() / SpacePartitionHelper.SIZE);
|
||||
|
||||
// Get the orbit for the partition the player is in and create a packet for it
|
||||
var orbit = SpacePartitionSavedData.get(sp.serverLevel()).getOrbitForPartition(px, pz);
|
||||
String orbitId = (orbit != null) ? orbit.toString() : "aphelion:orbit/default";
|
||||
PartitionData live = SpacePartitionSavedData.get(sp.serverLevel()).getData(px, pz);
|
||||
|
||||
return new PartitionPayload(orbitId);
|
||||
// snapshot so mutations later don’t affect cached payloads
|
||||
PartitionData snapshot = (live == null) ? null : new PartitionData(live);
|
||||
|
||||
return new PartitionPayload(snapshot);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,39 @@
|
||||
package net.xevianlight.aphelion.network.packet;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.xevianlight.aphelion.Aphelion;
|
||||
import net.xevianlight.aphelion.core.saveddata.types.PartitionData;
|
||||
|
||||
public record PartitionPayload(String id) implements CustomPacketPayload {
|
||||
public static final Type<PartitionPayload> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(Aphelion.MOD_ID, "partition_data"));
|
||||
import java.util.Objects;
|
||||
|
||||
public static final StreamCodec<ByteBuf, PartitionPayload> STREAM_CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.STRING_UTF8,
|
||||
PartitionPayload::id,
|
||||
public record PartitionPayload(PartitionData partitionData) implements CustomPacketPayload {
|
||||
public static final Type<PartitionPayload> TYPE =
|
||||
new Type<>(ResourceLocation.fromNamespaceAndPath(Aphelion.MOD_ID, "partition_data"));
|
||||
|
||||
PartitionPayload::new
|
||||
);
|
||||
public static final StreamCodec<ByteBuf, PartitionPayload> STREAM_CODEC =
|
||||
StreamCodec.composite(
|
||||
PartitionData.STREAM_CODEC,
|
||||
PartitionPayload::partitionData,
|
||||
PartitionPayload::new
|
||||
);
|
||||
|
||||
@Override
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
PartitionPayload that = (PartitionPayload) o;
|
||||
return partitionData.equals(that.partitionData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(partitionData);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user