Files
2026-07-31 10:34:32 +09:00

60 lines
2.0 KiB
JavaScript

console.info("[SOCIETY] geodeCracking.js loaded");
ItemEvents.rightClicked("society:geode_buster", e => {
const { player, server, item } = e
const geodeTypes = [
"society:geode",
"society:frozen_geode",
"society:magma_geode",
"society:omni_geode",
];
const geode = player.getHeldItem("off_hand").getId();
if (!geodeTypes.includes(geode)) return;
server.runCommandSilent(
`playsound minecraft:ui.stonecutter.take_result block @a ${player.x} ${player.y} ${player.z}`
);
const bonusOdds = geode === "society:omni_geode" ? 0.4 : 0.3;
const treasureOdds = geode === "society:omni_geode" ? 0.6 : 0.2;
const geodeJunk = Ingredient.of("#society:geode_junk").itemIds;
const geodeBonus = Ingredient.of(`#${geode}_bonus`).itemIds;
const geodeTreasure = Ingredient.of(`#${geode}_treasure`).itemIds;
let givenItem = false;
item.count--;
player.getHeldItem("off_hand").count--;
let reward = player.level.createEntity("minecraft:item");
reward.x = player.x;
reward.y = player.y;
reward.z = player.z;
const roll = Math.random();
if (roll <= 0.9) {
reward.item = geodeJunk[Math.floor(Math.random() * geodeJunk.length)];
if (geode === "society:omni_geode" && roll <= 0.03) reward.item = "society:prismatic_shard"
givenItem = true;
}
if (roll <= bonusOdds) {
reward.item = geodeBonus[Math.floor(Math.random() * geodeBonus.length)];
givenItem = true;
}
if (roll <= treasureOdds || !player.stages.has("first_geode")) {
reward.item = geodeTreasure[Math.floor(Math.random() * geodeTreasure.length)];
givenItem = true;
player.stages.add('first_geode')
}
if (!givenItem) {
server.runCommandSilent(
`playsound stardew_fishing:fish_escape block @a ${player.x} ${player.y} ${player.z}`
);
} else {
reward.spawn();
server.runCommandSilent(
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
);
}
global.addItemCooldown(player, "society:geode_buster", 2);
});