import crafttweaker.api.events.CTEventManager; import crafttweaker.api.event.AnvilUpdateEvent; import crafttweaker.api.item.IItemStack; val FabricSet = [ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] as IItemStack[]; val FabricIngredient = ; val WoolSet = [ , , , ] as IItemStack[]; val WoolIngredient = ; val HoglinSet = [ , , , ] as IItemStack[]; val HoglinIngredient = ; val ZincPlateSet = [ , , , , , , , , , , , , , , , , , , , ] as IItemStack[]; val ZincPlateIngredient = ; val CopperPlateSet = [ , , , ] as IItemStack[]; val CopperPlateIngredient = ; val LeavesSet = [ , , , ] as IItemStack[]; val LeavesIngredient = ; val SandSet = [ , , , ] as IItemStack[]; val SandIngredient = ; val SnowSet = [ , , , ] as IItemStack[]; val SnowIngredient = ; val RubberSet = [ , , , , , , , , , , , , , , ] as IItemStack[]; val RubberIngredient = ; val LeadSet = [ , , , ] as IItemStack[]; val LeadIngredient = ; val GasMaskSet = [ , , , , , , , , , , ] as IItemStack[]; val GasMaskIngredient = ; val ExoskeletonSet = [ , , ] as IItemStack[]; val ExoskeletonIngredient = ; val SteelPlateSet = [ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] as IItemStack[]; val SteelPlateIngredient = ; val ResistantFabricSet = [ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] as IItemStack[]; val ResistantFabricIngredient = ; val PolishedQuartzSet = [ , , , ] as IItemStack[]; val PolishedQuartzIngredient = ; val NetheriteSet = [ , , , , , , , ] as IItemStack[]; val NetheriteIngredient = ; val DisabledNetheriteIngredient = ; val SteelIngotSet = [ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] as IItemStack[]; val SteelIngotIngredient = ; val SteelNuggetSet = [ , , , , , , , , , , ] as IItemStack[]; val SteelNuggetIngredient = ; val CarbonSteelSet = [ , , , , , , , , , , ] as IItemStack[]; val CarbonSteelIngredient = ; val AllEquipments = [ FabricSet, HoglinSet, RubberSet, ResistantFabricSet, PolishedQuartzSet, NetheriteSet, SteelIngotSet, SteelNuggetSet, CarbonSteelSet, GasMaskSet ] as IItemStack[][]; val TagEquipments = [ WoolSet, LeavesSet, SandSet, SnowSet, ZincPlateSet, CopperPlateSet, ExoskeletonSet, LeadSet, SteelPlateSet ]; val AllIngredients = [ FabricIngredient, HoglinIngredient, RubberIngredient, ResistantFabricIngredient, PolishedQuartzIngredient, NetheriteIngredient, SteelIngotIngredient, SteelNuggetIngredient, CarbonSteelIngredient, GasMaskIngredient ] as IItemStack[]; val TagIngredients = [ WoolIngredient, LeavesIngredient, SandIngredient, SnowIngredient, ZincPlateIngredient, CopperPlateIngredient, ExoskeletonIngredient, LeadIngredient, SteelPlateIngredient ]; val DisabledEquipments = [ NetheriteSet ] as IItemStack[][]; val DisabledIngredients = [ DisabledNetheriteIngredient ] as IItemStack[]; for i, Set in AllEquipments { for Item in Set { CTEventManager.register((event) => { if Item.anyDamage().matches(event.left) { if AllIngredients[i].matches(event.right) { event.levelCost = 1; var damagePercent = math.Functions.ceil((event.left.damage as float / event.left.maxDamage as float) as float / 0.25); var repairPercentage = (event.left.maxDamage / 4); event.materialCost = damagePercent as int; if (event.left.damage == 0 || event.right.amount == 0) { event.cancel(); } if (event.materialCost > event.right.amount) { event.materialCost = event.right.amount; } if (event.left.damage < repairPercentage) { event.output = event.left.withDamage(0); return; } var repairDamage = event.left.damage - (event.materialCost * repairPercentage); if (repairDamage < 0) { event.output = event.left.withDamage(0); return; } event.output = event.left.withDamage(repairDamage); } } }); } } for i, Set in TagEquipments { for Item in Set { CTEventManager.register((event) => { if Item.anyDamage().matches(event.left) { if TagIngredients[i].matches(event.right) { event.levelCost = 1; var damagePercent = math.Functions.ceil((event.left.damage as float / event.left.maxDamage as float) as float / 0.25); var repairPercentage = (event.left.maxDamage / 4); event.materialCost = damagePercent as int; if (event.left.damage == 0 || event.right.amount == 0) { event.cancel(); } if (event.materialCost > event.right.amount) { event.materialCost = event.right.amount; } if (event.left.damage < repairPercentage) { event.output = event.left.withDamage(0); return; } var repairDamage = event.left.damage - (event.materialCost * repairPercentage); if (repairDamage < 0) { event.output = event.left.withDamage(0); return; } event.output = event.left.withDamage(repairDamage); } } }); } } for i, Set in DisabledEquipments { for Item in Set { CTEventManager.register((event) => { if Item.anyDamage().matches(event.left) { if DisabledIngredients[i].matches(event.right) { event.cancel(); } } }); } }