85 lines
2.7 KiB
JavaScript
85 lines
2.7 KiB
JavaScript
console.info("[SOCIETY] manaClock.js loaded");
|
|
|
|
const MANA_PER_AGE = 10000;
|
|
const CLOCK_MAX_MANA = MANA_PER_AGE * 26;
|
|
|
|
global.manaClockTick = (entity) => {
|
|
const { block, level } = entity;
|
|
const { x, y, z } = block;
|
|
const radius = 1;
|
|
let mana = entity.persistentData.getInt("mana");
|
|
if (mana >= MANA_PER_AGE) {
|
|
let scanBlock;
|
|
for (let pos of BlockPos.betweenClosed(
|
|
new BlockPos(x - radius, y - radius, z - radius),
|
|
[x + radius, y + radius, z + radius]
|
|
)) {
|
|
if (!level.isLoaded(pos)) continue;
|
|
scanBlock = level.getBlock(pos);
|
|
if (scanBlock.hasTag("society:golden_clock_advanced")) {
|
|
global.handleProgress(level, scanBlock);
|
|
entity.persistentData.putInt("mana", mana - MANA_PER_AGE);
|
|
level.server.runCommandSilent(
|
|
`playsound botania:gaia_trap block @a ${x} ${y} ${z}`
|
|
);
|
|
level.spawnParticles(
|
|
"farmlife:stinky",
|
|
true,
|
|
scanBlock.x,
|
|
scanBlock.y + 1.5,
|
|
scanBlock.z,
|
|
0.1 * rnd(1, 4),
|
|
0.1 * rnd(1, 4),
|
|
0.1 * rnd(1, 4),
|
|
5,
|
|
0.01
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
StartupEvents.registry("block", (event) => {
|
|
event
|
|
.create("society:mana_clock", "cardinal")
|
|
.soundType("copper")
|
|
.box(1, 0, 1, 15, 16, 15)
|
|
.defaultCutout()
|
|
.tagBlock("minecraft:mineable/pickaxe")
|
|
.tagBlock("minecraft:needs_stone_tool")
|
|
.item((item) => {
|
|
item.tooltip(
|
|
Text.translatable("block.society.mana_clock.description").gray()
|
|
);
|
|
item.tooltip(
|
|
Text.translatable("society.working_block_entity.need_mana").aqua()
|
|
);
|
|
item.tooltip(Text.translatable("tooltip.society.area", `3x3`).green());
|
|
item.modelJson({
|
|
parent: "society:block/kubejs/mana_clock",
|
|
});
|
|
})
|
|
.model("society:block/kubejs/mana_clock")
|
|
.blockEntity((blockInfo) => {
|
|
blockInfo.serverTick(200, 0, (entity) => global.manaClockTick(entity)),
|
|
blockInfo.attachCapability(
|
|
BotaniaCapabilityBuilder.MANA.blockEntity()
|
|
.canReceiveManaFromBurst((be) => {
|
|
let mana = be.persistentData.getInt("mana");
|
|
return mana < CLOCK_MAX_MANA;
|
|
})
|
|
.receiveMana((be, amount) => {
|
|
let currentMana = be.persistentData.getInt("mana");
|
|
let received = Math.min(CLOCK_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 >= CLOCK_MAX_MANA;
|
|
})
|
|
);
|
|
});
|
|
});
|