d1ba26311b
* Ported the "one spatial dimension" concept from pre-1.15 * Apply lighting updates after moving chunks. Mark world data as dirty when changing it. * Consolidated naming of spatial storage world/dimension. Use server light manager to update lighting info in chunk. * Save last transition information, and add ae2 spatial command to interact with spatial storage. * Formatting fixes. * Improved docs for the origin generation. Inverted condition on when the x/z axis are flipped. Also added a helper to map a plot to a region file * Remove TransitionResult since it's only used in lieu of a boolean. Rework transition to make the checks BEFORE allocating a new cell. * Removed unused imports. Co-authored-by: yueh <yueh@users.noreply.github.com>
70 lines
1.9 KiB
Java
70 lines
1.9 KiB
Java
package appeng.spatial;
|
|
|
|
import java.time.Instant;
|
|
|
|
import net.minecraft.nbt.CompoundNBT;
|
|
import net.minecraft.nbt.NBTUtil;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.util.math.BlockPos;
|
|
|
|
/**
|
|
* Defines the source world and area of a transition into the spatial storage
|
|
* plot.
|
|
*/
|
|
public final class TransitionInfo {
|
|
|
|
public static final String TAG_WORLD_ID = "world_id";
|
|
public static final String TAG_MIN = "min";
|
|
public static final String TAG_MAX = "max";
|
|
public static final String TAG_TIMESTAMP = "timestamp";
|
|
|
|
private final ResourceLocation worldId;
|
|
|
|
private final BlockPos min;
|
|
|
|
private final BlockPos max;
|
|
|
|
private final Instant timestamp;
|
|
|
|
public TransitionInfo(ResourceLocation worldId, BlockPos min, BlockPos max, Instant timestamp) {
|
|
this.worldId = worldId;
|
|
this.min = min.toImmutable();
|
|
this.max = max.toImmutable();
|
|
this.timestamp = timestamp;
|
|
}
|
|
|
|
public ResourceLocation getWorldId() {
|
|
return worldId;
|
|
}
|
|
|
|
public BlockPos getMin() {
|
|
return min;
|
|
}
|
|
|
|
public BlockPos getMax() {
|
|
return max;
|
|
}
|
|
|
|
public Instant getTimestamp() {
|
|
return timestamp;
|
|
}
|
|
|
|
public CompoundNBT toTag() {
|
|
CompoundNBT tag = new CompoundNBT();
|
|
tag.putString(TAG_WORLD_ID, worldId.toString());
|
|
tag.put(TAG_MIN, NBTUtil.writeBlockPos(min));
|
|
tag.put(TAG_MAX, NBTUtil.writeBlockPos(max));
|
|
tag.putLong(TAG_TIMESTAMP, timestamp.toEpochMilli());
|
|
return tag;
|
|
}
|
|
|
|
public static TransitionInfo fromTag(CompoundNBT tag) {
|
|
ResourceLocation worldId = new ResourceLocation(tag.getString(TAG_WORLD_ID));
|
|
BlockPos min = NBTUtil.readBlockPos(tag.getCompound(TAG_MIN));
|
|
BlockPos max = NBTUtil.readBlockPos(tag.getCompound(TAG_MAX));
|
|
Instant timestamp = Instant.ofEpochMilli(tag.getLong(TAG_TIMESTAMP));
|
|
return new TransitionInfo(worldId, min, max, timestamp);
|
|
}
|
|
|
|
}
|