Files
jgl_sunlit_patch/kubejs/server_scripts/blockEvents/plushieMechanics.js
T
2026-07-31 10:34:32 +09:00

185 lines
5.0 KiB
JavaScript

console.info("[SOCIETY] plushieMechanics.js loaded");
BlockEvents.placed(global.plushies, (e) => {
let item = e.player.getHeldItem("main_hand");
let plushieNbt;
if (item.id !== e.block.id) item = e.player.getHeldItem("off_hand");
if (item.id !== e.block.id) return;
plushieNbt = item.getNbt();
if (plushieNbt) {
let nbt = e.block.getEntityData();
nbt.merge({
data: {
type: plushieNbt.get("type"),
quest_id: plushieNbt.get("quest_id"),
affection: plushieNbt.get("affection"),
quality: plushieNbt.get("quality_food").get("quality"),
},
});
let animal = plushieNbt.get("animal");
if (animal) {
nbt.merge({
data: {
animal: animal,
},
});
}
global.setBlockEntityData(e.block, nbt)
}
});
const breakPlushie = (block, wandReset) => {
let nbt = block.getEntityData();
const { type, quest_id, affection, quality, animal } = nbt.data;
let baseItem = Item.of(
block.id,
`{quality_food:{quality:${quality}},type:${type},quest_id:${quest_id},affection:${affection}}`
);
if (wandReset) {
block.popItem(baseItem);
} else {
block.popItem(
animal && !animal.isEmpty()
? Item.of(
block.id,
global.getPlushieItemNbt(
baseItem.getNbt(),
animal.type,
animal.name,
animal,
animal
)
)
: baseItem
);
}
}
BlockEvents.broken(global.plushies, (e) => {
breakPlushie(e.block)
});
BlockEvents.broken("whimsy_deco:sunlit_singing_frog", (e) => {
const { block, server } = e;
const { x, y, z } = block;
let nbt = block.getEntityData();
const { type, quest_id, affection, quality, animal } = nbt.data;
let baseItem = Item.of(
"whimsy_deco:adv_singing_frog_plushie",
`{quality_food:{quality:${quality}},type:${type},quest_id:${quest_id},affection:${affection}}`
);
server.runCommandSilent(
`execute positioned ${x} ${y} ${z} run stopsound @e[type=player,distance=..4] block`
);
block.popItem(
animal
? Item.of(
block.id,
global.getPlushieItemNbt(
baseItem.getNbt(),
animal.type,
animal.customName,
animal,
animal
)
)
: baseItem
);
});
BlockEvents.rightClicked("whimsy_deco:gatcha_machine", (e) => {
const { item, player, block, hand, server } = e;
if (hand == "OFF_HAND") return;
if (hand == "MAIN_HAND") {
if (item.id.equals("numismatics:sun")) {
item.count -= 1;
block.popItemFromFace(
"society:plushie_capsule",
block.properties.get("facing")
);
server.runCommandSilent(
`playsound tanukidecor:block.cash_register.ring block @a ${player.x} ${player.y} ${player.z}`
);
global.addItemCooldown(player, item.id, 1);
} else {
player.tell(
Text.translatable(
"tooltip.society.gatcha_machine",
Text.translatable("item.numismatics.sun").gold()
)
);
}
}
});
BlockEvents.rightClicked(global.plushies, (e) => {
const { item, player, block, hand, level, server } = e;
if (hand == "OFF_HAND") return;
if (hand == "MAIN_HAND" && item.id.equals("society:plushie_wand")) {
let nbt = block.getEntityData();
const { animal } = nbt.data;
if (animal && animal.type) {
let newAnimal = player.level.createEntity(`${animal.type}`);
newAnimal.setX(block.getX());
newAnimal.setY(block.getY() + 1);
newAnimal.setZ(block.getZ());
if (animal.name) newAnimal.customName = animal.name
if (animal.Variant) {
let variantNBT = newAnimal.getNbt();
variantNBT.Variant = animal.Variant;
newAnimal.setNbt(variantNBT);
}
newAnimal.spawn();
global.setPlushieExtractedPD(newAnimal, animal)
breakPlushie(block, true)
block.set("minecraft:air")
server.runCommandSilent(
`playsound botania:babylon_spawn block @a ${block.x} ${block.y} ${block.z}`
);
level.spawnParticles(
"snowyspirit:glow_light",
true,
block.x,
block.y + 0.5,
block.z,
0.2 * rnd(1, 4),
0.2 * rnd(1, 4),
0.2 * rnd(1, 4),
20,
2
);
} else {
player.tell(
Text.translatable("item.society.plushie_wand.no_animal").red()
);
}
global.addItemCooldown(player, item.id, 5);
}
});
BlockEvents.leftClicked(global.plushies, (e) => {
const { player, block, level, server } = e;
if (player.getHeldItem("main_hand").id.equals("society:plushie_wand") && !player.cooldowns.isOnCooldown("society:plushie_wand")) {
breakPlushie(block)
block.set("minecraft:air")
server.runCommandSilent(
`playsound botania:babylon_attack block @a ${block.x} ${block.y} ${block.z}`
);
level.spawnParticles(
"snowyspirit:glow_light",
true,
block.x,
block.y + 0.5,
block.z,
0.2 * rnd(1, 4),
0.2 * rnd(1, 4),
0.2 * rnd(1, 4),
20,
2
);
global.addItemCooldown(player, "society:plushie_wand", 5);
}
});