From 5d82657f4433fccb4760c5bb46659b275a949ded Mon Sep 17 00:00:00 2001 From: Jishuna Date: Fri, 5 Dec 2025 08:23:43 -0500 Subject: [PATCH 1/3] Add override for Block.entityInside --- .../dev/latvian/mods/kubejs/block/BlockBuilder.java | 12 ++++++++++++ .../block/callback/EntityInsideBlockCallback.java | 13 +++++++++++++ .../mods/kubejs/block/custom/BasicKubeBlock.java | 11 +++++++++++ 3 files changed, 36 insertions(+) create mode 100644 src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java 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..27d7fb1f8 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -8,6 +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.EntityInsideBlockCallback; import dev.latvian.mods.kubejs.block.callback.EntitySteppedOnBlockCallback; import dev.latvian.mods.kubejs.block.callback.RandomTickCallback; import dev.latvian.mods.kubejs.block.drop.BlockDropSupplier; @@ -101,6 +102,7 @@ public abstract class BlockBuilder extends ModelledBuilderBase { public transient Consumer defaultStateModification; public transient Consumer placementStateModification; public transient Predicate canBeReplacedFunction; + public transient Consumer insideCallback; public transient Consumer stepOnCallback; public transient Consumer fallOnCallback; public transient Consumer afterFallenOnCallback; @@ -683,6 +685,16 @@ 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 never be called if the block is a solid full cube. + """) + 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. diff --git a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java new file mode 100644 index 000000000..80c69646e --- /dev/null +++ b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java @@ -0,0 +1,13 @@ +package dev.latvian.mods.kubejs.block.callback; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public class EntityInsideBlockCallback extends EntitySteppedOnBlockCallback { + + public EntityInsideBlockCallback(Level level, Entity entity, BlockPos pos, BlockState state) { + super(level, entity, pos, state); + } +} 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..147320c65 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,6 +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.EntityInsideBlockCallback; import dev.latvian.mods.kubejs.block.callback.EntitySteppedOnBlockCallback; import dev.latvian.mods.kubejs.block.callback.RandomTickCallback; import dev.latvian.mods.kubejs.block.entity.KubeBlockEntity; @@ -254,6 +255,16 @@ 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 EntityInsideBlockCallback(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) { From d9cd4711c3d337f3b8844fa711fd63ab3b1e9a61 Mon Sep 17 00:00:00 2001 From: Jishuna Date: Sat, 6 Dec 2025 09:29:51 -0500 Subject: [PATCH 2/3] Rename class and clarify info --- .../java/dev/latvian/mods/kubejs/block/BlockBuilder.java | 8 ++++---- .../block/callback/AfterEntityFallenOnBlockCallback.java | 2 +- ...eppedOnBlockCallback.java => EntityBlockCallback.java} | 4 ++-- .../block/callback/EntityFallenOnBlockCallback.java | 2 +- .../kubejs/block/callback/EntityInsideBlockCallback.java | 2 +- .../latvian/mods/kubejs/block/custom/BasicKubeBlock.java | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) rename src/main/java/dev/latvian/mods/kubejs/block/callback/{EntitySteppedOnBlockCallback.java => EntityBlockCallback.java} (89%) 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 27d7fb1f8..919ccf4f9 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -9,7 +9,7 @@ import dev.latvian.mods.kubejs.block.callback.CanBeReplacedCallback; import dev.latvian.mods.kubejs.block.callback.EntityFallenOnBlockCallback; import dev.latvian.mods.kubejs.block.callback.EntityInsideBlockCallback; -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; @@ -103,7 +103,7 @@ public abstract class BlockBuilder extends ModelledBuilderBase { public transient Consumer placementStateModification; public transient Predicate canBeReplacedFunction; public transient Consumer insideCallback; - public transient Consumer stepOnCallback; + public transient Consumer stepOnCallback; public transient Consumer fallOnCallback; public transient Consumer afterFallenOnCallback; public transient Consumer explodedCallback; @@ -688,7 +688,7 @@ public BlockBuilder canBeReplaced(Predicate callbackJS) { @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 never be called if the block is a solid full cube. + This will only be called if the entity's bounding box overlaps with the block's collision. """) public BlockBuilder entityInside(Consumer callbackJS) { insideCallback = callbackJS; @@ -699,7 +699,7 @@ public BlockBuilder entityInside(Consumer callbackJS) 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/callback/EntityInsideBlockCallback.java b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java index 80c69646e..6223fb3b8 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java @@ -5,7 +5,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -public class EntityInsideBlockCallback extends EntitySteppedOnBlockCallback { +public class EntityInsideBlockCallback extends EntityBlockCallback { public EntityInsideBlockCallback(Level level, Entity entity, BlockPos pos, BlockState state) { super(level, entity, pos, state); 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 147320c65..5b7735453 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 @@ -12,7 +12,7 @@ import dev.latvian.mods.kubejs.block.callback.CanBeReplacedCallback; import dev.latvian.mods.kubejs.block.callback.EntityFallenOnBlockCallback; import dev.latvian.mods.kubejs.block.callback.EntityInsideBlockCallback; -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; @@ -268,7 +268,7 @@ protected void entityInside(BlockState state, Level level, BlockPos 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); From c74c9fc2596986096433ff55bf65861fca9fc538 Mon Sep 17 00:00:00 2001 From: Jishuna Date: Sun, 7 Dec 2025 08:32:38 -0500 Subject: [PATCH 3/3] Remove silly redundant class --- .../dev/latvian/mods/kubejs/block/BlockBuilder.java | 5 ++--- .../block/callback/EntityInsideBlockCallback.java | 13 ------------- .../mods/kubejs/block/custom/BasicKubeBlock.java | 3 +-- 3 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java 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 919ccf4f9..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,6 @@ 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.EntityInsideBlockCallback; import dev.latvian.mods.kubejs.block.callback.EntityBlockCallback; import dev.latvian.mods.kubejs.block.callback.RandomTickCallback; import dev.latvian.mods.kubejs.block.drop.BlockDropSupplier; @@ -102,7 +101,7 @@ public abstract class BlockBuilder extends ModelledBuilderBase { public transient Consumer defaultStateModification; public transient Consumer placementStateModification; public transient Predicate canBeReplacedFunction; - public transient Consumer insideCallback; + public transient Consumer insideCallback; public transient Consumer stepOnCallback; public transient Consumer fallOnCallback; public transient Consumer afterFallenOnCallback; @@ -690,7 +689,7 @@ public BlockBuilder canBeReplaced(Predicate callbackJS) { 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) { + public BlockBuilder entityInside(Consumer callbackJS) { insideCallback = callbackJS; return this; } diff --git a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java b/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java deleted file mode 100644 index 6223fb3b8..000000000 --- a/src/main/java/dev/latvian/mods/kubejs/block/callback/EntityInsideBlockCallback.java +++ /dev/null @@ -1,13 +0,0 @@ -package dev.latvian.mods.kubejs.block.callback; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; - -public class EntityInsideBlockCallback extends EntityBlockCallback { - - public EntityInsideBlockCallback(Level level, Entity entity, BlockPos pos, BlockState state) { - super(level, entity, pos, state); - } -} 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 5b7735453..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,6 @@ 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.EntityInsideBlockCallback; import dev.latvian.mods.kubejs.block.callback.EntityBlockCallback; import dev.latvian.mods.kubejs.block.callback.RandomTickCallback; import dev.latvian.mods.kubejs.block.entity.KubeBlockEntity; @@ -258,7 +257,7 @@ public Optional getPickupSound() { @Override protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { if (blockBuilder.insideCallback != null) { - var callbackJS = new EntityInsideBlockCallback(level, entity, pos, state); + 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);