Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
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
18 changes: 15 additions & 3 deletions src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
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.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;
import dev.latvian.mods.kubejs.block.drop.BlockDrops;
Expand Down Expand Up @@ -101,7 +102,8 @@ 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<EntitySteppedOnBlockCallback> stepOnCallback;
public transient Consumer<EntityInsideBlockCallback> insideCallback;
public transient Consumer<EntityBlockCallback> stepOnCallback;
public transient Consumer<EntityFallenOnBlockCallback> fallOnCallback;
public transient Consumer<AfterEntityFallenOnBlockCallback> afterFallenOnCallback;
public transient Consumer<BlockExplodedCallback> explodedCallback;
Expand Down Expand Up @@ -683,11 +685,21 @@ 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 only be called if the entity's bounding box overlaps with the block's collision.
""")
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.
""")
public BlockBuilder steppedOn(Consumer<EntitySteppedOnBlockCallback> callbackJS) {
public BlockBuilder steppedOn(Consumer<EntityBlockCallback> callbackJS) {
stepOnCallback = callbackJS;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
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 EntityBlockCallback {

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,7 +11,8 @@
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.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;
import dev.latvian.mods.kubejs.script.ScriptType;
Expand Down Expand Up @@ -254,10 +255,20 @@ 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) {
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);
Expand Down