add first patch
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
console.info("[SOCIETY] cancelItemEvents.js loaded");
|
||||
|
||||
ItemEvents.rightClicked("brewery:dark_brew", (e) => {
|
||||
if (!e.player.isCrouching()) e.cancel();
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("farm_and_charm:fertilizer", (e) => {
|
||||
e.cancel();
|
||||
});
|
||||
|
||||
|
||||
BlockEvents.rightClicked("create:deployer", (e) => {
|
||||
if (
|
||||
[
|
||||
"minecraft:fishing_rod",
|
||||
"netherdepthsupgrade:lava_fishing_rod",
|
||||
"aquaculture:iron_fishing_rod",
|
||||
"aquaculture:gold_fishing_rod",
|
||||
"aquaculture:diamond_fishing_rod",
|
||||
"aquaculture:neptunium_fishing_rod",
|
||||
].includes(e.player.getHeldItem("MAIN_HAND").id)
|
||||
) {
|
||||
e.player.tell(Text.translatable("society.fishing_rod.on_deployer").red());
|
||||
e.cancel();
|
||||
}
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked(
|
||||
["refinedstorage:4k_storage_block", "refinedstorage:64k_storage_block"],
|
||||
(e) => {
|
||||
if (e.player.isCrouching()) e.cancel();
|
||||
},
|
||||
);
|
||||
|
||||
ItemEvents.rightClicked(
|
||||
[
|
||||
"buildinggadgets2:gadget_copy_paste",
|
||||
"buildinggadgets2:gadget_exchanging",
|
||||
"buildinggadgets2:gadget_copy_paste",
|
||||
"buildinggadgets2:gadget_cut_paste",
|
||||
"buildinggadgets2:gadget_destruction",
|
||||
"botania:smelt_rod",
|
||||
"supplementaries:wrench"
|
||||
],
|
||||
(e) => {
|
||||
if (e.player.level.dimension === "society:skull_cavern") {
|
||||
// TODO: Dialog
|
||||
e.player.tell(Text.red("Don't do that."))
|
||||
e.cancel();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
BlockEvents.rightClicked((e) => {
|
||||
if (e.player.getHeldItem("MAIN_HAND").hasTag("forge:tools/fishing_rods") && e.player.getHeldItem("OFF_HAND").hasTag("forge:tools/fishing_rods") && !e.block.id.equals("society:fish_pond")
|
||||
) {
|
||||
e.cancel();
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,14 @@
|
||||
console.info("[SOCIETY] cornucopia.js loaded");
|
||||
|
||||
|
||||
ItemEvents.rightClicked("society:cornucopia", (e) => {
|
||||
const { server, player, level, item, hand } = e;
|
||||
|
||||
if (player.isFake()) return;
|
||||
if (hand == "OFF_HAND") return;
|
||||
global.addItemCooldown(player, item, 40);
|
||||
|
||||
let experienceMult = global.handleCornucopia(server, level, player.getOnPos().above(), player, true);
|
||||
|
||||
global.giveExperience(server, player, "farming", experienceMult * 30);
|
||||
});
|
||||
@@ -0,0 +1,116 @@
|
||||
console.info("[SOCIETY] dragontoothAxe.js loaded");
|
||||
|
||||
const Vec3 = Java.loadClass("net.minecraft.world.phys.Vec3");
|
||||
|
||||
const breakAxe = (item, server, player) => {
|
||||
if (!player.stages.has("dragonslayer")) {
|
||||
item.count--;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:entity.warden.sonic_boom block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, `{anchor:"BOTTOM_CENTER",background:1,wrap:220,align:"BOTTOM_CENTER",color:"#FF5555",offsetY:-60}`, 240, Text.translatable("item.society.dragontooth_axe.no_skill_broken").toJson())
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
const galaxySmashRadius = 3;
|
||||
ItemEvents.firstLeftClicked((e) => {
|
||||
const { hand, item, player, level, server } = e;
|
||||
if (hand == "OFF_HAND") return;
|
||||
if (hand == "MAIN_HAND" && item.id === "society:dragontooth_axe") {
|
||||
breakAxe(item, server, player);
|
||||
if (player.cooldowns.isOnCooldown(item) || !player.stages.has("galaxy_smash") || !player.isCrouching()) return;
|
||||
for (let pos of BlockPos.betweenClosed(
|
||||
new BlockPos(player.x - galaxySmashRadius, player.y - 1, player.z - galaxySmashRadius),
|
||||
[player.x + galaxySmashRadius, player.y + 1, player.z + galaxySmashRadius]
|
||||
)) {
|
||||
if (pos.y === Math.round(player.y)) {
|
||||
level.spawnParticles(
|
||||
"supplementaries:bomb_smoke",
|
||||
true,
|
||||
pos.x,
|
||||
pos.y + 0.5,
|
||||
pos.z,
|
||||
0.5 * rnd(0, 2),
|
||||
0.1 * rnd(-1.25, 1),
|
||||
0.5 * rnd(0, 2),
|
||||
4,
|
||||
0.01
|
||||
);
|
||||
}
|
||||
}
|
||||
let damageableMobs = level
|
||||
.getEntitiesWithin(player.boundingBox.inflate(galaxySmashRadius + 0.5))
|
||||
.filter((entity) => entity.isMonster());
|
||||
let hammerDamage = player.potionEffects.isActive("minecraft:strength") ? 20 : 15;
|
||||
|
||||
damageableMobs.forEach((target) => {
|
||||
target.isAttackable() && target.attack(hammerDamage);
|
||||
level.spawnParticles(
|
||||
"species:ichor",
|
||||
true,
|
||||
target.x,
|
||||
target.y + 1.5,
|
||||
target.z,
|
||||
0.2 * rnd(1, 4),
|
||||
0.1 * rnd(1, 4),
|
||||
0.2 * rnd(1, 4),
|
||||
5,
|
||||
0.3
|
||||
);
|
||||
});
|
||||
server.runCommandSilent(
|
||||
`playsound quark:entity.toretoise.angry block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:entity.ender_dragon.hurt block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, item, 200);
|
||||
}
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked((e) => {
|
||||
const { hand, item, player, level, server } = e;
|
||||
if (hand == "OFF_HAND") return;
|
||||
if (hand == "MAIN_HAND" && item.id === "society:dragontooth_axe") {
|
||||
breakAxe(item, server, player);
|
||||
if (player.cooldowns.isOnCooldown(item) || !player.stages.has("handleshot") || !player.isCrouching()) return;
|
||||
let arrow = level
|
||||
.getBlock(player.x, player.y + 1, player.z)
|
||||
.createEntity("minecraft:arrow");
|
||||
arrow.y = arrow.y + 1;
|
||||
let speed = 5.0;
|
||||
let motionX = player.lookAngle.x() * speed;
|
||||
let motionY = player.lookAngle.y() * speed;
|
||||
let motionZ = player.lookAngle.z() * speed;
|
||||
arrow.setDeltaMovement(new Vec3(motionX, motionY, motionZ));
|
||||
arrow.spawn();
|
||||
level.spawnParticles(
|
||||
"supplementaries:bomb_smoke",
|
||||
true,
|
||||
player.x,
|
||||
player.y + 0.5,
|
||||
player.z,
|
||||
0.9 * rnd(0, 3),
|
||||
0.1 * rnd(-1.25, 1),
|
||||
0.9 * rnd(0, 3),
|
||||
20,
|
||||
0.01
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:entity.ghast.shoot block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:entity.ender_dragon.hurt block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, item, 80);
|
||||
}
|
||||
});
|
||||
|
||||
BlockEvents.leftClicked((e) => {
|
||||
const { hand, item, player, server } = e;
|
||||
if (hand == "OFF_HAND") return;
|
||||
if (hand == "MAIN_HAND" && item.id === "society:dragontooth_axe")
|
||||
breakAxe(item, server, player);
|
||||
});
|
||||
@@ -0,0 +1,46 @@
|
||||
console.info("[SOCIETY] experienceBooks.js loaded");
|
||||
|
||||
const addExperience = (player, server, item, type) => {
|
||||
global.giveExperience(server, player, type, 1000);
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:block.enchantment_table.use block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
item.count--;
|
||||
global.addItemCooldown(player, item, 2);
|
||||
};
|
||||
ItemEvents.rightClicked("society:yard_work_yearly", (e) => {
|
||||
const { server, player, item } = e;
|
||||
addExperience(player, server, item, "farming");
|
||||
});
|
||||
ItemEvents.rightClicked("society:husbandry_hourly", (e) => {
|
||||
const { server, player, item } = e;
|
||||
addExperience(player, server, item, "husbandry");
|
||||
});
|
||||
ItemEvents.rightClicked("society:mining_monthly", (e) => {
|
||||
const { server, player, item } = e;
|
||||
addExperience(player, server, item, "mining");
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:combat_quarterly", (e) => {
|
||||
const { server, player, item } = e;
|
||||
addExperience(player, server, item, "adventuring");
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:wet_weekly", (e) => {
|
||||
const { server, player, item } = e;
|
||||
addExperience(player, server, item, "fishing");
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:book_of_stars", (e) => {
|
||||
const { server, player, item } = e;
|
||||
global.giveExperience(server, player, "farming", 750);
|
||||
global.giveExperience(server, player, "husbandry", 750);
|
||||
global.giveExperience(server, player, "mining", 750);
|
||||
global.giveExperience(server, player, "adventuring", 750);
|
||||
global.giveExperience(server, player, "fishing", 750);
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:block.enchantment_table.use block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
item.count--;
|
||||
global.addItemCooldown(player, item, 2);
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
console.info("[SOCIETY] eyeOfEnderMessage.js loaded");
|
||||
|
||||
const eyeThrottle = ((temp) => (entity, tick, identifier) => {
|
||||
const { age, uuid } = entity;
|
||||
const key = `${uuid}${identifier}`;
|
||||
const now = temp[key];
|
||||
if (!now || age - now >= tick) {
|
||||
temp[key] = age;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})({});
|
||||
|
||||
ItemEvents.rightClicked("minecraft:ender_eye", (e) => {
|
||||
if (eyeThrottle(e.player, 400, "eye_throttle")) return;
|
||||
e.player.tell(Text.translatable("society.ender_eye.no_end").red());
|
||||
});
|
||||
@@ -0,0 +1,30 @@
|
||||
console.info("[SOCIETY] fishRadar.js loaded");
|
||||
|
||||
const renderItem = (id) => Item.of(id).displayName;
|
||||
|
||||
ItemEvents.rightClicked("society:fish_radar", (e) => {
|
||||
const { level, player, item } = e;
|
||||
|
||||
function playerTell(x) {
|
||||
player.tell(x);
|
||||
}
|
||||
player.tell(global.getSeasonFromBiome(level, player.pos))
|
||||
let fish = [];
|
||||
player.tell(
|
||||
Text.of("=====[ ").gray()
|
||||
.append(Text.translatable("item.society.fish_radar").green())
|
||||
.append(" ]=====")
|
||||
);
|
||||
|
||||
if (level.dimension !== "minecraft:the_nether") {
|
||||
fish = global.overworldRadar(e, fish, playerTell, true);
|
||||
} else {
|
||||
fish = global.netherRadar(e, fish, playerTell);
|
||||
}
|
||||
if (player.stages.has("mystical_ocean")) fish.push("society:neptuna");
|
||||
player.tell(Text.gray("======================"));
|
||||
fish.forEach((fish) => {
|
||||
player.tell(renderItem(fish));
|
||||
});
|
||||
global.addItemCooldown(player, item, 20);
|
||||
});
|
||||
@@ -0,0 +1,59 @@
|
||||
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);
|
||||
});
|
||||
@@ -0,0 +1,118 @@
|
||||
console.info("[SOCIETY] lootOpening.js loaded");
|
||||
|
||||
ItemEvents.rightClicked("society:furniture_box", (e) => {
|
||||
const { server, player, item } = e;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:ui.stonecutter.take_result block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
|
||||
const furniture = Ingredient.of("#society:loot_furniture").itemIds;
|
||||
|
||||
if (!player.isCreative()) item.count--;
|
||||
let reward = player.level.createEntity("minecraft:item");
|
||||
const rewardCount = player.stages.has("the_red_and_the_black") ? 2 : 1;
|
||||
reward.x = player.x;
|
||||
reward.y = player.y;
|
||||
reward.z = player.z;
|
||||
reward.item = Item.of(
|
||||
`${rewardCount}x ${furniture[Math.floor(Math.random() * furniture.length)]}`
|
||||
);
|
||||
reward.spawn();
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, "society:furniture_box", 2);
|
||||
});
|
||||
|
||||
const fantasyBoxes = [
|
||||
"nordic",
|
||||
"dunmer",
|
||||
"venthyr",
|
||||
"bone",
|
||||
"royal",
|
||||
"necrolord",
|
||||
];
|
||||
fantasyBoxes.forEach((theme) => {
|
||||
ItemEvents.rightClicked(`society:fantasy_box_${theme}`, (e) => {
|
||||
const { server, player, item } = e;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:ui.stonecutter.take_result block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
|
||||
let furniture = Ingredient.of(
|
||||
`#society:${theme}_fantasy_furniture`
|
||||
).itemIds;
|
||||
furniture = furniture.concat(
|
||||
Ingredient.of(`#society:decorations_fantasy_furniture`).itemIds
|
||||
);
|
||||
if (!player.isCreative()) item.count--;
|
||||
let reward = player.level.createEntity("minecraft:item");
|
||||
const rewardCount = player.stages.has("the_red_and_the_black") ? 2 : 1;
|
||||
reward.x = player.x;
|
||||
reward.y = player.y;
|
||||
reward.z = player.z;
|
||||
reward.item = Item.of(
|
||||
`${rewardCount}x ${
|
||||
furniture[Math.floor(Math.random() * furniture.length)]
|
||||
}`
|
||||
);
|
||||
const itemId = reward.item.id;
|
||||
if (itemId.includes("wool") || itemId.includes("carpet"))
|
||||
reward.item = Item.of(`16x ${itemId}`);
|
||||
if (itemId.includes("double")) reward.item = Item.of(`2x ${itemId}`);
|
||||
reward.spawn();
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, `society:fantasy_box_${theme}`, 2);
|
||||
});
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:bouquet_bag", (e) => {
|
||||
const { server, player, item } = e;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:ui.stonecutter.take_result block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
|
||||
const furniture = Ingredient.of("#society:bouquet_bag_flowers").itemIds;
|
||||
|
||||
if (!player.isCreative()) item.count--;
|
||||
let reward = player.level.createEntity("minecraft:item");
|
||||
const rewardCount = player.stages.has("the_red_and_the_black") ? 5 : 4;
|
||||
reward.x = player.x;
|
||||
reward.y = player.y;
|
||||
reward.z = player.z;
|
||||
reward.item = Item.of(
|
||||
`${rewardCount}x ${furniture[Math.floor(Math.random() * furniture.length)]}`
|
||||
);
|
||||
reward.spawn();
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, "society:bouquet_bag", 2);
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:scavenged_food_bag", (e) => {
|
||||
const { server, player, item } = e;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:ui.stonecutter.take_result block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
|
||||
const furniture = Ingredient.of("#society:dish").itemIds;
|
||||
|
||||
if (!player.isCreative()) item.count--;
|
||||
let reward = player.level.createEntity("minecraft:item");
|
||||
const rewardCount = player.stages.has("the_red_and_the_black") ? 2 : 1;
|
||||
reward.x = player.x;
|
||||
reward.y = player.y;
|
||||
reward.z = player.z;
|
||||
|
||||
reward.item = Item.of(
|
||||
`${rewardCount}x ${furniture[Math.floor(Math.random() * furniture.length)]}`
|
||||
);
|
||||
reward.spawn();
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, "society:scavenged_food_bag", 2);
|
||||
});
|
||||
@@ -0,0 +1,141 @@
|
||||
console.info("[SOCIETY] magicRope.js loaded");
|
||||
|
||||
const canTeleportDown = (level, player, blockPos) => {
|
||||
let scannedBlock;
|
||||
let airAbove = false;
|
||||
let successBlock = 0;
|
||||
for (let i = 5; i < 15; i++) {
|
||||
scannedBlock = level.getBlock(blockPos.offset(0, -i, 0));
|
||||
if (
|
||||
["minecraft:air", "minecraft:cave_air", "minecraft:cave_vines_plant"].includes(
|
||||
scannedBlock.id
|
||||
)
|
||||
) {
|
||||
if (airAbove) {
|
||||
successBlock = i;
|
||||
} else airAbove = true;
|
||||
} else if (airAbove) airAbove = false;
|
||||
}
|
||||
if (successBlock > 0) {
|
||||
player.teleportTo(level, blockPos.x, blockPos.y - successBlock, blockPos.z, [], 0.0, 0.0);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
const canTeleportSide = (level, player, blockPos) => {
|
||||
let scannedBlock;
|
||||
let successBlock;
|
||||
let xOffset = 0;
|
||||
let zOffset = 0;
|
||||
if (player.facing == "north") zOffset = -1;
|
||||
if (player.facing == "south") zOffset = 1;
|
||||
if (player.facing == "east") xOffset = 1;
|
||||
if (player.facing == "west") xOffset = -1;
|
||||
for (let i = 5; i < 40; i++) {
|
||||
scannedBlock = level.getBlock(blockPos.offset(i * xOffset, 0, i * zOffset));
|
||||
if (scannedBlock) {
|
||||
if (
|
||||
["minecraft:air", "minecraft:cave_air", "minecraft:cave_vines_plant"].includes(
|
||||
level.getBlock(scannedBlock.getPos().above()).id
|
||||
)
|
||||
) {
|
||||
successBlock = scannedBlock.pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (successBlock) {
|
||||
player.teleportTo(level, successBlock.x, successBlock.y, successBlock.z, [], 0.0, 0.0);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
ItemEvents.rightClicked("society:magic_rope", (e) => {
|
||||
const { level, server, item, player } = e;
|
||||
let errorText;
|
||||
if (level.dimension !== "society:skull_cavern") {
|
||||
errorText = Text.translatable("item.society.magic_rope.invalid_dimension");
|
||||
} else {
|
||||
if (canTeleportDown(level, player, player.onPos)) {
|
||||
item.count--;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:entity.enderman.teleport block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, item, 150);
|
||||
} else errorText = Text.translatable("item.society.magic_rope.no_room_below");
|
||||
}
|
||||
if (errorText) {
|
||||
global.addItemCooldown(player, item, 2);
|
||||
global.renderUiText(
|
||||
player,
|
||||
server,
|
||||
{
|
||||
magicRopeMessage: {
|
||||
type: "text",
|
||||
x: 0,
|
||||
y: -90,
|
||||
text: `${errorText.toJson()}`,
|
||||
color: "#FF5555",
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
magicRopeMessageShadow: {
|
||||
type: "text",
|
||||
x: 1,
|
||||
z: -1,
|
||||
y: -89,
|
||||
text: `${errorText.toJson()}`,
|
||||
color: "#000000",
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
},
|
||||
global.mainUiElementIds
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
BlockEvents.rightClicked((e) => {
|
||||
const { level, server, item, player, block } = e;
|
||||
let errorText;
|
||||
if (item.id == "society:magic_tunnel")
|
||||
if (level.dimension !== "society:skull_cavern") {
|
||||
errorText = Text.translatable("item.society.magic_rope.invalid_dimension");
|
||||
} else {
|
||||
if (canTeleportSide(level, player, block.pos)) {
|
||||
item.count--;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:entity.enderman.teleport block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, item, 150);
|
||||
} else errorText = Text.translatable("item.society.magic_rope.no_room_side");
|
||||
}
|
||||
if (errorText) {
|
||||
global.addItemCooldown(player, item, 2);
|
||||
global.renderUiText(
|
||||
player,
|
||||
server,
|
||||
{
|
||||
magicRopeMessage: {
|
||||
type: "text",
|
||||
x: 0,
|
||||
y: -90,
|
||||
text: `${errorText.toJson()}`,
|
||||
color: "#FF5555",
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
magicRopeMessageShadow: {
|
||||
type: "text",
|
||||
x: 1,
|
||||
z: -1,
|
||||
y: -89,
|
||||
text: `${errorText.toJson()}`,
|
||||
color: "#000000",
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
},
|
||||
global.mainUiElementIds
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,24 @@
|
||||
console.info("[SOCIETY] overflowToken.js loaded");
|
||||
|
||||
ItemEvents.rightClicked("society:overflow_token", (e) => {
|
||||
const { item, server, hand, player } = e;
|
||||
|
||||
if (hand == "OFF_HAND") return;
|
||||
if (hand == "MAIN_HAND") {
|
||||
let overflowList = server.persistentData.overflowList;
|
||||
let playerUUID = player.getUuid();
|
||||
if (overflowList == null) {
|
||||
overflowList = {};
|
||||
}
|
||||
if (overflowList[playerUUID] == null) {
|
||||
overflowList[playerUUID] = 1;
|
||||
} else {
|
||||
overflowList[playerUUID] += 1;
|
||||
}
|
||||
server.persistentData.overflowList = overflowList;
|
||||
if (!player.isCreative()) item.shrink(1);
|
||||
server.runCommandSilent(
|
||||
`playsound tanukidecor:block.cash_register.ring block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
console.info("[SOCIETY] pawpawRoad.js loaded");
|
||||
|
||||
const pawpawThrottle = ((temp) => (entity, tick, identifier) => {
|
||||
const { age, uuid } = entity;
|
||||
const key = `${uuid}${identifier}`;
|
||||
const now = temp[key];
|
||||
if (!now || age - now >= tick) {
|
||||
temp[key] = age;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})({});
|
||||
|
||||
ItemEvents.rightClicked("pamhc2trees:pawpawitem", (e) => {
|
||||
if (pawpawThrottle(e.player, 1000, "pawpaw_throttle")) return;
|
||||
if (Math.random() < 0.05) {
|
||||
e.player.tell(Text.translatable("society.pawpaw_road.1").gold());
|
||||
|
||||
e.server.scheduleInTicks(60, () => {
|
||||
e.player.tell(Text.translatable("society.pawpaw_road.2").gold());
|
||||
});
|
||||
e.server.scheduleInTicks(120, () => {
|
||||
e.player.tell(Text.translatable("society.pawpaw_road.3").gold());
|
||||
});
|
||||
e.server.scheduleInTicks(180, () => {
|
||||
e.player.tell(Text.translatable("society.pawpaw_road.4").gold());
|
||||
});
|
||||
e.server.scheduleInTicks(240, () => {
|
||||
e.player.tell(Text.translatable("society.pawpaw_road.5").gold().bold());
|
||||
});
|
||||
e.server.scheduleInTicks(300, () => {
|
||||
e.player.tell(Text.translatable("society.pawpaw_road.6").gold().bold());
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,633 @@
|
||||
console.info("[SOCIETY] pigRacing.js loaded");
|
||||
|
||||
const debugSpeeds = false;
|
||||
|
||||
const pigColors = ["Red", "Blue", "Yellow", "Green"];
|
||||
|
||||
const stashyHashy = (input) => {
|
||||
let hash = 5;
|
||||
for (let i = 0; i < input.length; i++) {
|
||||
hash = (hash * 9) ^ input.codePointAt(i);
|
||||
}
|
||||
return Math.abs(Math.round(hash / 512));
|
||||
};
|
||||
|
||||
const adjustment = (enabled) => (enabled ? 0.05 : 0);
|
||||
|
||||
const getSpeeds = (seed, level) => {
|
||||
let speeds = [];
|
||||
let hashNumber;
|
||||
let boostFirstSprint = false;
|
||||
let sleepyFirstSprint = false;
|
||||
let boostSecondSprint = false;
|
||||
let sleepySecondSprint = false;
|
||||
pigColors.forEach((pig) => {
|
||||
hashNumber = Math.abs(stashyHashy(global.getSeasonFromLevel(level) + pig) + seed);
|
||||
boostFirstSprint = hashNumber % 3 === 0;
|
||||
sleepyFirstSprint = hashNumber % 4 === 0;
|
||||
boostSecondSprint = hashNumber % 5 === 0;
|
||||
sleepySecondSprint = hashNumber % 6 === 0;
|
||||
if (debugSpeeds) {
|
||||
console.log(`${pig}: Boost: ${boostFirstSprint} - ${boostSecondSprint}`);
|
||||
console.log(`${pig}: Sleepy: ${sleepyFirstSprint} - ${sleepySecondSprint}`);
|
||||
}
|
||||
speeds.push([
|
||||
Math.random() * (1.2 + adjustment(boostFirstSprint) - (0.7 - adjustment(sleepyFirstSprint))) +
|
||||
1,
|
||||
Math.random() *
|
||||
(1.2 + adjustment(boostSecondSprint) - (0.7 - adjustment(sleepySecondSprint))) +
|
||||
1,
|
||||
]);
|
||||
});
|
||||
return speeds;
|
||||
};
|
||||
|
||||
const clearPigPaint = (player) => {
|
||||
const pigElements = ["", "Change", "Trophy"];
|
||||
let removedElements = {};
|
||||
let id = "";
|
||||
// Spawn and clear instance of paint element to prevent warnings that they don't exist
|
||||
pigColors.forEach((pig) => {
|
||||
pigElements.forEach((element) => {
|
||||
id = `pig${pig}${element}`;
|
||||
removedElements[id] = { type: "text" };
|
||||
});
|
||||
});
|
||||
player.paint(removedElements);
|
||||
pigColors.forEach((pig) => {
|
||||
pigElements.forEach((element) => {
|
||||
id = `pig${pig}${element}`;
|
||||
removedElements[id] = { remove: true };
|
||||
});
|
||||
});
|
||||
player.paint(removedElements);
|
||||
};
|
||||
|
||||
const initialPaint = (player, bet, pig) => {
|
||||
player.paint({
|
||||
screen: {
|
||||
type: "rectangle",
|
||||
y: -50,
|
||||
w: 268,
|
||||
h: 256,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: "society:textures/gui/pig_racing/horse_racing_screen.png",
|
||||
},
|
||||
pigRed: {
|
||||
type: "rectangle",
|
||||
x: -110,
|
||||
y: -170,
|
||||
z: 20,
|
||||
w: 32,
|
||||
h: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: "society:textures/gui/pig_racing/pig_red.png",
|
||||
},
|
||||
pigBlue: {
|
||||
type: "rectangle",
|
||||
x: -110,
|
||||
y: -132,
|
||||
z: 20,
|
||||
w: 32,
|
||||
h: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: "society:textures/gui/pig_racing/pig_blue.png",
|
||||
},
|
||||
pigYellow: {
|
||||
type: "rectangle",
|
||||
x: -110,
|
||||
y: -94,
|
||||
z: 20,
|
||||
w: 32,
|
||||
h: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: "society:textures/gui/pig_racing/pig_yellow.png",
|
||||
},
|
||||
pigGreen: {
|
||||
type: "rectangle",
|
||||
x: -110,
|
||||
y: -54,
|
||||
z: 20,
|
||||
w: 32,
|
||||
h: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: "society:textures/gui/pig_racing/pig_green.png",
|
||||
},
|
||||
betCoin: {
|
||||
type: "item",
|
||||
item: bet.id,
|
||||
x: -100,
|
||||
y: -197,
|
||||
h: 32,
|
||||
w: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
betCount: {
|
||||
type: "text",
|
||||
text: `x${bet.count}`,
|
||||
scale: 3,
|
||||
color: "#000000",
|
||||
x: -70,
|
||||
y: -207,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
betPig: {
|
||||
type: "rectangle",
|
||||
y: -212,
|
||||
x: 112,
|
||||
z: 20,
|
||||
w: 32,
|
||||
h: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/pig_${pig.toLowerCase()}.png`,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const getCountDownPaint = (count) => {
|
||||
return {
|
||||
type: "rectangle",
|
||||
y: -70,
|
||||
z: 10,
|
||||
w: 128,
|
||||
h: 128,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/${count}.png`,
|
||||
};
|
||||
};
|
||||
|
||||
const countDown = (player, server) => {
|
||||
const delayFactor = 7;
|
||||
player.paint({
|
||||
number: getCountDownPaint("3"),
|
||||
});
|
||||
server.scheduleInTicks(delayFactor, () => {
|
||||
player.paint({
|
||||
number: getCountDownPaint("2"),
|
||||
});
|
||||
});
|
||||
server.scheduleInTicks(delayFactor * 2, () => {
|
||||
player.paint({
|
||||
number: getCountDownPaint("1"),
|
||||
});
|
||||
});
|
||||
server.scheduleInTicks(delayFactor * 3, () => {
|
||||
player.paint({
|
||||
number: {
|
||||
type: "rectangle",
|
||||
y: -70,
|
||||
z: 10,
|
||||
w: 128,
|
||||
h: 128,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/go.png`,
|
||||
},
|
||||
});
|
||||
});
|
||||
server.scheduleInTicks(delayFactor * 4, () => {
|
||||
player.paint({
|
||||
number: { remove: true },
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const paintPig = (player, server, xOffset, speeds, halfwayPoint, ranking) => {
|
||||
const yOffsets = [-170, -132, -94, -54];
|
||||
let pigElement = {};
|
||||
const finishLine = 214;
|
||||
let id = "";
|
||||
let halfWay = 0;
|
||||
let secondWindCalc = 0;
|
||||
let secondWindChange = false;
|
||||
let calculatedOffset = 0;
|
||||
let raceCompleted = false;
|
||||
|
||||
pigColors.forEach((color, index) => {
|
||||
id = `pig${color}`;
|
||||
halfWay = speeds[index][0] * halfwayPoint;
|
||||
secondWindCalc = halfWay + speeds[index][1] * (xOffset - halfwayPoint) + 1;
|
||||
raceCompleted = secondWindCalc >= finishLine;
|
||||
calculatedOffset =
|
||||
speeds[index][0] * xOffset >= halfWay
|
||||
? raceCompleted
|
||||
? finishLine
|
||||
: secondWindCalc
|
||||
: speeds[index][0] * xOffset;
|
||||
if (
|
||||
Math.floor(speeds[index][0] * xOffset) === Math.floor(halfWay) &&
|
||||
Math.abs(speeds[index][1] - speeds[index][0]) >= 0.1
|
||||
) {
|
||||
secondWindChange = speeds[index][1] > speeds[index][0];
|
||||
server.runCommandSilent(
|
||||
`playsound ${secondWindChange ? "trials:breeze_idle" : "trials:spawner_summon"} player @a ${
|
||||
player.x
|
||||
} ${player.y} ${player.z}`
|
||||
);
|
||||
pigElement[`${id}Change`] = {
|
||||
type: "rectangle",
|
||||
color: "#FFFFFF",
|
||||
z: 12,
|
||||
x: -110 + halfWay,
|
||||
y: yOffsets[index] - 8,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/${secondWindChange ? "boost" : "sleepy"}.png`,
|
||||
};
|
||||
}
|
||||
pigElement[id] = { remove: true };
|
||||
player.paint(pigElement);
|
||||
pigElement[id] = {
|
||||
type: "rectangle",
|
||||
x: -110 + calculatedOffset,
|
||||
y: yOffsets[index],
|
||||
z: 11,
|
||||
w: 32,
|
||||
h: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/pig_${color.toLowerCase()}.png`,
|
||||
};
|
||||
if (raceCompleted) {
|
||||
!ranking.includes(color) && ranking.push(color);
|
||||
pigElement[`${id}Trophy`] = {
|
||||
type: "rectangle",
|
||||
y: yOffsets[index],
|
||||
x: finishLine - 130 - 16,
|
||||
z: 10,
|
||||
w: 32,
|
||||
h: 32,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/trophy_${ranking.indexOf(color) + 1}.png`,
|
||||
};
|
||||
}
|
||||
player.paint(pigElement);
|
||||
});
|
||||
};
|
||||
|
||||
const handleSPResults = (player, server, betPig, betItem, ranking) => {
|
||||
let newItem = betItem;
|
||||
newItem.count = betItem.count * 2;
|
||||
const wonRace = ranking[0] === betPig;
|
||||
if (wonRace) {
|
||||
player.give(Item.of(newItem));
|
||||
server.runCommandSilent(
|
||||
`playsound advancementplaques:ui.toast.goal_complete player @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
} else {
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:fish_escape player @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
}
|
||||
player.paint({
|
||||
result: {
|
||||
type: "rectangle",
|
||||
y: -70,
|
||||
z: 20,
|
||||
w: 128,
|
||||
h: 128,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/${wonRace ? "win" : "lost"}.png`,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleMPResults = (player, server, betPig, betValue, poolValue, ranking) => {
|
||||
const wonRace = ranking[0] === betPig;
|
||||
let prizePoolCoins = 0;
|
||||
ranking.forEach((rank, index) => {
|
||||
if (rank === betPig) {
|
||||
if (index === 0) {
|
||||
prizePoolCoins = global.calculateCoinsFromValue(Math.min(poolValue, betValue * 2), []);
|
||||
prizePoolCoins.forEach((coin) => {
|
||||
player.give(Item.of(`${coin.count}x ${coin.id}`));
|
||||
});
|
||||
server.tell(
|
||||
Text.translatable(
|
||||
"society.pig_race.multiplay.result",
|
||||
":first_place_medal:",
|
||||
Text.gold(player.username),
|
||||
Text.gold(global.formatPrice(Math.min(poolValue, betValue * 2))),
|
||||
global.getPigColoredName(betPig)
|
||||
).gray()
|
||||
);
|
||||
}
|
||||
if (index === 1) {
|
||||
prizePoolCoins = global.calculateCoinsFromValue(betValue, []);
|
||||
prizePoolCoins.forEach((coin) => {
|
||||
player.give(Item.of(`${Math.floor(coin.count)}x ${coin.id}`));
|
||||
});
|
||||
server.tell(
|
||||
Text.translatable(
|
||||
"society.pig_race.multiplay.result",
|
||||
":second_place_medal:",
|
||||
Text.gold(player.username),
|
||||
Text.gold(global.formatPrice(Math.min(poolValue, betValue))),
|
||||
global.getPigColoredName(betPig)
|
||||
).gray()
|
||||
);
|
||||
}
|
||||
if (index === 2) {
|
||||
prizePoolCoins = global.calculateCoinsFromValue(betValue / 2, []);
|
||||
prizePoolCoins.forEach((coin) => {
|
||||
player.give(Item.of(`${Math.floor(coin.count)}x ${coin.id}`));
|
||||
});
|
||||
server.tell(
|
||||
Text.translatable(
|
||||
"society.pig_race.multiplay.result",
|
||||
":third_place_medal:",
|
||||
Text.gold(player.username),
|
||||
Text.gold(global.formatPrice(Math.min(poolValue, betValue / 2))),
|
||||
global.getPigColoredName(betPig)
|
||||
).gray()
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (wonRace) {
|
||||
server.runCommandSilent(
|
||||
`playsound advancementplaques:ui.toast.goal_complete player @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
} else {
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:fish_escape player @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
}
|
||||
player.paint({
|
||||
result: {
|
||||
type: "rectangle",
|
||||
y: -70,
|
||||
z: 20,
|
||||
w: 128,
|
||||
h: 128,
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
texture: `society:textures/gui/pig_racing/${wonRace ? "win" : "lost"}.png`,
|
||||
},
|
||||
});
|
||||
};
|
||||
const resetMP = (server) => {
|
||||
server.persistentData.bets = [];
|
||||
server.persistentData.pigraceInProgress = false;
|
||||
};
|
||||
const runPigRace = (player, server, bet, betPig, ranking, pigSpeeds) => {
|
||||
global.addItemCooldown(player, "society:pig_race_ticket", 350);
|
||||
server.scheduleInTicks(0, () => {
|
||||
server.runCommandSilent(`stopsound ${player.username}`);
|
||||
server.runCommandSilent(
|
||||
`playsound society:blazing_drift_fever_ex music ${player.username} ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
initialPaint(player, bet, betPig);
|
||||
|
||||
countDown(player, server);
|
||||
server.scheduleInTicks(25, () => {
|
||||
const halfwayPoint = Math.floor(rnd(40, 120));
|
||||
let i = 0;
|
||||
let k = 0;
|
||||
do {
|
||||
player.server.scheduleInTicks(i, () => {
|
||||
paintPig(player, server, k, pigSpeeds, halfwayPoint, ranking);
|
||||
k++;
|
||||
});
|
||||
i++;
|
||||
} while (i < 220);
|
||||
});
|
||||
|
||||
server.scheduleInTicks(300 + 20, () => {
|
||||
server.runCommandSilent(`stopsound ${player.username}`);
|
||||
clearPigPaint(player);
|
||||
player.paint({
|
||||
screen: { remove: true },
|
||||
betCoin: { remove: true },
|
||||
betCount: { remove: true },
|
||||
betPig: { remove: true },
|
||||
result: { remove: true },
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const validTicket = (e, bet) => {
|
||||
const { player, server, item } = e;
|
||||
const coins = [
|
||||
"numismatics:crown",
|
||||
"numismatics:sun",
|
||||
"numismatics:neptunium_coin",
|
||||
"numismatics:ancient_coin",
|
||||
"numismatics:prismatic_coin",
|
||||
];
|
||||
|
||||
if (!coins.includes(bet.id)) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(
|
||||
player.username,
|
||||
`{anchor:"BOTTOM_CENTER",background:1,align:"BOTTOM_CENTER",color:"#FFFFFFF",offsetY:-60}`,
|
||||
80,
|
||||
Text.translatable("society.pig_race.need_coin").toJson()
|
||||
)
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (!item.nbt) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(
|
||||
player.username,
|
||||
`{anchor:"BOTTOM_CENTER",background:1,align:"BOTTOM_CENTER",color:"#FFFFFFF",offsetY:-60}`,
|
||||
80,
|
||||
Text.translatable("society.pig_race.need_to_select_pig").toJson()
|
||||
)
|
||||
);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
ItemEvents.rightClicked("society:pig_race_ticket", (e) => {
|
||||
const { player, server, item, level } = e;
|
||||
const pigSpeeds = getSpeeds(server.worldData.worldGenOptions().seed(), level);
|
||||
const bet = player.offHandItem;
|
||||
let betPig;
|
||||
let ranking = [];
|
||||
|
||||
if (!validTicket(e, bet)) return;
|
||||
item.count--;
|
||||
player.offHandItem = "minecraft:air";
|
||||
betPig = item.nbt.bet;
|
||||
|
||||
runPigRace(player, server, bet, betPig, ranking, pigSpeeds);
|
||||
|
||||
server.scheduleInTicks(210 + 40, () => {
|
||||
handleSPResults(player, server, betPig, bet, ranking);
|
||||
});
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:multiplayer_pig_race_ticket", (e) => {
|
||||
const { player, server, item, level } = e;
|
||||
const pigSpeeds = getSpeeds(server.worldData.worldGenOptions().seed(), level);
|
||||
const bettingPeriod = 20 * 60 * 2;
|
||||
const bet = player.offHandItem;
|
||||
let raceData = server.persistentData;
|
||||
let betValue;
|
||||
let betPig;
|
||||
let ranking = [];
|
||||
let players = [];
|
||||
let prizePool = 0;
|
||||
|
||||
if (raceData.pigraceInProgress) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(
|
||||
player.username,
|
||||
`{anchor:"BOTTOM_CENTER",background:1,align:"BOTTOM_CENTER",color:"#FFFFFFF",offsetY:-60}`,
|
||||
80,
|
||||
Text.translatable("society.pig_race.multiplay.in_progress").toJson()
|
||||
)
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!validTicket(e, bet)) return;
|
||||
resetMP(server);
|
||||
item.count--;
|
||||
player.offHandItem = "minecraft:air";
|
||||
betValue = betValue = global.calculateCoinValue(bet);
|
||||
betPig = item.nbt.bet;
|
||||
server.tell(
|
||||
Text.translatable(
|
||||
"society.pig_race.multiplay.start",
|
||||
Text.gold(player.username),
|
||||
Text.gold(global.formatPrice(betValue)),
|
||||
global.getPigColoredName(betPig)
|
||||
)
|
||||
);
|
||||
raceData.pigraceInProgress = true;
|
||||
raceData.ageRaceStarted = server.getTickCount();
|
||||
raceData.bets = [];
|
||||
raceData.bets.push({
|
||||
player: player.username,
|
||||
bet: betValue,
|
||||
betPig: betPig,
|
||||
});
|
||||
|
||||
server.scheduleInTicks(0, () => {
|
||||
server.scheduleInTicks(bettingPeriod / 2, () => {
|
||||
server.tell(
|
||||
Text.translatable(
|
||||
"society.pig_race.multiplay.start_in_minute",
|
||||
`${bettingPeriod / (2 * 20 * 60)}`
|
||||
).gray()
|
||||
);
|
||||
});
|
||||
server.scheduleInTicks(bettingPeriod - 10 * 20, () => {
|
||||
server.tell(Text.translatable("society.pig_race.multiplay.start_in_10").gray());
|
||||
});
|
||||
server.scheduleInTicks(bettingPeriod, () => {
|
||||
raceData = server.persistentData;
|
||||
if (raceData.bets.length > 1) {
|
||||
raceData.pigraceInProgress = false;
|
||||
for (let index = 0; index < raceData.bets.length; index++) {
|
||||
prizePool += raceData.bets[index].bet;
|
||||
}
|
||||
level.getServer().players.forEach((p) => {
|
||||
for (let index = 0; index < raceData.bets.length; index++) {
|
||||
if (String(p.username) === String(raceData.bets[index].player)) {
|
||||
players.push(p);
|
||||
runPigRace(
|
||||
p,
|
||||
server,
|
||||
global.calculateCoinsFromValue(prizePool, [])[0],
|
||||
String(raceData.bets[index].betPig),
|
||||
ranking,
|
||||
pigSpeeds
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
server.tell(
|
||||
Text.translatable(
|
||||
"society.pig_race.multiplay.started",
|
||||
`${global.formatPrice(prizePool)}`
|
||||
).gray()
|
||||
);
|
||||
} else {
|
||||
player.give(bet);
|
||||
player.give(Item.of("society:multiplayer_pig_race_ticket"));
|
||||
server.tell(Text.translatable("society.pig_race.multiplay.cancelled").gray());
|
||||
clearPigPaint(player);
|
||||
resetMP(server);
|
||||
}
|
||||
});
|
||||
|
||||
server.scheduleInTicks(210 + 40 + bettingPeriod, () => {
|
||||
level.getServer().players.forEach((p) => {
|
||||
for (let index = 0; index < raceData.bets.length; index++) {
|
||||
if (String(p.username) === String(raceData.bets[index].player)) {
|
||||
handleMPResults(
|
||||
p,
|
||||
server,
|
||||
String(raceData.bets[index].betPig),
|
||||
Number(raceData.bets[index].bet),
|
||||
prizePool,
|
||||
ranking
|
||||
);
|
||||
clearPigPaint(player);
|
||||
}
|
||||
}
|
||||
});
|
||||
resetMP(server);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
ItemEvents.firstLeftClicked(
|
||||
["society:pig_race_ticket", "society:multiplayer_pig_race_ticket"],
|
||||
(e) => {
|
||||
const { item, server, player } = e;
|
||||
server.runCommandSilent(
|
||||
`playsound refurbished_furniture:ui.paddle_ball.retro_click block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
let newNbt = item.getNbt() || { bet: 0 };
|
||||
const betIndex = pigColors.indexOf(newNbt.bet);
|
||||
const betPig = pigColors[betIndex === 3 ? 0 : betIndex + 1];
|
||||
newNbt.bet = betPig;
|
||||
item.nbt = newNbt;
|
||||
const pigSelectedText = Text.translatable("society.pig_race.pig_selected", global.getPigColoredName(betPig));
|
||||
const pigSelectedTextShadow = Text.translatable("society.pig_race.pig_selected", betPig).noColor();
|
||||
global.renderUiText(
|
||||
player,
|
||||
server,
|
||||
{
|
||||
pigBet: {
|
||||
type: "text",
|
||||
x: 0,
|
||||
y: -90,
|
||||
text: `${pigSelectedText.toJson()}`,
|
||||
color: "#AAAAAA",
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
pigBetShadow: {
|
||||
type: "text",
|
||||
x: 1,
|
||||
z: -1,
|
||||
y: -89,
|
||||
text: `${pigSelectedTextShadow.toJson()}`,
|
||||
color: "#000000",
|
||||
alignX: "center",
|
||||
alignY: "bottom",
|
||||
},
|
||||
},
|
||||
["pigBet"]
|
||||
);
|
||||
global.addItemCooldown(player, item, 10);
|
||||
}
|
||||
);
|
||||
@@ -0,0 +1,38 @@
|
||||
console.info("[SOCIETY] plushieCapsule.js loaded");
|
||||
|
||||
ItemEvents.rightClicked("society:plushie_capsule", (e) => {
|
||||
const { server, player, item } = e;
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:ui.stonecutter.take_result block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
|
||||
const plushies = Ingredient.of("#society:plushies").itemIds;
|
||||
|
||||
if (!player.isCreative()) item.count--;
|
||||
let red = player.stages.has("the_red_and_the_black");
|
||||
let women = player.stages.has("women_who_run_with_the_plushies");
|
||||
const drop = plushies[Math.floor(Math.random() * plushies.length)];
|
||||
let reward = player.level.createEntity("minecraft:item");
|
||||
let quality = 0;
|
||||
const qualityRoll = Math.random();
|
||||
const type = Number(rnd(0, 14));
|
||||
const quest = Number(rnd(1, 3));
|
||||
const gatchaRarity = women ? [0.25, 0.6, 0.3, 0.1] : [0.5, 0.3, 0.15, 0.05];
|
||||
gatchaRarity.forEach((rarity, index) => {
|
||||
if (qualityRoll < rarity) quality = index;
|
||||
});
|
||||
reward.x = player.x;
|
||||
reward.y = player.y;
|
||||
reward.z = player.z;
|
||||
reward.item = Item.of(
|
||||
`${red ? 2 : 1}x ${drop}`,
|
||||
`{quality_food:{quality:${quality}},type:${type},quest_id:${quest},affection:${
|
||||
women ? 2 : 0
|
||||
}}`
|
||||
);
|
||||
reward.spawn();
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
global.addItemCooldown(player, "society:plushie_capsule", 2);
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
console.info("[SOCIETY] plushieDebug.js loaded");
|
||||
|
||||
ItemEvents.entityInteracted('etcetera:wrench', (e) => {
|
||||
global.plushieTraits.forEach((trait, index) => {
|
||||
e.player.give(Item.of('perfectplushies:adv_duck_plushie', `{affection:4,animal:{type:"${e.target.type}"},quality_food:{quality:3},quest_id:1,type:${index}}`))
|
||||
})
|
||||
});
|
||||
@@ -0,0 +1,66 @@
|
||||
console.info("[SOCIETY] regretCrystals.js loaded");
|
||||
|
||||
const resetSkills = (tree, server, player, amount) => {
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:fish_escape block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(`puffish_skills category erase ${player.username} society:${tree}`);
|
||||
server.runCommandSilent(`puffish_skills points set ${player.username} society:${tree} 0`);
|
||||
global.giveExperience(server, player, tree, amount, true);
|
||||
player.tell(
|
||||
Text.translatable(
|
||||
"society.crystal_of_regret.success",
|
||||
global.translatableWithFallback(`society_skills.${tree}.category.title`, `${tree}`)
|
||||
).gray()
|
||||
);
|
||||
};
|
||||
|
||||
ItemEvents.rightClicked("society:crystal_of_regret_farming", (e) => {
|
||||
const { player, item, server } = e;
|
||||
if (player.stages.has("soil_inspector") || player.stages.has("sticky_crops")) {
|
||||
resetSkills("farming", server, player, 15500);
|
||||
item.count--;
|
||||
} else {
|
||||
player.tell(Text.translatable("society.crystal_of_regret.fail").red());
|
||||
}
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:crystal_of_regret_husbandry", (e) => {
|
||||
const { player, item, server } = e;
|
||||
if (player.stages.has("animal_whisperer") || player.stages.has("bribery")) {
|
||||
resetSkills("husbandry", server, player, 14500);
|
||||
item.count--;
|
||||
} else {
|
||||
player.tell(Text.translatable("society.crystal_of_regret.fail").red());
|
||||
}
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:crystal_of_regret_mining", (e) => {
|
||||
const { player, item, server } = e;
|
||||
if (player.stages.has("furniture_archaeologist") || player.stages.has("blockchain")) {
|
||||
resetSkills("mining", server, player, 8750);
|
||||
item.count--;
|
||||
} else {
|
||||
player.tell(Text.translatable("society.crystal_of_regret.fail").red());
|
||||
}
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:crystal_of_regret_fishing", (e) => {
|
||||
const { player, item, server } = e;
|
||||
if (player.stages.has("mystical_ocean")) {
|
||||
resetSkills("fishing", server, player, 14500);
|
||||
item.count--;
|
||||
} else {
|
||||
player.tell(Text.translatable("society.crystal_of_regret.fail").red());
|
||||
}
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:crystal_of_regret_adventuring", (e) => {
|
||||
const { player, item, server } = e;
|
||||
if (player.stages.has("fence") || player.stages.has("dragonslayer")) {
|
||||
resetSkills("adventuring", server, player, 8750);
|
||||
item.count--;
|
||||
} else {
|
||||
player.tell(Text.translatable("society.crystal_of_regret.fail").red());
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,48 @@
|
||||
console.info("[SOCIETY] skillBooks.js loaded");
|
||||
|
||||
[
|
||||
{ id: "society:alias_moss", skillId: "b2zbjhxyrcwlwb9e" },
|
||||
{ id: "society:animal_fancy", skillId: "dk83vl5zi9fw3ovi" },
|
||||
{ id: "society:banana_karenina", skillId: "76yv8nz8x47d80oe" },
|
||||
{ id: "society:brine_and_punishment", skillId: "p5dklukq9ggwgfa4" },
|
||||
{ id: "society:bluegill_meridian", skillId: "9ax835fydbyuvjkx" },
|
||||
{ id: "society:bullfish_jobs", skillId: "pirgo25ykt4bsbdo" },
|
||||
{ id: "society:canadian_and_famous", skillId: "x52wa6t39ywp17zu" },
|
||||
{ id: "society:first_aid_guide", skillId: "12wl5sjx8vy7q0xl" },
|
||||
{ id: "society:hitting_hard_and_soft", skillId: "t07mtr3euiz40jb0" },
|
||||
{ id: "society:no_name_for_the_sheep", skillId: "uzxujhppzlyg5d03" },
|
||||
{ id: "society:intro_to_algorithms", skillId: "gv808dy0r2fo6ire" },
|
||||
{ id: "society:paradise_crop", skillId: "3grtavzaxp3xbp67" },
|
||||
{ id: "society:slouching_towards_artistry", skillId: "pitrguemps2735n3" },
|
||||
{ id: "society:debt_caverns", skillId: "bh5306iiysq2692k" },
|
||||
{ id: "society:frogs_bounty_bazaar", skillId: "3fgcne477ni1rjxx" },
|
||||
{ id: "society:phenomenology_of_treasure", skillId: "z68vn1cf2lucfbos" },
|
||||
{ id: "society:slime_contain_protect", skillId: "uj8tnf4jgm0xyp13" },
|
||||
{ id: "society:the_spark_also_rises", skillId: "n3wgu1edjjl2t511" },
|
||||
{ id: "society:universal_methods_of_farming", skillId: "dm3efjm3y57v34ir" },
|
||||
{ id: "society:wuthering_logs", skillId: "y1xltbgkupmcoe0i" },
|
||||
{ id: "society:pond_house_five", skillId: "ajxn495vvckv1pow" },
|
||||
{ id: "society:the_quality_of_the_earth", skillId: "y99a5jkv7tmu7vmc" },
|
||||
{ id: "society:the_red_and_the_black", skillId: "ysthrzir822oedus" },
|
||||
{ id: "society:women_who_run_with_the_plushies", skillId: "2vo8noqvq4aj1egy" },
|
||||
{ id: "society:the_metamorphosize", skillId: "gjvl3ej2fhc4cwzb" },
|
||||
].forEach((book) => {
|
||||
ItemEvents.rightClicked(book.id, (e) => {
|
||||
const { player, item, server } = e;
|
||||
const stageName = String(item.id).path;
|
||||
if (!player.stages.has(stageName)) {
|
||||
server.runCommandSilent(
|
||||
`puffish_skills skills unlock ${player.username} society:books ${book.skillId}`
|
||||
);
|
||||
player.tell(Text.translatable("society.skill_book.learn").green());
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:block.enchantment_table.use block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
item.count--;
|
||||
global.addItemCooldown(player, item, 20);
|
||||
} else {
|
||||
player.tell(Text.translatable("society.skill_book.already_learn").red());
|
||||
global.addItemCooldown(player, item, 20);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,146 @@
|
||||
console.info("[SOCIETY] smokeTubasmokeStick.js loaded");
|
||||
|
||||
const endlessEntranaTemplate =
|
||||
'{anchor:"BOTTOM_CENTER",background:1,wrap:220,align:"BOTTOM_CENTER",color:"#00AAAA",offsetY:-60}';
|
||||
|
||||
ItemEvents.rightClicked("society:tubasmoke_stick", (e) => {
|
||||
const { server, player, item, hand, level } = e;
|
||||
player.damageHeldItem(hand, 1);
|
||||
server.runCommandSilent(
|
||||
`playsound minecraft:item.flintandsteel.use block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
|
||||
item.count--;
|
||||
level.spawnParticles(
|
||||
"farmersdelight:steam",
|
||||
true,
|
||||
player.x,
|
||||
player.y + 1,
|
||||
player.z,
|
||||
0.1 * rnd(1, 6),
|
||||
0.1 * rnd(1, 4),
|
||||
0.1 * rnd(1, 4),
|
||||
22,
|
||||
0.001
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`playsound supplementaries:block.cannon.ignite block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(`effect give ${player.username} minecraft:slowness 20 1`);
|
||||
if (Math.random() < 0.02) {
|
||||
server.runCommandSilent(
|
||||
`execute in ${level.dimension} run summon lightning_bolt ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, `{anchor:"BOTTOM_CENTER",charShakeRandom:0.2,background:1,wrap:220,align:"BOTTOM_CENTER",color:"#FF5555",offsetY:-60}`, 60, Text.translatable("society.endless_entrana.text.0").toJson())
|
||||
);
|
||||
}
|
||||
if (Math.random() < 0.01 && !item.nbt) {
|
||||
server.runCommandSilent(
|
||||
`playsound tanukidecor:block.cash_register.ring block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.1").toJson())
|
||||
);
|
||||
server.scheduleInTicks(1, () => {
|
||||
player.give(
|
||||
Item.of(
|
||||
"society:tubasmoke_stick",
|
||||
`{edition:1,display:{Name:'${Text.translatable("society.endless_entrana", Text.of("1").bold()).bold().italic(false).toJson()}'}}`
|
||||
)
|
||||
);
|
||||
});
|
||||
}
|
||||
if (item.nbt && item.nbt.edition) {
|
||||
let giveNew = true;
|
||||
if (item.nbt.edition === 500)
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.2").toJson())
|
||||
);
|
||||
if (item.nbt.edition === 650) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.3").toJson())
|
||||
);
|
||||
}
|
||||
if (item.nbt.edition === 666) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.4").toJson())
|
||||
);
|
||||
server.scheduleInTicks(100, () => {
|
||||
server.runCommandSilent(`kill ${player.username}`);
|
||||
});
|
||||
}
|
||||
|
||||
if (item.nbt.edition === 999) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 1200, Text.translatable("society.endless_entrana.text.5").toJson())
|
||||
);
|
||||
server.scheduleInTicks(648000, () => {
|
||||
server.runCommandSilent(`kill ${player.username}`);
|
||||
});
|
||||
}
|
||||
|
||||
if (item.nbt.edition === 2000) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.6").toJson())
|
||||
);
|
||||
}
|
||||
|
||||
if (item.nbt.edition === 2100) {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.7").toJson())
|
||||
);
|
||||
}
|
||||
if (item.nbt.edition === 5000) {
|
||||
player.give("numismatics:spur");
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.8").toJson())
|
||||
);
|
||||
}
|
||||
if (item.nbt.edition > 10000 && Math.random() < 0.001) {
|
||||
player.give("numismatics:bevel");
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.9").toJson())
|
||||
);
|
||||
}
|
||||
if (item.nbt.edition > 10000 && Math.random() < 0.001) {
|
||||
player.give("numismatics:sprocket");
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.9").toJson())
|
||||
);
|
||||
}
|
||||
if (item.nbt.edition > 1000000000 && Math.random() < 0.0001) {
|
||||
if (player.offHandItem === "numismatics:prismatic_coin") {
|
||||
player.give("create:creative_blaze_cake");
|
||||
player.offHandItem.count--;
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.11").toJson())
|
||||
);
|
||||
giveNew = false;
|
||||
} else {
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, endlessEntranaTemplate, 120, Text.translatable("society.endless_entrana.text.10").toJson())
|
||||
);
|
||||
}
|
||||
}
|
||||
if (giveNew) {
|
||||
server.scheduleInTicks(1, () => {
|
||||
player.give(
|
||||
Item.of(
|
||||
"society:tubasmoke_stick",
|
||||
`{edition:${item.nbt.edition + 1},display:{Name:'${Text.translatable("society.endless_entrana", Text.of((item.nbt.edition + 1).toFixed()).bold()).bold().italic(false).toJson()}'}}`
|
||||
)
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
if (Math.random() < 0.01) {
|
||||
server.scheduleInTicks(800, () => {
|
||||
server.runCommandSilent(`effect give ${player.username} minecraft:wither 40 3`);
|
||||
server.runCommandSilent(
|
||||
global.getEmbersTextAPICommand(player.username, `{anchor:"BOTTOM_CENTER",charShakeRandom:0.2,background:1,wrap:220,align:"BOTTOM_CENTER",color:"#FF5555",offsetY:-60}`, 60, Text.translatable("society.endless_entrana.text.0").toJson())
|
||||
);
|
||||
});
|
||||
}
|
||||
global.addItemCooldown(player, item, 10);
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
// REMOVED
|
||||
@@ -0,0 +1,83 @@
|
||||
console.info("[SOCIETY] totems.js loaded");
|
||||
|
||||
const isEdging = (pos, x, z, radius) =>
|
||||
pos.x === x + radius ||
|
||||
pos.x === x - radius ||
|
||||
pos.z === z + radius ||
|
||||
pos.z === z - radius;
|
||||
|
||||
const runSpotTotem = (e, type) => {
|
||||
const { server, player, level, item } = e;
|
||||
|
||||
const block = player.getOnPos();
|
||||
const { x, y, z } = level.getBlock(block);
|
||||
let radius = 2;
|
||||
let scanBlock;
|
||||
let aboveBlock;
|
||||
for (let pos of BlockPos.betweenClosed(
|
||||
new BlockPos(x - radius, y - 1, z - radius),
|
||||
[x + radius, y + 1, z + radius]
|
||||
)) {
|
||||
if (isEdging(pos, x, z, radius)) {
|
||||
if (!level.isLoaded(pos)) continue;
|
||||
scanBlock = level.getBlock(pos);
|
||||
aboveBlock = level.getBlock(pos.above());
|
||||
if (
|
||||
aboveBlock.id == "minecraft:air" &&
|
||||
((type.equals("digspot") &&
|
||||
scanBlock.hasTag("society:treasure_spot_spawns")) ||
|
||||
(type.equals("fishingspot") &&
|
||||
scanBlock.id.equals("minecraft:water")))
|
||||
) {
|
||||
server.runCommandSilent(
|
||||
`execute as ${player.username} run littlejoys ${type} ${aboveBlock.x} ${aboveBlock.y} ${aboveBlock.z}`
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
server.runCommandSilent(
|
||||
`playsound botania:terrasteel_craft block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
if (!player.isCreative()) item.count--;
|
||||
global.addItemCooldown(player, item.id, 20);
|
||||
};
|
||||
|
||||
ItemEvents.rightClicked("society:treasure_totem", (e) => {
|
||||
runSpotTotem(e, "digspot");
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:bubble_totem", (e) => {
|
||||
runSpotTotem(e, "fishingspot");
|
||||
});
|
||||
|
||||
|
||||
const runWeatherTotem = (e, weather) => {
|
||||
const { server, player, item } = e;
|
||||
|
||||
server.runCommandSilent(
|
||||
`weather ${weather}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`playsound botania:terrasteel_craft block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`playsound stardew_fishing:complete block @a ${player.x} ${player.y} ${player.z}`
|
||||
);
|
||||
if (!player.isCreative()) item.count--;
|
||||
global.addItemCooldown(player, item.id, 2000);
|
||||
};
|
||||
|
||||
ItemEvents.rightClicked("society:dry_totem", (e) => {
|
||||
runWeatherTotem(e, "clear");
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:rain_totem", (e) => {
|
||||
runWeatherTotem(e, "rain");
|
||||
});
|
||||
|
||||
ItemEvents.rightClicked("society:thunder_totem", (e) => {
|
||||
runWeatherTotem(e, "thunder");
|
||||
});
|
||||
@@ -0,0 +1,131 @@
|
||||
console.info("[SOCIETY] validateFishPondQuests.js loaded");
|
||||
|
||||
const multiplierToNatural = (mult) => {
|
||||
switch (mult) {
|
||||
case "shippingbin:meat_sell_multiplier":
|
||||
return "Adventurer";
|
||||
|
||||
case "shippingbin:crop_sell_multiplier":
|
||||
return "Farmer";
|
||||
|
||||
case "shippingbin:wood_sell_multiplier":
|
||||
return "Artisan";
|
||||
|
||||
case "shippingbin:gem_sell_multiplier":
|
||||
return "Geologist";
|
||||
}
|
||||
};
|
||||
// Tests if quest items are valid items. Dev use only.
|
||||
ItemEvents.rightClicked("functionalstorage:creative_vending_upgrade", (e) => {
|
||||
const { player } = e;
|
||||
let generatePriceWikiTable = false;
|
||||
let generatePondTable = false;
|
||||
let generatePrizeMachineTable = true;
|
||||
player.server.persistentData.pigraceInProgress = false;
|
||||
global.fishPondDefinitions.forEach((fish) => {
|
||||
fish.quests.forEach((quest) => {
|
||||
quest.requestedItems.forEach((req) => {
|
||||
if (Item.of(req.item).id === "minecraft:air") player.tell(req.item);
|
||||
});
|
||||
});
|
||||
});
|
||||
if (generatePrizeMachineTable) {
|
||||
player.tell(`{| class="wikitable sortable"`);
|
||||
player.tell("|-");
|
||||
player.tell(
|
||||
`!Prize # !! Hint !! Possible Items`
|
||||
);
|
||||
player.tell("|-");
|
||||
global.prizeMachineRewards.forEach((element, index) => {
|
||||
player.tell(`|`);
|
||||
player.tell(index);
|
||||
player.tell(" || ")
|
||||
player.tell(element.hint);
|
||||
player.tell(" || ")
|
||||
element.possibleOutputs.forEach((output) => {
|
||||
let request = Item.of(output)
|
||||
player.tell("* " + request.count);
|
||||
player.tell(request.displayName);
|
||||
});
|
||||
player.tell("|-");
|
||||
});
|
||||
}
|
||||
if (generatePriceWikiTable) {
|
||||
// player.tell("Quests validated.");
|
||||
// player.tell(`{| class="wikitable sortable"`);
|
||||
// player.tell("|-");
|
||||
// player.tell("! Name !! ID !! Price !! Type");
|
||||
// player.tell("|-");
|
||||
// Array.from(global.trades.keys()).forEach((element) => {
|
||||
// let tradeData = global.trades.get(element);
|
||||
// if (!element.includes("splendid_slimes"))
|
||||
// player.tell(Item.of(element).displayName);
|
||||
// else {
|
||||
// let type = element.substring(element.lastIndexOf(":") + 1);
|
||||
// if (element.includes("plort")) {
|
||||
// player.tell(`Plort: ${type} `);
|
||||
// } else {
|
||||
// player.tell(`Slime Heart: ${type}`);
|
||||
// }
|
||||
// }
|
||||
// player.tell(
|
||||
// ` || ${
|
||||
// element.includes("plort")
|
||||
// ? "splendid_slimes:plort"
|
||||
// : element.includes("slime_heart")
|
||||
// ? "splendid_slimes:slime_heart"
|
||||
// : element
|
||||
// } || ${tradeData.value} || ${multiplierToNatural(tradeData.multiplier)}`
|
||||
// );
|
||||
// player.tell("|-");
|
||||
// });
|
||||
}
|
||||
if (generatePondTable) {
|
||||
// player.tell("Quests validated.");
|
||||
// player.tell(`{| class="wikitable sortable"`);
|
||||
// player.tell("|-");
|
||||
// player.tell(
|
||||
// `!Fish !! Population 3 !! Population 5 !! Population 7`
|
||||
// );
|
||||
// player.tell("|-");
|
||||
// Array.from(global.fishPondDefinitions.keys()).forEach((element) => {
|
||||
// let quests = global.fishPondDefinitions.get(element).quests;
|
||||
// player.tell(`|`);
|
||||
// player.tell(Item.of(element).displayName);
|
||||
// player.tell(" || ")
|
||||
// quests.forEach((quest) => {
|
||||
// quest.requestedItems.forEach((request, index) => {
|
||||
// player.tell("* " + request.count);
|
||||
// player.tell(Item.of(request.item).displayName);
|
||||
// });
|
||||
// player.tell(" || ");
|
||||
// });
|
||||
// player.tell("|-");
|
||||
// });
|
||||
// IDK WHY I COMMENTED THE ABOVE NOW
|
||||
// player.tell("Quests validated.");
|
||||
// player.tell(`{| class="wikitable sortable"`);
|
||||
// player.tell("|-");
|
||||
// player.tell(`!Fish !! Items !! Min Population !! % chance`);
|
||||
// player.tell("|-");
|
||||
// Array.from(global.fishPondDefinitions.keys()).forEach((element) => {
|
||||
// let rewards = global.fishPondDefinitions.get(element).additionalRewards;
|
||||
// player.tell(`|rowspan="${rewards ? rewards.length : 1}"|`);
|
||||
// player.tell(Item.of(element).displayName);
|
||||
// if (rewards) {
|
||||
// rewards.forEach((reward, index) => {
|
||||
// player.tell("| " + reward.count);
|
||||
// player.tell(Item.of(reward.item).displayName);
|
||||
// player.tell("| " + reward.minPopulation);
|
||||
// player.tell(`| ${Math.round(reward.chance * 100)}%`);
|
||||
// player.tell("|- ");
|
||||
// });
|
||||
// } else {
|
||||
// player.tell("|")
|
||||
// player.tell("|")
|
||||
// player.tell("|")
|
||||
// player.tell("|-")
|
||||
// }
|
||||
// });
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user