Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -101,6 +102,7 @@ public abstract class BlockBuilder extends ModelledBuilderBase<Block> {
public transient Consumer<BlockStateModifyCallback> defaultStateModification;
public transient Consumer<BlockStateModifyPlacementCallback> placementStateModification;
public transient Predicate<CanBeReplacedCallback> canBeReplacedFunction;
public transient Consumer<EntityInsideBlockCallback> insideCallback;
public transient Consumer<EntitySteppedOnBlockCallback> stepOnCallback;
public transient Consumer<EntityFallenOnBlockCallback> fallOnCallback;
public transient Consumer<AfterEntityFallenOnBlockCallback> afterFallenOnCallback;
Expand Down Expand Up @@ -683,6 +685,16 @@ public BlockBuilder canBeReplaced(Predicate<CanBeReplacedCallback> 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<EntityInsideBlockCallback> 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.
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {

This comment was marked as resolved.

This comment was marked as resolved.


public EntityInsideBlockCallback(Level level, Entity entity, BlockPos pos, BlockState state) {
super(level, entity, pos, state);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -254,6 +255,16 @@ public Optional<SoundEvent> 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) {
Expand Down