From 57be3898943414769a63c2271ae0b99f0f13c4f2 Mon Sep 17 00:00:00 2001 From: Malasaur Date: Sun, 22 Feb 2026 21:51:29 +0100 Subject: [PATCH] fix(kubejs): update kubejs scripts --- index.toml | 356 +++++++++++++++++++++++- kubejs/config/settings.json | 34 --- kubejs/jsconfig.json | 17 ++ kubejs/server_scripts/config.js | 61 ++++ kubejs/server_scripts/dimensions.js | 94 +++---- kubejs/server_scripts/greeting.js | 11 + kubejs/server_scripts/keep.js | 29 +- kubejs/server_scripts/lib.js | 127 +++++++++ kubejs/server_scripts/rsapi-commands.js | 71 ----- kubejs/server_scripts/rsapi-events.js | 78 ------ kubejs/server_scripts/rsapi.js | 42 +++ kubejs/server_scripts/warzone.js | 250 +++++++++++++++++ pack.toml | 2 +- 13 files changed, 921 insertions(+), 251 deletions(-) delete mode 100644 kubejs/config/settings.json create mode 100644 kubejs/jsconfig.json create mode 100644 kubejs/server_scripts/config.js create mode 100644 kubejs/server_scripts/greeting.js create mode 100644 kubejs/server_scripts/lib.js delete mode 100644 kubejs/server_scripts/rsapi-commands.js delete mode 100644 kubejs/server_scripts/rsapi-events.js create mode 100644 kubejs/server_scripts/rsapi.js create mode 100644 kubejs/server_scripts/warzone.js diff --git a/index.toml b/index.toml index e9731d8..7f10220 100644 --- a/index.toml +++ b/index.toml @@ -209,24 +209,364 @@ file = "config/yosbr/config/xaerohud.txt" hash = "8d13c5f398016036aa4fdefb366ef3926d89f96ca104155bc9f6e5a7ec682ecd" [[files]] -file = "kubejs/config/settings.json" -hash = "9fd66cebb740daa8b6def1c7f841cf2189ab9b43bc6611f39f7f383868cc0716" +file = "kubejs/jsconfig.json" +hash = "864c770339c71a8440b339acafb80e4227e18c41afaed93163fd2d141c050fe7" + +[[files]] +file = "kubejs/probe/cache/cachedForgeEvents.json" +hash = "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a" + +[[files]] +file = "kubejs/probe/cache/cachedJava.json" +hash = "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + +[[files]] +file = "kubejs/probe/cache/docs/dynamicjs.json" +hash = "71f12ab6d05a72e8c58748b232ed57ab955f5f337070cff27002ad26a3f58b3a" + +[[files]] +file = "kubejs/probe/cache/docs/events.json" +hash = "578aee5d392e6da1a4b12d91bd075d1b824d9fba6ee98f07b49e28f00d8c0dfd" + +[[files]] +file = "kubejs/probe/cache/docs/kubejs.json" +hash = "3db4ef01ff3999f14b21c7ff42346884f5de71a2569001c52ef4773b2ea593ab" + +[[files]] +file = "kubejs/probe/cache/docs/kubejs_recipes.json" +hash = "0ab68fcd509638e3735063b6490c32261c40289eed123cc8a6e977f951e38151" + +[[files]] +file = "kubejs/probe/cache/docs/morejs.json" +hash = "3b6076d8ff5ab4dcc2086e27691d7e3b8abfccdf7be23f890cdb28b23d50e779" + +[[files]] +file = "kubejs/probe/cache/docs/probe.json" +hash = "eabf3964c5cf77d0f31b58cd091776631bf5800ffcca1be6c4c4cd8d14cfbf83" + +[[files]] +file = "kubejs/probe/cache/docs/registry.json" +hash = "c76e8fdae5ab850f764c8d069258a5b2a0611f4b691ac563829dd1af7157f2d8" + +[[files]] +file = "kubejs/probe/cache/docs/types.json" +hash = "01421362d4ee8c607708669ffb084303e9b9921a15fbe35090b277da7a8e587d" + +[[files]] +file = "kubejs/probe/cache/modHash.txt" +hash = "4bf677940baa625315d769f50986404774b8a7cf37e907ec1dedbb91e23d0714" + +[[files]] +file = "kubejs/probe/generated/constants.d.ts" +hash = "3f0688de159c8f78d0018b1cba6a4de322cd26b28d74f6dad50ea0f3ab865c2f" + +[[files]] +file = "kubejs/probe/generated/events.d.ts" +hash = "3a7a5e19233433179ea7042842cda9f19e349bb8baaf35cfc486b34eb11a3c65" + +[[files]] +file = "kubejs/probe/generated/globals.d.ts" +hash = "8c84c2251730c2051ce14557744a2b49eaed5f50837f29e631958123b52e8a88" + +[[files]] +file = "kubejs/probe/generated/internals/index.d.ts" +hash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + +[[files]] +file = "kubejs/probe/generated/internals/internal_0.d.ts" +hash = "05efb4309e9318973b0dd40e0757c5324193224c6071172db95985095833ca35" + +[[files]] +file = "kubejs/probe/generated/internals/internal_1.d.ts" +hash = "c7393e04687b44030b768aa5568cb00376d83e38923e1f5a1067f90d6db7dca5" + +[[files]] +file = "kubejs/probe/generated/internals/internal_10.d.ts" +hash = "9eeb94f0c91ed0be235a3d7a9ca45ec0b7f3fe77006d1a93e0f987b3cb451b86" + +[[files]] +file = "kubejs/probe/generated/internals/internal_11.d.ts" +hash = "9d37ffec6b2a26ed9eddb88ee2d94a3b9c9c0afb69e860f63d5e1d530a646549" + +[[files]] +file = "kubejs/probe/generated/internals/internal_12.d.ts" +hash = "a8e09f86914ba956f13a7845f4dfcb552ffb59346d3f99215cc198546f519741" + +[[files]] +file = "kubejs/probe/generated/internals/internal_13.d.ts" +hash = "308c852b5737d6c08a2bd4285828fd6fc652c0e3bf211136f182a3fb01959158" + +[[files]] +file = "kubejs/probe/generated/internals/internal_14.d.ts" +hash = "686e8205709f17343e9b44e1e1b9704eefc22eefd515cfe873f5afc3b6762c4d" + +[[files]] +file = "kubejs/probe/generated/internals/internal_15.d.ts" +hash = "a3e5847e76b2260f68d8c3721cd584961822e2d70028284c26967a2519a8690f" + +[[files]] +file = "kubejs/probe/generated/internals/internal_16.d.ts" +hash = "3139a912f96abf324c0f9748ef696fa297cbd62aa0568f65576f3156df6d4edd" + +[[files]] +file = "kubejs/probe/generated/internals/internal_17.d.ts" +hash = "87a0de08964c36f70cad4cd316e7bfe357de2de090ed3244eb5d87d8cde914a3" + +[[files]] +file = "kubejs/probe/generated/internals/internal_18.d.ts" +hash = "c75500e2d80a1d65f370065a8031e69d4618239e327a6f58efb55995a6c21f31" + +[[files]] +file = "kubejs/probe/generated/internals/internal_19.d.ts" +hash = "0fb53828d29639228ca6da34d46aa2793c19e6a95703bf0361d3f7d433900186" + +[[files]] +file = "kubejs/probe/generated/internals/internal_2.d.ts" +hash = "94b14c71bd02069fda4289337b70f074f7fdc5718675cdcdeca7177e7bb481e5" + +[[files]] +file = "kubejs/probe/generated/internals/internal_20.d.ts" +hash = "f4cc4c39650314ba066be56d72c04dee21bad9bc838f4b5713c52b6d3e594d29" + +[[files]] +file = "kubejs/probe/generated/internals/internal_21.d.ts" +hash = "60ead406157fe45a0928ee3c4598a65d1812b95de0bebb7f16c12faaa3e49cd6" + +[[files]] +file = "kubejs/probe/generated/internals/internal_22.d.ts" +hash = "c1ec77318cd413b0996f72c0fb1ed4ed9c763116da84108d5895a5bb6652a832" + +[[files]] +file = "kubejs/probe/generated/internals/internal_23.d.ts" +hash = "fbfb05ab5767c8fa494e55473b3f24a9dea4dfcf922641a08f0a78acb8c33f2d" + +[[files]] +file = "kubejs/probe/generated/internals/internal_24.d.ts" +hash = "9f5ea590bb4a0c4afc7d897952cc5e281d69080af713f2d045ac1c20ca2cc02a" + +[[files]] +file = "kubejs/probe/generated/internals/internal_25.d.ts" +hash = "744f5cb4994f8f0c3d2ac74539140a020f6aa79f70eabd3ad46011b6e367c119" + +[[files]] +file = "kubejs/probe/generated/internals/internal_26.d.ts" +hash = "104365ef9efb7fc4708e0f2f3a47ddc9894b38c7e7e4e438d4ead8acbe123466" + +[[files]] +file = "kubejs/probe/generated/internals/internal_27.d.ts" +hash = "5655aec20e066c537ab800aa2a4edf7a933531d0f85c5236a06de2a299481aa1" + +[[files]] +file = "kubejs/probe/generated/internals/internal_28.d.ts" +hash = "abec9c75772c54662e6149ae1d995e51c34e541e2663dec0b5341f7c3fb795df" + +[[files]] +file = "kubejs/probe/generated/internals/internal_29.d.ts" +hash = "cf820354503b1a41fa573c842a971d22c7cf7dc6548e2673bfddc726256cb94f" + +[[files]] +file = "kubejs/probe/generated/internals/internal_3.d.ts" +hash = "4feb977b87a4a59ac366b8135f727558c2fd04d1590e9233567842f17e857bde" + +[[files]] +file = "kubejs/probe/generated/internals/internal_30.d.ts" +hash = "bc544739fe6bf1d40fc4fbc3e9819f2d710efcc4242033daffc49ba1691c5028" + +[[files]] +file = "kubejs/probe/generated/internals/internal_31.d.ts" +hash = "1bf84ffd32dc25c932340de4588de5fa52b6606db6edd28a3a01274ef3c38dbd" + +[[files]] +file = "kubejs/probe/generated/internals/internal_32.d.ts" +hash = "f06cd3ec507906530953fc43a356bb008687ec5795c4079f34aee89fe0f9ec08" + +[[files]] +file = "kubejs/probe/generated/internals/internal_33.d.ts" +hash = "e0d0f7f60783e6be6de9901e7bc5505170d57f708007548c9fd0ad473042694c" + +[[files]] +file = "kubejs/probe/generated/internals/internal_34.d.ts" +hash = "6000866a1f5f1c43a1fabc09264846a72ff3e6823698de57034c9683762d290b" + +[[files]] +file = "kubejs/probe/generated/internals/internal_35.d.ts" +hash = "dc9eab8d37c1e62ba6d8b8570b23f09729e0cc9d7745523a0a3db268bb51e6bb" + +[[files]] +file = "kubejs/probe/generated/internals/internal_36.d.ts" +hash = "d7386b73a33cef6e438918b66bacbff8439200cc596ae57a51b5b1d726ec8847" + +[[files]] +file = "kubejs/probe/generated/internals/internal_37.d.ts" +hash = "c72f8476952d52a707681cae5192f16e2009232e5000e559079aa420168db87e" + +[[files]] +file = "kubejs/probe/generated/internals/internal_38.d.ts" +hash = "6938f2290c5f442c64cfd2d0407449ab9564bd351f0d4744ab73934f9567a281" + +[[files]] +file = "kubejs/probe/generated/internals/internal_39.d.ts" +hash = "efea49dc32e18c079ba632d877e2ec3e756036e64153d69a7a58c7abd7b3b9ee" + +[[files]] +file = "kubejs/probe/generated/internals/internal_4.d.ts" +hash = "2b553642b2e81f61a9c0574034c164fc54063a6fb6f3004b15338baede322223" + +[[files]] +file = "kubejs/probe/generated/internals/internal_40.d.ts" +hash = "47e2019ae09673d63e29b122bf6c66bdb6f20a1f0c7eec4dfd87df563984de74" + +[[files]] +file = "kubejs/probe/generated/internals/internal_41.d.ts" +hash = "959fe62ec175d1f9a53843500293acc6db7f5eb2b89f0a70b792000d3d506358" + +[[files]] +file = "kubejs/probe/generated/internals/internal_42.d.ts" +hash = "e6737ff3647560b3844d1576b4397fe911062bbeae2bc60f0a261699bc713589" + +[[files]] +file = "kubejs/probe/generated/internals/internal_43.d.ts" +hash = "9ec6ce66382d04d5442e20b58d5e2eb5156456f320136fb7c87f0c2939a8dcab" + +[[files]] +file = "kubejs/probe/generated/internals/internal_44.d.ts" +hash = "1fb4f28307f3fe6224748765b06531bd88f50bc3bea6aff377460a6e38d7a7eb" + +[[files]] +file = "kubejs/probe/generated/internals/internal_45.d.ts" +hash = "482ef4dfca47a0ee451d6c76f002f8bc365bfe497bf3b30a868c13f27812f1f4" + +[[files]] +file = "kubejs/probe/generated/internals/internal_46.d.ts" +hash = "e0304fbd850b01307fd91bdbe5ddbb7ca99cf71c6425ef79f08ac76a497a9877" + +[[files]] +file = "kubejs/probe/generated/internals/internal_47.d.ts" +hash = "57bd96564f249e4c673a7bbe690ea18e8fd1e2a1e4e14110010ba45c20865dc9" + +[[files]] +file = "kubejs/probe/generated/internals/internal_48.d.ts" +hash = "3ebf33e995efb718c39a6d1b9839e5d4e49dad590be74ba1dd81a77fe5bed9a6" + +[[files]] +file = "kubejs/probe/generated/internals/internal_49.d.ts" +hash = "284d1e6031ba9d7ec5c1d9c399003ab48d2c97f7ab57aa36b4c2425be30c7633" + +[[files]] +file = "kubejs/probe/generated/internals/internal_5.d.ts" +hash = "0bd73b349eff5efccb823faa7de4c4f8e7e3bdfac7d54218834cd124357d5d74" + +[[files]] +file = "kubejs/probe/generated/internals/internal_50.d.ts" +hash = "287b4215e490c4d78c3cfb3f584f974a97d2b95a578bdbc1dd58984eb9186bda" + +[[files]] +file = "kubejs/probe/generated/internals/internal_51.d.ts" +hash = "8722897f9a2d985b14ad3a68e46c3e5fd8740474f51b405c61cff33a4bd18df2" + +[[files]] +file = "kubejs/probe/generated/internals/internal_52.d.ts" +hash = "563b42d4fa0fc85610b5e29981dd8557046f0beab96b54e036d85bf554870c34" + +[[files]] +file = "kubejs/probe/generated/internals/internal_53.d.ts" +hash = "5adee5f7f0ad51fe5655c3b8e28b24ee9fc6c2ccb3af98e232b3628548fc677e" + +[[files]] +file = "kubejs/probe/generated/internals/internal_54.d.ts" +hash = "c1e95ba91b4262f292713cb190740f47c563e052b559245ee895745f4e5f053a" + +[[files]] +file = "kubejs/probe/generated/internals/internal_55.d.ts" +hash = "83a12c6c838a3b0bdddf2e4d210e1fa14e0b3f7c97d650b9a6806495778ed0bc" + +[[files]] +file = "kubejs/probe/generated/internals/internal_56.d.ts" +hash = "dc5833122081c674952fead87ac12e4eb5222534f950a3a180caa6241a2b3a21" + +[[files]] +file = "kubejs/probe/generated/internals/internal_57.d.ts" +hash = "ec11796e9c4d10d67f31606663188ff297cc9cdfeb2dea9717cd4447b040a87d" + +[[files]] +file = "kubejs/probe/generated/internals/internal_58.d.ts" +hash = "334e63cfd4ff9554fe376734067d0b223765d55e6d7e7786c7e05bf47032d774" + +[[files]] +file = "kubejs/probe/generated/internals/internal_59.d.ts" +hash = "b123afa30743083f59850998e285701afb3ef1bcc28192567666a1e4f42aaa29" + +[[files]] +file = "kubejs/probe/generated/internals/internal_6.d.ts" +hash = "cd85c3f39085c300ede3d304318c69d3b5eb647308af51fa773ec5a2f984ff50" + +[[files]] +file = "kubejs/probe/generated/internals/internal_60.d.ts" +hash = "ecabe1fb3e035dcd062b5dcd917dce9203a35f0d2664512acc31b1c5a609da80" + +[[files]] +file = "kubejs/probe/generated/internals/internal_61.d.ts" +hash = "44f77c9a67f80a98f51fddd1d0666edbb3bbe64053be3e328a466869fc8df4e5" + +[[files]] +file = "kubejs/probe/generated/internals/internal_62.d.ts" +hash = "ffe97e4483943cf8e28a11f85c2a5c6946fb3630d1be2563683626594ecbae4c" + +[[files]] +file = "kubejs/probe/generated/internals/internal_7.d.ts" +hash = "76956a65954267852796116f363c3d3ed85c9c1790c57b6251ba8a60499ca49f" + +[[files]] +file = "kubejs/probe/generated/internals/internal_8.d.ts" +hash = "2e0a8934c7151ad5fd5b76c92da7e6da3a8c294d2133221478eeb47ad18a5135" + +[[files]] +file = "kubejs/probe/generated/internals/internal_9.d.ts" +hash = "4de08c233886a9c3e3343333701e4335f3b1046a55a43e82c5fc5ffddebaf344" + +[[files]] +file = "kubejs/probe/generated/names.d.ts" +hash = "d1fe0c1e3467db9c16cb4f0788d8f307cae2499664c53206bac2a42fc875bdaa" + +[[files]] +file = "kubejs/probe/generated/raw.d.ts" +hash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + +[[files]] +file = "kubejs/probe/generated/registries.d.ts" +hash = "df255f756df465a20d2cb0c4f5fd99464151abfe30b07cfedc456af772e67abb" + +[[files]] +file = "kubejs/probe/generated/tag_events.d.ts" +hash = "11e270f145ea9f70a88b7fd3f81d4d1d2ce0461d99e3f5c674400b28b4df7cc6" + +[[files]] +file = "kubejs/server_scripts/config.js" +hash = "2ddfe0c97692239f5da5345ae6ef205b24eda645e895c41f5c21ead9d39ec4cf" [[files]] file = "kubejs/server_scripts/dimensions.js" -hash = "ed4bbe0ce44a979d99d9eaf349deae606a66a666a54a55435890d319f6468ade" +hash = "c3552991419c567c95e5f358706658ff2a81660604f697878297e9f091f85623" + +[[files]] +file = "kubejs/server_scripts/greeting.js" +hash = "21b025bcdcdd2f007c2cc09598d2b03c7aa25eda71995d1246457385cef3fd2a" [[files]] file = "kubejs/server_scripts/keep.js" -hash = "b6c7c97c62ce6308042fd50f84a44ea516285af074b033ef7c8a302f2b8400eb" +hash = "71a928c167ea49e6897603f2302043b9f83a7c1295026cd05d2223fc957169bb" [[files]] -file = "kubejs/server_scripts/rsapi-commands.js" -hash = "51561835f16ee0c399532bc3d0f8cd05c4b65bcb08567a24ccaa2256a595b4d7" +file = "kubejs/server_scripts/lib.js" +hash = "5258c66e0ec980e1e587ea293751594c0d03ece9a57490c5e875ca6993bb21ed" [[files]] -file = "kubejs/server_scripts/rsapi-events.js" -hash = "94e5e19adcee506246fb7d1ce202d2d9307e8f27b4aee314beedff2fbf76bd5c" +file = "kubejs/server_scripts/rsapi.js" +hash = "8ed5ffb14c844074cb650aaa0e8b20598c42c1d1ed8ef37c6554a9175ab123fe" + +[[files]] +file = "kubejs/server_scripts/warzone.js" +hash = "bc1185a8579afb6fada57b27a06c34dea85a9873a66d8d22aac7c37a0a4d297a" [[files]] file = "mods/3dskinlayers.pw.toml" diff --git a/kubejs/config/settings.json b/kubejs/config/settings.json deleted file mode 100644 index 580571e..0000000 --- a/kubejs/config/settings.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "dimensions": [ - { - "id": "retards:creative", - "gamemode": "creative", - "portal": { - "material": "minecraft:glowstone", - "fluid": "minecraft:water", - "color": "#1E66F5" - }, - "worldgen": { - "minecraft:bedrock": 1, - "minecraft:stone": 40, - "minecraft:dirt": 8, - "minecraft:grass_block": 1 - } - }, - { - "id": "retards:adventure", - "gamemode": "adventure", - "portal": { - "material": "minecraft:bedrock", - "fluid": "minecraft:water", - "color": "#1E66F5" - }, - "worldgen": { - "minecraft:bedrock": 1, - "minecraft:stone": 40, - "minecraft:dirt": 8, - "minecraft:grass_block": 1 - } - } - ] -} diff --git a/kubejs/jsconfig.json b/kubejs/jsconfig.json new file mode 100644 index 0000000..d572515 --- /dev/null +++ b/kubejs/jsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "allowJs": true, + "noEmit": true, + "checkJs": true, + "strict": true, + "target": "ES2020", + "module": "ES2020", + "lib": ["ES2020", "DOM"], + "baseUrl": ".", + "paths": { + "@/*": ["*"] + } + }, + "include": ["**/*.js", "**/*.d.ts"], + "exclude": ["probe/cache/**/*"] +} diff --git a/kubejs/server_scripts/config.js b/kubejs/server_scripts/config.js new file mode 100644 index 0000000..38ed365 --- /dev/null +++ b/kubejs/server_scripts/config.js @@ -0,0 +1,61 @@ +/** + * @type {{ + * dimensions: Array<{ + * id: string, + * gamemode: string, + * portal: { + * material: string, + * fluid: string, + * color: string, + * }, + * worldgen: { + * [key: string]: number, + * }, + * }>, + * greeting: { + * [key: string]: string + * }, + * }} + */ +const config = { + dimensions: [ + { + id: "retards:creative", + gamemode: "creative", + portal: { + material: "minecraft:glowstone", + fluid: "minecraft:water", + color: "#1E66F5", + }, + worldgen: { + "minecraft:bedrock": 1, + "minecraft:stone": 40, + "minecraft:dirt": 8, + "minecraft:grass_block": 1, + }, + }, + { + id: "retards:adventure", + gamemode: "adventure", + portal: { + material: "minecraft:bedrock", + fluid: "minecraft:water", + color: "#1E66F5", + }, + worldgen: { + "minecraft:bedrock": 1, + "minecraft:stone": 40, + "minecraft:dirt": 8, + "minecraft:grass_block": 1, + }, + }, + ], + greeting: { + Sbebas_s: "MCFLURRY!!!", + Mark917: "CUCARACHA", + Anthony_7: "onion rings", + Tren_boy: "Kebab", + Cheruz: "Fa freddo", + default: "Welcome", + }, +}; diff --git a/kubejs/server_scripts/dimensions.js b/kubejs/server_scripts/dimensions.js index 5ff7d4d..dc2e260 100644 --- a/kubejs/server_scripts/dimensions.js +++ b/kubejs/server_scripts/dimensions.js @@ -1,17 +1,3 @@ -// Creates and configures custom dimensions - -const raw = JsonIO.readJson("kubejs/config/settings.json"); -const config = raw ? JSON.parse(raw.toString()) : {}; - -function hexToRgb(hex) { - const h = hex.replace("#", ""); - return { - r: parseInt(h.substring(0, 2), 16), - g: parseInt(h.substring(2, 4), 16), - b: parseInt(h.substring(4, 6), 16), - }; -} - var portalColor; ServerEvents.highPriorityData((event) => { @@ -19,9 +5,8 @@ ServerEvents.highPriorityData((event) => { config.dimensions.forEach((dimension) => { const [modId, dimId] = dimension.id.split(":"); - ///////////////// - /// DIMENSION /// - ///////////////// + // Add dimension + /** @type {any} */ const dimJson = { type: "minecraft:overworld" }; if (dimension.worldgen) dimJson["generator"] = { @@ -41,29 +26,28 @@ ServerEvents.highPriorityData((event) => { }; event.addJson(`${modId}:dimension/${dimId}.json`, dimJson); - ////////////// - /// PORTAL /// - ////////////// + // Add portal const portal = dimension.portal; if (portal) { portalColor = hexToRgb(portal.color); - event.addJson(`${modId}:portals/${dimId}.json`, { - block: portal.material, - dim: dimension.id, - r: portalColor.r, - g: portalColor.g, - b: portalColor.b, - ignitionType: "FLUID", - ignitionSource: portal.fluid, - }); + event.addJson( + `${modId}:portals/${dimId}.json`, + /** @type {any} */ ({ + block: portal.material, + dim: dimension.id, + r: portalColor.r, + g: portalColor.g, + b: portalColor.b, + ignitionType: "FLUID", + ignitionSource: portal.fluid, + }), + ); } }); } }); -////////////// -/// DIMINV /// -////////////// +// Setup Dimensional Inventories PlayerEvents.loggedIn((event) => { if (config.dimensions) { config.dimensions.forEach((dimension) => { @@ -71,22 +55,38 @@ PlayerEvents.loggedIn((event) => { const data = event.server.persistentData; if (!data.getBoolean(`${dimId}Initialized`)) { data.putBoolean(`${dimId}Initialized`, true); - event.server.scheduleInTicks(20, () => { - event.server.runCommandSilent(`diminv pool ${dimId} create`); - event.server.runCommandSilent( - `diminv pool ${dimId} dimension ${dimension.id} assign`, - ); - event.server.runCommandSilent( - `diminv pool ${dimId} gameMode ${dimension.gamemode}`, - ); - event.server.runCommandSilent( - `diminv pool ${dimId} progressAdvancements false`, - ); - event.server.runCommandSilent( - `diminv pool ${dimId} incrementStatistics false`, - ); - }); + event.server.scheduleInTicks( + 20, + /** @type {any} */ ( + () => { + event.server.runCommandSilent(`diminv pool ${dimId} create`); + event.server.runCommandSilent( + `diminv pool ${dimId} dimension ${dimension.id} assign`, + ); + event.server.runCommandSilent( + `diminv pool ${dimId} gameMode ${dimension.gamemode}`, + ); + event.server.runCommandSilent( + `diminv pool ${dimId} progressAdvancements false`, + ); + event.server.runCommandSilent( + `diminv pool ${dimId} incrementStatistics false`, + ); + } + ), + ); } }); } }); + +// Disable entity spawning +EntityEvents.checkSpawn((event) => { + if (!event.level) return; + + config.dimensions.forEach((dimension) => { + if (event.level.dimension.toString() === dimension.id) { + event.cancel(); + } + }); +}); diff --git a/kubejs/server_scripts/greeting.js b/kubejs/server_scripts/greeting.js new file mode 100644 index 0000000..81208d6 --- /dev/null +++ b/kubejs/server_scripts/greeting.js @@ -0,0 +1,11 @@ +// Shows a greeting message on player join +PlayerEvents.loggedIn((event) => { + const username = event.player.username; + title( + event.server, + username, + config.greeting[username] + ? config.greeting[username] + : config.greeting.default, + ); +}); diff --git a/kubejs/server_scripts/keep.js b/kubejs/server_scripts/keep.js index f841801..14abdf8 100644 --- a/kubejs/server_scripts/keep.js +++ b/kubejs/server_scripts/keep.js @@ -1,24 +1,29 @@ -// Makes Tickets of Eternal Keeping not consumed on death. - +/** @type {Object} */ const tickets = {}; -EntityEvents.death((event) => { +// Register ticket on player death +EntityEvents.death("player", (event) => { const player = event.player; - if (event.entity.isPlayer()) { - tickets[player.uuid] = null; + const uuid = String(player.uuid); - player.inventory.allItems.forEach((item) => { - if (item.nbt && item.nbt.EternalKeep) tickets[player.uuid] = item.copy(); + if ( + event.entity.isPlayer() && + String(player.level.dimension) !== "retards:adventure" + ) { + tickets[uuid] = null; + + iterateInventory(player, (item) => { + if (item.nbt && item.nbt.get("EternalKeep")) tickets[uuid] = item.copy(); }); } }); +// Give ticket on player respawn PlayerEvents.respawned((event) => { const player = event.player; + const uuid = String(player.uuid); - const ticket = tickets[player.uuid]; - - if (ticket != null) player.give(Item.of(ticket, 1)); - - tickets[player.uuid] = null; + const ticket = tickets[uuid]; + if (ticket) player.give(Item.of(ticket, 1)); + tickets[uuid] = null; }); diff --git a/kubejs/server_scripts/lib.js b/kubejs/server_scripts/lib.js new file mode 100644 index 0000000..3edf630 --- /dev/null +++ b/kubejs/server_scripts/lib.js @@ -0,0 +1,127 @@ +// priority: 100 + +/** + * Converts a hex color to RGB. + * @param {string} hex - The hex color. + * @returns {{r: number, g: number, b: number}} - The resulting RGB. + */ +function hexToRgb(hex) { + const h = hex.replace("#", ""); + return { + r: parseInt(h.substring(0, 2), 16), + g: parseInt(h.substring(2, 4), 16), + b: parseInt(h.substring(4, 6), 16), + }; +} + +/** + * Iterates over a player's inventory. + * @param {Internal.Player} player + * @param {(item: Internal.ItemStack) => void} callback + */ +function iterateInventory(player, callback) { + player.inventory.allItems.forEach( + /** @type {any} */ ( + (/** @type {Internal.ItemStack} */ item) => { + callback(item); + } + ), + ); +} + +/** + * Filters entities in a level. + * @param {Internal.ServerLevel} level + * @param {(entity: Internal.Entity) => boolean} callback + * @returns {Internal.EntityArrayList} - The filtered entities. + */ +function filterEntities(level, callback) { + return level + .getEntities() + .filter( + /** @type {any} */ ( + (/** @type {Internal.Entity} */ entity) => callback(entity) + ), + ); +} + +/** + * Sends a title message to a player. + * @param {Internal.MinecraftServer} server - The server instance. + * @param {string} username - The player's username. + * @param {string} message - The message to send. + */ +function title(server, username, message) { + server.runCommandSilent("title @a times 20 200 20"); + server.runCommandSilent(`title ${username} title ["${message}"]`); +} + +/** + * Registers a command. + * @param {Internal.CommandRegistryEventJS} event + * @param {{ + * command: string, + * operator?: boolean, + * handler?: (ctx: Internal.CommandContext) => void, + * parameters?: Array<{ + * name: string, + * type: Internal.ArgumentTypeWrappers, + * handler?: (ctx: Internal.CommandContext) => void, + * }> + * }} options + */ +function registerCommand(event, options) { + const command = options.command; + const operator = options.operator !== undefined ? options.operator : false; + const parameters = options.parameters !== undefined ? options.parameters : []; + const handler = options.handler !== undefined ? options.handler : null; + + const cmd = event.commands.literal(command); + if (operator) + cmd.requires( + /** @type {any} */ ( + (/** @type {Internal.CommandSourceStack} */ source) => + source.hasPermission(2) + ), + ); + + if (handler !== null) + cmd.executes( + /** @type {any} */ ( + /** @param {Internal.CommandContext} ctx */ + (ctx) => { + handler(ctx); + return 1; + } + ), + ); + + /** @type { Internal.LiteralArgumentBuilder | Internal.RequiredArgumentBuilder } */ + let current = cmd; + parameters.forEach((param, index) => { + const name = param.name; + const type = param.type; + const paramHandler = param.handler; + const arg = event.commands.argument(name, type.create(event)); + const isLast = index === parameters.length - 1; + + const finalHandler = paramHandler ? paramHandler : isLast ? handler : null; + + if (finalHandler) { + arg.executes( + /** @type {any} */ ( + /** @param {Internal.CommandContext} ctx */ + (ctx) => { + finalHandler(ctx); + return 1; + } + ), + ); + } + + current.then(arg); + current = arg; + }); + + event.register(cmd); +} diff --git a/kubejs/server_scripts/rsapi-commands.js b/kubejs/server_scripts/rsapi-commands.js deleted file mode 100644 index ddae331..0000000 --- a/kubejs/server_scripts/rsapi-commands.js +++ /dev/null @@ -1,71 +0,0 @@ -ServerEvents.commandRegistry((event) => { - const { commands: Commands, arguments: Arguments } = event; - - // /rsapi [] - function playerInventory(player) { - const result = []; - - function pushItem(pos, item) { - if (item.isEmpty()) return; - let nbtData = {}; - try { - if (item.nbt) { - nbtData = JSON.parse(item.nbt.toString()); - } - } catch (e) { - nbtData = {}; - } - result.push([pos, item.id, item.count, nbtData]); - } - - // Main inventory (27 slots) - player.inventory.items.forEach((item, i) => { - pushItem(["inventory", i], item); - }); - - // Hotbar (9 slots) - // player.inventory.hotbar.forEach((item, i) => { - // pushItem(["hotbar", i], item); - // }); - - console.log(result); - return 1; - - // Armor - // pushItem(["armor", "head"], player.headArmorItem); - // pushItem(["armor", "chest"], player.chestArmorItem); - // pushItem(["armor", "legs"], player.legsArmorItem); - // pushItem(["armor", "feet"], player.feetArmorItem); - - // Offhand - // pushItem(["offhand", 0], player.offHandItem); - - // Trinkets (if present) - if (player.trinkets) { - player.trinkets.groups.forEach((group) => { - group.slots.forEach((slot) => { - slot.items.forEach((item, index) => { - pushItem(["trinkets", group.id, slot.id, index], item); - }); - }); - }); - } - - console.log(JSON.stringify(result)); - - return 1; - } - - // /rsapi - event.register( - Commands.literal("rsapi") - .requires((src) => src.hasPermission(2)) - .executes((ctx) => playerInventory(ctx.source.player)) - .then( - // /rsapi [] - Commands.argument("target", Arguments.PLAYER.create(event)).executes( - (ctx) => playerInventory(Arguments.PLAYER.getResult(ctx, "target")), - ), - ), - ); -}); diff --git a/kubejs/server_scripts/rsapi-events.js b/kubejs/server_scripts/rsapi-events.js deleted file mode 100644 index 88400b1..0000000 --- a/kubejs/server_scripts/rsapi-events.js +++ /dev/null @@ -1,78 +0,0 @@ -var _hooks = {}; - -function rsapi(event, id, data) { - console.log(`rsapi:${id}:${JSON.stringify(data)}`); - if (_hooks[id]) _hooks[id](event, data); -} - -const RSEvent = { - on: (id, func) => { - _hooks[id] = func; - }, -}; - -function getData(event) { - return { - username: event.player ? String(event.player.username) : null, - message: event.message ? String(event.message) : null, - input: event.input ? String(event.input) : null, - }; -} - -/////////////////// -/// === API === /// -/////////////////// - -// rsapi:event.playerJoined:"Player" -PlayerEvents.loggedIn((event) => { - const { username } = getData(event); - rsapi(event, "event.playerJoined", username); -}); - -// rsapi:event.playerLeft:"Player" -PlayerEvents.loggedOut((event) => { - const { username } = getData(event); - rsapi(event, "event.playerLeft", username); -}); - -// rsapi:event.playerChat:["Player","Message"] -PlayerEvents.chat((event) => { - const { username, message } = getData(event); - rsapi(event, "event.playerChat", [username, message]); -}); - -// rsapi:event.serverChat:"Message" -ServerEvents.command("say", (event) => { - const { input } = getData(event); - rsapi( - event, - "event.serverChat", - input.startsWith("say ") ? input.slice(4) : input, - ); -}); - -// rsapi:event.playerDied:"Player" -EntityEvents.death("player", (event) => { - const { username } = getData(event); - rsapi(event, "event.playerDied", username); -}); - -///////////////////// -/// === HOOKS === /// -///////////////////// - -RSEvent.on("event.playerJoined", (event, username) => { - function title(player, message) { - event.server.runCommandSilent("title @a times 20 200 20"); - event.server.runCommandSilent( - "title " + player + ' title ["' + message + '"]', - ); - } - - if (username === "Sbebas_s") title(username, "MCFLURRY!!!!"); - else if (username === "Mark917") title(username, "CUCARACHA"); - else if (username === "Anthony_7") title(username, "onion rings"); - else if (username === "Tren_boy") title(username, "Kebab"); - else if (username === "Cheruz") title(username, "Basta\ngiocare\nnegro"); - else title(username, "Welcome"); -}); diff --git a/kubejs/server_scripts/rsapi.js b/kubejs/server_scripts/rsapi.js new file mode 100644 index 0000000..e9569e2 --- /dev/null +++ b/kubejs/server_scripts/rsapi.js @@ -0,0 +1,42 @@ +// priority: 90 + +/** + * Runs an RSAPI callback. + * @param {string} id + * @param {*} data + */ +function rsapi(id, data) { + console.log(`rsapi:${id}:${JSON.stringify(data)}`); +} + +// rsapi:event.playerJoined:"Player" +PlayerEvents.loggedIn((event) => { + const username = String(event.player.username); + rsapi("event.playerJoined", username); +}); + +// rsapi:event.playerLeft:"Player" +PlayerEvents.loggedOut((event) => { + const username = String(event.player.username); + rsapi("event.playerLeft", username); +}); + +// rsapi:event.playerChat:["Player","Message"] +PlayerEvents.chat((event) => { + const username = String(event.player.username); + const message = String(event.message); + rsapi("event.playerChat", [username, message]); +}); + +// rsapi:event.serverChat:"Message" +ServerEvents.command("say", (event) => { + const input = String(event.input); + const message = input.startsWith("say ") ? input.slice(4) : input; + rsapi("event.serverChat", message); +}); + +// rsapi:event.playerDied:"Player" +EntityEvents.death("player", (event) => { + const username = String(event.player.username); + rsapi("event.playerDied", username); +}); diff --git a/kubejs/server_scripts/warzone.js b/kubejs/server_scripts/warzone.js new file mode 100644 index 0000000..cfa68ca --- /dev/null +++ b/kubejs/server_scripts/warzone.js @@ -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 + 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 + 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} */ + 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} */ + 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`); +}); diff --git a/pack.toml b/pack.toml index 21fd63e..a7decd8 100644 --- a/pack.toml +++ b/pack.toml @@ -6,7 +6,7 @@ pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "dc720d3ef625d5bc29b1ff7b981efa4edf89dc11fd4529167813a298be08756d" +hash = "eb615df8d9e9060e8732539fff7543656f0654aa55717a853d2fe7be2c084a53" [versions] fabric = "0.18.4"