Compare commits
42 commits
v1.0.0-bet
...
master
Author | SHA1 | Date | |
---|---|---|---|
312762412f | |||
17cbfc7755 | |||
72154ef308 | |||
0a60997ae5 | |||
7355277cbc | |||
baf78144ea | |||
3b48cd1d8f | |||
357d9cbd8a | |||
3fad9a8bf5 | |||
308987fea6 | |||
cdfec1a0cd | |||
cd4e65171b | |||
aa328f37ac | |||
e3ff938569 | |||
7bbf1be07a | |||
aace4755f7 | |||
3ecb006ac0 | |||
ea0f0f0949 | |||
2d3cf39ec1 | |||
f0b53eb190 | |||
09d6d3c28a | |||
8105df3a12 | |||
c54dea6554 | |||
a0ac9b4852 | |||
8b35f4822f | |||
20d3dfb0a0 | |||
370d102fb6 | |||
05dd93fc62 | |||
2644b1e082 | |||
b0cb255906 | |||
1bbe7382cc | |||
e3b18a1a82 | |||
c87ba41671 | |||
3ccebc10c1 | |||
c8f0d9574e | |||
e8b576827e | |||
8f68a6382a | |||
b2519977f9 | |||
7acf3f5c28 | |||
f056fd9ffb | |||
6810d28d18 | |||
980f076c2f |
89
addon.json
|
@ -4,7 +4,7 @@
|
|||
},
|
||||
"id": "mineteck-reloaded",
|
||||
"namespace": "net.anvilcraft",
|
||||
"version": "1.0.0-beta.2",
|
||||
"version": "1.0.4",
|
||||
"flags": {
|
||||
"both": ["required", "instance"]
|
||||
},
|
||||
|
@ -190,7 +190,7 @@
|
|||
{
|
||||
"qualifier": "mod-appeng",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/appeng/appliedenergistics2/rv3-beta-21/appliedenergistics2-rv3-beta-21.jar"
|
||||
"https://maven.tilera.xyz/appeng/appliedenergistics2/rv3-beta-23/appliedenergistics2-rv3-beta-23.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -385,7 +385,7 @@
|
|||
{
|
||||
"qualifier": "mod-ee3",
|
||||
"link": [
|
||||
"https://git.tilera.org/api/packages/Anvilcraft/generic/ee3/0.5.0/EquivalentExchange3-1.7.10-0.5.0.0.jar"
|
||||
"https://git.tilera.org/api/packages/Anvilcraft/generic/ee3/0.5.1/EquivalentExchange3-1.7.10-0.5.1.0.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -400,7 +400,7 @@
|
|||
{
|
||||
"qualifier": "mod-factorization",
|
||||
"link": [
|
||||
"https://mediafiles.forgecdn.net/files/2990/432/Factorization-1.7.10-0.8.108+(Unofficial).jar"
|
||||
"https://cdn.modrinth.com/data/XmseIqaa/versions/0.8.109/Factorization-1.7.10-0.8.109.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -548,7 +548,7 @@
|
|||
{
|
||||
"qualifier": "mod-mekanism",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/mekanism/Mekanism/1.7.10-9.12.0/Mekanism-1.7.10-9.12.0.jar"
|
||||
"https://maven.tilera.xyz/mekanism/Mekanism/1.7.10-9.13.1/Mekanism-1.7.10-9.13.1.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -983,22 +983,7 @@
|
|||
{
|
||||
"qualifier": "mod-redpower",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/com/eloraam/redpower/RedPower/2.0pr8-dirty/RedPower-2.0pr8-dirty.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
},
|
||||
"install": [
|
||||
{
|
||||
"action": "move",
|
||||
"args": ["./mods"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"qualifier": "mod-powercraft",
|
||||
"link": [
|
||||
"https://cdn.tilera.xyz/minecraft/mods/mtreloaded/powercraft-0.1.0B.jar"
|
||||
"https://maven.tilera.xyz/com/eloraam/redpower/RedPower/2.0pr10-dirty/RedPower-2.0pr10-dirty.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1043,7 +1028,7 @@
|
|||
{
|
||||
"qualifier": "mod-cwg",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/dev/tilera/modding/cwg/1.6.0/cwg-1.6.0.jar"
|
||||
"https://maven.tilera.xyz/dev/tilera/modding/cwg/1.7.1/cwg-1.7.1.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1058,7 +1043,7 @@
|
|||
{
|
||||
"qualifier": "mod-mixins",
|
||||
"link": [
|
||||
"https://cdn.tilera.xyz/minecraft/mods/mtreloaded/00gasstation-mc1.7.10-0.3.5.jar"
|
||||
"https://mediafilez.forgecdn.net/files/4399/569/_unimixins-all-1.7.10-0.1.4.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1103,7 +1088,7 @@
|
|||
{
|
||||
"qualifier": "mod-electricexpansion",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/universalelectricity/electricexpansion/1.0.0/electricexpansion-1.0.0.jar"
|
||||
"https://maven.tilera.xyz/universalelectricity/electricexpansion/1.0.2/electricexpansion-1.0.2.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1118,7 +1103,7 @@
|
|||
{
|
||||
"qualifier": "mod-assemblyline",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/universalelectricity/assemblyline/1.0.2/assemblyline-1.0.2.jar"
|
||||
"https://maven.tilera.xyz/universalelectricity/assemblyline/1.0.3/assemblyline-1.0.3.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1148,7 +1133,7 @@
|
|||
{
|
||||
"qualifier": "mod-mffs",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/universalelectricity/mffs/1.0.6/mffs-1.0.6.jar"
|
||||
"https://maven.tilera.xyz/universalelectricity/mffs/1.0.8/mffs-1.0.8.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1163,7 +1148,7 @@
|
|||
{
|
||||
"qualifier": "mod-icbm",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/universalelectricity/icbm/1.0.4/icbm-1.0.4.jar"
|
||||
"https://maven.tilera.xyz/universalelectricity/icbm/1.0.8/icbm-1.0.8.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1178,7 +1163,7 @@
|
|||
{
|
||||
"qualifier": "mod-auracore",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/dev/tilera/auracore/1.8.7/auracore-1.8.7.jar"
|
||||
"https://maven.tilera.xyz/dev/tilera/auracore/1.8.9/auracore-1.8.9.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1193,7 +1178,7 @@
|
|||
{
|
||||
"qualifier": "mod-classiccasting",
|
||||
"link": [
|
||||
"https://maven.tilera.xyz/net/anvilcraft/classic-casting/1.3.0/classic-casting-1.3.0.jar"
|
||||
"https://maven.tilera.xyz/net/anvilcraft/classic-casting/1.4.1/classic-casting-1.4.1.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
|
@ -1250,21 +1235,6 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"qualifier": "mod-tinycarts",
|
||||
"link": [
|
||||
"http://immibis.com/mcmoddl/files/tinycarts-0.2.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
},
|
||||
"install": [
|
||||
{
|
||||
"action": "move",
|
||||
"args": ["./mods"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"qualifier": "mod-gravitygun",
|
||||
"link": [
|
||||
|
@ -1340,6 +1310,21 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"qualifier": "mod-archaicfix",
|
||||
"link": [
|
||||
"https://mediafilez.forgecdn.net/files/4405/338/archaicfix-0.5.0.jar"
|
||||
],
|
||||
"flags": {
|
||||
"both": ["required"]
|
||||
},
|
||||
"install": [
|
||||
{
|
||||
"action": "move",
|
||||
"args": ["./mods"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"qualifier": "mod-mousetweaks",
|
||||
"link": [
|
||||
|
@ -1388,6 +1373,22 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"qualifier": "mod-loadingscreen",
|
||||
"link": [
|
||||
"https://mediafilez.forgecdn.net/files/2414/751/BetterLoadingScreen-1.3.10.jar"
|
||||
],
|
||||
"flags": {
|
||||
"client": ["required"],
|
||||
"server": ["incompatible"]
|
||||
},
|
||||
"install": [
|
||||
{
|
||||
"action": "move",
|
||||
"args": ["./mods"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"qualifier": "mod-liteloader",
|
||||
"link": [
|
||||
|
|
484
build.zig
|
@ -1,484 +0,0 @@
|
|||
//usr/bin/env zig run $0 -lc `pkgconf --libs libarchive libcurl`; exit
|
||||
// This script requires a zig compiler, libarchive and libcurl to run.
|
||||
// If you're on windows, screw you lol
|
||||
|
||||
const std = @import("std");
|
||||
const c = @cImport({
|
||||
@cInclude("curl/curl.h");
|
||||
@cInclude("archive.h");
|
||||
@cInclude("archive_entry.h");
|
||||
});
|
||||
const settings = @import("settings.zig");
|
||||
|
||||
pub fn main() !void {
|
||||
const simple_output = std.os.getenv("BUILD_SIMPLE_OUTPUT") != null;
|
||||
|
||||
// used to buffer whatever
|
||||
var buf: [512]u8 = undefined;
|
||||
try std.fs.cwd().deleteTree(settings.build_dir);
|
||||
try std.fs.cwd().makeDir(settings.build_dir);
|
||||
|
||||
var zip = c.archive_write_new();
|
||||
if (zip == null)
|
||||
return error.ArchiveNewError;
|
||||
defer _ = c.archive_write_free(zip);
|
||||
try handleArchiveErr(c.archive_write_set_format_zip(zip), zip);
|
||||
try handleArchiveErr(c.archive_write_set_format_option(
|
||||
zip,
|
||||
"zip",
|
||||
"compression-level",
|
||||
settings.compression_level,
|
||||
), zip);
|
||||
try handleArchiveErr(c.archive_write_open_filename(
|
||||
zip,
|
||||
settings.build_dir ++ "/" ++ settings.name ++ "-" ++ settings.version ++ ".zip",
|
||||
), zip);
|
||||
|
||||
var entry = c.archive_entry_new();
|
||||
defer c.archive_entry_free(entry);
|
||||
|
||||
try archiveCreateDir(zip.?, entry.?, "minecraft/");
|
||||
try archiveCreateDir(zip.?, entry.?, "minecraft/mods/");
|
||||
|
||||
const writer = ArchiveWriter{ .context = zip.? };
|
||||
|
||||
var overrides = try std.fs.cwd().openIterableDir("overrides", .{});
|
||||
defer overrides.close();
|
||||
var walker = try overrides.walk(std.heap.c_allocator);
|
||||
defer walker.deinit();
|
||||
|
||||
const stdout = std.io.getStdOut().writer();
|
||||
while (try walker.next()) |e| {
|
||||
switch (e.kind) {
|
||||
.Directory => {
|
||||
if (simple_output) {
|
||||
stdout.print(
|
||||
"Writing Directory\t{s}\n",
|
||||
.{e.path},
|
||||
) catch {};
|
||||
} else {
|
||||
stdout.print(
|
||||
"Writing Directory\t\x1b[34m{s}/\x1b[0m\n",
|
||||
.{e.path},
|
||||
) catch {};
|
||||
}
|
||||
const path = try std.mem.concatWithSentinel(
|
||||
std.heap.c_allocator,
|
||||
u8,
|
||||
&[_][]const u8{ "minecraft/", e.path },
|
||||
0,
|
||||
);
|
||||
defer std.heap.c_allocator.free(path);
|
||||
try archiveCreateDir(zip.?, entry.?, path.ptr);
|
||||
},
|
||||
.File => {
|
||||
if (simple_output) {
|
||||
stdout.print("Writing File\t\t{s}\n", .{e.path}) catch {};
|
||||
} else {
|
||||
stdout.print("Writing File\t\t\x1b[34m{s}\x1b[0m\n", .{e.path}) catch {};
|
||||
}
|
||||
const path = try std.mem.concatWithSentinel(
|
||||
std.heap.c_allocator,
|
||||
u8,
|
||||
&[_][]const u8{ "minecraft/", e.path },
|
||||
0,
|
||||
);
|
||||
defer std.heap.c_allocator.free(path);
|
||||
var file = try overrides.dir.openFile(e.path, .{});
|
||||
defer file.close();
|
||||
|
||||
try archiveFile(
|
||||
zip.?,
|
||||
entry.?,
|
||||
&buf,
|
||||
path.ptr,
|
||||
file,
|
||||
);
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
|
||||
try installMmcPackJson(zip.?, entry.?);
|
||||
|
||||
c.archive_entry_set_pathname(entry, "instance.cfg");
|
||||
c.archive_entry_set_size(entry, settings.instance_cfg_data.len);
|
||||
try handleArchiveErr(c.archive_write_header(zip, entry), zip);
|
||||
try writer.writeAll(settings.instance_cfg_data);
|
||||
|
||||
var mods_arena = std.heap.ArenaAllocator.init(std.heap.c_allocator);
|
||||
defer mods_arena.deinit();
|
||||
var mods = std.ArrayList([]u8).init(std.heap.c_allocator);
|
||||
defer mods.deinit();
|
||||
|
||||
readMods(&mods, mods_arena.allocator()) catch |err| {
|
||||
std.log.err("Error reading mods.conf", .{});
|
||||
return err;
|
||||
};
|
||||
|
||||
downloadMods(mods.items, zip.?, entry.?, simple_output) catch |err| {
|
||||
std.log.err("Error downloading mods", .{});
|
||||
return err;
|
||||
};
|
||||
|
||||
try handleArchiveErr(c.archive_write_close(zip), zip);
|
||||
}
|
||||
|
||||
const ArchiveWriter = std.io.Writer(
|
||||
*c.archive,
|
||||
error{ArchiveError},
|
||||
writeArchive,
|
||||
);
|
||||
|
||||
fn writeArchive(archive: *c.archive, bytes: []const u8) error{ArchiveError}!usize {
|
||||
const result = c.archive_write_data(archive, bytes.ptr, bytes.len);
|
||||
if (result < 0) {
|
||||
try handleArchiveErr(result, archive);
|
||||
}
|
||||
return @intCast(usize, result);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
const writer = ArchiveWriter{ .context = archive };
|
||||
var fifo = std.fifo.LinearFifo(u8, .Slice).init(buf);
|
||||
try fifo.pump(file.reader(), writer);
|
||||
}
|
||||
|
||||
/// `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 installMmcPackJson(archive: *c.archive, entry: *c.archive_entry) !void {
|
||||
const Requires = struct {
|
||||
uid: []const u8,
|
||||
equals: ?[]const u8 = null,
|
||||
suggests: ?[]const u8 = null,
|
||||
};
|
||||
|
||||
const Component = struct {
|
||||
cachedName: []const u8,
|
||||
cachedRequires: ?[]const Requires = null,
|
||||
cachedVersion: []const u8,
|
||||
cachedVolatile: ?bool = null,
|
||||
dependencyOnly: ?bool = null,
|
||||
important: ?bool = null,
|
||||
uid: []const u8,
|
||||
version: []const u8,
|
||||
};
|
||||
|
||||
const data = .{
|
||||
.components = &[_]Component{
|
||||
.{
|
||||
.cachedName = "LWJGL 2",
|
||||
.cachedVersion = "2.9.4-nightly-20150209",
|
||||
.cachedVolatile = true,
|
||||
.dependencyOnly = true,
|
||||
.uid = "org.lwjgl",
|
||||
.version = "2.9.4-nightly-20150209",
|
||||
},
|
||||
.{
|
||||
.cachedName = "Minecraft",
|
||||
.cachedRequires = &.{
|
||||
.{
|
||||
.uid = "org.lwjgl",
|
||||
.suggests = "2.9.4-nightly-20150209",
|
||||
},
|
||||
},
|
||||
.cachedVersion = settings.minecraft_version,
|
||||
.important = true,
|
||||
.uid = "net.minecraft",
|
||||
.version = settings.minecraft_version,
|
||||
},
|
||||
.{
|
||||
.cachedName = "Forge",
|
||||
.cachedRequires = &.{
|
||||
.{
|
||||
.uid = "net.minecraft",
|
||||
.equals = settings.minecraft_version,
|
||||
},
|
||||
},
|
||||
.uid = "net.minecraftforge",
|
||||
.cachedVersion = settings.forge_version,
|
||||
.version = settings.forge_version,
|
||||
},
|
||||
},
|
||||
.formatVersion = 1,
|
||||
};
|
||||
|
||||
// We run the serializer twice, because we need to know the size ahead of time for zip.
|
||||
// This is faster than allocating the json on the heap.
|
||||
var counter = std.io.countingWriter(std.io.null_writer);
|
||||
try std.json.stringify(
|
||||
data,
|
||||
.{ .emit_null_optional_fields = false },
|
||||
counter.writer(),
|
||||
);
|
||||
|
||||
entrySetFile(entry);
|
||||
c.archive_entry_set_size(entry, @intCast(i64, counter.bytes_written));
|
||||
c.archive_entry_set_pathname(entry, "mmc-pack.json");
|
||||
try handleArchiveErr(c.archive_write_header(archive, entry), archive);
|
||||
|
||||
try std.json.stringify(
|
||||
data,
|
||||
.{ .emit_null_optional_fields = false },
|
||||
ArchiveWriter{ .context = archive },
|
||||
);
|
||||
}
|
||||
|
||||
fn readMods(list: *std.ArrayList([]u8), alloc: std.mem.Allocator) !void {
|
||||
var file = try std.fs.cwd().openFile("mods.conf", .{});
|
||||
defer file.close();
|
||||
var line_buf: [1024]u8 = undefined;
|
||||
|
||||
while (try file.reader().readUntilDelimiterOrEof(&line_buf, '\n')) |line| {
|
||||
// mods.txt has comments with "#"
|
||||
const line_without_comment = std.mem.sliceTo(line, '#');
|
||||
const trimmed_line = std.mem.trim(u8, line_without_comment, "\n\r\t ");
|
||||
if (trimmed_line.len != 0) {
|
||||
try list.append(try alloc.dupe(u8, trimmed_line));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn curlWriteCallback(
|
||||
data: [*]const u8,
|
||||
size: usize,
|
||||
nmemb: usize,
|
||||
out: *std.ArrayList(u8),
|
||||
) callconv(.C) usize {
|
||||
const realsize = size * nmemb;
|
||||
out.writer().writeAll(data[0..realsize]) catch return 0;
|
||||
return realsize;
|
||||
}
|
||||
|
||||
const CurlInfo = struct {
|
||||
filename: []const u8,
|
||||
index: usize,
|
||||
total: usize,
|
||||
mod_number_width: usize,
|
||||
simple_output: bool,
|
||||
|
||||
fn logStart(self: *CurlInfo) !void {
|
||||
if (!self.simple_output)
|
||||
return;
|
||||
|
||||
try std.io.getStdOut().writer().print(
|
||||
"[{d:[3]}/{d}] {s} Downloading...\n",
|
||||
.{ self.index, self.total, self.filename, self.mod_number_width },
|
||||
);
|
||||
}
|
||||
|
||||
fn logProgress(self: *CurlInfo, percentage: u8) !void {
|
||||
if (self.simple_output)
|
||||
return;
|
||||
|
||||
try std.io.getStdOut().writer().print(
|
||||
"\r\x1b[34m[{d:[4]}/{d}] \x1b[97m{s} \x1b[32m{}%",
|
||||
.{
|
||||
self.index,
|
||||
self.total,
|
||||
self.filename,
|
||||
percentage,
|
||||
self.mod_number_width,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
fn logZipping(self: *CurlInfo) !void {
|
||||
if (!self.simple_output) {
|
||||
try std.io.getStdOut().writer().print(
|
||||
"\r\x1b[34m[{d:[3]}/{d}] \x1b[97m{s} \x1b[31mZipping...",
|
||||
.{ self.index, self.total, self.filename, self.mod_number_width },
|
||||
);
|
||||
} else {
|
||||
try std.io.getStdOut().writer().print(
|
||||
"[{d:[3]}/{d}] {s} Zipping...\n",
|
||||
.{ self.index, self.total, self.filename, self.mod_number_width },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn logDone(self: *CurlInfo) !void {
|
||||
if (self.simple_output)
|
||||
return;
|
||||
|
||||
std.io.getStdOut().writer().print(
|
||||
"\x1b[2K\r\x1b[34m[{d:[3]}/{d}] \x1b[97m{s}\n",
|
||||
.{ self.index, self.total, self.filename, self.mod_number_width },
|
||||
) catch {};
|
||||
}
|
||||
};
|
||||
|
||||
fn curlInfoCallback(
|
||||
info: *CurlInfo,
|
||||
dltotal: c.curl_off_t,
|
||||
dlnow: c.curl_off_t,
|
||||
ultotal: c.curl_off_t,
|
||||
ulnow: c.curl_off_t,
|
||||
) callconv(.C) usize {
|
||||
_ = ultotal;
|
||||
_ = ulnow;
|
||||
info.logProgress(
|
||||
@intCast(u8, if (dltotal != 0) @divTrunc(dlnow * 100, dltotal) else 0),
|
||||
) catch {};
|
||||
return 0;
|
||||
}
|
||||
|
||||
fn downloadMods(
|
||||
mods: []const []const u8,
|
||||
zip: *c.archive,
|
||||
entry: *c.archive_entry,
|
||||
simple_output: bool,
|
||||
) !void {
|
||||
var curl = c.curl_easy_init();
|
||||
if (curl == null)
|
||||
return error.CurlInitError;
|
||||
defer c.curl_easy_cleanup(curl);
|
||||
|
||||
try handleCurlErr(c.curl_easy_setopt(
|
||||
curl,
|
||||
c.CURLOPT_WRITEFUNCTION,
|
||||
&curlWriteCallback,
|
||||
));
|
||||
try handleCurlErr(c.curl_easy_setopt(
|
||||
curl,
|
||||
c.CURLOPT_XFERINFOFUNCTION,
|
||||
&curlInfoCallback,
|
||||
));
|
||||
try handleCurlErr(c.curl_easy_setopt(curl, c.CURLOPT_NOPROGRESS, @as(c_long, 0)));
|
||||
try handleCurlErr(c.curl_easy_setopt(curl, c.CURLOPT_FOLLOWLOCATION, @as(c_long, 1)));
|
||||
|
||||
const mod_number_width = std.math.log10(mods.len) + 1;
|
||||
|
||||
const writer = ArchiveWriter{ .context = zip };
|
||||
var mod_buf = std.ArrayList(u8).init(std.heap.c_allocator);
|
||||
defer mod_buf.deinit();
|
||||
var info = CurlInfo{
|
||||
.filename = "",
|
||||
.index = 0,
|
||||
.total = mods.len,
|
||||
.mod_number_width = mod_number_width,
|
||||
.simple_output = simple_output,
|
||||
};
|
||||
try handleCurlErr(c.curl_easy_setopt(curl, c.CURLOPT_XFERINFODATA, &info));
|
||||
// hide cursor
|
||||
if (!simple_output) {
|
||||
std.io.getStdOut().writeAll("\x1b[?25l") catch {};
|
||||
}
|
||||
// show cursor & reset
|
||||
defer if (!simple_output) {
|
||||
std.io.getStdOut().writeAll("\x1b[?25h\x1b[0\n") catch {};
|
||||
};
|
||||
|
||||
for (mods) |mod| {
|
||||
info.index += 1;
|
||||
|
||||
mod_buf.clearRetainingCapacity();
|
||||
var splits = std.mem.split(u8, mod, "/");
|
||||
var filename_esc: ?[]const u8 = null;
|
||||
while (splits.next()) |split|
|
||||
filename_esc = split;
|
||||
|
||||
if (filename_esc == null or filename_esc.?.len == 0) {
|
||||
std.log.err("Failed to get filename of URL {s}", .{mod});
|
||||
return error.BorkedUrl;
|
||||
}
|
||||
|
||||
var filename_len: c_int = undefined;
|
||||
var filename_cstr = c.curl_easy_unescape(
|
||||
curl,
|
||||
filename_esc.?.ptr,
|
||||
@intCast(c_int, filename_esc.?.len),
|
||||
&filename_len,
|
||||
);
|
||||
defer c.curl_free(filename_cstr);
|
||||
var filename = filename_cstr[0..@intCast(usize, filename_len)];
|
||||
|
||||
// Replace + with space in URL decoded filename
|
||||
for (filename) |*ch| {
|
||||
if (ch.* == '+') {
|
||||
ch.* = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
info.filename = filename;
|
||||
|
||||
try handleCurlErr(c.curl_easy_setopt(curl, c.CURLOPT_WRITEDATA, &mod_buf));
|
||||
|
||||
const mod_cstr = try std.cstr.addNullByte(std.heap.c_allocator, mod);
|
||||
defer std.heap.c_allocator.free(mod_cstr);
|
||||
|
||||
try handleCurlErr(c.curl_easy_setopt(
|
||||
curl,
|
||||
c.CURLOPT_URL,
|
||||
mod_cstr.ptr,
|
||||
));
|
||||
|
||||
try info.logStart();
|
||||
|
||||
try handleCurlErr(c.curl_easy_perform(curl));
|
||||
|
||||
try info.logZipping();
|
||||
|
||||
var archive_path = try std.mem.concatWithSentinel(
|
||||
std.heap.c_allocator,
|
||||
u8,
|
||||
&.{ "minecraft/mods/", filename },
|
||||
0,
|
||||
);
|
||||
defer std.heap.c_allocator.free(archive_path);
|
||||
|
||||
c.archive_entry_set_pathname(entry, archive_path.ptr);
|
||||
c.archive_entry_set_size(entry, @intCast(i64, mod_buf.items.len));
|
||||
try handleArchiveErr(c.archive_write_header(zip, entry), zip);
|
||||
try writer.writeAll(mod_buf.items);
|
||||
try info.logDone();
|
||||
}
|
||||
}
|
||||
|
||||
fn entrySetDir(entry: *c.archive_entry) void {
|
||||
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_filetype(entry, c.S_IFREG);
|
||||
c.archive_entry_set_perm(entry, 0o644);
|
||||
}
|
||||
|
||||
fn handleCurlErr(code: c.CURLcode) !void {
|
||||
if (code != c.CURLE_OK) {
|
||||
std.log.err("Curl error: {s}", .{c.curl_easy_strerror(code)});
|
||||
return error.CurlError;
|
||||
}
|
||||
}
|
||||
|
||||
fn handleArchiveErr(err: anytype, archive: ?*c.archive) !void {
|
||||
if (err != c.ARCHIVE_OK) {
|
||||
if (archive) |ar| {
|
||||
if (c.archive_error_string(ar)) |err_s|
|
||||
std.log.err("Archive error: {s}", .{err_s});
|
||||
}
|
||||
return error.ArchiveError;
|
||||
}
|
||||
}
|
15
settings.zig
|
@ -1,15 +0,0 @@
|
|||
pub const name = "mineteck-reloaded";
|
||||
|
||||
/// Version number used for the archive name
|
||||
pub const version = "0.1.0";
|
||||
pub const build_dir = "build";
|
||||
pub const minecraft_version = "1.7.10";
|
||||
pub const forge_version = "10.13.4.1614";
|
||||
|
||||
/// the data for the `instance.cfg` file
|
||||
pub const instance_cfg_data =
|
||||
\\InstanceType=OneSix
|
||||
;
|
||||
|
||||
/// zip compression level. 9 is max. ask libarchive why this is a string.
|
||||
pub const compression_level = "9";
|
|
@ -4,7 +4,7 @@
|
|||
"id": "mineteck-reloaded",
|
||||
"versions": [
|
||||
{
|
||||
"version": "1.0.0-beta.2",
|
||||
"version": "1.0.4",
|
||||
"versionid": -1,
|
||||
"mcversion": [
|
||||
"1.7.10"
|
||||
|
@ -167,7 +167,7 @@
|
|||
{
|
||||
"id": "mod-appeng",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/appeng/appliedenergistics2/rv3-beta-21/appliedenergistics2-rv3-beta-21.jar",
|
||||
"link": "https://maven.tilera.xyz/appeng/appliedenergistics2/rv3-beta-23/appliedenergistics2-rv3-beta-23.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -349,7 +349,7 @@
|
|||
{
|
||||
"id": "mod-ee3",
|
||||
"file": {
|
||||
"link": "https://git.tilera.org/api/packages/Anvilcraft/generic/ee3/0.5.0/EquivalentExchange3-1.7.10-0.5.0.0.jar",
|
||||
"link": "https://git.tilera.org/api/packages/Anvilcraft/generic/ee3/0.5.1/EquivalentExchange3-1.7.10-0.5.1.0.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -363,7 +363,7 @@
|
|||
{
|
||||
"id": "mod-factorization",
|
||||
"file": {
|
||||
"link": "https://mediafiles.forgecdn.net/files/2990/432/Factorization-1.7.10-0.8.108+(Unofficial).jar",
|
||||
"link": "https://cdn.modrinth.com/data/XmseIqaa/versions/0.8.109/Factorization-1.7.10-0.8.109.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -503,7 +503,7 @@
|
|||
{
|
||||
"id": "mod-mekanism",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/mekanism/Mekanism/1.7.10-9.12.0/Mekanism-1.7.10-9.12.0.jar",
|
||||
"link": "https://maven.tilera.xyz/mekanism/Mekanism/1.7.10-9.13.1/Mekanism-1.7.10-9.13.1.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -909,21 +909,7 @@
|
|||
{
|
||||
"id": "mod-redpower",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/com/eloraam/redpower/RedPower/2.0pr8-dirty/RedPower-2.0pr8-dirty.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
"options": [
|
||||
"server",
|
||||
"client",
|
||||
"required",
|
||||
"included"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mod-powercraft",
|
||||
"file": {
|
||||
"link": "https://cdn.tilera.xyz/minecraft/mods/mtreloaded/powercraft-0.1.0B.jar",
|
||||
"link": "https://maven.tilera.xyz/com/eloraam/redpower/RedPower/2.0pr10-dirty/RedPower-2.0pr10-dirty.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -965,7 +951,7 @@
|
|||
{
|
||||
"id": "mod-cwg",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/dev/tilera/modding/cwg/1.6.0/cwg-1.6.0.jar",
|
||||
"link": "https://maven.tilera.xyz/dev/tilera/modding/cwg/1.7.1/cwg-1.7.1.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -979,7 +965,7 @@
|
|||
{
|
||||
"id": "mod-mixins",
|
||||
"file": {
|
||||
"link": "https://cdn.tilera.xyz/minecraft/mods/mtreloaded/00gasstation-mc1.7.10-0.3.5.jar",
|
||||
"link": "https://mediafilez.forgecdn.net/files/4399/569/_unimixins-all-1.7.10-0.1.4.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -1021,7 +1007,7 @@
|
|||
{
|
||||
"id": "mod-electricexpansion",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/electricexpansion/1.0.0/electricexpansion-1.0.0.jar",
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/electricexpansion/1.0.2/electricexpansion-1.0.2.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -1035,7 +1021,7 @@
|
|||
{
|
||||
"id": "mod-assemblyline",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/assemblyline/1.0.2/assemblyline-1.0.2.jar",
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/assemblyline/1.0.3/assemblyline-1.0.3.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -1063,7 +1049,7 @@
|
|||
{
|
||||
"id": "mod-mffs",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/mffs/1.0.6/mffs-1.0.6.jar",
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/mffs/1.0.8/mffs-1.0.8.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -1077,7 +1063,7 @@
|
|||
{
|
||||
"id": "mod-icbm",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/icbm/1.0.4/icbm-1.0.4.jar",
|
||||
"link": "https://maven.tilera.xyz/universalelectricity/icbm/1.0.8/icbm-1.0.8.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -1091,7 +1077,7 @@
|
|||
{
|
||||
"id": "mod-auracore",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/dev/tilera/auracore/1.8.7/auracore-1.8.7.jar",
|
||||
"link": "https://maven.tilera.xyz/dev/tilera/auracore/1.8.9/auracore-1.8.9.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -1105,7 +1091,7 @@
|
|||
{
|
||||
"id": "mod-classiccasting",
|
||||
"file": {
|
||||
"link": "https://maven.tilera.xyz/net/anvilcraft/classic-casting/1.3.0/classic-casting-1.3.0.jar",
|
||||
"link": "https://maven.tilera.xyz/net/anvilcraft/classic-casting/1.4.1/classic-casting-1.4.1.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
|
@ -1158,20 +1144,6 @@
|
|||
"included"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mod-tinycarts",
|
||||
"file": {
|
||||
"link": "http://immibis.com/mcmoddl/files/tinycarts-0.2.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
"options": [
|
||||
"server",
|
||||
"client",
|
||||
"required",
|
||||
"included"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mod-gravitygun",
|
||||
"file": {
|
||||
|
@ -1242,6 +1214,20 @@
|
|||
"included"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mod-archaicfix",
|
||||
"file": {
|
||||
"link": "https://mediafilez.forgecdn.net/files/4405/338/archaicfix-0.5.0.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
"options": [
|
||||
"server",
|
||||
"client",
|
||||
"required",
|
||||
"included"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mod-mousetweaks",
|
||||
"file": {
|
||||
|
@ -1284,6 +1270,20 @@
|
|||
"included"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mod-loadingscreen",
|
||||
"file": {
|
||||
"link": "https://mediafilez.forgecdn.net/files/2414/751/BetterLoadingScreen-1.3.10.jar",
|
||||
"installer": "internal.dir:mods"
|
||||
},
|
||||
"type": "mod",
|
||||
"options": [
|
||||
"server",
|
||||
"client",
|
||||
"required",
|
||||
"included"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mod-liteloader",
|
||||
"file": {
|
||||
|
|
22
src/overrides/config/BetterLoadingScreen/config.cfg
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Configuration file
|
||||
|
||||
general {
|
||||
# If this is true, it will conect to drone.io to get a changelog [default: true]
|
||||
B:connectExternally=false
|
||||
|
||||
# What font texture to use? Special Cases:
|
||||
# - If you use the Russian mod "Client Fixer" then change this to "textures/font/ascii_fat.png"
|
||||
# [default: textures/font/ascii.png]
|
||||
S:font=textures/font/ascii.png
|
||||
|
||||
# Play a sound after minecraft has finished starting up [default: true]
|
||||
B:playSound=true
|
||||
|
||||
# What sound to play when loading is complete. Default is the level up sound (random.levelup) [default: random.levelup]
|
||||
S:sound=random.levelup
|
||||
|
||||
# Whether or not to use minecraft's display to show the progress. This looks better, but there is a possibilty of not being compatible, so if you do have any strange crash reports or compatability issues, try setting this to false [default: true]
|
||||
B:useMinecraft=true
|
||||
}
|
||||
|
||||
|
87
src/overrides/config/BetterLoadingScreen/images.json
Normal file
|
@ -0,0 +1,87 @@
|
|||
[
|
||||
{
|
||||
"resourceLocation": "textures/gui/title/mojangold.png",
|
||||
"positionType": "CENTER",
|
||||
"type": "STATIC",
|
||||
"texture": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"width": 256,
|
||||
"height": 256
|
||||
},
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"width": 256,
|
||||
"height": 256
|
||||
},
|
||||
"comment": "None"
|
||||
},
|
||||
{
|
||||
"resourceLocation": "textures/font/ascii.png",
|
||||
"positionType": "CENTER",
|
||||
"type": "DYNAMIC_TEXT_STATUS",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": -30,
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"colour": "000000",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"resourceLocation": "textures/font/ascii.png",
|
||||
"positionType": "CENTER",
|
||||
"type": "DYNAMIC_TEXT_PERCENTAGE",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": -40,
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"colour": "000000",
|
||||
"comment": ""
|
||||
},
|
||||
{
|
||||
"resourceLocation": "betterloadingscreen:textures/progressBars.png",
|
||||
"positionType": "CENTER",
|
||||
"type": "STATIC",
|
||||
"texture": {
|
||||
"x": 0,
|
||||
"y": 10,
|
||||
"width": 182,
|
||||
"height": 5
|
||||
},
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": -50,
|
||||
"width": 182,
|
||||
"height": 5
|
||||
},
|
||||
"comment": "None"
|
||||
},
|
||||
{
|
||||
"resourceLocation": "betterloadingscreen:textures/progressBars.png",
|
||||
"positionType": "CENTER",
|
||||
"type": "DYNAMIC_PERCENTAGE",
|
||||
"texture": {
|
||||
"x": 0,
|
||||
"y": 15,
|
||||
"width": 182,
|
||||
"height": 5
|
||||
},
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": -50,
|
||||
"width": 182,
|
||||
"height": 5
|
||||
},
|
||||
"comment": "None"
|
||||
},
|
||||
{
|
||||
"type": "CLEAR_COLOUR",
|
||||
"colour": "ffffff",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
|
@ -23,7 +23,7 @@ tweaks {
|
|||
B:disableNewFlowers=true
|
||||
|
||||
# reenable the Farlands! [default: false]
|
||||
B:enableFarlands=true
|
||||
B:enableFarlands=false
|
||||
}
|
||||
|
||||
|
||||
|
|
21
src/overrides/config/EnderStorage.cfg
Normal file
|
@ -0,0 +1,21 @@
|
|||
#EnderStorage Configuration File
|
||||
#Deleting any element will restore it to it's default value
|
||||
#Block ID's will be automatically generated the first time it's run
|
||||
|
||||
#Causes chests to lose personal settings and drop the diamond on break
|
||||
anarchy-mode=false
|
||||
|
||||
checkUpdates=false
|
||||
|
||||
#Set to true to make the vanilla enderchest unplaceable.
|
||||
disable-vanilla=false
|
||||
|
||||
#Set to true to make the vanilla enderchest uncraftable.
|
||||
disable-vanilla_recipe=false
|
||||
|
||||
#The size of each inventory of EnderStorage. 0 = 3x3, 1 = 3x9, 2 = 6x9
|
||||
item.storage-size=1
|
||||
|
||||
|
||||
#The name of the item used to set the chest to personal. Diamond by default
|
||||
personalItemID=diamond
|
|
@ -16,6 +16,7 @@ client {
|
|||
|
||||
# If true, will reduce lagging between player sounds. Setting to false will reduce GC load
|
||||
B:ReplaceSoundsWhenResuming=true
|
||||
B:SmallPipeFluid=true
|
||||
D:SoundVolume=1.0
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ general {
|
|||
B:allow_warded_stone=true
|
||||
|
||||
# Can Taint be caused by flux effects.
|
||||
B:biome_taint_from_flux=true
|
||||
B:biome_taint_from_flux=false
|
||||
|
||||
# The chance per block update (1 in n) of the Taint biome spreading. Setting it to 0 prevents the spread of Taint biomes.
|
||||
I:biome_taint_spread=200
|
||||
|
|
14
src/overrides/config/splash.properties
Normal file
|
@ -0,0 +1,14 @@
|
|||
#Splash screen properties
|
||||
#Sat Feb 11 14:27:59 CET 2023
|
||||
logoTexture=textures/gui/title/mojang.png
|
||||
background=0xFFFFFF
|
||||
font=0x0
|
||||
barBackground=0xFFFFFF
|
||||
barBorder=0xC0C0C0
|
||||
rotate=false
|
||||
bar=0xCB3D35
|
||||
enabled=false
|
||||
resourcePackPath=resources
|
||||
logoOffset=0
|
||||
forgeTexture=fml\:textures/gui/forge.gif
|
||||
fontTexture=textures/font/ascii.png
|
BIN
src/overrides/resources/mekanism/models/transmitter_large.blend
Normal file
1078
src/overrides/resources/mekanism/models/transmitter_large.obj
Normal file
BIN
src/overrides/resources/mekanism/render/PersonalChest.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/BronzeBlock.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 5.1 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/CoalBlock.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/CopperBlock.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/CopperOre.png
Normal file
After Width: | Height: | Size: 561 B |
After Width: | Height: | Size: 1.3 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/OsmiumBlock.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/OsmiumOre.png
Normal file
After Width: | Height: | Size: 567 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"animation": {
|
||||
"frametime": 10
|
||||
}
|
||||
}
|
BIN
src/overrides/resources/mekanism/textures/blocks/SaltBlock.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/SteelBlock.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/SteelCasing.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/Teleporter.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.7 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/TinBlock.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
src/overrides/resources/mekanism/textures/blocks/TinOre.png
Normal file
After Width: | Height: | Size: 553 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 4 KiB |
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"animation": {
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 6 KiB |
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"animation": {
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.7 KiB |
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"animation": {
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 3.9 KiB |
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"animation": {
|
||||
"frametime": 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.2 KiB |