fix(kubejs): update kubejs scripts
This commit is contained in:
parent
28a30d94c0
commit
57be389894
13 changed files with 921 additions and 251 deletions
250
kubejs/server_scripts/warzone.js
Normal file
250
kubejs/server_scripts/warzone.js
Normal file
|
|
@ -0,0 +1,250 @@
|
|||
/**
|
||||
* @type {{
|
||||
* guns: [Internal.ItemStack, Internal.ItemStack][],
|
||||
* items: Internal.ItemStack[],
|
||||
* }}
|
||||
*/
|
||||
var loot = { guns: [], items: [] };
|
||||
|
||||
/** @type {{[key: string]: number }} */
|
||||
var playerKills = {};
|
||||
/** @type {?string} */
|
||||
var playerBoss = null;
|
||||
|
||||
ServerEvents.commandRegistry((event) => {
|
||||
// /enter_warzone <target>
|
||||
registerCommand(event, {
|
||||
command: "enter_warzone",
|
||||
operator: true,
|
||||
parameters: [
|
||||
{
|
||||
name: "target",
|
||||
type: event.arguments.PLAYER,
|
||||
handler: (ctx) => {
|
||||
const server = ctx.source.server;
|
||||
const player = event.arguments.PLAYER.getResult(ctx, "target");
|
||||
|
||||
// Initialize scoreboards
|
||||
if (!server.persistentData.getBoolean("scoreboardsInitialized")) {
|
||||
server.runCommandSilent(
|
||||
`scoreboard objectives add warzone_kills dummy "Kills"`,
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`scoreboard objectives setdisplay sidebar warzone_kills`,
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`scoreboard objectives setdisplay belowName warzone_kills`,
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`scoreboard objectives add warzone_total_kills dummy "Total Kills"`,
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`scoreboard objectives setdisplay list warzone_total_kills`,
|
||||
);
|
||||
server.persistentData.putBoolean("scoreboardsInitialized", true);
|
||||
}
|
||||
|
||||
// Teleport to warzone
|
||||
server.runCommandSilent(
|
||||
`execute in retards:adventure run tp ${player.username} 424 122 552`,
|
||||
);
|
||||
|
||||
// Clear inventory
|
||||
server.runCommandSilent(`clear ${player.username}`);
|
||||
|
||||
// Initialize kill count
|
||||
const data = player.persistentData;
|
||||
if (!data.getInt("kills")) data.putInt("kills", 0);
|
||||
|
||||
// Set scoreboard kill count
|
||||
server.runCommandSilent(
|
||||
`scoreboard players set ${player.username} warzone_total_kills ${data.getInt("kills")}`,
|
||||
);
|
||||
|
||||
// Initialize kill streak
|
||||
playerKills[player.username] = 0;
|
||||
|
||||
// Set scoreboard kill streak
|
||||
server.runCommandSilent(
|
||||
`scoreboard players set ${player.username} warzone_kills 0`,
|
||||
);
|
||||
|
||||
// Toggle layout
|
||||
server.runCommandSilent(
|
||||
`fmlayout default_hud_layout false ${player.username}`,
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`fmlayout warzone_hud_layout true ${player.username}`,
|
||||
);
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// /exit_warzone <target>
|
||||
registerCommand(event, {
|
||||
command: "exit_warzone",
|
||||
operator: true,
|
||||
parameters: [
|
||||
{
|
||||
name: "target",
|
||||
type: event.arguments.PLAYER,
|
||||
handler: (ctx) => {
|
||||
const server = ctx.source.server;
|
||||
const player = event.arguments.PLAYER.getResult(ctx, "target");
|
||||
|
||||
// Teleport to portal
|
||||
server.runCommandSilent(
|
||||
`execute in retards:adventure run tp ${player.username} -103 -14 -82`,
|
||||
);
|
||||
|
||||
// Clear inventory
|
||||
server.runCommandSilent(`clear ${player.username}`);
|
||||
|
||||
// Remove from scoreboards
|
||||
server.runCommandSilent(
|
||||
`scoreboard players remove ${player.username} warzone_total_kills`,
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`scoreboard players remove ${player.username} warzone_kills`,
|
||||
);
|
||||
|
||||
// Toggle layout
|
||||
server.runCommandSilent(
|
||||
`fmlayout warzone_hud_layout false ${player.username}`,
|
||||
);
|
||||
server.runCommandSilent(
|
||||
`fmlayout default_hud_layout true ${player.username}`,
|
||||
);
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// /warzone_load_loot_tables
|
||||
registerCommand(event, {
|
||||
command: "warzone_load_loot_tables",
|
||||
operator: true,
|
||||
handler: (ctx) => {
|
||||
const server = ctx.source.server;
|
||||
const level = server.getLevel("retards:adventure");
|
||||
|
||||
const itemFrames = filterEntities(
|
||||
level,
|
||||
(e) => e.type === "minecraft:item_frame",
|
||||
);
|
||||
|
||||
loot = { guns: [], items: [] };
|
||||
|
||||
const isAir = (/** @type {Internal.ItemStack} */ item) =>
|
||||
item.id === "minecraft:air";
|
||||
|
||||
for (var i = 0; i < itemFrames.size(); i++) {
|
||||
var frame = itemFrames.get(i);
|
||||
if (frame.item && frame.item.id === "minecraft:copper_ingot") {
|
||||
var pos = frame.blockPosition().below();
|
||||
var block = level.getBlock(pos);
|
||||
if (block.id == "minecraft:chest") {
|
||||
console.log(pos);
|
||||
/** @type {Internal.Optional<Internal.ChestBlockEntity>} */
|
||||
var chestEntity = level.getBlockEntity(pos, "chest");
|
||||
if (chestEntity.isPresent()) {
|
||||
/** @type {Internal.ChestBlockEntity} */
|
||||
var chest = chestEntity.get();
|
||||
for (var col = 0; col < 9; col++) {
|
||||
var first = chest.getItem(col).copy();
|
||||
var second = chest.getItem(col + 9).copy();
|
||||
var third = chest.getItem(col + 18).copy();
|
||||
|
||||
if (!isAir(first) && !isAir(second))
|
||||
loot.guns.push([first, second]);
|
||||
if (!isAir(third)) loot.items.push(third);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const gunCount = loot.guns.length;
|
||||
const itemCount = loot.items.length;
|
||||
|
||||
server.runCommandSilent(
|
||||
`say Loaded ${gunCount} guns and ${itemCount} items`,
|
||||
);
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
ServerEvents.tick((event) => {
|
||||
if (event.server.tickCount % 1200 !== 0) return;
|
||||
if (event.server.tickCount % 2400 === 0)
|
||||
event.server.runCommandSilent(
|
||||
"execute in retards:adventure run effect give @a[x=424,y=-1,z=552,distance=..128] minecraft:glowing 3 1 true",
|
||||
);
|
||||
const level = event.server.getLevel("retards:adventure");
|
||||
|
||||
const itemFrames = filterEntities(
|
||||
level,
|
||||
(entity) => entity.type === "minecraft:item_frame",
|
||||
);
|
||||
|
||||
for (var i = 0; i < itemFrames.size(); i++) {
|
||||
var frame = itemFrames.get(i);
|
||||
if (frame.item && frame.item.id === "minecraft:gunpowder") {
|
||||
var pos = frame.blockPosition().above().above();
|
||||
var block = level.getBlock(pos);
|
||||
if (block.id === "minecraft:chest") {
|
||||
/** @type {Internal.Optional<Internal.ChestBlockEntity>} */
|
||||
var chestEntity = level.getBlockEntity(pos, "chest");
|
||||
if (chestEntity.isPresent()) {
|
||||
/** @type {Internal.ChestBlockEntity} */
|
||||
var chest = chestEntity.get();
|
||||
chest.clearContent();
|
||||
var { guns, items } = loot;
|
||||
if (guns.length) {
|
||||
var [gun, ammo] = guns[Math.floor(Math.random() * guns.length)];
|
||||
chest.setItem(0, gun.copy());
|
||||
chest.setItem(1, ammo.copy());
|
||||
}
|
||||
if (items.length) {
|
||||
var item = items[Math.floor(Math.random() * items.length)];
|
||||
chest.setItem(2, item.copy());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
EntityEvents.death("player", (event) => {
|
||||
const killer = event.source.player;
|
||||
const victim = event.entity;
|
||||
|
||||
if (!killer) return;
|
||||
|
||||
// Increase killer total kill count
|
||||
const data = killer.persistentData;
|
||||
data.putInt("kills", data.getInt("kills") + 1);
|
||||
event.server.runCommandSilent(
|
||||
`scoreboard players set ${killer.username} warzone_total_kills ${data.getInt("kills")}`,
|
||||
);
|
||||
|
||||
// Increase killer kill streak
|
||||
if (!playerKills[killer.username]) playerKills[killer.username] = 0;
|
||||
playerKills[killer.username]++;
|
||||
event.server.runCommandSilent(
|
||||
`scoreboard players set ${killer.username} warzone_kills ${playerKills[killer.username]}`,
|
||||
);
|
||||
|
||||
// Reset victim kill streak
|
||||
playerKills[victim.username] = 0;
|
||||
event.server.runCommandSilent(
|
||||
`scoreboard players set ${victim.username} warzone_kills 0`,
|
||||
);
|
||||
|
||||
// Update player boss
|
||||
event.server.runCommandSilent(`effect clear ${playerBoss} minecraft:glowing`);
|
||||
for (const [username, kills] of Object.entries(playerKills))
|
||||
if (!playerBoss || kills > playerKills[playerBoss]) playerBoss = username;
|
||||
event.server.runCommandSilent(`effect clear ${playerBoss} minecraft:glowing`);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue