add first patch
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
// priority: -21
|
||||
console.info("[SOCIETY] roeRecycler.js loaded");
|
||||
|
||||
global.handleRoeRecycler = (e) => {
|
||||
const { inventory, level, block } = e;
|
||||
const { x, y, z } = block;
|
||||
let slots = inventory.getSlots();
|
||||
let slotItem;
|
||||
const belowPos = block.getPos().below();
|
||||
const belowBlock = level.getBlock(belowPos.x, belowPos.y, belowPos.z);
|
||||
if (rnd10() && belowBlock.inventory && !inventory.isEmpty()) {
|
||||
for (let i = 0; i < slots; i++) {
|
||||
slotItem = inventory.getStackInSlot(i);
|
||||
if (
|
||||
slotItem !== Item.of("minecraft:air") &&
|
||||
slotItem.id.includes("_roe") &&
|
||||
!slotItem.id.includes("aged_")
|
||||
) {
|
||||
let roeOutputs = [];
|
||||
let fish = global.fishPondDefinitions.get(
|
||||
global.getFishFromRoe(slotItem.id)
|
||||
);
|
||||
if (fish && fish.additionalRewards) {
|
||||
let fishPondRoll = 0;
|
||||
let population = rnd(1, 10);
|
||||
fish.additionalRewards.forEach((reward) => {
|
||||
fishPondRoll = Math.random();
|
||||
if (
|
||||
population >= reward.minPopulation &&
|
||||
fishPondRoll <= reward.chance / 2
|
||||
) {
|
||||
let calculateCount = Math.floor(
|
||||
Math.max(1, reward.count / 4) *
|
||||
((population - reward.minPopulation) /
|
||||
(10 - reward.minPopulation))
|
||||
);
|
||||
if (population == 10) calculateCount = reward.count;
|
||||
roeOutputs.push(
|
||||
`${calculateCount > 1 ? calculateCount : 1}x ${reward.item}`
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (roeOutputs.length == 0 && rnd10()) {
|
||||
roeOutputs.push("1x aquaculture:algae");
|
||||
}
|
||||
let hasRoom = true;
|
||||
roeOutputs.forEach((item) => {
|
||||
if (!global.inventoryBelowHasRoom(level, block, item)) {
|
||||
hasRoom = false;
|
||||
}
|
||||
});
|
||||
if (hasRoom) {
|
||||
roeOutputs.forEach((item) => {
|
||||
global.insertBelow(level, block, item);
|
||||
});
|
||||
slotItem.count--;
|
||||
level.server.runCommandSilent(
|
||||
`playsound supplementaries:item.bubble_blower block @a ${block.x} ${block.y} ${block.z}`
|
||||
);
|
||||
level.spawnParticles(
|
||||
"supplementaries:suds",
|
||||
true,
|
||||
x + 0.5,
|
||||
y + 1,
|
||||
z + 0.5,
|
||||
0.1 * rnd(1, 2),
|
||||
0.1 * rnd(1, 2),
|
||||
0.1 * rnd(1, 2),
|
||||
rnd(2, 6),
|
||||
0.001
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
level.spawnParticles(
|
||||
"domesticationinnovation:simple_bubble",
|
||||
true,
|
||||
x,
|
||||
y + 1,
|
||||
z,
|
||||
0.2 * rnd(1, 1.5),
|
||||
0.2 * rnd(1, 1.5),
|
||||
0.2 * rnd(1, 1.5),
|
||||
3,
|
||||
0.01
|
||||
);
|
||||
};
|
||||
|
||||
StartupEvents.registry("block", (event) => {
|
||||
event
|
||||
.create("society:roe_recycler", "cardinal")
|
||||
.tagBlock("minecraft:mineable/pickaxe")
|
||||
.tagBlock("minecraft:needs_stone_tool")
|
||||
.box(0, 0, 0, 16, 16, 16)
|
||||
.defaultCutout()
|
||||
.item((item) => {
|
||||
item.tooltip(
|
||||
Text.translatable("block.society.roe_recycler.description").gray()
|
||||
);
|
||||
item.modelJson({
|
||||
parent: "society:block/kubejs/roe_recycler",
|
||||
});
|
||||
})
|
||||
.model("society:block/kubejs/roe_recycler")
|
||||
.blockEntity((blockInfo) => {
|
||||
blockInfo.inventory(9, 1);
|
||||
blockInfo.serverTick(20, 0, (entity) => {
|
||||
global.handleRoeRecycler(entity);
|
||||
}),
|
||||
blockInfo.rightClickOpensInventory();
|
||||
blockInfo.attachCapability(
|
||||
CapabilityBuilder.ITEM.blockEntity()
|
||||
.insertItem((blockEntity, slot, stack, simulate) =>
|
||||
blockEntity.inventory.insertItem(slot, stack, simulate)
|
||||
)
|
||||
.getSlotLimit((blockEntity, slot) =>
|
||||
blockEntity.inventory.getSlotLimit(slot)
|
||||
)
|
||||
.getSlots((blockEntity) => blockEntity.inventory.slots)
|
||||
.getStackInSlot((blockEntity, slot) =>
|
||||
blockEntity.inventory.getStackInSlot(slot)
|
||||
)
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user