add first patch
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
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);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user