Files
jgl_sunlit_patch/kubejs/startup_scripts/powerfulMachines/manaFruit.js
T
2026-07-31 10:34:32 +09:00

151 lines
4.4 KiB
JavaScript

console.info("[SOCIETY] manaFruit.js loaded");
const MANA_DRAIN = 2500;
const FRUIT_MAX_MANA = MANA_DRAIN * 4;
global.handleManaFruit = (e) => {
const { level, block } = e;
const { x, y, z } = block;
let dayTime = level.dayTime();
let morningModulo = dayTime % 24000;
let blockProperties = level.getBlock(block.pos).getProperties();
let age = Number(blockProperties.get("age"));
if (!global.surviveCheck(level, block.pos))
level.destroyBlock(block.pos, true);
if (age < 7 && morningModulo >= 20 && morningModulo < 40) {
let mana = e.persistentData.getInt("mana");
if (mana >= MANA_DRAIN) {
blockProperties.age = String(
age +
CropGrowthUtils.getFertilizerIncrease(
age,
7,
level.getBlockState(block.pos.below())
)
);
block.set(block.id, blockProperties);
e.persistentData.putInt("mana", mana - MANA_DRAIN);
level.server.runCommandSilent(
`playsound botania:mana_pool_craft block @a ${x} ${y} ${z}`
);
level.spawnParticles(
"windswept:will_o_the_wisp",
true,
x,
y + 0.25,
z,
0.1 * rnd(1, 4),
0.1 * rnd(1, 4),
0.1 * rnd(1, 4),
5,
0.01
);
} else if (age > 0) {
blockProperties.age = String(age - 1);
block.set(block.id, blockProperties);
level.server.runCommandSilent(
`playsound botania:virus_infect block @a ${x} ${y} ${z}`
);
level.spawnParticles(
"farmlife:stinky",
true,
x,
y + 0.25,
z,
0.1 * rnd(1, 4),
0.1 * rnd(1, 4),
0.1 * rnd(1, 4),
5,
0.01
);
}
}
};
StartupEvents.registry("block", (e) => {
e
.create("society:mana_fruit_crop")
.defaultCutout()
.hardness(0)
.resistance(0)
.displayName("Mana Fruit Seed")
.mapColor("grass")
.soundType("azalea_leaves")
.box(1, 0, 1, 15, 4, 15)
.property(integerProperty.create("age", 0, 7))
.defaultState((state) => {
state.set(integerProperty.create("age", 0, 7), 0);
})
.placementState((state) => {
state.set(integerProperty.create("age", 0, 7), 0);
})
.tagBlock("minecraft:mineable/hoe")
.tagBlock("minecraft:crops")
.blockEntity((blockInfo) => {
blockInfo.serverTick(20, 0, (entity) => global.handleManaFruit(entity)),
blockInfo.attachCapability(
BotaniaCapabilityBuilder.MANA.blockEntity()
.canReceiveManaFromBurst((be) => {
let mana = be.persistentData.getInt("mana");
return mana < FRUIT_MAX_MANA;
})
.receiveMana((be, amount) => {
let currentMana = be.persistentData.getInt("mana");
let received = Math.min(FRUIT_MAX_MANA - currentMana, amount);
be.persistentData.putInt("mana", currentMana + received);
})
.getCurrentMana((be) => be.persistentData.getInt("mana"))
.isFull((be) => {
let mana = be.persistentData.getInt("mana");
return mana >= FRUIT_MAX_MANA;
})
);
})
.item((item) => {
item.tooltip(
Text.translatable("society.working_block_entity.need_mana").aqua()
);
item.modelJson({
parent: "minecraft:item/generated",
textures: {
layer0: "society:item/mana_fruit_seed",
},
});
}).blockstateJson = {
multipart: [
{
when: { age: 0 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage0" },
},
{
when: { age: 1 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage1" },
},
{
when: { age: 2 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage1" },
},
{
when: { age: 3 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage2" },
},
{
when: { age: 4 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage2" },
},
{
when: { age: 5 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage3" },
},
{
when: { age: 6 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage4" },
},
{
when: { age: 7 },
apply: { model: "society:block/kubejs/crops/mana_fruit_crop_stage5" },
},
],
};
});