console.info("[SOCIETY] manaSprinkler.js loaded"); const MANA_PER_SPRINKLE = 50; const SPRINKLER_MAX_MANA = MANA_PER_SPRINKLE * 25 * 8; global.manaSprinklerScan = (entity, radius) => { const { block, level } = entity; const { x, y, z } = block; let scanBlock; let sprinklerMana = entity.persistentData.getInt("mana"); let flowerBE let triggeredSpread = false; 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.id == "society:mana_fruit_crop") { sprinklerMana = entity.persistentData.getInt("mana"); flowerBE = scanBlock.entity if (sprinklerMana > MANA_PER_SPRINKLE && flowerBE.persistentData.getInt("mana") < FRUIT_MAX_MANA) { flowerBE.persistentData.putInt("mana", flowerBE.persistentData.getInt("mana") + MANA_PER_SPRINKLE); entity.persistentData.putInt("mana", entity.persistentData.getInt("mana") - MANA_PER_SPRINKLE); flowerBE.setChanged() entity.setChanged() triggeredSpread = true; level.spawnParticles( "windswept:will_o_the_wisp", true, scanBlock.x + 0.5, scanBlock.y + 1.25, scanBlock.z + 0.5, 0, 0, 0, 1, 0.01 ); } } } if (triggeredSpread) { level.server.runCommandSilent( `playsound doapi:water_sprinkler block @a ${x} ${y} ${z} 0.5 1` ); level.server.runCommandSilent( `playsound botania:spreader_fire block @a ${x} ${y} ${z} 0.5 1` ); } }; StartupEvents.registry("block", (event) => { event .create("society:mana_sprinkler") .tagBlock("minecraft:mineable/axe") .tagBlock("minecraft:needs_stone_tool") .tagBlock("dew_drop_farmland_growth:sprinkler_tier_2") .defaultCutout() .soundType("wood") .item((item) => { item.tooltip( Text.translatable("block.society.mana_sprinkler.description").aqua() ); item.tooltip(Text.translatable( "tooltip.society.area", `5x5` ).green()) item.tooltip( Text.translatable("block.society.mana_sprinkler.need_mana").aqua() ); item.modelJson({ parent: "society:block/kubejs/mana_sprinkler", }); }) .model("society:block/kubejs/mana_sprinkler") .blockEntity((blockInfo) => { blockInfo.serverTick(20, 0, (entity) => { global.manaSprinklerScan(entity, 2); }), blockInfo.attachCapability( BotaniaCapabilityBuilder.MANA.blockEntity() .canReceiveManaFromBurst((be) => { let mana = be.persistentData.getInt("mana"); return mana < SPRINKLER_MAX_MANA; }) .receiveMana((be, amount) => { let currentMana = be.persistentData.getInt("mana"); let received = Math.min(SPRINKLER_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 >= SPRINKLER_MAX_MANA; }) ); }); });