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

138 lines
4.1 KiB
JavaScript

global.handleHayGolem = (entity) => {
const { level } = entity;
const entities = level
.getEntitiesWithin(entity.boundingBox.inflate(8))
.filter((e) => e.type == "golemoverhaul:hay_golem");
const radius = 4;
const { x, y, z } = entity;
let scanBlock;
if (entities.length <= 1) {
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 (rnd10() && scanBlock.hasTag("society:hay_golem_improvable")) {
if (scanBlock.id.equals("minecraft:farmland")) {
scanBlock.set(
"dew_drop_farmland_growth:low_quality_fertilized_farmland",
scanBlock.getProperties()
);
} else if (
scanBlock.id.equals(
"dew_drop_farmland_growth:low_quality_fertilized_farmland"
)
) {
scanBlock.set(
"dew_drop_farmland_growth:high_quality_fertilized_farmland",
scanBlock.getProperties()
);
}
if (level.server) {
level.server.runCommandSilent(
`playsound ribbits:entity.ribbit.magic block @a ${scanBlock.x} ${scanBlock.y} ${scanBlock.z}`
);
}
return;
}
}
}
};
global.handleKelpGolem = (entity) => {
const { level } = entity;
const { x, y, z } = entity;
const radius = 4;
let scanBlock;
let blockProperties;
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 === "dew_drop_farmland_growth:garden_pot") {
blockProperties = scanBlock.getProperties();
blockProperties.moisture = "7";
scanBlock.set(scanBlock.id, blockProperties);
}
}
if (level.server) {
level.server.runCommandSilent(
`playsound minecraft:block.water.ambient block @a ${x} ${y} ${z}`
);
}
};
global.handleTerracottaGolem = (entity) => {
const { level } = entity;
const { x, y, z } = entity;
const radius = 4;
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.id.equals("minecraft:coarse_dirt")) {
scanBlock.set("minecraft:clay");
if (level.server) {
level.server.runCommandSilent(
`playsound twigs:block.silt.break block @a ${scanBlock.x} ${scanBlock.y} ${scanBlock.z}`
);
}
return;
}
}
};
global.handleSlimeGolem = (entity) => {
const { level } = entity;
const entities = level
.getEntitiesWithin(entity.boundingBox.inflate(8))
.filter((e) => e.type == "splendid_slimes:splendid_slime");
const golems = level
.getEntitiesWithin(entity.boundingBox.inflate(8))
.filter((e) => e.type == "golemoverhaul:slime_golem");
if (golems.length <= 1) {
entities.forEach((slime) => {
let nbt = slime.getNbt();
nbt.Happiness = nbt.Happiness + 5;
slime.setNbt(nbt);
});
}
};
EntityJSEvents.modifyEntity((event) => {
event.modify("golemoverhaul:hay_golem", (modifyBuilder) => {
modifyBuilder.tick((entity) => {
if (entity.level.time % 3600 === 0) {
global.handleHayGolem(entity);
}
});
});
event.modify("golemoverhaul:kelp_golem", (modifyBuilder) => {
modifyBuilder.tick((entity) => {
if (entity.level.time % 1200 === 0) {
global.handleKelpGolem(entity);
}
});
});
event.modify("golemoverhaul:terracotta_golem", (modifyBuilder) => {
modifyBuilder.tick((entity) => {
if (entity.level.time % 200 === 0) {
global.handleTerracottaGolem(entity);
}
});
});
event.modify("golemoverhaul:slime_golem", (modifyBuilder) => {
modifyBuilder.tick((entity) => {
if (entity.level.time % 1200 === 0) {
global.handleSlimeGolem(entity);
}
});
});
});