129 lines
5.8 KiB
JavaScript
129 lines
5.8 KiB
JavaScript
const $ItemRecipeCapability = Java.loadClass("com.lowdragmc.mbd2.common.capability.recipe.ItemRecipeCapability")
|
|
const $MeatHookBlockEntity = Java.loadClass("com.lance5057.butchercraft.workstations.hook.MeatHookBlockEntity")
|
|
const $ButcherBlockBlockEntity = Java.loadClass("com.lance5057.butchercraft.workstations.butcherblock.ButcherBlockBlockEntity")
|
|
|
|
function cleanString(str) {
|
|
return String(str)
|
|
.trim() // 移除空白
|
|
.replace(/^["']+/, '') // 移除开头的引号和单引号
|
|
.replace(/["']+$/, '') // 移除结尾的引号和单引号
|
|
.replace(/[^\w:]+$/, ''); // 移除末尾的任何非单词字符(除了冒号)
|
|
}
|
|
|
|
let carcass_data = [
|
|
["butchercraft:pig_carcass", 5],
|
|
["butchercraft:cow_carcass", 6],
|
|
["butchercraft:sheep_carcass", 4],
|
|
["butchercraft:goat_carcass", 4],
|
|
["butchercraft:white_rabbit_carcass", 4],
|
|
["butchercraft:black_rabbit_carcass", 4],
|
|
["butchercraft:brown_rabbit_carcass", 4],
|
|
["butchercraft:splotched_rabbit_carcass", 4],
|
|
["butchercraft:gold_rabbit_carcass", 4],
|
|
["butchercraft:salt_rabbit_carcass", 4],
|
|
["butchercraft:cow_head_item", 0],
|
|
["butchercraft:sheep_head_item", 0],
|
|
["butchercraft:pig_head_item", 0],
|
|
["butchercraft:goat_head_item", 0],
|
|
["butchercraft:chicken_head_item", 0],
|
|
["butchercraft:rabbit_brown_head_item", 0],
|
|
["butchercraft:rabbit_gold_head_item", 0],
|
|
["butchercraft:rabbit_salt_head_item", 0],
|
|
["butchercraft:rabbit_splotched_head_item", 0],
|
|
["butchercraft:rabbit_white_head_item", 0],
|
|
["butchercraft:rabbit_black_head_item", 0],
|
|
["butchercraft:chicken_carcass", 0]
|
|
]
|
|
MBDMachineEvents.onTick("createdelight:butchery_room", e => {
|
|
const {machine} = e.event
|
|
if (machine.level.time % 20 != 0) return
|
|
let pos = machine.pos
|
|
let facing = machine.getFrontFacing().get()
|
|
/**@type {Internal.MeatHookBlockEntity}*/
|
|
let meatHook = machine.level.getBlockEntity(pos.relative(facing.opposite).above().above().above().relative(DirectionUtil.rotation270Direction(facing)))
|
|
/**@type {Internal.ButcherBlockBlockEntity} */
|
|
let butcherBlock = machine.level.getBlockEntity(pos.relative(facing.opposite).above())
|
|
if(machine.machineStateName != "working") {
|
|
if (meatHook.insertedItem != [] || butcherBlock.insertedItem != []) {
|
|
machine.level.playSound(null, machine.pos.x, machine.pos.y, machine.pos.z, "minecraft:block.slime_block.fall", "blocks", 1, 1)
|
|
meatHook.finishRecipe()
|
|
butcherBlock.finishRecipe()
|
|
}
|
|
}
|
|
if(machine.machineStateName == "working") {
|
|
/**@type {String} */
|
|
let itemIds
|
|
machine.recipeLogic.getLastRecipe().getInputContents($ItemRecipeCapability.CAP).forEach(con => {
|
|
itemIds = cleanString(con.getContent().toJson().get("ingredient").get("item"))
|
|
})
|
|
let maxStage = carcass_data[carcass_data.findIndex(data => data[0] == itemIds)][1]
|
|
if(Item.of(itemIds).hasTag("butchercraft:big_carcass")) {
|
|
if(meatHook.insertedItem == []){
|
|
meatHook.insertItem(Item.of(itemIds))
|
|
meatHook.stage = 0
|
|
}
|
|
if(meatHook.insertedItem.id != itemIds || (meatHook.stage == maxStage && meatHook.insertedItem.id == itemIds)){
|
|
meatHook.finishRecipe()
|
|
meatHook.insertItem(Item.of(itemIds))
|
|
meatHook.stage = 0
|
|
}
|
|
machine.level.playSound(null, machine.pos.x, machine.pos.y, machine.pos.z, "minecraft:block.slime_block.fall", "blocks", 1, 1)
|
|
if (machine.level.time % 40 != 0) return
|
|
if (meatHook.stage <= maxStage - 1) {
|
|
meatHook.insertItem(Item.of(itemIds))
|
|
meatHook.stage++
|
|
}
|
|
}else{
|
|
if(butcherBlock.insertedItem == []){
|
|
butcherBlock.insertItem(Item.of(itemIds))
|
|
butcherBlock.stage = 0
|
|
}
|
|
if(butcherBlock.insertedItem.id != itemIds || (butcherBlock.stage == maxStage && butcherBlock.insertedItem.id == itemIds)){
|
|
butcherBlock.finishRecipe()
|
|
butcherBlock.insertItem(Item.of(itemIds))
|
|
butcherBlock.stage = 0
|
|
}
|
|
machine.level.playSound(null, machine.pos.x, machine.pos.y, machine.pos.z, "minecraft:block.slime_block.fall", "blocks", 1, 1)
|
|
if (machine.level.time % 40 != 0) return
|
|
if (butcherBlock.stage < maxStage - 1) {
|
|
butcherBlock.insertItem(Item.of(itemIds))
|
|
butcherBlock.stage++
|
|
}
|
|
if(itemIds == "butchercraft:chicken_carcass" && butcherBlock.stage < 5) {
|
|
butcherBlock.insertItem(Item.of(itemIds))
|
|
butcherBlock.stage = butcherBlock.stage + 4
|
|
}
|
|
}
|
|
}
|
|
})
|
|
MBDMachineEvents.onRemoved("createdelight:butchery_room", e => {
|
|
const {machine} = e.event
|
|
let pos = machine.pos
|
|
let facing = machine.getFrontFacing().get()
|
|
/**@type {Internal.MeatHookBlockEntity}*/
|
|
let meatHook = machine.level.getBlockEntity(pos.relative(facing.opposite).above().above().above().relative(DirectionUtil.rotation270Direction(facing)))
|
|
/**@type {Internal.ButcherBlockBlockEntity} */
|
|
let butcherBlock = machine.level.getBlockEntity(pos.relative(facing.opposite).above())
|
|
if(meatHook.insertedItem != [] || butcherBlock.insertedItem != []) {
|
|
// meatHook.stage = 3
|
|
meatHook.finishRecipe()
|
|
butcherBlock.finishRecipe()
|
|
}
|
|
})
|
|
MBDMachineEvents.onRecipeWorking("createdelight:butchery_room", e => {
|
|
const {machine} = e.event
|
|
let pos = machine.pos
|
|
let facing = machine.getFrontFacing().get()
|
|
/**@type {Internal.MeatHookBlockEntity}*/
|
|
let meatHook = machine.level.getBlockEntity(pos.relative(facing.opposite).above().above().above().relative(DirectionUtil.rotation270Direction(facing)))
|
|
/**@type {Internal.ButcherBlockBlockEntity} */
|
|
let butcherBlock = machine.level.getBlockEntity(pos.relative(facing.opposite).above())
|
|
/**@type {String} */
|
|
let itemIds
|
|
if(meatHook.insertedItem == [] && butcherBlock.insertedItem == []) {
|
|
machine.recipeLogic.getLastRecipe().getInputContents($ItemRecipeCapability.CAP).forEach(con => {
|
|
itemIds = con.getContent().toJson().get("ingredient").get("item")
|
|
})
|
|
}
|
|
})
|