Skip to content

Commit

Permalink
Merge pull request #907 from Tcat2000/2001-pick-block
Browse files Browse the repository at this point in the history
Adds a callback to change/override the pick block result.
  • Loading branch information
LatvianModder authored Jan 21, 2025
2 parents d41cc13 + aa5a6eb commit 4f7c0eb
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,17 @@
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

@SuppressWarnings({"unused", "UnusedReturnValue"})
public abstract class BlockBuilder extends BuilderBase<Block> {
Expand Down Expand Up @@ -78,6 +83,7 @@ public abstract class BlockBuilder extends BuilderBase<Block> {
public transient float speedFactor = Float.NaN;
public transient float jumpFactor = Float.NaN;
public Consumer<RandomTickCallbackJS> randomTickCallback;
public Consumer<PickBlockCallbackJS> pickBlockCallback;
public Consumer<LootBuilder> lootTable;
public JsonObject blockstateJson;
public JsonObject modelJson;
Expand Down Expand Up @@ -764,6 +770,17 @@ public BlockBuilder blockEntity(Consumer<BlockEntityInfo> callback) {
return this;
}

/**
* Sets random tick callback for this black.
*
* @param pickBlockCallback A callback using a block container and a random.
*/
@Info("Sets pick block callback for this block.")
public BlockBuilder pickBlock(@Nullable Consumer<PickBlockCallbackJS> pickBlockCallback) {
this.pickBlockCallback = pickBlockCallback;
return this;
}

public Block.Properties createProperties() {
// FIXME: Implement all the other ex-Material properties
//var properties = BlockBehaviour.Properties.of();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package dev.latvian.mods.kubejs.block;

import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.state.BlockState;

public class PickBlockCallbackJS {
public BlockGetter block;
public BlockPos pos;
public BlockState state;
public Item item;

public PickBlockCallbackJS(BlockGetter blockGetter, BlockPos blockPos, BlockState blockState) {
this.block = blockGetter;
this.pos = blockPos;
this.state = blockState;
}

public BlockState getState() {
return this.state;
}
public BlockPos getBlockPos() {
return this.pos;
}
public BlockGetter getBlockGetter() {
return this.block;
}
public void setPickBlockItem(String item) {
this.item = BuiltInRegistries.ITEM.get(new ResourceLocation(item));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dev.latvian.mods.kubejs.block.BlockBuilder;
import dev.latvian.mods.kubejs.block.BlockRightClickedEventJS;
import dev.latvian.mods.kubejs.block.KubeJSBlockProperties;
import dev.latvian.mods.kubejs.block.PickBlockCallbackJS;
import dev.latvian.mods.kubejs.block.RandomTickCallbackJS;
import dev.latvian.mods.kubejs.block.callbacks.AfterEntityFallenOnBlockCallbackJS;
import dev.latvian.mods.kubejs.block.callbacks.BlockExplodedCallbackJS;
Expand Down Expand Up @@ -31,6 +32,7 @@
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Explosion;
Expand All @@ -57,6 +59,8 @@
import org.jetbrains.annotations.Nullable;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

Expand Down Expand Up @@ -370,4 +374,14 @@ public void setPlacedBy(Level level, BlockPos blockPos, BlockState blockState, @
e.placerId = livingEntity.getUUID();
}
}

@Override
public ItemStack getCloneItemStack(BlockGetter blockGetter, BlockPos blockPos, BlockState blockState) {
if(blockBuilder.pickBlockCallback != null) {
var callback = new PickBlockCallbackJS(blockGetter, blockPos, blockState);
safeCallback(blockBuilder.pickBlockCallback, callback, "Error while getting pick block item ");
if(callback.item != null) return new ItemStack(callback.item);
}
return super.getCloneItemStack(blockGetter, blockPos, blockState);
}
}

0 comments on commit 4f7c0eb

Please sign in to comment.