Tool
This commit is contained in:
@@ -138,7 +138,7 @@ export class Dimension extends Component {
|
||||
) as BlockData<T>;
|
||||
}
|
||||
|
||||
break_block(x: number, y: number, z: number) {
|
||||
break_block(x: number, y: number, z: number, drop_item: boolean = true) {
|
||||
const block_chunk_x = Math.floor(x / CHUNK_SIZE);
|
||||
const block_chunk_z = Math.floor(z / CHUNK_SIZE);
|
||||
const chunk = this.get_chunk(block_chunk_x, block_chunk_z);
|
||||
@@ -148,7 +148,7 @@ export class Dimension extends Component {
|
||||
|
||||
const block_info = EverythingRegistry.get_by_id<BlockRegistry>("blocks", this.get_block(x, y, z))!;
|
||||
|
||||
if (block_info.drop_table) {
|
||||
if (drop_item && block_info.drop_table) {
|
||||
const [player] = this.world.get_tag("player")!;
|
||||
const player_component = player.get(PlayerComponent)!;
|
||||
player_component.player_inventory.container.add_item(new ItemStack(block_info.drop_table));
|
||||
|
||||
@@ -2,4 +2,5 @@ import { EverythingRegistry, ItemRegistry } from "$/common/everything_registry.t
|
||||
|
||||
EverythingRegistry.register<ItemRegistry>("items", "bworld:axe", {
|
||||
texture_id: "bworld:axe",
|
||||
tool_type: "axe",
|
||||
});
|
||||
|
||||
@@ -2,4 +2,5 @@ import { EverythingRegistry, ItemRegistry } from "$/common/everything_registry.t
|
||||
|
||||
EverythingRegistry.register<ItemRegistry>("items", "bworld:wood_pickaxe", {
|
||||
texture_id: "bworld:wood_pickaxe",
|
||||
tool_type: "pickaxe",
|
||||
});
|
||||
|
||||
@@ -119,15 +119,25 @@ export class PlayerControlsSystem extends System {
|
||||
}
|
||||
|
||||
const block = world.dimension.get_looked_block(world.dimension, camera);
|
||||
const holding_item = player_component.player_inventory.container.get_item(
|
||||
player_component.player_inventory.hotbar_selected,
|
||||
);
|
||||
const holding_item_info = EverythingRegistry.get<ItemRegistry>("items", holding_item?.type_id ?? "");
|
||||
|
||||
if (block && player_component.screens.length === 0) {
|
||||
const block_info = EverythingRegistry.get_by_id<BlockRegistry>("blocks", block.block)!;
|
||||
if (player_component.breaking_block) {
|
||||
player_component.breaking_block = { x: block.x, y: block.y, z: block.z };
|
||||
player_component.break_progress_max = block_info.toughness ?? 9999;
|
||||
player_component.break_progress += delta;
|
||||
let multiplier = 1;
|
||||
if (holding_item_info?.tool_type === block_info.tool_to_break) {
|
||||
multiplier *= 2;
|
||||
}
|
||||
player_component.break_progress += delta * multiplier;
|
||||
if (player_component.break_progress >= player_component.break_progress_max) {
|
||||
world.dimension.break_block(block.x, block.y, block.z);
|
||||
const drop_item = !block_info.requires_tool ||
|
||||
holding_item_info?.tool_type === block_info.tool_to_break;
|
||||
world.dimension.break_block(block.x, block.y, block.z, drop_item);
|
||||
player_component.break_progress_max = 0;
|
||||
player_component.break_progress = 0;
|
||||
}
|
||||
@@ -166,6 +176,10 @@ export class PlayerControlsSystem extends System {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
player_component.breaking_block = undefined;
|
||||
player_component.break_progress_max = 0;
|
||||
player_component.break_progress = 0;
|
||||
}
|
||||
|
||||
if (player_component.screens.length === 0) {
|
||||
|
||||
Reference in New Issue
Block a user