From caeb4469b137e398793427955e93c1f3435bf2b2 Mon Sep 17 00:00:00 2001 From: NotEvil Date: Tue, 14 Apr 2026 02:01:41 +0200 Subject: [PATCH] feat(D-01): implement LockableComponent with configurable lock resistance --- .../bondage/component/LockableComponent.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tiedup/remake/v2/bondage/component/LockableComponent.java b/src/main/java/com/tiedup/remake/v2/bondage/component/LockableComponent.java index 4c383d3..6c8131c 100644 --- a/src/main/java/com/tiedup/remake/v2/bondage/component/LockableComponent.java +++ b/src/main/java/com/tiedup/remake/v2/bondage/component/LockableComponent.java @@ -1,12 +1,42 @@ package com.tiedup.remake.v2.bondage.component; import com.google.gson.JsonObject; +import com.tiedup.remake.items.base.ILockable; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +/** + * Component: lockable behavior for data-driven items. + * Delegates lock checks to ILockable on the item. + * + * JSON config: + * {@code "lockable": true} or {@code "lockable": {"lock_resistance": 300}} + */ public class LockableComponent implements IItemComponent { - private LockableComponent() {} + private final int lockResistance; + + private LockableComponent(int lockResistance) { + this.lockResistance = lockResistance; + } public static IItemComponent fromJson(JsonObject config) { - return new LockableComponent(); + int resistance = 250; // default + if (config != null && config.has("lock_resistance")) { + resistance = config.get("lock_resistance").getAsInt(); + } + return new LockableComponent(resistance); + } + + public int getLockResistance() { + return lockResistance; + } + + @Override + public boolean blocksUnequip(ItemStack stack, LivingEntity entity) { + if (stack.getItem() instanceof ILockable lockable) { + return lockable.isLocked(stack); + } + return false; } }