CreateMod/src/main/java/com/simibubi/create/content/trains/signal/SingleBlockEntityEdgePoint.java
2023-05-21 21:48:39 +02:00

65 lines
1.8 KiB
Java

package com.simibubi.create.content.trains.signal;
import com.simibubi.create.content.trains.graph.DimensionPalette;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.entity.BlockEntity;
public abstract class SingleBlockEntityEdgePoint extends TrackEdgePoint {
public ResourceKey<Level> blockEntityDimension;
public BlockPos blockEntityPos;
public BlockPos getBlockEntityPos() {
return blockEntityPos;
}
public ResourceKey<Level> getBlockEntityDimension() {
return blockEntityDimension;
}
@Override
public void blockEntityAdded(BlockEntity blockEntity, boolean front) {
this.blockEntityPos = blockEntity.getBlockPos();
this.blockEntityDimension = blockEntity.getLevel()
.dimension();
}
@Override
public void blockEntityRemoved(BlockPos blockEntityPos, boolean front) {
removeFromAllGraphs();
}
@Override
public void invalidate(LevelAccessor level) {
invalidateAt(level, blockEntityPos);
}
@Override
public boolean canMerge() {
return false;
}
@Override
public void read(CompoundTag nbt, boolean migration, DimensionPalette dimensions) {
super.read(nbt, migration, dimensions);
if (migration)
return;
blockEntityPos = NbtUtils.readBlockPos(nbt.getCompound("TilePos"));
blockEntityDimension = dimensions.decode(nbt.contains("TileDimension") ? nbt.getInt("TileDimension") : -1);
}
@Override
public void write(CompoundTag nbt, DimensionPalette dimensions) {
super.write(nbt, dimensions);
nbt.put("TilePos", NbtUtils.writeBlockPos(blockEntityPos));
nbt.putInt("TileDimension", dimensions.encode(blockEntityDimension));
}
}