From 33d654dc8eb5ad75a00926ecc0b2d9cb924f0152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Fri, 29 Sep 2023 23:05:05 -0600 Subject: [PATCH] impl fabric --- .../script/builders/BlockFunctionBuilder.java | 4 ++-- .../terra/chunk/WorldChunkMixin.java | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java index 7d3805f3d..7069b0b69 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java @@ -32,7 +32,7 @@ public class BlockFunctionBuilder implements FunctionBuilder { if(argumentList.size() < 4) throw new ParseException("Expected data", position); Returnable overwrite = new BooleanConstant(true, position); if(argumentList.size() >= 5) overwrite = (Returnable) argumentList.get(4); - Returnable physics = new BooleanConstant(true, position); + Returnable physics = new BooleanConstant(false, position); if(argumentList.size() == 6) physics = (Returnable) argumentList.get(5); if(argumentList.get(3) instanceof StringConstant) { return new BlockFunction.Constant((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), @@ -40,7 +40,7 @@ public class BlockFunctionBuilder implements FunctionBuilder { overwrite, physics, platform, position); } return new BlockFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), booleanReturnable, + (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), overwrite, physics, platform, position); } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/WorldChunkMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/WorldChunkMixin.java index 3fb01104d..2cf8123ea 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/WorldChunkMixin.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/WorldChunkMixin.java @@ -17,8 +17,11 @@ package com.dfsek.terra.mod.mixin.implementations.terra.chunk; +import net.minecraft.block.Block; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.Chunk.TickSchedulers; import net.minecraft.world.chunk.WorldChunk; +import net.minecraft.world.tick.OrderedTick; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Final; @@ -47,8 +50,21 @@ public abstract class WorldChunkMixin { @Nullable public abstract net.minecraft.block.BlockState setBlockState(BlockPos pos, net.minecraft.block.BlockState state, boolean moved); + @Shadow + public abstract TickSchedulers getTickSchedulers(); + public void terra$setBlock(int x, int y, int z, BlockState data, boolean physics) { - setBlockState(new BlockPos(x, y, z), (net.minecraft.block.BlockState) data, false); + BlockPos blockPos = new BlockPos(x, y, z); + setBlockState(blockPos, (net.minecraft.block.BlockState) data, false); + if (physics) { + net.minecraft.block.BlockState state = ((net.minecraft.block.BlockState) data); + if (state.isLiquid()) { + world.getFluidTickScheduler().scheduleTick(OrderedTick.create(state.getFluidState().getFluid(), blockPos)); + } else { + world.getBlockTickScheduler().scheduleTick(OrderedTick.create(state.getBlock(), blockPos)); + } + + } } public void terra$setBlock(int x, int y, int z, @NotNull BlockState blockState) {