- DataDrivenItemDefinition: add canAttachPadlock boolean (default true) - DataDrivenItemParser: parse "can_attach_padlock" from JSON - DataDrivenBondageItem: add static canAttachPadlockTo(stack) method - AnvilEventHandler: check V2 definition before allowing padlock attach
70 lines
2.3 KiB
Java
70 lines
2.3 KiB
Java
package com.tiedup.remake.events.system;
|
|
|
|
import com.tiedup.remake.core.TiedUpMod;
|
|
import com.tiedup.remake.items.ItemPadlock;
|
|
import com.tiedup.remake.items.base.ILockable;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraftforge.event.AnvilUpdateEvent;
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
import net.minecraftforge.fml.common.Mod;
|
|
|
|
/**
|
|
* Event handler for anvil-based padlock attachment.
|
|
*
|
|
*
|
|
* Allows combining a bondage item (ILockable) with a Padlock in the anvil
|
|
* to make the item "lockable". A lockable item can then be locked with a Key.
|
|
*
|
|
* Flow:
|
|
* - Place ILockable item in left slot
|
|
* - Place Padlock in right slot
|
|
* - Output: Same item with lockable=true
|
|
* - Cost: 1 XP level, consumes 1 padlock
|
|
*/
|
|
@Mod.EventBusSubscriber(modid = TiedUpMod.MOD_ID)
|
|
public class AnvilEventHandler {
|
|
|
|
@SubscribeEvent
|
|
public static void onAnvilUpdate(AnvilUpdateEvent event) {
|
|
ItemStack left = event.getLeft(); // Bondage item
|
|
ItemStack right = event.getRight(); // Padlock
|
|
|
|
// Skip if either slot is empty
|
|
if (left.isEmpty() || right.isEmpty()) return;
|
|
|
|
// Right slot must be a Padlock
|
|
if (!(right.getItem() instanceof ItemPadlock)) return;
|
|
|
|
// Left slot must be ILockable
|
|
if (!(left.getItem() instanceof ILockable lockable)) return;
|
|
|
|
// Check if item can have a padlock attached (tape, slime, vine, web cannot)
|
|
if (!lockable.canAttachPadlock()) {
|
|
return; // Item type cannot have padlock (V1)
|
|
}
|
|
// V2 data-driven items: check definition's can_attach_padlock field
|
|
if (!com.tiedup.remake.v2.bondage.datadriven.DataDrivenBondageItem.canAttachPadlockTo(left)) {
|
|
return;
|
|
}
|
|
|
|
// Item must not already have a padlock attached
|
|
if (lockable.isLockable(left)) {
|
|
return; // Already has padlock
|
|
}
|
|
|
|
// Create result: copy of left with lockable=true
|
|
ItemStack result = left.copy();
|
|
lockable.setLockable(result, true);
|
|
|
|
// Set anvil output
|
|
event.setOutput(result);
|
|
event.setCost(1); // 1 XP level cost
|
|
event.setMaterialCost(1); // Consume 1 padlock
|
|
|
|
TiedUpMod.LOGGER.debug(
|
|
"[AnvilEventHandler] Padlock attachment preview: {} + Padlock",
|
|
left.getDisplayName().getString()
|
|
);
|
|
}
|
|
}
|