Files
2026-07-31 10:34:32 +09:00

105 lines
3.1 KiB
JavaScript

console.info("[SOCIETY] farmingLoot.js loaded");
// TODO: "vintagedelight:gearo_berry_bush"
const cropCollectorDenied = [
"pamhc2trees:pamapple",
"pamhc2trees:pamcherry",
"pamhc2trees:pamorange",
"pamhc2trees:pampeach",
"pamhc2trees:pamplum",
"pamhc2trees:pamhazelnut",
"pamhc2trees:pampawpaw",
"pamhc2trees:pambanana",
"pamhc2trees:pamcinnamon",
"pamhc2trees:pamdragonfruit",
"pamhc2trees:pammango",
"pamhc2trees:pamstarfruit",
"pamhc2trees:pamlychee",
"pamhc2trees:pamlemon",
"pamhc2trees:pampassionfruit",
];
const checkMaxGrown = (destroyedBlock) => {
return destroyedBlock.blockState.block.isMaxAge(destroyedBlock.blockState);
};
const checkMaxGrownWithChance = (destroyedBlock, chance) => {
return chance > Math.random() && checkMaxGrown(destroyedBlock);
};
LootJS.modifiers((e) => {
e.addBlockLootModifier(global.cropList).apply((c) => {
c.forEachLoot((item) => {
const quality = global.getCropQuality(c.destroyedBlock);
if (quality > 0)
item.setNbt(`{quality_food:{effects:[],quality:${quality}}}`);
});
});
e.addBlockLootModifier(global.cropList)
.hasAnyStage("sticky_crops")
.apply((c) => {
if (checkMaxGrownWithChance(c.destroyedBlock, 0.02)) {
c.addLoot("society:pine_tar");
}
});
e.addBlockLootModifier(global.cropList)
.hasAnyStage("soil_inspector")
.apply((c) => {
if (checkMaxGrownWithChance(c.destroyedBlock, 0.05)) {
c.addLoot("farm_and_charm:fertilizer");
}
});
e.addBlockLootModifier(global.cropList)
.randomChance(0.25)
.customCondition({
condition: "minecraft:location_check",
offsetY: -1,
predicate: {
block: {
blocks: ["dew_drop_farmland_growth:bountiful_fertilized_farmland"],
},
},
})
.modifyLoot(Ingredient.all, (itemStack) => {
itemStack.setCount(itemStack.getCount() + 1);
return itemStack;
});
e.addBlockLootModifier(global.cropList)
.hasAnyStage("paradise_crop")
.modifyLoot(Ingredient.all, (itemStack) => {
if (!cropCollectorDenied.includes(itemStack.id))
itemStack.setCount(itemStack.getCount() + 1);
return itemStack;
});
e.addBlockLootModifier(global.cropList)
.hasAnyStage("crop_collector")
.modifyLoot(Ingredient.all, (itemStack) => {
if (!cropCollectorDenied.includes(itemStack.id))
itemStack.setCount(itemStack.getCount() * 2);
return itemStack;
});
// Mastery
e.addBlockLootModifier(global.cropList)
.hasAnyStage("husbandry_mastery")
.apply((c) => {
if (checkMaxGrownWithChance(c.destroyedBlock, 0.005)) {
c.addLoot("society:plushie_capsule");
}
});
e.addBlockLootModifier(global.cropList)
.hasAnyStage("husbandry_mastery")
.apply((c) => {
if (checkMaxGrownWithChance(c.destroyedBlock, 0.003)) {
c.addLoot("society:animal_cracker");
}
});
e.addBlockLootModifier(global.cropList)
.hasAnyStage("farming_mastery")
.apply((c) => {
if (checkMaxGrownWithChance(c.destroyedBlock, 0.005)) {
c.addLoot("atmospheric:grimwood_sapling");
}
});
});