diff --git a/src/main/java/carpet/script/CarpetExpression.java b/src/main/java/carpet/script/CarpetExpression.java index 5a04b640..105a7d1d 100644 --- a/src/main/java/carpet/script/CarpetExpression.java +++ b/src/main/java/carpet/script/CarpetExpression.java @@ -949,16 +949,26 @@ public class CarpetExpression this.expr.addLazyFunction("set_biome", -1, (c, t, lv) -> { CarpetContext cc = (CarpetContext)c; BlockValue.LocatorResult locator = BlockValue.fromParams(cc, lv, 0); + if (lv.size() == locator.offset) + throw new InternalExpressionException("set_biome needs a biome name as an argument"); String biomeName = lv.get(locator.offset+0).evalValue(c).getString(); Biome biome = Registry.BIOME.get(new Identifier(biomeName)); + if (biome == null) + throw new InternalExpressionException("Unknown biome: "+biomeName); byte biomeId = (byte) (Registry.BIOME.getRawId(biome) & 255); ServerWorld world = cc.s.getWorld(); BlockPos pos = locator.block.getPos(); Chunk chunk = world.getChunk(pos); chunk.getBiomeArray()[(pos.getX() & 15) | (pos.getZ() & 15) << 4] = biome; chunk.setShouldSave(true); - //world.method_14178().markForUpdate(pos); - CarpetServer.scriptServer.markChunkForUpdate(world, pos); + for (int i = 0; i<16; i++) + { + BlockPos section = new BlockPos((pos.getX()>>4 <<4)+8, 16*i, (pos.getZ()>>4 <<4)+8); + world.method_14178().markForUpdate(section); + world.method_14178().markForUpdate(section.east()); + world.method_14178().markForUpdate(section.west()); + world.method_14178().markForUpdate(section.north()); + } return LazyValue.NULL; }); diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java index 8c96ea7d..81767381 100644 --- a/src/main/java/carpet/script/CarpetScriptServer.java +++ b/src/main/java/carpet/script/CarpetScriptServer.java @@ -38,7 +38,6 @@ public class CarpetScriptServer public boolean stopAll; Set holyMoly; public CarpetEventServer events; - private Set> modifiedChunks = new HashSet<>(); public static List bundledModuleData = new ArrayList(){{ add(new CameraPathModule()); @@ -332,23 +331,8 @@ public class CarpetScriptServer return true; } - void markChunkForUpdate(ServerWorld world, BlockPos pos) - { - modifiedChunks.add(Pair.of(world, new ChunkPos(pos))); - } - public void tick() { - for (Pair tuple : modifiedChunks) - { - //ChunkDataS2CPacket - ServerWorld world = tuple.getLeft(); - ChunkPos chpos = tuple.getRight(); - Chunk chunk = world.getChunk(chpos.x, chpos.z); - //..... - - } - modifiedChunks.clear(); events.tick(); } }