From b3791ea05fbfd8e022e63c1016ae14b6d8f4b6a1 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Wed, 29 Jun 2022 22:14:03 +0200 Subject: [PATCH] feat: add kubejs script (WIP) --- .drone.yml | 1 + README.md | 37 +++++++++ build.zig | 121 ++++++++++++++++++++-------- kubejs/Main.hx | 15 ++++ kubejs/Recipes.hx | 20 +++++ kubejs/build.hxml | 5 ++ mods.txt | 90 ++++++++++----------- overrides/config/Flight Rings.json5 | 37 +++++++++ 8 files changed, 247 insertions(+), 79 deletions(-) create mode 100644 README.md create mode 100644 kubejs/Main.hx create mode 100644 kubejs/Recipes.hx create mode 100644 kubejs/build.hxml create mode 100644 overrides/config/Flight Rings.json5 diff --git a/.drone.yml b/.drone.yml index a33ad36..7df631b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,6 +7,7 @@ steps: - apt update - apt install -y curl + haxe jq libarchive-dev libcurl4-openssl-dev diff --git a/README.md b/README.md new file mode 100644 index 0000000..a69de0e --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +# Anvilcraft 4 +The 4th pack of the Anvilcraft series! + +## Building +First, Install the dependencies required for compilation: +- zig (master version) +- haxe +- libcurl +- libarchive + +Arch: +```bash +paru -S \ + zig-git \ + haxe \ + curl \ + libarchive +``` + +Debian: +```bash +apt install \ + haxe \ + libcurl4-openssl-dev \ + libarchive-dev +# install zig manually +``` + +Install `kubejs-haxe`: +```bash +haxelib install kubejs +``` + +Run the build script: +```bash +./build.zig +``` diff --git a/build.zig b/build.zig index 8c82505..b641d39 100755 --- a/build.zig +++ b/build.zig @@ -34,12 +34,11 @@ pub fn main() !void { var entry = c.archive_entry_new(); defer c.archive_entry_free(entry); - entrySetDir(entry.?); - c.archive_entry_set_size(entry, 0); - c.archive_entry_set_pathname(entry, "minecraft/"); - try handleArchiveErr(c.archive_write_header(zip, entry), zip); - c.archive_entry_set_pathname(entry, "minecraft/mods/"); - try handleArchiveErr(c.archive_write_header(zip, entry), zip); + + try archiveCreateDir(zip.?, entry.?, "minecraft/"); + try archiveCreateDir(zip.?, entry.?, "minecraft/mods/"); + + try installHaxe(zip.?, entry.?, &buf); var overrides = try std.fs.cwd().openDir("overrides", .{ .iterate = true }); defer overrides.close(); @@ -55,15 +54,9 @@ pub fn main() !void { &[_][]const u8{ "minecraft/", e.path, "/\x00" }, ); defer std.heap.c_allocator.free(path); - entrySetDir(entry.?); - c.archive_entry_set_pathname(entry, path.ptr); - try handleArchiveErr(c.archive_write_header(zip, entry), zip); + try archiveCreateDir(zip.?, entry.?, path.ptr); }, .File => { - var file = try overrides.openFile(e.path, .{}); - const stat = try file.stat(); - entrySetFile(entry.?); - c.archive_entry_set_size(entry, @intCast(i64, stat.size)); const path = try std.mem.concatWithSentinel( std.heap.c_allocator, u8, @@ -71,30 +64,30 @@ pub fn main() !void { 0, ); defer std.heap.c_allocator.free(path); - c.archive_entry_set_pathname(entry, path); - try handleArchiveErr(c.archive_write_header(zip, entry), zip); + var file = try overrides.openFile(e.path, .{}); + defer file.close(); - var read = try file.read(&buf); - while (read != 0) { - _ = c.archive_write_data(zip, &buf, read); - read = try file.read(&buf); - } + try archiveFile( + zip.?, + entry.?, + &buf, + path, + file, + ); }, else => {}, } } - entrySetFile(entry.?); - var file = try std.fs.cwd().openFile("mmc-pack.json", .{}); - c.archive_entry_set_pathname(entry, "mmc-pack.json"); - c.archive_entry_set_size(entry, @intCast(i64, (try file.stat()).size)); - try handleArchiveErr(c.archive_write_header(zip, entry), zip); - - var read = try file.read(&buf); - while (read != 0) { - _ = c.archive_write_data(zip, &buf, read); - read = try file.read(&buf); - } + var mmc_pack_file = try std.fs.cwd().openFile("mmc-pack.json", .{}); + defer mmc_pack_file.close(); + try archiveFile( + zip.?, + entry.?, + &buf, + "mmc-pack.json", + mmc_pack_file, + ); const instance_cfg_data = "InstanceType=OneSix"; c.archive_entry_set_pathname(entry, "instance.cfg"); @@ -124,6 +117,64 @@ pub fn main() !void { try handleArchiveErr(c.archive_write_close(zip), zip); } +fn archiveFile( + archive: *c.archive, + entry: *c.archive_entry, + buf: []u8, + name: [*c]const u8, + file: std.fs.File, +) !void { + entrySetFile(entry); + c.archive_entry_set_pathname(entry, name); + c.archive_entry_set_size(entry, @intCast(i64, (try file.stat()).size)); + try handleArchiveErr(c.archive_write_header(archive, entry), archive); + + var read = try file.read(buf); + while (read != 0) { + _ = c.archive_write_data(archive, buf.ptr, read); + read = try file.read(buf); + } +} + +/// `name` must end with '/'! +fn archiveCreateDir( + archive: *c.archive, + entry: *c.archive_entry, + name: [*c]const u8, +) !void { + entrySetDir(entry); + c.archive_entry_set_pathname(entry, name); + try handleArchiveErr(c.archive_write_header(archive, entry), archive); +} + +fn installHaxe(archive: *c.archive, entry: *c.archive_entry, buf: []u8) !void { + const term = try std.ChildProcess.init( + &.{ "haxe", "kubejs/build.hxml" }, + std.heap.c_allocator, + ).spawnAndWait(); + + const term_n = switch (term) { + .Exited => |n| @intCast(u32, n), + .Signal, .Unknown, .Stopped => |n| n, + }; + + if (term_n != 0) + return error.BuildHaxeError; + + try archiveCreateDir(archive, entry, "minecraft/kubejs/"); + try archiveCreateDir(archive, entry, "minecraft/kubejs/server_scripts/"); + + var file = try std.fs.cwd().openFile("build/kubejs-server.js", .{}); + defer file.close(); + try archiveFile( + archive, + entry, + buf, + "minecraft/kubejs/server_scripts/script.js", + file, + ); +} + fn readMods(list: *std.ArrayList([]u8), alloc: std.mem.Allocator) !void { var file = try std.fs.cwd().openFile("mods.txt", .{}); defer file.close(); @@ -253,12 +304,14 @@ fn downloadMods( } fn entrySetDir(entry: *c.archive_entry) void { - c.archive_entry_set_mode(entry, c.S_IFDIR | 0777); - c.archive_entry_set_size(entry, 0); + c.archive_entry_set_filetype(entry, c.S_IFDIR); + c.archive_entry_set_perm(entry, 0o755); + c.archive_entry_unset_size(entry); } fn entrySetFile(entry: *c.archive_entry) void { - c.archive_entry_set_mode(entry, c.S_IFREG | 0777); + c.archive_entry_set_filetype(entry, c.S_IFREG); + c.archive_entry_set_perm(entry, 0o644); } fn handleCurlErr(code: c.CURLcode) !void { diff --git a/kubejs/Main.hx b/kubejs/Main.hx new file mode 100644 index 0000000..93bd163 --- /dev/null +++ b/kubejs/Main.hx @@ -0,0 +1,15 @@ +package; + +import kubejs.Events; +import kubejs.Settings; + +class Main { + static function main() { + Settings.logAddedRecipes = true; + Settings.logErroringRecipes = true; + Settings.logRemovedRecipes = true; + Settings.logSkippedRecipes = false; + + Events.onEvent(EventType.RecipesEventType, Recipes.onEvent); + } +} diff --git a/kubejs/Recipes.hx b/kubejs/Recipes.hx new file mode 100644 index 0000000..07f8935 --- /dev/null +++ b/kubejs/Recipes.hx @@ -0,0 +1,20 @@ +import kubejs.events.server.RecipesEvent; + +class Recipes { + public static function onEvent(event:RecipesEvent) { + event.shaped( + "flight_rings:t_basic_ring_treasure", + [ + "S", "W", "S", + "W", "R", "W", + "F", "W", "F", + ], + { + S: "terramine:mana_crystal", + W: "minecraft:feather", + R: "botania:pixie_ring", + F: "create:encased_fan", + } + ); + } +} diff --git a/kubejs/build.hxml b/kubejs/build.hxml new file mode 100644 index 0000000..4fcd46a --- /dev/null +++ b/kubejs/build.hxml @@ -0,0 +1,5 @@ +# invoke haxe from the repository root +-cp kubejs +-main Main +-lib kubejs +-js build/kubejs-server.js diff --git a/mods.txt b/mods.txt index 55f2c65..8f8706d 100644 --- a/mods.txt +++ b/mods.txt @@ -5,7 +5,7 @@ https://github.com/Fabricators-of-Create/Porting-Lib/releases/download/1.0.0/por https://cdn.modrinth.com/data/Xbc0uyRg/versions/mc1.18.2_v0.4.1+631/create-mc1.18.2_v0.4.1%2B631.jar https://cdn.modrinth.com/data/svgZx0UN/versions/1.0-beta4/createplus-1.0.0-beta4.jar https://cdn.modrinth.com/data/gKNwt7xu/versions/1.2.2-fabric/Tempad-fabric-1.18.2-1.2.2.jar -https://edge.forgecdn.net/files/3798/505/TechReborn-5.2.0.jar +https://mediafiles.forgecdn.net/files/3798/505/TechReborn-5.2.0.jar https://cdn.modrinth.com/data/nfn13YXA/versions/8.2.490+fabric/RoughlyEnoughItems-8.2.490.jar https://cdn.modrinth.com/data/XxWD5pD3/versions/fabric-11.1.3/appliedenergistics2-11.1.3.jar https://cdn.modrinth.com/data/pNabrMMw/versions/11.1.1-fabric/AE2WTLib-11.1.1.jar @@ -36,36 +36,35 @@ https://cdn.modrinth.com/data/yn9u3ypm/versions/2.0.3+1.18.2/graves-2.0.3%2B1.18 #https://cdn.modrinth.com/data/IKpsG0nF/versions/1.6.8/paradise-lost-1.6.8%2B1.18.2.jar https://cdn.modrinth.com/data/zgaWtmrV/versions/1.29/arcanus-1.29.jar https://cdn.modrinth.com/data/F6KTit9k/versions/1.0.12/magitekmechs-fabric-MC1.18-1.0.12.jar -https://cdn.modrinth.com/data/4KWv7wbN/versions/1.4.5/chisel-1.4.5%2B1.18.2.jar https://cdn.modrinth.com/data/1IjD5062/versions/2.0.0+1.18.2/continuity-2.0.0%2B1.18.2.jar https://cdn.modrinth.com/data/WbwMfRsz/versions/1.3.4/terramine-1.3.4%2B1.18.2.jar -https://edge.forgecdn.net/files/3759/591/indrev-1.14.0-BETA.jar -https://edge.forgecdn.net/files/3758/209/deepmoblearning-refabricated-1.18.2.jar -https://edge.forgecdn.net/files/3832/920/upc-0.0.2.jar -https://edge.forgecdn.net/files/3785/658/simulacrum-0.5.4-beta.jar -https://edge.forgecdn.net/files/3795/212/mininggadgets-1.11.0.jar -https://edge.forgecdn.net/files/3734/921/iron-jetpacks-0.4.3.jar -https://edge.forgecdn.net/files/3724/30/EnhancedQuarries-1.18.2-1.2.1.jar -https://edge.forgecdn.net/files/3804/888/createaddition-1.18.2-20220525a.jar -https://edge.forgecdn.net/files/3732/839/DimensionalDoors-4.0.4-1.18.2.jar +https://mediafiles.forgecdn.net/files/3759/591/indrev-1.14.0-BETA.jar +https://mediafiles.forgecdn.net/files/3758/209/deepmoblearning-refabricated-1.18.2.jar +https://mediafiles.forgecdn.net/files/3832/920/upc-0.0.2.jar +https://mediafiles.forgecdn.net/files/3785/658/simulacrum-0.5.4-beta.jar +https://mediafiles.forgecdn.net/files/3795/212/mininggadgets-1.11.0.jar +https://mediafiles.forgecdn.net/files/3734/921/iron-jetpacks-0.4.3.jar +https://mediafiles.forgecdn.net/files/3724/30/EnhancedQuarries-1.18.2-1.2.1.jar +https://mediafiles.forgecdn.net/files/3804/888/createaddition-1.18.2-20220525a.jar +https://mediafiles.forgecdn.net/files/3732/839/DimensionalDoors-4.0.4-1.18.2.jar https://cdn.modrinth.com/data/7SDalH12/versions/1.5.3-1.18.2/FabricShieldLib-1.5.3-1.18.jar https://cdn.modrinth.com/data/rfj2v0X6/versions/v1.4.0/sizeshiftingpotions-1.4.0.jar -https://edge.forgecdn.net/files/3816/496/TerraBlender-fabric-1.18.2-1.1.0.102.jar +https://mediafiles.forgecdn.net/files/3816/496/TerraBlender-fabric-1.18.2-1.1.0.102.jar https://cdn.modrinth.com/data/t5W7Jfwy/versions/3.3.2+1.14.4-1.19/Pehkui-3.3.2%2B1.14.4-1.19.jar -https://edge.forgecdn.net/files/3798/506/RebornCore-5.2.0.jar -https://edge.forgecdn.net/files/3827/255/geckolib-fabric-1.18-3.0.47.jar +https://mediafiles.forgecdn.net/files/3798/506/RebornCore-5.2.0.jar +https://mediafiles.forgecdn.net/files/3827/255/geckolib-fabric-1.18-3.0.47.jar https://cdn.modrinth.com/data/9s6osm5g/versions/6.2.62/cloth-config-fabric-6.2.62.jar -https://edge.forgecdn.net/files/3668/220/autoconfig1u-3.4.0.jar +https://mediafiles.forgecdn.net/files/3668/220/autoconfig1u-3.4.0.jar https://cdn.modrinth.com/data/5aaWibi9/versions/3.3.1/trinkets-3.3.1.jar -https://edge.forgecdn.net/files/3648/220/%5b1.18%2B%5d+Flight+Rings+1.6.2.jar -https://edge.forgecdn.net/files/3824/538/ftb-chunks-fabric-1802.3.6-build.147.jar -https://edge.forgecdn.net/files/3725/500/ftb-teams-fabric-1802.2.6-build.51.jar -https://edge.forgecdn.net/files/3822/757/ftb-library-fabric-1802.3.6-build.123.jar -https://edge.forgecdn.net/files/3725/671/ftb-ultimine-fabric-1802.3.3-build.55.jar -https://edge.forgecdn.net/files/3796/516/Mine-Pop!+1.0-1.18.2+(FABRIC).jar -https://edge.forgecdn.net/files/3807/435/Applied-Botanics-1.2.1.jar -https://edge.forgecdn.net/files/3778/610/aofemotes-0.0.4+1.18.1.jar -https://edge.forgecdn.net/files/3772/197/archon-0.2.4.jar +https://mediafiles.forgecdn.net/files/3648/220/%5b1.18%2B%5d+Flight+Rings+1.6.2.jar +https://mediafiles.forgecdn.net/files/3824/538/ftb-chunks-fabric-1802.3.6-build.147.jar +https://mediafiles.forgecdn.net/files/3725/500/ftb-teams-fabric-1802.2.6-build.51.jar +https://mediafiles.forgecdn.net/files/3822/757/ftb-library-fabric-1802.3.6-build.123.jar +https://mediafiles.forgecdn.net/files/3725/671/ftb-ultimine-fabric-1802.3.3-build.55.jar +https://mediafiles.forgecdn.net/files/3796/516/Mine-Pop!+1.0-1.18.2+(FABRIC).jar +https://mediafiles.forgecdn.net/files/3807/435/Applied-Botanics-1.2.1.jar +https://mediafiles.forgecdn.net/files/3778/610/aofemotes-0.0.4%2B1.18.1.jar +https://mediafiles.forgecdn.net/files/3772/197/archon-0.2.4.jar https://cdn.modrinth.com/data/nU0bVIaL/versions/1.18.2-71.1-fabric/Patchouli-1.18.2-71.1-FABRIC.jar # disabled because of mixin crash #https://cdn.modrinth.com/data/IsKsViE2/versions/0.5.5/artifality-0.5.5.jar @@ -91,24 +90,25 @@ https://cdn.modrinth.com/data/5g7OOxWC/versions/1.2.1+1.18.2/sandwichable-1.2.1% https://cdn.modrinth.com/data/7n8PQuhb/versions/1.0.1/grains-of-sand-1.0.1.jar https://cdn.modrinth.com/data/AKgnrAFj/versions/1.3.1/secretrooms-1.3.1%2B1.18.2.jar https://cdn.modrinth.com/data/3rc31Hgo/versions/1.4.2/spectrum-1.4.2-1.18.2-chaos_and_exploration.jar -https://edge.forgecdn.net/files/3838/886/architects-palette-fabric-2.2.jar -https://edge.forgecdn.net/files/3756/730/artifacts-7.0.3+fabric.jar -https://edge.forgecdn.net/files/3740/439/AdditionalStructures-1.18.2-(v.3.0.3).jar -https://edge.forgecdn.net/files/3830/795/bewitchment-1.18-22.jar -https://edge.forgecdn.net/files/3814/359/bclib-1.4.7.jar -https://edge.forgecdn.net/files/3814/370/better-end-1.1.1.jar -https://edge.forgecdn.net/files/3814/362/better-nether-6.1.2.jar -https://edge.forgecdn.net/files/3807/49/blockus-2.4.7+1.18.2.jar -https://edge.forgecdn.net/files/3770/217/dankstorage-1.18.2-3.7.jar -https://edge.forgecdn.net/files/3681/918/Decorative+Blocks-fabric-1.18.2-2.1.0.jar -https://edge.forgecdn.net/files/3777/271/mcdar-1.4.8.jar -https://edge.forgecdn.net/files/3851/61/agape_space_18_2-0.5.15.jar -https://edge.forgecdn.net/files/3844/873/travelers-backpack-1.18.2-7.1.1.jar -https://edge.forgecdn.net/files/3759/595/wirelessnetworks-1.5.1.jar -https://edge.forgecdn.net/files/3671/220/winged-1.18.2-3.2.0.jar -https://edge.forgecdn.net/files/3847/377/xp_obelisk-0.4.1.r_for_1.18.x_Fabric.jar -https://edge.forgecdn.net/files/3683/667/Runelic-Fabric-1.18.2-11.0.1.jar -https://edge.forgecdn.net/files/3832/269/Bookshelf-Fabric-1.18.2-13.2.21.jar -https://edge.forgecdn.net/files/3683/673/PigPen-Fabric-1.18.2-8.0.1.jar -https://edge.forgecdn.net/files/3830/308/DarkUtilities-Fabric-1.18.2-10.0.5.jar -https://cdn.modrinth.com/data/ccKDOlHs/versions/0.7.2+1.18/owo-lib-0.7.2%2B1.18.jar \ No newline at end of file +https://mediafiles.forgecdn.net/files/3838/886/architects-palette-fabric-2.2.jar +https://mediafiles.forgecdn.net/files/3756/730/artifacts-7.0.3%2Bfabric.jar +https://mediafiles.forgecdn.net/files/3740/439/AdditionalStructures-1.18.2-(v.3.0.3).jar +https://mediafiles.forgecdn.net/files/3830/795/bewitchment-1.18-22.jar +https://mediafiles.forgecdn.net/files/3814/359/bclib-1.4.7.jar +https://mediafiles.forgecdn.net/files/3814/370/better-end-1.1.1.jar +https://mediafiles.forgecdn.net/files/3814/362/better-nether-6.1.2.jar +https://mediafiles.forgecdn.net/files/3807/49/blockus-2.4.7%2B1.18.2.jar +https://mediafiles.forgecdn.net/files/3770/217/dankstorage-1.18.2-3.7.jar +https://mediafiles.forgecdn.net/files/3681/918/Decorative+Blocks-fabric-1.18.2-2.1.0.jar +https://mediafiles.forgecdn.net/files/3777/271/mcdar-1.4.8.jar +https://mediafiles.forgecdn.net/files/3851/61/agape_space_18_2-0.5.15.jar +https://mediafiles.forgecdn.net/files/3844/873/travelers-backpack-1.18.2-7.1.1.jar +https://mediafiles.forgecdn.net/files/3759/595/wirelessnetworks-1.5.1.jar +https://mediafiles.forgecdn.net/files/3671/220/winged-1.18.2-3.2.0.jar +https://mediafiles.forgecdn.net/files/3847/377/xp_obelisk-0.4.1.r_for_1.18.x_Fabric.jar +https://mediafiles.forgecdn.net/files/3683/667/Runelic-Fabric-1.18.2-11.0.1.jar +https://mediafiles.forgecdn.net/files/3832/269/Bookshelf-Fabric-1.18.2-13.2.21.jar +https://mediafiles.forgecdn.net/files/3683/673/PigPen-Fabric-1.18.2-8.0.1.jar +https://mediafiles.forgecdn.net/files/3830/308/DarkUtilities-Fabric-1.18.2-10.0.5.jar +https://cdn.modrinth.com/data/ccKDOlHs/versions/0.7.2+1.18/owo-lib-0.7.2%2B1.18.jar +https://cdn.modrinth.com/data/umyGl7zF/versions/1802.5.4-build.506+fabric/kubejs-fabric-1802.5.4-build.506.jar diff --git a/overrides/config/Flight Rings.json5 b/overrides/config/Flight Rings.json5 new file mode 100644 index 0000000..bbf3942 --- /dev/null +++ b/overrides/config/Flight Rings.json5 @@ -0,0 +1,37 @@ +{ + "basicRingOptions": { + "enabled": true, + "durability": true, + // Durability of basic ring + "durabilityValue": 180, + // Recipe uses an ender eye instead of quartz. §c§lDeletes existing basic rings + "eye": false, + "exhaustion": 0.15000000596046448, + // Basic ring gives slow falling after breaking + "protects": false + }, + "pureRingOptions": { + "durability": true, + // Durability of pure ring + "durabilityValue": 9000, + "exhaustion": 0.029999999329447746, + // Pure ring uses XP instead of durability + "xpEnabled": false, + // How much percentage of the XP bar is used per second + "xpCost": 1.0, + // Pure ring gives you slow falling when out of durability + "protects": true + }, + "misc": { + // Percentage chance per tick (20/s) for a ring to lose durability + "damageChance": 10.0, + // Recipes disabled. §c§lDeletes all existing rings + "treasure": true, + // Enables rings to spawn in chest loot + "chestLoot": false, + // Adds Trinkets support. §c§lDeletes all existing rings + "trinkets": true, + // Rings force flight when equipping or loading world midair + "autofly": true + } +}