Add more LimitedRegion API

This commit is contained in:
dfsek 2021-06-19 20:15:59 -07:00
parent 0bf80e49be
commit 0cae717977

View File

@ -255,4 +255,45 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
public void addEntityWithPassengers(net.minecraft.world.entity.Entity entity, CreatureSpawnEvent.SpawnReason reason) {
this.entities.add(entity);
}
// Paper start - Add more LimitedRegion API
@Override
public void setBlockState(int x, int y, int z, BlockState state) {
BlockPos pos = new BlockPos(x, y, z);
if (!state.getBlockData().matches(getHandle().getBlockState(pos).createCraftBlockData())) {
throw new IllegalArgumentException("BlockData does not match! Expected " + state.getBlockData().getAsString(false) + ", got " + getHandle().getBlockState(pos).createCraftBlockData().getAsString(false));
}
getHandle().getBlockEntity(pos).loadWithComponents(((org.bukkit.craftbukkit.block.CraftBlockEntityState<?>) state).getSnapshotNBT(), this.getHandle().registryAccess());
}
@Override
public void scheduleBlockUpdate(int x, int y, int z) {
BlockPos position = new BlockPos(x, y, z);
getHandle().scheduleTick(position, getHandle().getBlockState(position).getBlock(), 0);
}
@Override
public void scheduleFluidUpdate(int x, int y, int z) {
BlockPos position = new BlockPos(x, y, z);
getHandle().scheduleTick(position, getHandle().getFluidState(position).getType(), 0);
}
@Override
public World getWorld() {
// reading/writing the returned Minecraft world causes a deadlock.
// By implementing this, and covering it in warnings, we're assuming people won't be stupid, and
// if they are stupid, they'll figure it out pretty fast.
return getHandle().getMinecraftWorld().getWorld();
}
@Override
public int getCenterChunkX() {
return centerChunkX;
}
@Override
public int getCenterChunkZ() {
return centerChunkZ;
}
// Paper end - Add more LimitedRegion API
}