diff --git a/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index fc17554f3..3aeebe8d2 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -8,7 +8,7 @@ import dev.latvian.mods.kubejs.block.callback.BlockStateRotateCallback; import dev.latvian.mods.kubejs.block.callback.CanBeReplacedCallback; import dev.latvian.mods.kubejs.block.callback.EntityFallenOnBlockCallback; -import dev.latvian.mods.kubejs.block.callback.EntitySteppedOnBlockCallback; +import dev.latvian.mods.kubejs.block.callback.EntityBlockCallback; import dev.latvian.mods.kubejs.block.callback.RandomTickCallback; import dev.latvian.mods.kubejs.block.drop.BlockDropSupplier; import dev.latvian.mods.kubejs.block.drop.BlockDrops; @@ -101,7 +101,8 @@ public abstract class BlockBuilder extends ModelledBuilderBase { public transient Consumer defaultStateModification; public transient Consumer placementStateModification; public transient Predicate canBeReplacedFunction; - public transient Consumer stepOnCallback; + public transient Consumer insideCallback; + public transient Consumer stepOnCallback; public transient Consumer fallOnCallback; public transient Consumer afterFallenOnCallback; public transient Consumer explodedCallback; @@ -683,11 +684,21 @@ public BlockBuilder canBeReplaced(Predicate callbackJS) { return this; } + @Info(""" + Set what happens when an entity is inside the block + This is called every tick for every entity inside the block, so be careful what you do here. + This will only be called if the entity's bounding box overlaps with the block's collision. + """) + public BlockBuilder entityInside(Consumer callbackJS) { + insideCallback = callbackJS; + return this; + } + @Info(""" Set what happens when an entity steps on the block This is called every tick for every entity standing on the block, so be careful what you do here. """) - public BlockBuilder steppedOn(Consumer callbackJS) { + public BlockBuilder steppedOn(Consumer callbackJS) { stepOnCallback = callbackJS; return this; } diff --git a/src/main/java/dev/latvian/mods/kubejs/block/callback/AfterEntityFallenOnBlockCallback.java b/src/main/java/dev/latvian/mods/kubejs/block/callback/AfterEntityFallenOnBlockCallback.java index 2a19225f6..5876dc66f 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/callback/AfterEntityFallenOnBlockCallback.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/callback/AfterEntityFallenOnBlockCallback.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.phys.Vec3; -public class AfterEntityFallenOnBlockCallback extends EntitySteppedOnBlockCallback { +public class AfterEntityFallenOnBlockCallback extends EntityBlockCallback { private boolean hasChangedVelocity; public AfterEntityFallenOnBlockCallback(BlockGetter blockGetter, Entity entity) { diff --git a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntitySteppedOnBlockCallback.java b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityBlockCallback.java similarity index 89% rename from src/main/java/dev/latvian/mods/kubejs/block/callback/EntitySteppedOnBlockCallback.java rename to src/main/java/dev/latvian/mods/kubejs/block/callback/EntityBlockCallback.java index c82e1b7d8..68d7ba935 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntitySteppedOnBlockCallback.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityBlockCallback.java @@ -7,13 +7,13 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -public class EntitySteppedOnBlockCallback { +public class EntityBlockCallback { protected final Level level; protected final Entity entity; protected final LevelBlock block; protected final BlockState state; - public EntitySteppedOnBlockCallback(Level level, Entity entity, BlockPos pos, BlockState state) { + public EntityBlockCallback(Level level, Entity entity, BlockPos pos, BlockState state) { this.level = level; this.entity = entity; this.block = level.kjs$getBlock(pos); diff --git a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityFallenOnBlockCallback.java b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityFallenOnBlockCallback.java index 8121108cd..a283a723a 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityFallenOnBlockCallback.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityFallenOnBlockCallback.java @@ -7,7 +7,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -public class EntityFallenOnBlockCallback extends EntitySteppedOnBlockCallback { +public class EntityFallenOnBlockCallback extends EntityBlockCallback { private final float fallHeight; public EntityFallenOnBlockCallback(Level level, Entity entity, BlockPos pos, BlockState state, float fallHeight) { diff --git a/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicKubeBlock.java b/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicKubeBlock.java index f8ed8e881..92f6d25dc 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicKubeBlock.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicKubeBlock.java @@ -11,7 +11,7 @@ import dev.latvian.mods.kubejs.block.callback.BlockStateRotateCallback; import dev.latvian.mods.kubejs.block.callback.CanBeReplacedCallback; import dev.latvian.mods.kubejs.block.callback.EntityFallenOnBlockCallback; -import dev.latvian.mods.kubejs.block.callback.EntitySteppedOnBlockCallback; +import dev.latvian.mods.kubejs.block.callback.EntityBlockCallback; import dev.latvian.mods.kubejs.block.callback.RandomTickCallback; import dev.latvian.mods.kubejs.block.entity.KubeBlockEntity; import dev.latvian.mods.kubejs.script.ScriptType; @@ -254,10 +254,20 @@ public Optional getPickupSound() { return Optional.empty(); } + @Override + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + if (blockBuilder.insideCallback != null) { + var callbackJS = new EntityBlockCallback(level, entity, pos, state); + safeCallback(level, blockBuilder.insideCallback, callbackJS, "Error while an entity was inside a custom block "); + } else { + super.entityInside(state, level, pos, entity); + } + } + @Override public void stepOn(Level level, BlockPos blockPos, BlockState blockState, Entity entity) { if (blockBuilder.stepOnCallback != null) { - var callbackJS = new EntitySteppedOnBlockCallback(level, entity, blockPos, blockState); + var callbackJS = new EntityBlockCallback(level, entity, blockPos, blockState); safeCallback(level, blockBuilder.stepOnCallback, callbackJS, "Error while an entity stepped on custom block "); } else { super.stepOn(level, blockPos, blockState, entity);