185 lines
5.0 KiB
JavaScript
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);
|
|
}
|
|
});
|