This commit is contained in:
2026-04-14 10:51:57 -03:00
parent 2568694ada
commit a758037f20
5 changed files with 21 additions and 4 deletions
+2 -2
View File
@@ -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));
+1
View File
@@ -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",
});
+1
View File
@@ -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",
});
+16 -2
View File
@@ -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) {
+1
View File
@@ -107,6 +107,7 @@ export interface BlockRegistry {
export interface ItemRegistry<T = unknown | undefined> {
texture_id: string | ((item: ItemStack<T>) => string);
block_id?: string;
tool_type?: string;
place?(dimension: Dimension, block: Block): void;