API para Disminuir Durabilidad al Romper Bloques en Minecraft Bedrock
Bienvenido a la documentación de nuestra API de Durabilidad. Esta API está diseñada para disminuir automáticamente la durabilidad de una herramienta cada vez que el jugador rompe un bloque, proporcionando una solución eficiente y personalizable para cualquier addon de Minecraft Bedrock.
¿Qué hace esta API?
Esta API reduce la durabilidad de una herramienta o ítem cuando el jugador rompe un bloque en el mundo de Minecraft Bedrock. Permite un control detallado sobre cuándo y cómo se aplica el daño a los ítems, asegurando que se ajusten perfectamente a la jugabilidad y mecánicas personalizadas que deseas implementar.
Como Usar la API
Debes tener en cuenta que, para que la API funcione correctamente, primero deberás haber configurado tu addon. Puedes visitar la guía Configurar API en Addon para obtener más detalles sobre cómo hacerlo.
Además, en la parte del código if (durabilityComp && item.typeId.startsWith("vha:"))
, deberás reemplazar "vha"
por el identificador de tu propio addon. Este ejemplo utiliza "vha"
, pero asegúrate de usar el identificador que hayas definido.
Es importante mencionar que esta API solo reducirá la durabilidad si el ítem tiene asignada una propiedad de durabilidad. También se tiene en cuenta el encantamiento de Unbreaking, para ajustar la pérdida de durabilidad según las reglas de este encantamiento.
import { system, world } from "@minecraft/server";
function handleItemDurability(player, item) {
if (player.getGameMode() === 'survival') {
system.run(() => {
const slot = player.getComponent("inventory").container.getSlot(player.selectedSlotIndex);
const durabilityComp = item.getComponent("durability");
const unbreakingLevel = item.getComponent("minecraft:enchantable")?.getEnchantment("unbreaking")?.level;
if (durabilityComp && item.typeId.startsWith("vha:")) {
let shouldDamage = true;
if (unbreakingLevel > 0) {
const chance = 1 / (unbreakingLevel + 1);
shouldDamage = Math.random() < chance;
}
if (shouldDamage) {
durabilityComp.damage += 1;
if (durabilityComp.damage >= durabilityComp.maxDurability) {
slot.setItem(null);
player.playSound("random.break", { pitch: 1, volume: 1 });
} else {
item.getComponent("durability").damage = durabilityComp.damage;
slot.setItem(item);
}
}
}
});
}
}
world.afterEvents.playerBreakBlock.subscribe(arg => {
const { player } = arg;
const item = player.getComponent("inventory").container.getSlot(player.selectedSlotIndex)?.getItem();
if (item) {
handleItemDurability(player, item);
}
});