From 366fe1a12955358d4eb6c51c08bf78caea2fcd58 Mon Sep 17 00:00:00 2001 From: Taskeren Date: Tue, 7 Apr 2026 23:45:37 +0800 Subject: [PATCH 1/3] Add support for newline separated SNBTs --- .../glavo/nbt/internal/snbt/SNBTParser.java | 33 +- .../org/glavo/nbt/internal/snbt/Token.java | 1 + src/main/java/org/glavo/nbt/io/SNBTCodec.java | 29 +- .../java/org/glavo/nbt/io/SNBTCodecTest.java | 41 + .../assets/nbt/applied_energistics.snbt | 1771 +++++++++++++++++ 5 files changed, 1866 insertions(+), 9 deletions(-) create mode 100644 src/test/java/org/glavo/nbt/io/SNBTCodecTest.java create mode 100644 src/test/resources/assets/nbt/applied_energistics.snbt diff --git a/src/main/java/org/glavo/nbt/internal/snbt/SNBTParser.java b/src/main/java/org/glavo/nbt/internal/snbt/SNBTParser.java index 5cf2fb5..ba92be5 100644 --- a/src/main/java/org/glavo/nbt/internal/snbt/SNBTParser.java +++ b/src/main/java/org/glavo/nbt/internal/snbt/SNBTParser.java @@ -32,6 +32,8 @@ public final class SNBTParser { private final CharSequence input; private final int endIndex; + /// Whether allows New Line (\n) as separators in Compound and List. Used in FTB-flavored SNBT. + private final boolean allowNewLineAsSeparator; private boolean parsingPath = false; @@ -43,9 +45,14 @@ public final class SNBTParser { private @Nullable Token lookahead; public SNBTParser(CharSequence input, int beginIndex, int endIndex) { + this(input, beginIndex, endIndex, false); + } + + public SNBTParser(CharSequence input, int beginIndex, int endIndex, boolean allowNewLineAsSeparator) { Objects.checkFromToIndex(beginIndex, endIndex, input.length()); this.input = input; this.endIndex = endIndex; + this.allowNewLineAsSeparator = allowNewLineAsSeparator; this.cursor = beginIndex; } @@ -74,9 +81,12 @@ private StringBuilder getBuilder() { return buffer; } - private void skipWhiteSpace() { + private void skipWhiteSpace(boolean keepNewLine) { while (cursor < endIndex) { int ch = getCodePoint(); + if (allowNewLineAsSeparator && keepNewLine && ch == '\n') { + break; + } if (Character.isWhitespace(ch)) { cursor += Character.charCount(ch); } else { @@ -107,7 +117,11 @@ private boolean isUnquotedStringPart(int ch) { } Token readNextToken() { - skipWhiteSpace(); + return readNextToken(false); + } + + Token readNextToken(boolean tokenizeNewLine) { + skipWhiteSpace(tokenizeNewLine); if (cursor >= endIndex) { return Token.SimpleToken.EOF; @@ -145,6 +159,7 @@ Token readNextToken() { case '.' -> cursor >= endIndex || !TextUtils.isAsciiDigit(input.charAt(cursor)) ? Token.SimpleToken.DOT : null; // Floating point number + case '\n' -> Token.SimpleToken.NEW_LINE; // '\n' will be skipped above unless allowed default -> null; }; @@ -307,8 +322,12 @@ T nextToken(Class expected) { } Token peekToken() { + return peekToken(false); + } + + Token peekToken(boolean tokenizeNewLine) { if (lookahead == null) { - lookahead = readNextToken(); + lookahead = readNextToken(tokenizeNewLine); } return lookahead; } @@ -400,8 +419,8 @@ private CompoundTag nextCompoundTag(boolean shareEmpty) throws IllegalArgumentEx tag.addTag(nameToken.value(), value); - Token peek = peekToken(); - if (peek == Token.SimpleToken.COMMA) { + Token peek = peekToken(true); + if (peek == Token.SimpleToken.COMMA || peek == Token.SimpleToken.NEW_LINE) { discardPeekedToken(peek); } else if (peek == Token.SimpleToken.RIGHT_BRACE) { discardPeekedToken(peek); @@ -432,8 +451,8 @@ private ListTag nextListTag() throws IllegalArgumentException { } tag.addAnyTag(value); - peek = peekToken(); - if (peek == Token.SimpleToken.COMMA) { + peek = peekToken(true); + if (peek == Token.SimpleToken.COMMA || peek == Token.SimpleToken.NEW_LINE) { discardPeekedToken(peek); } else if (peek == Token.SimpleToken.RIGHT_BRACKET) { discardPeekedToken(peek); diff --git a/src/main/java/org/glavo/nbt/internal/snbt/Token.java b/src/main/java/org/glavo/nbt/internal/snbt/Token.java index da904bf..5272835 100644 --- a/src/main/java/org/glavo/nbt/internal/snbt/Token.java +++ b/src/main/java/org/glavo/nbt/internal/snbt/Token.java @@ -34,6 +34,7 @@ enum SimpleToken implements Token { COMMA, // , COLON, // : DOT, // . + NEW_LINE, // \n EOF } diff --git a/src/main/java/org/glavo/nbt/io/SNBTCodec.java b/src/main/java/org/glavo/nbt/io/SNBTCodec.java index d3726b9..2e66c69 100644 --- a/src/main/java/org/glavo/nbt/io/SNBTCodec.java +++ b/src/main/java/org/glavo/nbt/io/SNBTCodec.java @@ -110,14 +110,29 @@ public static SNBTCodec ofCompact() { private final EscapeStrategy escapeStrategy; private final QuoteStrategy nameQuoteStrategy; private final QuoteStrategy valueQuoteStrategy; + private final boolean allowNewLineAsSeparator; + + private SNBTCodec(LineBreakStrategy lineBreakStrategy, String indentation, SurroundingSpaces surroundingSpaces, + EscapeStrategy escapeStrategy, QuoteStrategy nameQuoteStrategy, QuoteStrategy valueQuoteStrategy) { + this( + lineBreakStrategy, + indentation, + surroundingSpaces, + escapeStrategy, + nameQuoteStrategy, + valueQuoteStrategy, + false); + } - private SNBTCodec(LineBreakStrategy lineBreakStrategy, String indentation, SurroundingSpaces surroundingSpaces, EscapeStrategy escapeStrategy, QuoteStrategy nameQuoteStrategy, QuoteStrategy valueQuoteStrategy) { + private SNBTCodec(LineBreakStrategy lineBreakStrategy, String indentation, SurroundingSpaces surroundingSpaces, EscapeStrategy escapeStrategy, QuoteStrategy nameQuoteStrategy, QuoteStrategy valueQuoteStrategy, + boolean allowNewLineAsSeparator) { this.lineBreakStrategy = lineBreakStrategy; this.indentation = indentation; this.surroundingSpaces = surroundingSpaces; this.escapeStrategy = escapeStrategy; this.nameQuoteStrategy = nameQuoteStrategy; this.valueQuoteStrategy = valueQuoteStrategy; + this.allowNewLineAsSeparator = allowNewLineAsSeparator; } /// Returns the line break strategy for all parent tags. @@ -245,6 +260,16 @@ public SNBTCodec withValueQuoteStrategy(QuoteStrategy quoteStrategy) { return new SNBTCodec(lineBreakStrategy, indentation, surroundingSpaces, escapeStrategy, nameQuoteStrategy, quoteStrategy); } + @Contract(pure = true) + public boolean getAllowNewLineAsSeparator() { + return allowNewLineAsSeparator; + } + + @Contract(pure = true) + public SNBTCodec withAllowNewLineAsSeparator(boolean allowNewLineAsSeparator) { + return new SNBTCodec(lineBreakStrategy, indentation, surroundingSpaces, escapeStrategy, nameQuoteStrategy, valueQuoteStrategy, allowNewLineAsSeparator); + } + /// Reads a NBT tag from the Stringified NBT data. /// /// @throws IOException if the input is not a valid Stringified NBT data. @@ -261,7 +286,7 @@ public Tag readTag(CharSequence input) throws IOException { public Tag readTag(CharSequence input, int startInclusive, int endExclusive) throws IOException { Tag tag; try { - tag = new SNBTParser(input, startInclusive, endExclusive).nextTag(); + tag = new SNBTParser(input, startInclusive, endExclusive, allowNewLineAsSeparator).nextTag(); } catch (IllegalArgumentException e) { throw new IOException(e); } diff --git a/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java b/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java new file mode 100644 index 0000000..d341ccf --- /dev/null +++ b/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java @@ -0,0 +1,41 @@ +package org.glavo.nbt.io; + +import org.glavo.nbt.TestResources; +import org.glavo.nbt.tag.CompoundTag; +import org.glavo.nbt.tag.ListTag; +import org.glavo.nbt.tag.TagType; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; + +public final class SNBTCodecTest { + + @Test + void testNewLineSeparatedSNBT() throws IOException { + Path resource = TestResources.getResource("/assets/nbt/applied_energistics.snbt"); + // expected failure + // the vanilla-flavored SNBT should not split compounds and lists with '\n'. + Assertions.assertThrows(IOException.class, () -> { + try(var reader = Files.newBufferedReader(resource, StandardCharsets.UTF_8)) { + SNBTCodec.of().readTag(reader); + } + }); + + try(var reader = Files.newBufferedReader(resource, StandardCharsets.UTF_8)) { + var tag = SNBTCodec.of().withAllowNewLineAsSeparator(true).readTag(reader); + var compound = assertInstanceOf(CompoundTag.class, tag); + assertEquals("28726466D987C725", compound.getString("group")); + var quests = assertInstanceOf(ListTag.class, compound.get("quests")); + assert quests != null : "ensured by assertInstanceOf"; + assertEquals(TagType.COMPOUND, quests.getElementType()); + } + } + +} diff --git a/src/test/resources/assets/nbt/applied_energistics.snbt b/src/test/resources/assets/nbt/applied_energistics.snbt new file mode 100644 index 0000000..9024c35 --- /dev/null +++ b/src/test/resources/assets/nbt/applied_energistics.snbt @@ -0,0 +1,1771 @@ +{ + autofocus_id: "5D67E904C7D02AB8" + default_hide_dependency_lines: false + default_quest_shape: "hexagon" + filename: "applied_energistics" + group: "28726466D987C725" + icon: "ae2:blank_pattern" + id: "54A26707B4CD39CC" + order_index: 1 + quest_links: [ ] + quests: [ + { + dependencies: ["220ECC2DE9D50213"] + id: "47B51BF0F3A51A17" + tasks: [{ + id: "40359C43057FF2B8" + item: { + Count: 1 + id: "ae2:energy_cell" + tag: { } + } + type: "item" + }] + x: 7.0d + y: -5.0d + } + { + dependencies: ["47B51BF0F3A51A17"] + id: "19B9634DC5EFBB64" + tasks: [{ + id: "14C20BDFE2D489C8" + item: { + Count: 1 + id: "ae2:dense_energy_cell" + tag: { } + } + type: "item" + }] + x: 7.0d + y: -7.0d + } + { + dependencies: ["16D74E923B76E266"] + id: "3594628E8316824E" + shape: "pentagon" + tasks: [{ + id: "29113AD2F28E8335" + item: "ae2:cell_component_1k" + type: "item" + }] + x: -1.0d + y: -7.0d + } + { + dependencies: ["3594628E8316824E"] + id: "307B93E1431087D0" + shape: "pentagon" + tasks: [{ + id: "0F6DC203A2DD5797" + item: "ae2:cell_component_4k" + type: "item" + }] + x: -2.0d + y: -7.0d + } + { + dependencies: ["307B93E1431087D0"] + id: "6672296A6740F5B8" + shape: "pentagon" + tasks: [{ + id: "76358AA7C6EC53E3" + item: "ae2:cell_component_16k" + type: "item" + }] + x: -3.0d + y: -7.0d + } + { + dependencies: ["6672296A6740F5B8"] + id: "479A121A74E2DE4F" + shape: "pentagon" + tasks: [{ + id: "3B61760287794956" + item: "ae2:cell_component_64k" + type: "item" + }] + x: -4.0d + y: -7.0d + } + { + dependencies: ["479A121A74E2DE4F"] + id: "69768541E12842D1" + shape: "pentagon" + tasks: [{ + id: "6EBBCFD34140EB0F" + item: "ae2:cell_component_256k" + type: "item" + }] + x: -5.0d + y: -7.0d + } + { + dependencies: [ + "3594628E8316824E" + "14AD7FB0096260E3" + ] + id: "07FE13B6C2445554" + shape: "hexagon" + tasks: [{ + id: "7B9E3E68A7615E18" + item: "ae2:1k_crafting_storage" + type: "item" + }] + x: -1.0d + y: -5.0d + } + { + dependencies: [ + "307B93E1431087D0" + "14AD7FB0096260E3" + ] + id: "66CDB0CB180B9819" + shape: "hexagon" + tasks: [{ + id: "300F710E178666AE" + item: "ae2:4k_crafting_storage" + type: "item" + }] + x: -2.0d + y: -5.0d + } + { + dependencies: [ + "6672296A6740F5B8" + "14AD7FB0096260E3" + ] + id: "74DDE18F637959CE" + shape: "hexagon" + tasks: [{ + id: "0E0021005E9C3FCC" + item: "ae2:16k_crafting_storage" + type: "item" + }] + x: -3.0d + y: -5.0d + } + { + dependencies: [ + "479A121A74E2DE4F" + "14AD7FB0096260E3" + ] + id: "2158BBB95B4D5A2B" + shape: "hexagon" + tasks: [{ + id: "2FCE817D9AA39A67" + item: "ae2:64k_crafting_storage" + type: "item" + }] + x: -4.0d + y: -5.0d + } + { + dependencies: [ + "69768541E12842D1" + "14AD7FB0096260E3" + ] + id: "087C40F74BD44B3D" + shape: "hexagon" + tasks: [{ + id: "4198220C3FA24441" + item: "ae2:256k_crafting_storage" + type: "item" + }] + x: -5.0d + y: -5.0d + } + { + dependencies: ["220ECC2DE9D50213"] + id: "4DAE06A1BAE2853F" + tasks: [ + { + id: "67D9C6D2D69F1CF7" + item: "ae2:fluid_cell_housing" + type: "item" + } + { + id: "21F8AE44BC4EF235" + item: "ae2:item_cell_housing" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest13.title}" + x: 9.0d + y: -5.0d + } + { + dependencies: ["4E724D0920A2DF55"] + id: "00C108BA77C4FC44" + tasks: [{ + id: "1804FB2E08386F85" + item: "ae2:quartz_fiber" + type: "item" + }] + x: 1.0d + y: 3.0d + } + { + dependencies: [ + "00C108BA77C4FC44" + "46C9CFB443BB3CAA" + ] + id: "69517897AAD23478" + tasks: [{ + id: "594297C91AE0B90F" + item: "ae2:fluix_glass_cable" + type: "item" + }] + x: 3.0d + y: 5.0d + } + { + dependencies: ["69517897AAD23478"] + id: "0CCCF777F0B7DC41" + tasks: [{ + id: "645CBAFAEC91E319" + item: "ae2:fluix_covered_cable" + type: "item" + }] + x: 3.0d + y: 7.0d + } + { + dependencies: ["0CCCF777F0B7DC41"] + id: "20A58C211FDF7A94" + tasks: [{ + id: "07934C4471E2BF1F" + item: "ae2:fluix_smart_cable" + type: "item" + }] + x: 1.0d + y: 5.0d + } + { + dependencies: ["134C7F5E57B44097"] + id: "745E8F2BC7D5FE33" + tasks: [{ + id: "325EAC425144D2F2" + item: "ae2:fluix_smart_dense_cable" + type: "item" + }] + x: -1.0d + y: 7.0d + } + { + dependencies: ["220ECC2DE9D50213"] + id: "0887FE2C8C5A2945" + tasks: [ + { + id: "186B57D951B324AA" + item: "ae2:import_bus" + type: "item" + } + { + id: "44A6036055233403" + item: "ae2:export_bus" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest19.title}" + x: 5.0d + y: -1.0d + } + { + dependencies: ["3594628E8316824E"] + id: "716E3EB48FB124B2" + tasks: [{ + id: "2C1513831C993806" + item: "expatternprovider:ingredient_buffer" + type: "item" + }] + x: -1.0d + y: -9.0d + } + { + dependencies: ["774470E98AEB60C2"] + id: "311AE326F9287D02" + tasks: [{ + id: "74A325BF872C20EB" + item: "expatternprovider:wireless_connect" + type: "item" + }] + x: 11.0d + y: -5.0d + } + { + dependencies: ["220ECC2DE9D50213"] + id: "720E13408B1A7170" + tasks: [{ + id: "3DAEEA0CCEE0D67B" + item: "ae2:molecular_assembler" + type: "item" + }] + x: 9.0d + y: -1.0d + } + { + dependencies: ["220ECC2DE9D50213"] + id: "774470E98AEB60C2" + tasks: [{ + id: "622EAD6EA8998CCE" + item: "ae2:me_p2p_tunnel" + type: "item" + }] + x: 9.0d + y: -3.0d + } + { + dependencies: ["29D7E2B8D3BF1D9E"] + id: "02EB760C5FF71D91" + tasks: [{ + id: "56899EC430036D08" + item: "ae2:level_emitter" + type: "item" + }] + x: 2.0d + y: -2.0d + } + { + dependencies: ["2896C7FE79A7D094"] + hide_dependency_lines: true + id: "70F6AD4F913B2B48" + tasks: [{ + id: "36CD7A2BA8B9A204" + item: "aeinfinitybooster:infinity_card" + type: "item" + }] + x: 4.0d + y: -4.0d + } + { + dependencies: ["0A1DB46E5375B995"] + hide_dependency_lines: true + id: "784DECDFEAE5E655" + tasks: [{ + id: "63CF647233FB4C58" + item: "merequester:requester" + type: "item" + }] + x: 7.0d + y: 7.0d + } + { + dependencies: ["74749B089D50329C"] + id: "4F37BFEF63998350" + tasks: [ + { + id: "509358A00C722970" + item: "gtceu:me_input_bus" + type: "item" + } + { + id: "1D70F7ECC8DF791C" + item: "gtceu:me_input_hatch" + type: "item" + } + { + id: "13C03CABDB9C359A" + item: "gtceu:me_output_bus" + type: "item" + } + { + id: "13B91F0F49E0037E" + item: "gtceu:me_output_hatch" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest27.title}" + x: -3.0d + y: 7.0d + } + { + dependencies: ["0CCCF777F0B7DC41"] + id: "134C7F5E57B44097" + tasks: [{ + id: "6B6984EE1083B1F3" + item: "ae2:fluix_covered_dense_cable" + type: "item" + }] + x: 1.0d + y: 7.0d + } + { + dependencies: ["220ECC2DE9D50213"] + hide_dependency_lines: true + id: "21B152B4D6B29378" + tasks: [{ + id: "398C88373144B3C3" + item: "ae2netanalyser:network_analyser" + type: "item" + }] + x: 1.0d + y: -7.0d + } + { + dependencies: ["774470E98AEB60C2"] + id: "036D871AE55BC323" + tasks: [{ + id: "04E7BA8F5CACB6EA" + item: { + Count: 1 + id: "betterp2p:advanced_memory_card" + tag: { + gui: 3b + selectedIndex: { } + } + } + type: "item" + }] + x: 11.0d + y: -3.0d + } + { + dependencies: ["6672296A6740F5B8"] + id: "54FB87F5A13C620D" + tasks: [ + { + id: "1F4A5C0E6DACF8A5" + item: { + Count: 1 + id: "expatternprovider:infinity_cell" + tag: { + record: { + "#c": "ae2:f" + id: "minecraft:water" + } + } + } + type: "item" + } + { + id: "795A6C8F6F01DB7E" + item: { + Count: 1 + id: "expatternprovider:infinity_cell" + tag: { + record: { + "#c": "ae2:i" + id: "minecraft:cobblestone" + } + } + } + type: "item" + } + { + id: "6509D3DA557C23D4" + item: { + Count: 1 + id: "expatternprovider:infinity_cell" + tag: { + record: { + "#c": "ae2:i" + id: "minecraft:gravel" + } + } + } + type: "item" + } + { + id: "36A7B0D50A3CF675" + item: { + Count: 1 + id: "expatternprovider:infinity_cell" + tag: { + record: { + "#c": "ae2:i" + id: "minecraft:sand" + } + } + } + type: "item" + } + { + id: "13874A5EB0BB4284" + item: { + Count: 1 + id: "expatternprovider:infinity_cell" + tag: { + record: { + "#c": "ae2:i" + id: "exnihilosequentia:dust" + } + } + } + type: "item" + } + { + id: "4729741DF09A9058" + item: { + Count: 1 + id: "expatternprovider:infinity_cell" + tag: { + record: { + "#c": "ae2:i" + id: "exnihilosequentia:crushed_blackstone" + } + } + } + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest31.title}" + x: -3.0d + y: -9.0d + } + { + dependencies: ["69768541E12842D1"] + id: "15609A10132FC49C" + shape: "pentagon" + tasks: [{ + id: "1DE4005B4E24DF4A" + item: "megacells:cell_component_1m" + type: "item" + }] + x: -6.0d + y: -7.0d + } + { + dependencies: ["15609A10132FC49C"] + id: "29FCED9F85FB2882" + shape: "pentagon" + tasks: [{ + id: "4612F9FB615EED9C" + item: "megacells:cell_component_4m" + type: "item" + }] + x: -7.0d + y: -7.0d + } + { + dependencies: ["29FCED9F85FB2882"] + id: "3CFA9E13D95178D6" + shape: "pentagon" + tasks: [{ + id: "35AE74272ABB8508" + item: "megacells:cell_component_16m" + type: "item" + }] + x: -8.0d + y: -7.0d + } + { + dependencies: ["3CFA9E13D95178D6"] + id: "07CB8E78FF4461BB" + shape: "pentagon" + tasks: [{ + id: "316532C4593DEB4F" + item: "megacells:cell_component_64m" + type: "item" + }] + x: -9.0d + y: -7.0d + } + { + dependencies: [ + "15609A10132FC49C" + "7543CC066CBF4EE0" + ] + id: "4F32D62F9BD279F3" + tasks: [{ + id: "53E829F3EF05F1C7" + item: "megacells:1m_crafting_storage" + type: "item" + }] + x: -6.0d + y: -5.0d + } + { + dependencies: [ + "29FCED9F85FB2882" + "7543CC066CBF4EE0" + ] + id: "7714826EF2BA750A" + tasks: [{ + id: "1050AD9BDE58B1EE" + item: "megacells:4m_crafting_storage" + type: "item" + }] + x: -7.0d + y: -5.0d + } + { + dependencies: [ + "3CFA9E13D95178D6" + "7543CC066CBF4EE0" + ] + id: "4FF5366683095676" + tasks: [{ + id: "07AD5203BD915A2B" + item: "megacells:16m_crafting_storage" + type: "item" + }] + x: -8.0d + y: -5.0d + } + { + dependencies: [ + "07CB8E78FF4461BB" + "7543CC066CBF4EE0" + ] + id: "0BD267A7CFB4B21D" + tasks: [{ + id: "632B7482D6474931" + item: "megacells:64m_crafting_storage" + type: "item" + }] + x: -9.0d + y: -5.0d + } + { + dependencies: [ + "4E5B71A2D89CAC2B" + "7543CC066CBF4EE0" + ] + id: "2280548034E41819" + tasks: [{ + id: "2614D072C33CA309" + item: "megacells:256m_crafting_storage" + type: "item" + }] + x: -10.0d + y: -5.0d + } + { + dependencies: ["07CB8E78FF4461BB"] + id: "4E5B71A2D89CAC2B" + shape: "pentagon" + tasks: [{ + id: "70C22EC474FC6847" + item: "megacells:cell_component_256m" + type: "item" + }] + x: -10.0d + y: -7.0d + } + { + dependencies: [ + "3B787FE75F563F45" + "16D74E923B76E266" + ] + id: "29D7E2B8D3BF1D9E" + tasks: [ + { + id: "54856D707463E970" + item: "ae2:logic_processor" + type: "item" + } + { + id: "14090BCF91B314E8" + item: "ae2:calculation_processor" + type: "item" + } + { + id: "5395077BE3C25C2C" + item: "ae2:engineering_processor" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest42.title}" + x: 3.0d + y: -3.0d + } + { + dependencies: ["220ECC2DE9D50213"] + id: "3B787FE75F563F45" + tasks: [ + { + id: "1F750AA6CFC9DC25" + item: "ae2:printed_logic_processor" + type: "item" + } + { + id: "02450F5FE7E2CCEC" + item: "ae2:printed_calculation_processor" + type: "item" + } + { + id: "2A99B061955F2798" + item: "ae2:printed_engineering_processor" + type: "item" + } + { + id: "7CB26D5DCBED54A3" + item: "ae2:printed_silicon" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest43.title}" + x: 5.0d + y: -3.0d + } + { + dependencies: ["53E98CFC7934FA67"] + id: "16D74E923B76E266" + shape: "circle" + tasks: [{ + id: "2B876A0BC533DC16" + item: { + Count: 1 + id: "itemfilters:or" + tag: { + items: [ + { + Count: 1b + id: "gtceu:lv_me_assembler" + } + { + Count: 1b + id: "gtceu:mv_me_assembler" + } + { + Count: 1b + id: "gtceu:hv_me_assembler" + } + { + Count: 1b + id: "gtceu:ev_me_assembler" + } + { + Count: 1b + id: "gtceu:iv_me_assembler" + } + { + Count: 1b + id: "gtceu:luv_me_assembler" + } + { + Count: 1b + id: "gtceu:zpm_me_assembler" + } + { + Count: 1b + id: "gtceu:uv_me_assembler" + } + { + Count: 1b + id: "gtceu:uhv_me_assembler" + } + { + Count: 1b + id: "gtceu:uev_me_assembler" + } + { + Count: 1b + id: "gtceu:uiv_me_assembler" + } + ] + } + } + title: "{ftbquests.chapter.applied_energistics.quest44.task_3136592264272534550.title}" + type: "item" + }] + x: 1.0d + y: -5.0d + } + { + dependencies: ["689579627AADC578"] + id: "220ECC2DE9D50213" + tasks: [ + { + id: "41C6C6795E59BB65" + item: "gtceu:gold_skystone_alloy_dust" + type: "item" + } + { + id: "3B2EC0116F6C7107" + item: "gtceu:certus_quartz_skystone_alloy_dust" + type: "item" + } + { + id: "1422CAC2D15E22AE" + item: "gtceu:diamond_skystone_alloy_dust" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest45.title}" + x: 7.0d + y: -3.0d + } + { + dependencies: ["50EA5165AF923EB4"] + id: "689579627AADC578" + shape: "circle" + tasks: [{ + id: "0D5182568D1EE95F" + item: "ae2:sky_dust" + type: "item" + }] + x: 7.0d + y: -1.0d + } + { + dependencies: ["689579627AADC578"] + id: "0F269DCAD4B8CC4C" + tasks: [{ + id: "0EFE10DBB3514228" + item: "gtceu:sky_steel_dust" + type: "item" + }] + x: 7.0d + y: 1.0d + } + { + dependencies: ["0A03B4D352DCF148"] + id: "116E6C82D5482654" + shape: "circle" + tasks: [{ + id: "28067FF8F576C47C" + item: "ae2:certus_quartz_crystal" + type: "item" + }] + x: 3.0d + y: 1.0d + } + { + dependencies: ["116E6C82D5482654"] + id: "46C9CFB443BB3CAA" + tasks: [{ + id: "2F221CCA35769D7D" + item: "ae2:fluix_crystal" + type: "item" + }] + x: 3.0d + y: 3.0d + } + { + dependencies: ["46C9CFB443BB3CAA"] + id: "2DC161E1BBA0919A" + tasks: [{ + id: "708063969E46339B" + item: "gtceu:fluix_steel_dust" + type: "item" + }] + x: 1.0d + y: 1.0d + } + { + dependencies: ["2DC161E1BBA0919A"] + id: "1AF7A9EE66326442" + tasks: [ + { + id: "0643DA8212DB8E3D" + item: "ae2:formation_core" + type: "item" + } + { + id: "5DC0F28528D6D1BD" + item: "ae2:annihilation_core" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest51.title}" + x: 1.0d + y: -1.0d + } + { + dependencies: ["2DC161E1BBA0919A"] + id: "39FD400143952D58" + tasks: [{ + id: "230B2FAAD24807E2" + item: "ae2:controller" + type: "item" + }] + x: 3.0d + y: -1.0d + } + { + dependencies: ["2DC161E1BBA0919A"] + id: "567E88B4BE35DB3C" + tasks: [{ + id: "0B9D56A7272300CE" + item: "ae2:drive" + type: "item" + }] + x: -1.0d + y: 1.0d + } + { + dependencies: ["2DC161E1BBA0919A"] + hide_dependent_lines: true + id: "14AD7FB0096260E3" + tasks: [{ + id: "08FE7D7F04516057" + item: "ae2:crafting_unit" + type: "item" + }] + x: -1.0d + y: -1.0d + } + { + dependencies: ["14AD7FB0096260E3"] + id: "0A1DB46E5375B995" + tasks: [{ + id: "6DDF5DDF0A81DEEF" + item: "ae2:crafting_accelerator" + type: "item" + }] + x: 0.5d + y: -3.5d + } + { + dependencies: ["220ECC2DE9D50213"] + id: "2896C7FE79A7D094" + tasks: [ + { + id: "630F0E6F5CB2AAAA" + item: "gtceu:netherite_gold_skystone_alloy_dust" + type: "item" + } + { + id: "18584E2C308733EF" + item: "gtceu:netherite_certus_quartz_skystone_alloy_dust" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest56.title}" + x: 5.0d + y: -5.0d + } + { + dependencies: ["2DC161E1BBA0919A"] + id: "6706CD6EC648B7C8" + tasks: [{ + id: "55AE7ABA1C7E2A38" + item: "kubejs:fluix_steel_casing" + type: "item" + }] + x: -1.0d + y: 3.0d + } + { + dependencies: [ + "6706CD6EC648B7C8" + "62BA581B2918BB7B" + ] + hide_text_until_complete: false + id: "09241664F45A91EA" + tasks: [{ + id: "0BAC6F2D42E98422" + item: "gtceu:large_me_assembler" + type: "item" + }] + title: "{ftbquests.chapter.applied_energistics.quest58.title}" + x: -1.0d + y: 5.0d + } + { + dependencies: [ + "62BA581B2918BB7B" + "2896C7FE79A7D094" + ] + hide_dependent_lines: true + id: "7543CC066CBF4EE0" + tasks: [{ + id: "39CBED7BC94E55B3" + item: "megacells:mega_crafting_unit" + type: "item" + }] + x: 3.0d + y: -5.0d + } + { + dependencies: ["2896C7FE79A7D094"] + id: "6EDEC5B6214A20CC" + tasks: [ + { + id: "71E65EE348621549" + item: "megacells:mega_item_cell_housing" + type: "item" + } + { + id: "4721258774AB5D9F" + item: "megacells:mega_fluid_cell_housing" + type: "item" + } + ] + x: 3.0d + y: -7.0d + } + { + dependencies: ["15609A10132FC49C"] + id: "31E2D720FFC159EB" + tasks: [{ + id: "1E47878FD2137F85" + item: "megacells:bulk_cell_component" + type: "item" + }] + x: -6.0d + y: -9.0d + } + { + dependencies: [ + "2896C7FE79A7D094" + "19B9634DC5EFBB64" + ] + id: "161969BDC9245CB4" + tasks: [{ + id: "778520F6426B7A0B" + item: { + Count: 1 + id: "megacells:mega_energy_cell" + tag: { } + } + type: "item" + }] + x: 5.0d + y: -7.0d + } + { + dependencies: ["0F269DCAD4B8CC4C"] + id: "5CC6C1096C9F77FC" + tasks: [{ + id: "555BF583B8E80D37" + item: "ae2:condenser" + type: "item" + }] + x: 5.0d + y: 3.0d + } + { + dependencies: ["5CC6C1096C9F77FC"] + id: "49ACE56A8AC7A63E" + tasks: [{ + id: "33BA7BDBC8337B68" + item: "ae2:singularity" + type: "item" + }] + x: 5.0d + y: 5.0d + } + { + dependencies: ["49ACE56A8AC7A63E"] + hide_dependent_lines: true + id: "43F95399A861BDB4" + tasks: [ + { + count: 8L + id: "1273771FB29FBBB8" + item: "ae2:quantum_ring" + type: "item" + } + { + id: "7A459C54353ED9CE" + item: "ae2:quantum_link" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest65.title}" + x: 5.0d + y: 7.0d + } + { + dependencies: ["0F269DCAD4B8CC4C"] + id: "3B8CDE368E941652" + tasks: [{ + id: "4E45B2BCDE736816" + item: "ae2:interface" + type: "item" + }] + x: 7.0d + y: 3.0d + } + { + dependencies: ["0F269DCAD4B8CC4C"] + id: "617E17824856450D" + tasks: [{ + id: "77DED6E47A0C8F29" + item: "ae2:pattern_provider" + type: "item" + }] + x: 9.0d + y: 1.0d + } + { + dependencies: ["20A12F3B992762F0"] + id: "534F27BC96F104A2" + tasks: [{ + id: "1D4515A14AB2EA28" + item: "gtceu:computer_monitor_cover" + type: "item" + }] + x: 10.0d + y: 4.0d + } + { + dependencies: ["534F27BC96F104A2"] + description: [ + "{ftbquests.chapter.applied_energistics.quest69.description1}" + "" + "{ftbquests.chapter.applied_energistics.quest69.description2}" + ] + id: "3FC037156B8DB553" + tasks: [ + { + id: "5F314224A0399BD9" + item: "ae2:terminal" + type: "item" + } + { + id: "79C218EAE5B04360" + item: "ae2:crafting_terminal" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest69.title}" + x: 11.0d + y: 3.0d + } + { + dependencies: ["534F27BC96F104A2"] + id: "3E163E0DA56697A9" + tasks: [{ + id: "5D28950E152C361C" + item: "ae2:pattern_access_terminal" + type: "item" + }] + x: 11.0d + y: 5.0d + } + { + dependencies: ["534F27BC96F104A2"] + id: "1401D93CE8C44E5C" + tasks: [{ + id: "1104F50C7B1397E0" + item: "merequester:requester_terminal" + type: "item" + }] + x: 9.0d + y: 5.0d + } + { + dependencies: [ + "720E13408B1A7170" + "617E17824856450D" + "372842AD602BB1BF" + ] + description: [ + "{ftbquests.chapter.applied_energistics.quest72.description1}" + "" + "{ftbquests.chapter.applied_energistics.quest72.description2}" + ] + id: "54D3F6BC8F7BC609" + tasks: [{ + id: "6AF795E95BA5BDDB" + item: "ae2:blank_pattern" + type: "item" + }] + title: "{ftbquests.chapter.applied_energistics.quest72.title}" + x: 11.0d + y: -1.0d + } + { + dependencies: ["3FC037156B8DB553"] + id: "372842AD602BB1BF" + tasks: [{ + id: "214DD22A34FA3402" + item: "ae2:pattern_encoding_terminal" + type: "item" + }] + x: 11.0d + y: 1.0d + } + { + dependencies: ["3B8CDE368E941652"] + id: "27A6A5C168C0FB73" + tasks: [{ + id: "08754C0908581328" + item: "ae2:storage_bus" + type: "item" + }] + x: 7.0d + y: 5.0d + } + { + dependencies: ["3B8CDE368E941652"] + hide_dependency_lines: true + id: "714785F87C1B07D0" + tasks: [{ + id: "5BBB90E875972BCC" + item: "megacells:mega_interface" + type: "item" + }] + x: -7.0d + y: -1.0d + } + { + dependencies: ["617E17824856450D"] + hide_dependency_lines: true + id: "49447FEBBB76FFF7" + tasks: [{ + id: "043A497EE25F9274" + item: "megacells:mega_pattern_provider" + type: "item" + }] + x: -9.0d + y: -1.0d + } + { + dependencies: [ + "714785F87C1B07D0" + "45EA9095FAF7DDD6" + ] + id: "45739DAADDC070FB" + tasks: [{ + id: "0F8F84C69100A22D" + item: "expatternprovider:ex_interface" + type: "item" + }] + x: -7.0d + y: 1.0d + } + { + dependencies: [ + "49447FEBBB76FFF7" + "45EA9095FAF7DDD6" + ] + id: "6D441C650137BD6D" + tasks: [{ + id: "38F3899119ACAC2D" + item: "expatternprovider:ex_pattern_provider" + type: "item" + }] + x: -9.0d + y: 1.0d + } + { + dependencies: ["45739DAADDC070FB"] + id: "587DFCFB215EFD67" + tasks: [{ + id: "633857678059FF18" + item: "expatternprovider:oversize_interface" + type: "item" + }] + x: -5.0d + y: -1.0d + } + { + dependencies: ["45EA9095FAF7DDD6"] + id: "7E50B29E1FBF5831" + tasks: [ + { + id: "287F1635DFC8AEC0" + item: "expatternprovider:ex_import_bus_part" + type: "item" + } + { + id: "21B2F917F1C18016" + item: "expatternprovider:ex_export_bus_part" + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest80.title}" + x: -9.0d + y: 5.0d + } + { + dependencies: ["45EA9095FAF7DDD6"] + id: "4B90617F77F7F6C8" + tasks: [{ + id: "3DF17BDB8D742570" + item: "expatternprovider:ex_drive" + type: "item" + }] + x: -7.0d + y: 5.0d + } + { + dependencies: ["45EA9095FAF7DDD6"] + id: "14C0B19E6CFFD112" + tasks: [{ + id: "12373941A335ADAB" + item: "expatternprovider:ex_molecular_assembler" + type: "item" + }] + x: -9.0d + y: 3.0d + } + { + dependencies: ["45EA9095FAF7DDD6"] + hide_text_until_complete: false + id: "297AAAB115BBC7E5" + tasks: [{ + id: "5C5599F8967536F3" + item: "expatternprovider:ex_pattern_access_part" + type: "item" + }] + x: -5.0d + y: 3.0d + } + { + dependencies: ["7FF1D8543D63EA7E"] + id: "0E699B8608412E2C" + tasks: [{ + id: "06D6A94357D145C3" + item: "ae2wtlib:wireless_universal_terminal" + match_nbt: false + type: "item" + }] + x: 9.0d + y: 7.0d + } + { + dependencies: ["3FC037156B8DB553"] + hide_dependency_lines: true + id: "7FF1D8543D63EA7E" + tasks: [{ + id: "59FBB40265C8D012" + item: "ae2:wireless_crafting_terminal" + type: "item" + }] + x: 11.0d + y: 7.0d + } + { + dependencies: [ + "7A05D139ED3E4C99" + "45EA9095FAF7DDD6" + ] + id: "0C82D20AA1B8A33B" + tasks: [{ + id: "14E49E1E86C568DC" + item: "expatternprovider:ex_io_port" + type: "item" + }] + x: -5.0d + y: 1.0d + } + { + dependencies: ["567E88B4BE35DB3C"] + id: "7A05D139ED3E4C99" + tasks: [{ + id: "5F60A228C2BE7753" + item: "ae2:io_port" + type: "item" + }] + x: -3.0d + y: 1.0d + } + { + dependencies: ["7A05D139ED3E4C99"] + id: "452B14D8B90757AA" + tasks: [{ + id: "4B8864DA464FEA43" + item: "ae2:spatial_io_port" + type: "item" + }] + x: -3.0d + y: 3.0d + } + { + dependencies: ["452B14D8B90757AA"] + id: "5EFD28E67B3D1425" + tasks: [{ + id: "24AA60D3F5C49D0B" + item: { + Count: 1 + id: "itemfilters:or" + tag: { + items: [ + { + Count: 1b + id: "ae2:spatial_cell_component_2" + } + { + Count: 1b + id: "ae2:spatial_cell_component_16" + } + { + Count: 1b + id: "ae2:spatial_cell_component_128" + } + ] + } + } + title: "{ftbquests.chapter.applied_energistics.quest89.task_2642030594883886347.title}" + type: "item" + }] + x: -3.0d + y: 5.0d + } + { + dependencies: ["0F269DCAD4B8CC4C"] + id: "0DCD572D56DB0AB0" + tasks: [{ + id: "2F3A374493F699A4" + item: "ae2:chest" + type: "item" + }] + x: 5.0d + y: 1.0d + } + { + dependencies: ["0F269DCAD4B8CC4C"] + id: "2170EA7E1D21FA18" + tasks: [{ + id: "692F8BD8098CF505" + item: "ae2:cell_workbench" + type: "item" + }] + x: 9.0d + y: 3.0d + } + { + dependencies: ["452B14D8B90757AA"] + id: "3FDA47AA7278BC2B" + tasks: [{ + id: "7CD5DF6BFA9135BB" + item: "ae2:spatial_pylon" + type: "item" + }] + x: -5.0d + y: 5.0d + } + { + dependencies: ["52FE319F5E176C37"] + id: "45EA9095FAF7DDD6" + tasks: [{ + id: "1BEA9D6C9EB86103" + title: "{ftbquests.chapter.applied_energistics.quest93.task_2011593273419260163.title}" + type: "checkmark" + }] + x: -7.0d + y: 3.0d + } + { + id: "5D67E904C7D02AB8" + invisible: true + tasks: [{ + id: "76B74EE25F58E344" + title: "{ftbquests.chapter.applied_energistics.quest94.task_8554392751382782788.title}" + type: "checkmark" + }] + x: 0.0d + y: 0.0d + } + { + dependencies: [ + "14C0B19E6CFFD112" + "6D441C650137BD6D" + ] + id: "41C6F59DB92F79A7" + tasks: [ + { + id: "1FD3B7BF3F89717B" + item: "expatternprovider:assembler_matrix_frame" + type: "item" + } + { + id: "685BA4EB9F697B9F" + item: "expatternprovider:assembler_matrix_wall" + type: "item" + } + { + id: "726A4A2CCE884F93" + item: "expatternprovider:assembler_matrix_pattern" + type: "item" + } + { + id: "0864D2C12378B7DA" + item: "expatternprovider:assembler_matrix_crafter" + type: "item" + } + { + id: "1EB84282EFCA0FCB" + item: "expatternprovider:assembler_matrix_speed" + type: "item" + } + { + id: "2F265B1AD4C7DBD7" + item: "expatternprovider:assembler_matrix_glass" + optional_task: true + type: "item" + } + ] + title: "{ftbquests.chapter.applied_energistics.quest95.title}" + x: -11.0d + y: 3.0d + } + { + dependencies: ["478A02E7D8C0A1C8"] + id: "1E343F9554344E46" + tasks: [{ + id: "0120C22232953E1E" + item: "expandedae:exp_crafting_accelerator_2" + type: "item" + }] + x: 0.0d + y: -2.5d + } + { + dependencies: ["0A1DB46E5375B995"] + id: "478A02E7D8C0A1C8" + tasks: [{ + id: "4E8FEE68E8397840" + item: "expandedae:exp_crafting_accelerator_4" + type: "item" + }] + x: -0.5d + y: -3.5d + } + { + dependencies: ["53113FB2835560E0"] + id: "6E4DB64EB63F8714" + tasks: [{ + id: "0D3D29B49CC8183A" + item: "expandedae:exp_crafting_accelerator_8" + type: "item" + }] + x: -1.0d + y: -2.5d + } + { + dependencies: ["478A02E7D8C0A1C8"] + id: "53113FB2835560E0" + tasks: [{ + id: "1B74F12925EB6843" + item: "expandedae:exp_crafting_accelerator_16" + type: "item" + }] + x: -1.5d + y: -3.5d + } + { + dependencies: ["53113FB2835560E0"] + id: "1F5B2DFAFDCDF050" + tasks: [{ + id: "48C0745252723341" + item: "expandedae:exp_crafting_accelerator_64" + type: "item" + }] + x: -2.5d + y: -3.5d + } + { + dependencies: ["1F5B2DFAFDCDF050"] + id: "344AAB2C51F822B1" + tasks: [{ + id: "0E4DCC6DD571D5E1" + item: "expandedae:exp_crafting_accelerator_32" + type: "item" + }] + x: -2.0d + y: -2.5d + } + { + dependencies: ["307E7CA88BA6E1E0"] + id: "686148DD4CC74166" + tasks: [{ + id: "349BC151061DABD3" + item: "expandedae:exp_crafting_accelerator_128" + type: "item" + }] + x: -3.0d + y: -2.5d + } + { + dependencies: ["1F5B2DFAFDCDF050"] + id: "307E7CA88BA6E1E0" + tasks: [{ + id: "344C24CBFFA09EA8" + item: "expandedae:exp_crafting_accelerator_256" + type: "item" + }] + x: -3.5d + y: -3.5d + } + { + dependencies: ["1C484C4AB8D3C36B"] + id: "7A328586CB117E32" + tasks: [{ + id: "5C03F7BDF5469CED" + item: "expandedae:exp_crafting_accelerator_512" + type: "item" + }] + x: -4.0d + y: -2.5d + } + { + dependencies: ["307E7CA88BA6E1E0"] + id: "1C484C4AB8D3C36B" + tasks: [{ + id: "648BA4E1D9628FC9" + item: "expandedae:exp_crafting_accelerator_1k" + type: "item" + }] + x: -4.5d + y: -3.5d + } + { + dependencies: ["194C30F25E32E9AE"] + id: "5497D6386B182B01" + tasks: [{ + id: "66F7C91631C49455" + item: "expandedae:exp_crafting_accelerator_2k" + type: "item" + }] + x: -5.0d + y: -2.5d + } + { + dependencies: ["1C484C4AB8D3C36B"] + id: "194C30F25E32E9AE" + tasks: [{ + id: "599DBD455B993F00" + item: "expandedae:exp_crafting_accelerator_4k" + type: "item" + }] + x: -5.5d + y: -3.5d + } + { + dependencies: ["3BF1920443CA9407"] + id: "68610A9C19C87EF9" + tasks: [{ + id: "32FB3D7C09625FAA" + item: "expandedae:exp_crafting_accelerator_8k" + type: "item" + }] + x: -6.0d + y: -2.5d + } + { + dependencies: ["194C30F25E32E9AE"] + id: "3BF1920443CA9407" + tasks: [{ + id: "35BE16B65C18BC23" + item: "expandedae:exp_crafting_accelerator_16k" + type: "item" + }] + x: -6.5d + y: -3.5d + } + { + dependencies: ["54719F78D8E03083"] + id: "697009990248A750" + tasks: [{ + id: "1928B21581FA9FE1" + item: "expandedae:exp_crafting_accelerator_32k" + type: "item" + }] + x: -7.0d + y: -2.5d + } + { + dependencies: ["3BF1920443CA9407"] + id: "54719F78D8E03083" + tasks: [{ + id: "45C8EEA6DAD1BA87" + item: "expandedae:exp_crafting_accelerator_64k" + type: "item" + }] + x: -7.5d + y: -3.5d + } + { + dependencies: ["49476A75A61E5FCE"] + id: "6A8AE35DEB32BBD5" + tasks: [{ + id: "0D3210842632156E" + item: "expandedae:exp_crafting_accelerator_128k" + type: "item" + }] + x: -8.0d + y: -2.5d + } + { + dependencies: ["54719F78D8E03083"] + id: "49476A75A61E5FCE" + tasks: [{ + id: "5FE645FA55CCC236" + item: "expandedae:exp_crafting_accelerator_256k" + type: "item" + }] + x: -8.5d + y: -3.5d + } + { + dependencies: ["723055BFDB9A7484"] + id: "7CB062C9B22FB74A" + tasks: [{ + id: "6D41946DE84FF437" + item: "expandedae:exp_crafting_accelerator_512k" + type: "item" + }] + x: -9.0d + y: -2.5d + } + { + dependencies: ["49476A75A61E5FCE"] + id: "723055BFDB9A7484" + tasks: [{ + id: "0116134185E94BBA" + item: "expandedae:exp_crafting_accelerator_1m" + type: "item" + }] + x: -9.5d + y: -3.5d + } + { + dependencies: ["0C82D20AA1B8A33B"] + id: "6820C607C25AE859" + tasks: [{ + id: "76B22CA34DBF4917" + item: "expandedae:exp_io_port" + type: "item" + }] + x: -3.0d + y: -1.0d + } + { + dependencies: ["6D441C650137BD6D"] + id: "2519DA28EADD47D4" + tasks: [{ + id: "7C66519BF801C80D" + item: "expandedae:exp_pattern_provider" + type: "item" + }] + x: -11.0d + y: 1.0d + } + { + dependencies: ["29D7E2B8D3BF1D9E"] + hide_dependency_lines: true + id: "66668FEA4D4F8573" + tasks: [{ + id: "6D8F4E2245FFC8DE" + item: "expatternprovider:pattern_modifier" + type: "item" + }] + x: 1.0d + y: -9.0d + } + { + dependencies: ["29FCED9F85FB2882"] + description: ["{ftbquests.chapter.applied_energistics.quest97.description1}"] + id: "334AE7B73C221920" + tasks: [{ + id: "3CAA8DC4BE329DE5" + item: "megacells:cell_component_1m" + type: "item" + }] + title: "{ftbquests.chapter.applied_energistics.quest96.title}" + x: -7.0d + y: -9.0d + } + { + dependencies: [ + "311AE326F9287D02" + "43F95399A861BDB4" + ] + id: "010737DB9CD70C4C" + tasks: [{ + id: "069D3081DFFA38E1" + item: "expatternprovider:wireless_hub" + type: "item" + }] + x: 11.0d + y: -7.0d + } + ] + title: "{ftbquests.chapter.applied_energistics.title}" +} From 9cb62481bca11384bc956ec11a92bfd7b95bff75 Mon Sep 17 00:00:00 2001 From: Taskeren Date: Wed, 8 Apr 2026 00:04:51 +0800 Subject: [PATCH 2/3] Add license notice in new files --- src/test/java/org/glavo/nbt/io/SNBTCodecTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java b/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java index d341ccf..8a7b7e6 100644 --- a/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java +++ b/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java @@ -1,3 +1,18 @@ +/* + * Copyright 2026 Taskeren + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.glavo.nbt.io; import org.glavo.nbt.TestResources; From 7ac21761dfc000211c5c06d734c10851d40113bf Mon Sep 17 00:00:00 2001 From: Taskeren Date: Wed, 8 Apr 2026 00:16:41 +0800 Subject: [PATCH 3/3] Replace the test case --- .../java/org/glavo/nbt/io/SNBTCodecTest.java | 28 +- .../assets/nbt/applied_energistics.snbt | 1771 ----------------- .../assets/nbt/newline_separated.snbt | 9 + 3 files changed, 26 insertions(+), 1782 deletions(-) delete mode 100644 src/test/resources/assets/nbt/applied_energistics.snbt create mode 100644 src/test/resources/assets/nbt/newline_separated.snbt diff --git a/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java b/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java index 8a7b7e6..61caae3 100644 --- a/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java +++ b/src/test/java/org/glavo/nbt/io/SNBTCodecTest.java @@ -17,6 +17,7 @@ import org.glavo.nbt.TestResources; import org.glavo.nbt.tag.CompoundTag; +import org.glavo.nbt.tag.IntTag; import org.glavo.nbt.tag.ListTag; import org.glavo.nbt.tag.TagType; import org.junit.jupiter.api.Assertions; @@ -34,22 +35,27 @@ public final class SNBTCodecTest { @Test void testNewLineSeparatedSNBT() throws IOException { - Path resource = TestResources.getResource("/assets/nbt/applied_energistics.snbt"); + Path resource = TestResources.getResource("/assets/nbt/newline_separated.snbt"); // expected failure // the vanilla-flavored SNBT should not split compounds and lists with '\n'. - Assertions.assertThrows(IOException.class, () -> { - try(var reader = Files.newBufferedReader(resource, StandardCharsets.UTF_8)) { - SNBTCodec.of().readTag(reader); - } - }); + Assertions.assertThrows( + IOException.class, () -> { + try (var reader = Files.newBufferedReader(resource, StandardCharsets.UTF_8)) { + SNBTCodec.of().readTag(reader); + } + }); - try(var reader = Files.newBufferedReader(resource, StandardCharsets.UTF_8)) { + try (var reader = Files.newBufferedReader(resource, StandardCharsets.UTF_8)) { var tag = SNBTCodec.of().withAllowNewLineAsSeparator(true).readTag(reader); var compound = assertInstanceOf(CompoundTag.class, tag); - assertEquals("28726466D987C725", compound.getString("group")); - var quests = assertInstanceOf(ListTag.class, compound.get("quests")); - assert quests != null : "ensured by assertInstanceOf"; - assertEquals(TagType.COMPOUND, quests.getElementType()); + assertEquals("Foo", compound.getString("name")); + var list = assertInstanceOf(ListTag.class, compound.get("list")); + assert list != null : "ensured by assertInstanceOf"; + assertEquals(TagType.INT, list.getElementType()); + var expected = new ListTag<>(TagType.INT); + expected.setName("list"); + expected.addTags(new IntTag(1), new IntTag(2), new IntTag(3), new IntTag(4)); + Assertions.assertEquals(expected, list); } } diff --git a/src/test/resources/assets/nbt/applied_energistics.snbt b/src/test/resources/assets/nbt/applied_energistics.snbt deleted file mode 100644 index 9024c35..0000000 --- a/src/test/resources/assets/nbt/applied_energistics.snbt +++ /dev/null @@ -1,1771 +0,0 @@ -{ - autofocus_id: "5D67E904C7D02AB8" - default_hide_dependency_lines: false - default_quest_shape: "hexagon" - filename: "applied_energistics" - group: "28726466D987C725" - icon: "ae2:blank_pattern" - id: "54A26707B4CD39CC" - order_index: 1 - quest_links: [ ] - quests: [ - { - dependencies: ["220ECC2DE9D50213"] - id: "47B51BF0F3A51A17" - tasks: [{ - id: "40359C43057FF2B8" - item: { - Count: 1 - id: "ae2:energy_cell" - tag: { } - } - type: "item" - }] - x: 7.0d - y: -5.0d - } - { - dependencies: ["47B51BF0F3A51A17"] - id: "19B9634DC5EFBB64" - tasks: [{ - id: "14C20BDFE2D489C8" - item: { - Count: 1 - id: "ae2:dense_energy_cell" - tag: { } - } - type: "item" - }] - x: 7.0d - y: -7.0d - } - { - dependencies: ["16D74E923B76E266"] - id: "3594628E8316824E" - shape: "pentagon" - tasks: [{ - id: "29113AD2F28E8335" - item: "ae2:cell_component_1k" - type: "item" - }] - x: -1.0d - y: -7.0d - } - { - dependencies: ["3594628E8316824E"] - id: "307B93E1431087D0" - shape: "pentagon" - tasks: [{ - id: "0F6DC203A2DD5797" - item: "ae2:cell_component_4k" - type: "item" - }] - x: -2.0d - y: -7.0d - } - { - dependencies: ["307B93E1431087D0"] - id: "6672296A6740F5B8" - shape: "pentagon" - tasks: [{ - id: "76358AA7C6EC53E3" - item: "ae2:cell_component_16k" - type: "item" - }] - x: -3.0d - y: -7.0d - } - { - dependencies: ["6672296A6740F5B8"] - id: "479A121A74E2DE4F" - shape: "pentagon" - tasks: [{ - id: "3B61760287794956" - item: "ae2:cell_component_64k" - type: "item" - }] - x: -4.0d - y: -7.0d - } - { - dependencies: ["479A121A74E2DE4F"] - id: "69768541E12842D1" - shape: "pentagon" - tasks: [{ - id: "6EBBCFD34140EB0F" - item: "ae2:cell_component_256k" - type: "item" - }] - x: -5.0d - y: -7.0d - } - { - dependencies: [ - "3594628E8316824E" - "14AD7FB0096260E3" - ] - id: "07FE13B6C2445554" - shape: "hexagon" - tasks: [{ - id: "7B9E3E68A7615E18" - item: "ae2:1k_crafting_storage" - type: "item" - }] - x: -1.0d - y: -5.0d - } - { - dependencies: [ - "307B93E1431087D0" - "14AD7FB0096260E3" - ] - id: "66CDB0CB180B9819" - shape: "hexagon" - tasks: [{ - id: "300F710E178666AE" - item: "ae2:4k_crafting_storage" - type: "item" - }] - x: -2.0d - y: -5.0d - } - { - dependencies: [ - "6672296A6740F5B8" - "14AD7FB0096260E3" - ] - id: "74DDE18F637959CE" - shape: "hexagon" - tasks: [{ - id: "0E0021005E9C3FCC" - item: "ae2:16k_crafting_storage" - type: "item" - }] - x: -3.0d - y: -5.0d - } - { - dependencies: [ - "479A121A74E2DE4F" - "14AD7FB0096260E3" - ] - id: "2158BBB95B4D5A2B" - shape: "hexagon" - tasks: [{ - id: "2FCE817D9AA39A67" - item: "ae2:64k_crafting_storage" - type: "item" - }] - x: -4.0d - y: -5.0d - } - { - dependencies: [ - "69768541E12842D1" - "14AD7FB0096260E3" - ] - id: "087C40F74BD44B3D" - shape: "hexagon" - tasks: [{ - id: "4198220C3FA24441" - item: "ae2:256k_crafting_storage" - type: "item" - }] - x: -5.0d - y: -5.0d - } - { - dependencies: ["220ECC2DE9D50213"] - id: "4DAE06A1BAE2853F" - tasks: [ - { - id: "67D9C6D2D69F1CF7" - item: "ae2:fluid_cell_housing" - type: "item" - } - { - id: "21F8AE44BC4EF235" - item: "ae2:item_cell_housing" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest13.title}" - x: 9.0d - y: -5.0d - } - { - dependencies: ["4E724D0920A2DF55"] - id: "00C108BA77C4FC44" - tasks: [{ - id: "1804FB2E08386F85" - item: "ae2:quartz_fiber" - type: "item" - }] - x: 1.0d - y: 3.0d - } - { - dependencies: [ - "00C108BA77C4FC44" - "46C9CFB443BB3CAA" - ] - id: "69517897AAD23478" - tasks: [{ - id: "594297C91AE0B90F" - item: "ae2:fluix_glass_cable" - type: "item" - }] - x: 3.0d - y: 5.0d - } - { - dependencies: ["69517897AAD23478"] - id: "0CCCF777F0B7DC41" - tasks: [{ - id: "645CBAFAEC91E319" - item: "ae2:fluix_covered_cable" - type: "item" - }] - x: 3.0d - y: 7.0d - } - { - dependencies: ["0CCCF777F0B7DC41"] - id: "20A58C211FDF7A94" - tasks: [{ - id: "07934C4471E2BF1F" - item: "ae2:fluix_smart_cable" - type: "item" - }] - x: 1.0d - y: 5.0d - } - { - dependencies: ["134C7F5E57B44097"] - id: "745E8F2BC7D5FE33" - tasks: [{ - id: "325EAC425144D2F2" - item: "ae2:fluix_smart_dense_cable" - type: "item" - }] - x: -1.0d - y: 7.0d - } - { - dependencies: ["220ECC2DE9D50213"] - id: "0887FE2C8C5A2945" - tasks: [ - { - id: "186B57D951B324AA" - item: "ae2:import_bus" - type: "item" - } - { - id: "44A6036055233403" - item: "ae2:export_bus" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest19.title}" - x: 5.0d - y: -1.0d - } - { - dependencies: ["3594628E8316824E"] - id: "716E3EB48FB124B2" - tasks: [{ - id: "2C1513831C993806" - item: "expatternprovider:ingredient_buffer" - type: "item" - }] - x: -1.0d - y: -9.0d - } - { - dependencies: ["774470E98AEB60C2"] - id: "311AE326F9287D02" - tasks: [{ - id: "74A325BF872C20EB" - item: "expatternprovider:wireless_connect" - type: "item" - }] - x: 11.0d - y: -5.0d - } - { - dependencies: ["220ECC2DE9D50213"] - id: "720E13408B1A7170" - tasks: [{ - id: "3DAEEA0CCEE0D67B" - item: "ae2:molecular_assembler" - type: "item" - }] - x: 9.0d - y: -1.0d - } - { - dependencies: ["220ECC2DE9D50213"] - id: "774470E98AEB60C2" - tasks: [{ - id: "622EAD6EA8998CCE" - item: "ae2:me_p2p_tunnel" - type: "item" - }] - x: 9.0d - y: -3.0d - } - { - dependencies: ["29D7E2B8D3BF1D9E"] - id: "02EB760C5FF71D91" - tasks: [{ - id: "56899EC430036D08" - item: "ae2:level_emitter" - type: "item" - }] - x: 2.0d - y: -2.0d - } - { - dependencies: ["2896C7FE79A7D094"] - hide_dependency_lines: true - id: "70F6AD4F913B2B48" - tasks: [{ - id: "36CD7A2BA8B9A204" - item: "aeinfinitybooster:infinity_card" - type: "item" - }] - x: 4.0d - y: -4.0d - } - { - dependencies: ["0A1DB46E5375B995"] - hide_dependency_lines: true - id: "784DECDFEAE5E655" - tasks: [{ - id: "63CF647233FB4C58" - item: "merequester:requester" - type: "item" - }] - x: 7.0d - y: 7.0d - } - { - dependencies: ["74749B089D50329C"] - id: "4F37BFEF63998350" - tasks: [ - { - id: "509358A00C722970" - item: "gtceu:me_input_bus" - type: "item" - } - { - id: "1D70F7ECC8DF791C" - item: "gtceu:me_input_hatch" - type: "item" - } - { - id: "13C03CABDB9C359A" - item: "gtceu:me_output_bus" - type: "item" - } - { - id: "13B91F0F49E0037E" - item: "gtceu:me_output_hatch" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest27.title}" - x: -3.0d - y: 7.0d - } - { - dependencies: ["0CCCF777F0B7DC41"] - id: "134C7F5E57B44097" - tasks: [{ - id: "6B6984EE1083B1F3" - item: "ae2:fluix_covered_dense_cable" - type: "item" - }] - x: 1.0d - y: 7.0d - } - { - dependencies: ["220ECC2DE9D50213"] - hide_dependency_lines: true - id: "21B152B4D6B29378" - tasks: [{ - id: "398C88373144B3C3" - item: "ae2netanalyser:network_analyser" - type: "item" - }] - x: 1.0d - y: -7.0d - } - { - dependencies: ["774470E98AEB60C2"] - id: "036D871AE55BC323" - tasks: [{ - id: "04E7BA8F5CACB6EA" - item: { - Count: 1 - id: "betterp2p:advanced_memory_card" - tag: { - gui: 3b - selectedIndex: { } - } - } - type: "item" - }] - x: 11.0d - y: -3.0d - } - { - dependencies: ["6672296A6740F5B8"] - id: "54FB87F5A13C620D" - tasks: [ - { - id: "1F4A5C0E6DACF8A5" - item: { - Count: 1 - id: "expatternprovider:infinity_cell" - tag: { - record: { - "#c": "ae2:f" - id: "minecraft:water" - } - } - } - type: "item" - } - { - id: "795A6C8F6F01DB7E" - item: { - Count: 1 - id: "expatternprovider:infinity_cell" - tag: { - record: { - "#c": "ae2:i" - id: "minecraft:cobblestone" - } - } - } - type: "item" - } - { - id: "6509D3DA557C23D4" - item: { - Count: 1 - id: "expatternprovider:infinity_cell" - tag: { - record: { - "#c": "ae2:i" - id: "minecraft:gravel" - } - } - } - type: "item" - } - { - id: "36A7B0D50A3CF675" - item: { - Count: 1 - id: "expatternprovider:infinity_cell" - tag: { - record: { - "#c": "ae2:i" - id: "minecraft:sand" - } - } - } - type: "item" - } - { - id: "13874A5EB0BB4284" - item: { - Count: 1 - id: "expatternprovider:infinity_cell" - tag: { - record: { - "#c": "ae2:i" - id: "exnihilosequentia:dust" - } - } - } - type: "item" - } - { - id: "4729741DF09A9058" - item: { - Count: 1 - id: "expatternprovider:infinity_cell" - tag: { - record: { - "#c": "ae2:i" - id: "exnihilosequentia:crushed_blackstone" - } - } - } - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest31.title}" - x: -3.0d - y: -9.0d - } - { - dependencies: ["69768541E12842D1"] - id: "15609A10132FC49C" - shape: "pentagon" - tasks: [{ - id: "1DE4005B4E24DF4A" - item: "megacells:cell_component_1m" - type: "item" - }] - x: -6.0d - y: -7.0d - } - { - dependencies: ["15609A10132FC49C"] - id: "29FCED9F85FB2882" - shape: "pentagon" - tasks: [{ - id: "4612F9FB615EED9C" - item: "megacells:cell_component_4m" - type: "item" - }] - x: -7.0d - y: -7.0d - } - { - dependencies: ["29FCED9F85FB2882"] - id: "3CFA9E13D95178D6" - shape: "pentagon" - tasks: [{ - id: "35AE74272ABB8508" - item: "megacells:cell_component_16m" - type: "item" - }] - x: -8.0d - y: -7.0d - } - { - dependencies: ["3CFA9E13D95178D6"] - id: "07CB8E78FF4461BB" - shape: "pentagon" - tasks: [{ - id: "316532C4593DEB4F" - item: "megacells:cell_component_64m" - type: "item" - }] - x: -9.0d - y: -7.0d - } - { - dependencies: [ - "15609A10132FC49C" - "7543CC066CBF4EE0" - ] - id: "4F32D62F9BD279F3" - tasks: [{ - id: "53E829F3EF05F1C7" - item: "megacells:1m_crafting_storage" - type: "item" - }] - x: -6.0d - y: -5.0d - } - { - dependencies: [ - "29FCED9F85FB2882" - "7543CC066CBF4EE0" - ] - id: "7714826EF2BA750A" - tasks: [{ - id: "1050AD9BDE58B1EE" - item: "megacells:4m_crafting_storage" - type: "item" - }] - x: -7.0d - y: -5.0d - } - { - dependencies: [ - "3CFA9E13D95178D6" - "7543CC066CBF4EE0" - ] - id: "4FF5366683095676" - tasks: [{ - id: "07AD5203BD915A2B" - item: "megacells:16m_crafting_storage" - type: "item" - }] - x: -8.0d - y: -5.0d - } - { - dependencies: [ - "07CB8E78FF4461BB" - "7543CC066CBF4EE0" - ] - id: "0BD267A7CFB4B21D" - tasks: [{ - id: "632B7482D6474931" - item: "megacells:64m_crafting_storage" - type: "item" - }] - x: -9.0d - y: -5.0d - } - { - dependencies: [ - "4E5B71A2D89CAC2B" - "7543CC066CBF4EE0" - ] - id: "2280548034E41819" - tasks: [{ - id: "2614D072C33CA309" - item: "megacells:256m_crafting_storage" - type: "item" - }] - x: -10.0d - y: -5.0d - } - { - dependencies: ["07CB8E78FF4461BB"] - id: "4E5B71A2D89CAC2B" - shape: "pentagon" - tasks: [{ - id: "70C22EC474FC6847" - item: "megacells:cell_component_256m" - type: "item" - }] - x: -10.0d - y: -7.0d - } - { - dependencies: [ - "3B787FE75F563F45" - "16D74E923B76E266" - ] - id: "29D7E2B8D3BF1D9E" - tasks: [ - { - id: "54856D707463E970" - item: "ae2:logic_processor" - type: "item" - } - { - id: "14090BCF91B314E8" - item: "ae2:calculation_processor" - type: "item" - } - { - id: "5395077BE3C25C2C" - item: "ae2:engineering_processor" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest42.title}" - x: 3.0d - y: -3.0d - } - { - dependencies: ["220ECC2DE9D50213"] - id: "3B787FE75F563F45" - tasks: [ - { - id: "1F750AA6CFC9DC25" - item: "ae2:printed_logic_processor" - type: "item" - } - { - id: "02450F5FE7E2CCEC" - item: "ae2:printed_calculation_processor" - type: "item" - } - { - id: "2A99B061955F2798" - item: "ae2:printed_engineering_processor" - type: "item" - } - { - id: "7CB26D5DCBED54A3" - item: "ae2:printed_silicon" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest43.title}" - x: 5.0d - y: -3.0d - } - { - dependencies: ["53E98CFC7934FA67"] - id: "16D74E923B76E266" - shape: "circle" - tasks: [{ - id: "2B876A0BC533DC16" - item: { - Count: 1 - id: "itemfilters:or" - tag: { - items: [ - { - Count: 1b - id: "gtceu:lv_me_assembler" - } - { - Count: 1b - id: "gtceu:mv_me_assembler" - } - { - Count: 1b - id: "gtceu:hv_me_assembler" - } - { - Count: 1b - id: "gtceu:ev_me_assembler" - } - { - Count: 1b - id: "gtceu:iv_me_assembler" - } - { - Count: 1b - id: "gtceu:luv_me_assembler" - } - { - Count: 1b - id: "gtceu:zpm_me_assembler" - } - { - Count: 1b - id: "gtceu:uv_me_assembler" - } - { - Count: 1b - id: "gtceu:uhv_me_assembler" - } - { - Count: 1b - id: "gtceu:uev_me_assembler" - } - { - Count: 1b - id: "gtceu:uiv_me_assembler" - } - ] - } - } - title: "{ftbquests.chapter.applied_energistics.quest44.task_3136592264272534550.title}" - type: "item" - }] - x: 1.0d - y: -5.0d - } - { - dependencies: ["689579627AADC578"] - id: "220ECC2DE9D50213" - tasks: [ - { - id: "41C6C6795E59BB65" - item: "gtceu:gold_skystone_alloy_dust" - type: "item" - } - { - id: "3B2EC0116F6C7107" - item: "gtceu:certus_quartz_skystone_alloy_dust" - type: "item" - } - { - id: "1422CAC2D15E22AE" - item: "gtceu:diamond_skystone_alloy_dust" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest45.title}" - x: 7.0d - y: -3.0d - } - { - dependencies: ["50EA5165AF923EB4"] - id: "689579627AADC578" - shape: "circle" - tasks: [{ - id: "0D5182568D1EE95F" - item: "ae2:sky_dust" - type: "item" - }] - x: 7.0d - y: -1.0d - } - { - dependencies: ["689579627AADC578"] - id: "0F269DCAD4B8CC4C" - tasks: [{ - id: "0EFE10DBB3514228" - item: "gtceu:sky_steel_dust" - type: "item" - }] - x: 7.0d - y: 1.0d - } - { - dependencies: ["0A03B4D352DCF148"] - id: "116E6C82D5482654" - shape: "circle" - tasks: [{ - id: "28067FF8F576C47C" - item: "ae2:certus_quartz_crystal" - type: "item" - }] - x: 3.0d - y: 1.0d - } - { - dependencies: ["116E6C82D5482654"] - id: "46C9CFB443BB3CAA" - tasks: [{ - id: "2F221CCA35769D7D" - item: "ae2:fluix_crystal" - type: "item" - }] - x: 3.0d - y: 3.0d - } - { - dependencies: ["46C9CFB443BB3CAA"] - id: "2DC161E1BBA0919A" - tasks: [{ - id: "708063969E46339B" - item: "gtceu:fluix_steel_dust" - type: "item" - }] - x: 1.0d - y: 1.0d - } - { - dependencies: ["2DC161E1BBA0919A"] - id: "1AF7A9EE66326442" - tasks: [ - { - id: "0643DA8212DB8E3D" - item: "ae2:formation_core" - type: "item" - } - { - id: "5DC0F28528D6D1BD" - item: "ae2:annihilation_core" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest51.title}" - x: 1.0d - y: -1.0d - } - { - dependencies: ["2DC161E1BBA0919A"] - id: "39FD400143952D58" - tasks: [{ - id: "230B2FAAD24807E2" - item: "ae2:controller" - type: "item" - }] - x: 3.0d - y: -1.0d - } - { - dependencies: ["2DC161E1BBA0919A"] - id: "567E88B4BE35DB3C" - tasks: [{ - id: "0B9D56A7272300CE" - item: "ae2:drive" - type: "item" - }] - x: -1.0d - y: 1.0d - } - { - dependencies: ["2DC161E1BBA0919A"] - hide_dependent_lines: true - id: "14AD7FB0096260E3" - tasks: [{ - id: "08FE7D7F04516057" - item: "ae2:crafting_unit" - type: "item" - }] - x: -1.0d - y: -1.0d - } - { - dependencies: ["14AD7FB0096260E3"] - id: "0A1DB46E5375B995" - tasks: [{ - id: "6DDF5DDF0A81DEEF" - item: "ae2:crafting_accelerator" - type: "item" - }] - x: 0.5d - y: -3.5d - } - { - dependencies: ["220ECC2DE9D50213"] - id: "2896C7FE79A7D094" - tasks: [ - { - id: "630F0E6F5CB2AAAA" - item: "gtceu:netherite_gold_skystone_alloy_dust" - type: "item" - } - { - id: "18584E2C308733EF" - item: "gtceu:netherite_certus_quartz_skystone_alloy_dust" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest56.title}" - x: 5.0d - y: -5.0d - } - { - dependencies: ["2DC161E1BBA0919A"] - id: "6706CD6EC648B7C8" - tasks: [{ - id: "55AE7ABA1C7E2A38" - item: "kubejs:fluix_steel_casing" - type: "item" - }] - x: -1.0d - y: 3.0d - } - { - dependencies: [ - "6706CD6EC648B7C8" - "62BA581B2918BB7B" - ] - hide_text_until_complete: false - id: "09241664F45A91EA" - tasks: [{ - id: "0BAC6F2D42E98422" - item: "gtceu:large_me_assembler" - type: "item" - }] - title: "{ftbquests.chapter.applied_energistics.quest58.title}" - x: -1.0d - y: 5.0d - } - { - dependencies: [ - "62BA581B2918BB7B" - "2896C7FE79A7D094" - ] - hide_dependent_lines: true - id: "7543CC066CBF4EE0" - tasks: [{ - id: "39CBED7BC94E55B3" - item: "megacells:mega_crafting_unit" - type: "item" - }] - x: 3.0d - y: -5.0d - } - { - dependencies: ["2896C7FE79A7D094"] - id: "6EDEC5B6214A20CC" - tasks: [ - { - id: "71E65EE348621549" - item: "megacells:mega_item_cell_housing" - type: "item" - } - { - id: "4721258774AB5D9F" - item: "megacells:mega_fluid_cell_housing" - type: "item" - } - ] - x: 3.0d - y: -7.0d - } - { - dependencies: ["15609A10132FC49C"] - id: "31E2D720FFC159EB" - tasks: [{ - id: "1E47878FD2137F85" - item: "megacells:bulk_cell_component" - type: "item" - }] - x: -6.0d - y: -9.0d - } - { - dependencies: [ - "2896C7FE79A7D094" - "19B9634DC5EFBB64" - ] - id: "161969BDC9245CB4" - tasks: [{ - id: "778520F6426B7A0B" - item: { - Count: 1 - id: "megacells:mega_energy_cell" - tag: { } - } - type: "item" - }] - x: 5.0d - y: -7.0d - } - { - dependencies: ["0F269DCAD4B8CC4C"] - id: "5CC6C1096C9F77FC" - tasks: [{ - id: "555BF583B8E80D37" - item: "ae2:condenser" - type: "item" - }] - x: 5.0d - y: 3.0d - } - { - dependencies: ["5CC6C1096C9F77FC"] - id: "49ACE56A8AC7A63E" - tasks: [{ - id: "33BA7BDBC8337B68" - item: "ae2:singularity" - type: "item" - }] - x: 5.0d - y: 5.0d - } - { - dependencies: ["49ACE56A8AC7A63E"] - hide_dependent_lines: true - id: "43F95399A861BDB4" - tasks: [ - { - count: 8L - id: "1273771FB29FBBB8" - item: "ae2:quantum_ring" - type: "item" - } - { - id: "7A459C54353ED9CE" - item: "ae2:quantum_link" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest65.title}" - x: 5.0d - y: 7.0d - } - { - dependencies: ["0F269DCAD4B8CC4C"] - id: "3B8CDE368E941652" - tasks: [{ - id: "4E45B2BCDE736816" - item: "ae2:interface" - type: "item" - }] - x: 7.0d - y: 3.0d - } - { - dependencies: ["0F269DCAD4B8CC4C"] - id: "617E17824856450D" - tasks: [{ - id: "77DED6E47A0C8F29" - item: "ae2:pattern_provider" - type: "item" - }] - x: 9.0d - y: 1.0d - } - { - dependencies: ["20A12F3B992762F0"] - id: "534F27BC96F104A2" - tasks: [{ - id: "1D4515A14AB2EA28" - item: "gtceu:computer_monitor_cover" - type: "item" - }] - x: 10.0d - y: 4.0d - } - { - dependencies: ["534F27BC96F104A2"] - description: [ - "{ftbquests.chapter.applied_energistics.quest69.description1}" - "" - "{ftbquests.chapter.applied_energistics.quest69.description2}" - ] - id: "3FC037156B8DB553" - tasks: [ - { - id: "5F314224A0399BD9" - item: "ae2:terminal" - type: "item" - } - { - id: "79C218EAE5B04360" - item: "ae2:crafting_terminal" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest69.title}" - x: 11.0d - y: 3.0d - } - { - dependencies: ["534F27BC96F104A2"] - id: "3E163E0DA56697A9" - tasks: [{ - id: "5D28950E152C361C" - item: "ae2:pattern_access_terminal" - type: "item" - }] - x: 11.0d - y: 5.0d - } - { - dependencies: ["534F27BC96F104A2"] - id: "1401D93CE8C44E5C" - tasks: [{ - id: "1104F50C7B1397E0" - item: "merequester:requester_terminal" - type: "item" - }] - x: 9.0d - y: 5.0d - } - { - dependencies: [ - "720E13408B1A7170" - "617E17824856450D" - "372842AD602BB1BF" - ] - description: [ - "{ftbquests.chapter.applied_energistics.quest72.description1}" - "" - "{ftbquests.chapter.applied_energistics.quest72.description2}" - ] - id: "54D3F6BC8F7BC609" - tasks: [{ - id: "6AF795E95BA5BDDB" - item: "ae2:blank_pattern" - type: "item" - }] - title: "{ftbquests.chapter.applied_energistics.quest72.title}" - x: 11.0d - y: -1.0d - } - { - dependencies: ["3FC037156B8DB553"] - id: "372842AD602BB1BF" - tasks: [{ - id: "214DD22A34FA3402" - item: "ae2:pattern_encoding_terminal" - type: "item" - }] - x: 11.0d - y: 1.0d - } - { - dependencies: ["3B8CDE368E941652"] - id: "27A6A5C168C0FB73" - tasks: [{ - id: "08754C0908581328" - item: "ae2:storage_bus" - type: "item" - }] - x: 7.0d - y: 5.0d - } - { - dependencies: ["3B8CDE368E941652"] - hide_dependency_lines: true - id: "714785F87C1B07D0" - tasks: [{ - id: "5BBB90E875972BCC" - item: "megacells:mega_interface" - type: "item" - }] - x: -7.0d - y: -1.0d - } - { - dependencies: ["617E17824856450D"] - hide_dependency_lines: true - id: "49447FEBBB76FFF7" - tasks: [{ - id: "043A497EE25F9274" - item: "megacells:mega_pattern_provider" - type: "item" - }] - x: -9.0d - y: -1.0d - } - { - dependencies: [ - "714785F87C1B07D0" - "45EA9095FAF7DDD6" - ] - id: "45739DAADDC070FB" - tasks: [{ - id: "0F8F84C69100A22D" - item: "expatternprovider:ex_interface" - type: "item" - }] - x: -7.0d - y: 1.0d - } - { - dependencies: [ - "49447FEBBB76FFF7" - "45EA9095FAF7DDD6" - ] - id: "6D441C650137BD6D" - tasks: [{ - id: "38F3899119ACAC2D" - item: "expatternprovider:ex_pattern_provider" - type: "item" - }] - x: -9.0d - y: 1.0d - } - { - dependencies: ["45739DAADDC070FB"] - id: "587DFCFB215EFD67" - tasks: [{ - id: "633857678059FF18" - item: "expatternprovider:oversize_interface" - type: "item" - }] - x: -5.0d - y: -1.0d - } - { - dependencies: ["45EA9095FAF7DDD6"] - id: "7E50B29E1FBF5831" - tasks: [ - { - id: "287F1635DFC8AEC0" - item: "expatternprovider:ex_import_bus_part" - type: "item" - } - { - id: "21B2F917F1C18016" - item: "expatternprovider:ex_export_bus_part" - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest80.title}" - x: -9.0d - y: 5.0d - } - { - dependencies: ["45EA9095FAF7DDD6"] - id: "4B90617F77F7F6C8" - tasks: [{ - id: "3DF17BDB8D742570" - item: "expatternprovider:ex_drive" - type: "item" - }] - x: -7.0d - y: 5.0d - } - { - dependencies: ["45EA9095FAF7DDD6"] - id: "14C0B19E6CFFD112" - tasks: [{ - id: "12373941A335ADAB" - item: "expatternprovider:ex_molecular_assembler" - type: "item" - }] - x: -9.0d - y: 3.0d - } - { - dependencies: ["45EA9095FAF7DDD6"] - hide_text_until_complete: false - id: "297AAAB115BBC7E5" - tasks: [{ - id: "5C5599F8967536F3" - item: "expatternprovider:ex_pattern_access_part" - type: "item" - }] - x: -5.0d - y: 3.0d - } - { - dependencies: ["7FF1D8543D63EA7E"] - id: "0E699B8608412E2C" - tasks: [{ - id: "06D6A94357D145C3" - item: "ae2wtlib:wireless_universal_terminal" - match_nbt: false - type: "item" - }] - x: 9.0d - y: 7.0d - } - { - dependencies: ["3FC037156B8DB553"] - hide_dependency_lines: true - id: "7FF1D8543D63EA7E" - tasks: [{ - id: "59FBB40265C8D012" - item: "ae2:wireless_crafting_terminal" - type: "item" - }] - x: 11.0d - y: 7.0d - } - { - dependencies: [ - "7A05D139ED3E4C99" - "45EA9095FAF7DDD6" - ] - id: "0C82D20AA1B8A33B" - tasks: [{ - id: "14E49E1E86C568DC" - item: "expatternprovider:ex_io_port" - type: "item" - }] - x: -5.0d - y: 1.0d - } - { - dependencies: ["567E88B4BE35DB3C"] - id: "7A05D139ED3E4C99" - tasks: [{ - id: "5F60A228C2BE7753" - item: "ae2:io_port" - type: "item" - }] - x: -3.0d - y: 1.0d - } - { - dependencies: ["7A05D139ED3E4C99"] - id: "452B14D8B90757AA" - tasks: [{ - id: "4B8864DA464FEA43" - item: "ae2:spatial_io_port" - type: "item" - }] - x: -3.0d - y: 3.0d - } - { - dependencies: ["452B14D8B90757AA"] - id: "5EFD28E67B3D1425" - tasks: [{ - id: "24AA60D3F5C49D0B" - item: { - Count: 1 - id: "itemfilters:or" - tag: { - items: [ - { - Count: 1b - id: "ae2:spatial_cell_component_2" - } - { - Count: 1b - id: "ae2:spatial_cell_component_16" - } - { - Count: 1b - id: "ae2:spatial_cell_component_128" - } - ] - } - } - title: "{ftbquests.chapter.applied_energistics.quest89.task_2642030594883886347.title}" - type: "item" - }] - x: -3.0d - y: 5.0d - } - { - dependencies: ["0F269DCAD4B8CC4C"] - id: "0DCD572D56DB0AB0" - tasks: [{ - id: "2F3A374493F699A4" - item: "ae2:chest" - type: "item" - }] - x: 5.0d - y: 1.0d - } - { - dependencies: ["0F269DCAD4B8CC4C"] - id: "2170EA7E1D21FA18" - tasks: [{ - id: "692F8BD8098CF505" - item: "ae2:cell_workbench" - type: "item" - }] - x: 9.0d - y: 3.0d - } - { - dependencies: ["452B14D8B90757AA"] - id: "3FDA47AA7278BC2B" - tasks: [{ - id: "7CD5DF6BFA9135BB" - item: "ae2:spatial_pylon" - type: "item" - }] - x: -5.0d - y: 5.0d - } - { - dependencies: ["52FE319F5E176C37"] - id: "45EA9095FAF7DDD6" - tasks: [{ - id: "1BEA9D6C9EB86103" - title: "{ftbquests.chapter.applied_energistics.quest93.task_2011593273419260163.title}" - type: "checkmark" - }] - x: -7.0d - y: 3.0d - } - { - id: "5D67E904C7D02AB8" - invisible: true - tasks: [{ - id: "76B74EE25F58E344" - title: "{ftbquests.chapter.applied_energistics.quest94.task_8554392751382782788.title}" - type: "checkmark" - }] - x: 0.0d - y: 0.0d - } - { - dependencies: [ - "14C0B19E6CFFD112" - "6D441C650137BD6D" - ] - id: "41C6F59DB92F79A7" - tasks: [ - { - id: "1FD3B7BF3F89717B" - item: "expatternprovider:assembler_matrix_frame" - type: "item" - } - { - id: "685BA4EB9F697B9F" - item: "expatternprovider:assembler_matrix_wall" - type: "item" - } - { - id: "726A4A2CCE884F93" - item: "expatternprovider:assembler_matrix_pattern" - type: "item" - } - { - id: "0864D2C12378B7DA" - item: "expatternprovider:assembler_matrix_crafter" - type: "item" - } - { - id: "1EB84282EFCA0FCB" - item: "expatternprovider:assembler_matrix_speed" - type: "item" - } - { - id: "2F265B1AD4C7DBD7" - item: "expatternprovider:assembler_matrix_glass" - optional_task: true - type: "item" - } - ] - title: "{ftbquests.chapter.applied_energistics.quest95.title}" - x: -11.0d - y: 3.0d - } - { - dependencies: ["478A02E7D8C0A1C8"] - id: "1E343F9554344E46" - tasks: [{ - id: "0120C22232953E1E" - item: "expandedae:exp_crafting_accelerator_2" - type: "item" - }] - x: 0.0d - y: -2.5d - } - { - dependencies: ["0A1DB46E5375B995"] - id: "478A02E7D8C0A1C8" - tasks: [{ - id: "4E8FEE68E8397840" - item: "expandedae:exp_crafting_accelerator_4" - type: "item" - }] - x: -0.5d - y: -3.5d - } - { - dependencies: ["53113FB2835560E0"] - id: "6E4DB64EB63F8714" - tasks: [{ - id: "0D3D29B49CC8183A" - item: "expandedae:exp_crafting_accelerator_8" - type: "item" - }] - x: -1.0d - y: -2.5d - } - { - dependencies: ["478A02E7D8C0A1C8"] - id: "53113FB2835560E0" - tasks: [{ - id: "1B74F12925EB6843" - item: "expandedae:exp_crafting_accelerator_16" - type: "item" - }] - x: -1.5d - y: -3.5d - } - { - dependencies: ["53113FB2835560E0"] - id: "1F5B2DFAFDCDF050" - tasks: [{ - id: "48C0745252723341" - item: "expandedae:exp_crafting_accelerator_64" - type: "item" - }] - x: -2.5d - y: -3.5d - } - { - dependencies: ["1F5B2DFAFDCDF050"] - id: "344AAB2C51F822B1" - tasks: [{ - id: "0E4DCC6DD571D5E1" - item: "expandedae:exp_crafting_accelerator_32" - type: "item" - }] - x: -2.0d - y: -2.5d - } - { - dependencies: ["307E7CA88BA6E1E0"] - id: "686148DD4CC74166" - tasks: [{ - id: "349BC151061DABD3" - item: "expandedae:exp_crafting_accelerator_128" - type: "item" - }] - x: -3.0d - y: -2.5d - } - { - dependencies: ["1F5B2DFAFDCDF050"] - id: "307E7CA88BA6E1E0" - tasks: [{ - id: "344C24CBFFA09EA8" - item: "expandedae:exp_crafting_accelerator_256" - type: "item" - }] - x: -3.5d - y: -3.5d - } - { - dependencies: ["1C484C4AB8D3C36B"] - id: "7A328586CB117E32" - tasks: [{ - id: "5C03F7BDF5469CED" - item: "expandedae:exp_crafting_accelerator_512" - type: "item" - }] - x: -4.0d - y: -2.5d - } - { - dependencies: ["307E7CA88BA6E1E0"] - id: "1C484C4AB8D3C36B" - tasks: [{ - id: "648BA4E1D9628FC9" - item: "expandedae:exp_crafting_accelerator_1k" - type: "item" - }] - x: -4.5d - y: -3.5d - } - { - dependencies: ["194C30F25E32E9AE"] - id: "5497D6386B182B01" - tasks: [{ - id: "66F7C91631C49455" - item: "expandedae:exp_crafting_accelerator_2k" - type: "item" - }] - x: -5.0d - y: -2.5d - } - { - dependencies: ["1C484C4AB8D3C36B"] - id: "194C30F25E32E9AE" - tasks: [{ - id: "599DBD455B993F00" - item: "expandedae:exp_crafting_accelerator_4k" - type: "item" - }] - x: -5.5d - y: -3.5d - } - { - dependencies: ["3BF1920443CA9407"] - id: "68610A9C19C87EF9" - tasks: [{ - id: "32FB3D7C09625FAA" - item: "expandedae:exp_crafting_accelerator_8k" - type: "item" - }] - x: -6.0d - y: -2.5d - } - { - dependencies: ["194C30F25E32E9AE"] - id: "3BF1920443CA9407" - tasks: [{ - id: "35BE16B65C18BC23" - item: "expandedae:exp_crafting_accelerator_16k" - type: "item" - }] - x: -6.5d - y: -3.5d - } - { - dependencies: ["54719F78D8E03083"] - id: "697009990248A750" - tasks: [{ - id: "1928B21581FA9FE1" - item: "expandedae:exp_crafting_accelerator_32k" - type: "item" - }] - x: -7.0d - y: -2.5d - } - { - dependencies: ["3BF1920443CA9407"] - id: "54719F78D8E03083" - tasks: [{ - id: "45C8EEA6DAD1BA87" - item: "expandedae:exp_crafting_accelerator_64k" - type: "item" - }] - x: -7.5d - y: -3.5d - } - { - dependencies: ["49476A75A61E5FCE"] - id: "6A8AE35DEB32BBD5" - tasks: [{ - id: "0D3210842632156E" - item: "expandedae:exp_crafting_accelerator_128k" - type: "item" - }] - x: -8.0d - y: -2.5d - } - { - dependencies: ["54719F78D8E03083"] - id: "49476A75A61E5FCE" - tasks: [{ - id: "5FE645FA55CCC236" - item: "expandedae:exp_crafting_accelerator_256k" - type: "item" - }] - x: -8.5d - y: -3.5d - } - { - dependencies: ["723055BFDB9A7484"] - id: "7CB062C9B22FB74A" - tasks: [{ - id: "6D41946DE84FF437" - item: "expandedae:exp_crafting_accelerator_512k" - type: "item" - }] - x: -9.0d - y: -2.5d - } - { - dependencies: ["49476A75A61E5FCE"] - id: "723055BFDB9A7484" - tasks: [{ - id: "0116134185E94BBA" - item: "expandedae:exp_crafting_accelerator_1m" - type: "item" - }] - x: -9.5d - y: -3.5d - } - { - dependencies: ["0C82D20AA1B8A33B"] - id: "6820C607C25AE859" - tasks: [{ - id: "76B22CA34DBF4917" - item: "expandedae:exp_io_port" - type: "item" - }] - x: -3.0d - y: -1.0d - } - { - dependencies: ["6D441C650137BD6D"] - id: "2519DA28EADD47D4" - tasks: [{ - id: "7C66519BF801C80D" - item: "expandedae:exp_pattern_provider" - type: "item" - }] - x: -11.0d - y: 1.0d - } - { - dependencies: ["29D7E2B8D3BF1D9E"] - hide_dependency_lines: true - id: "66668FEA4D4F8573" - tasks: [{ - id: "6D8F4E2245FFC8DE" - item: "expatternprovider:pattern_modifier" - type: "item" - }] - x: 1.0d - y: -9.0d - } - { - dependencies: ["29FCED9F85FB2882"] - description: ["{ftbquests.chapter.applied_energistics.quest97.description1}"] - id: "334AE7B73C221920" - tasks: [{ - id: "3CAA8DC4BE329DE5" - item: "megacells:cell_component_1m" - type: "item" - }] - title: "{ftbquests.chapter.applied_energistics.quest96.title}" - x: -7.0d - y: -9.0d - } - { - dependencies: [ - "311AE326F9287D02" - "43F95399A861BDB4" - ] - id: "010737DB9CD70C4C" - tasks: [{ - id: "069D3081DFFA38E1" - item: "expatternprovider:wireless_hub" - type: "item" - }] - x: 11.0d - y: -7.0d - } - ] - title: "{ftbquests.chapter.applied_energistics.title}" -} diff --git a/src/test/resources/assets/nbt/newline_separated.snbt b/src/test/resources/assets/nbt/newline_separated.snbt new file mode 100644 index 0000000..92f286e --- /dev/null +++ b/src/test/resources/assets/nbt/newline_separated.snbt @@ -0,0 +1,9 @@ +{ + name: "Foo" + list: [ + 1 + 2 + 3 + 4 + ] +} \ No newline at end of file