From acfbc0f8ff73afbfb480c2e56cdc758d4c78986f Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Mon, 13 Jul 2026 07:49:02 -0400 Subject: [PATCH] Clean up Default Meteor Files (#140) --- .github/workflows/default-meteor-reagents.yml | 32 +++++ .github/workflows/default-meteors.yml | 32 +++++ raw/meteor-reagents/README | 99 +++++++++++++++ raw/meteor-reagents/crystallos.json | 3 + raw/meteor-reagents/incendium.json | 7 ++ raw/meteor-reagents/orbisTerrae.json | 4 + raw/meteor-reagents/tenebrae.json | 3 + raw/meteor-reagents/terrae.json | 4 + raw/meteors/DiamondMeteor.json | 11 ++ raw/meteors/IronBlockMeteor.json | 15 +++ raw/meteors/NetherStarMeteor.json | 14 +++ raw/meteors/README | 117 ++++++++++++++++++ raw/meteors/StoneBlockMeteor.json | 10 ++ .../alchemicalwizardry/meteors/meteors.zip | Bin 4028 -> 4310 bytes .../alchemicalwizardry/meteors/reagents.zip | Bin 3150 -> 3097 bytes 15 files changed, 351 insertions(+) create mode 100644 .github/workflows/default-meteor-reagents.yml create mode 100644 .github/workflows/default-meteors.yml create mode 100644 raw/meteor-reagents/README create mode 100644 raw/meteor-reagents/crystallos.json create mode 100644 raw/meteor-reagents/incendium.json create mode 100644 raw/meteor-reagents/orbisTerrae.json create mode 100644 raw/meteor-reagents/tenebrae.json create mode 100644 raw/meteor-reagents/terrae.json create mode 100644 raw/meteors/DiamondMeteor.json create mode 100644 raw/meteors/IronBlockMeteor.json create mode 100644 raw/meteors/NetherStarMeteor.json create mode 100644 raw/meteors/README create mode 100644 raw/meteors/StoneBlockMeteor.json diff --git a/.github/workflows/default-meteor-reagents.yml b/.github/workflows/default-meteor-reagents.yml new file mode 100644 index 00000000..3e2939b7 --- /dev/null +++ b/.github/workflows/default-meteor-reagents.yml @@ -0,0 +1,32 @@ +name: Compress Default Meteor Configs + +on: + push: + branches: [ master ] + paths: [ raw/meteor-reagents/* ] + workflow_dispatch: { } + +jobs: + meteors: + name: Compress Default Meteor Reagent Configs + permissions: + contents: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v5 + - name: Setup Python + uses: actions/setup-python@v6 + with: + python-version: '3.10' + - name: Compress Default Meteor Reagent Configs + run: python .github/scripts/compress.py meteor-reagents meteors/reagents.zip + - name: Create PR + uses: peter-evans/create-pull-request@v7 + with: + title: Compress Default Meteor Reagent Configs + body: Automated changes by Compress Default Meteor Reagent Configs workflow. + commit-message: Compress Default Meteor Reagent Configs + delete-branch: true + branch: meteor-reagents-configs/patch diff --git a/.github/workflows/default-meteors.yml b/.github/workflows/default-meteors.yml new file mode 100644 index 00000000..d034cd7b --- /dev/null +++ b/.github/workflows/default-meteors.yml @@ -0,0 +1,32 @@ +name: Compress Default Meteor Configs + +on: + push: + branches: [ master ] + paths: [ raw/meteors/* ] + workflow_dispatch: { } + +jobs: + meteors: + name: Compress Default Meteor Configs + permissions: + contents: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v5 + - name: Setup Python + uses: actions/setup-python@v6 + with: + python-version: '3.10' + - name: Compress Default Meteor Configs + run: python .github/scripts/compress.py meteors meteors/meteors.zip + - name: Create PR + uses: peter-evans/create-pull-request@v7 + with: + title: Compress Default Meteor Configs + body: Automated changes by Compress Default Meteor Configs workflow. + commit-message: Compress Default Meteor Configs + delete-branch: true + branch: meteor-configs/patch diff --git a/raw/meteor-reagents/README b/raw/meteor-reagents/README new file mode 100644 index 00000000..30a70ae6 --- /dev/null +++ b/raw/meteor-reagents/README @@ -0,0 +1,99 @@ + ############################################# +### Blood Magic Meteor Reagent Config Guide ### + ############################################# + +The butter for your bread. + +This file and the other default meteor reagent configs (crystallos.json, incendium.json, orbisTerrae.json, tenebrae.json, and terrae.json) are generated when the folder config/BloodMagic/meteors/reagents/ is not present. Delete that folder if you want to regen these files with default values. + +Remember that you need to use the Alchemic Calcinator to turn the reagent items into AR to put them into the Master Ritual Stone for them to have any effect. Also remember that only up to three different reagents may be in a Master Ritual Stone at a time. Try the Alchemic Segmenter to make dealing with multiple reagents easier. + +If you are a player, feel free to delete this file. Nothing should fail to load for any of these configs like might happen with the default meteor ones. + +If you are a pack creator, the instructions on how to create your own custom meteor reagent effects are below. + + ############################################## +### Custom Meteor Reagent File Specification ### + ############################################## +------------------------------------------------ +reagentName.json: These config files have more strict naming than the ones for meteors. You MUST name your file reagentName.json (using the reagent's internal name, case sensitive) to define how that reagent acts when summoning a meteor. + +The easiest way to find a reagent's internal name is to look up crystal belljars in NEI and check their tooltips. +This config system *should* be able to account for custom reagents that you make if you register them in ReagentRegistry, but that is well beyond the scope of this guide. + +Your file must contain a valid JSON object, and the properties within will define that reagent's characteristics when used to summon a meteor. +If you don't know how to read/write JSON, look at the default files as a reference or check out https://www.w3schools.com/js/js_json_intro.asp or any other online tutorial. + +Reagents that you intend to only use for unlocking blocks in Meteor Component arrays do not need to have a file in config/BloodMagic/meteors/reagents/. Putting an empty one here anyway will not change any behavior. + +Note that all reagents supplied to the Master Ritual Stone are still consumed whether they change anything or not. +------------------------------------------------ +"filler": Array of Meteor Component Strings + +Reagents with "filler" properties will *entirely replace* the filler of any meteor they are used to summon. + +Only has an effect on meteors that have a fillerChance above zero (set directly or derived from maxWeight). + +The same format as the "ores" and "filler" properties of meteors must be used: + modId:itemName:meta:weight(:reagent1, reagent2, ... optional) + OREDICT:oreDictName:weight(:reagent1, reagent2, ... optional) + +For best results when players combine reagents, try to ensure that every reagent filler array you define (across every reagent) has the same total weight. Default configs use a total of 180 because it is highly composite, but any number may be used. + +Meteor Components in a reagent's "filler" property CAN depend on other reagents being present! +If all reagents used to summon a meteor have "filler" properties that *only* contain Meteor Components with reagents that are not present (so they all end up becoming empty), then the meteor's original filler list will be unchanged. +------------------------------------------------ +"radiusChange": Int (+/-) + +Modify the meteor's radius by the given number. + +Only the single largest increase and single largest decrease will impact the summoned meteor. +This is inspired by how Orbis Terrae completely overshadowed the effects of Terrae in the old system. + +Default value if not included in a config is 0. +------------------------------------------------ +"fillerChanceChange": Int (+/-) + +Modify the filler chance of the summoned meteor. This is similar to how (Orbis) Terrae increased the max weight, except the numbers are smaller by a multiple of 10 (Orbis Terrae has a fillerChanceChange of 20 instead of adding 200 weight). +The full formula is newFillerChance = 100 * (fillerChance + change) / (100 + change). +For example, a meteor with a fillerChance of 50 which is summoned with Orbis Terrae will have a new fillerChance of ~58%. + +Will not add filler to meteors with a fillerChance of 0. +Setting a value of -100 will completely remove filler (to avoid division by zero). + +Only the single largest increase and single largest decrease will impact the summoned meteor. +This is inspired by how Orbis Terrae completely overshadowed the effects of Terrae in the old system. + +Default value if not included in a config is 0. +------------------------------------------------ +"rawFillerChanceChange": Float (+/-) + +Directly add or subtract from the summoned meteor's fillerChance. +For example, a meteor with a fillerChance of 50 summoned with a custom reagent with rawFillerChanceChange set to -12.5 will have a new fillerChance of 37.5. + +Only the single largest increase and single largest decrease will impact the summoned meteor. +This is inspired by how Orbis Terrae completely overshadowed the effects of Terrae in the old system. + +Default value if not included in a config is 0. + +Unused in any default reagent configs. +------------------------------------------------ +"disableExplosions": true/false + +Entirely disables explosions caused by a meteor summoned with any reagent that has this property set to true. + +Default value if not included in a config is false. + +Unused in any default reagent configs. +------------------------------------------------ +"invertExplosionBlockDamage": true/false + +Inverts the setting B:doMeteorsDestroyBlocks in config/AWWayofTime.cfg for meteors summoned with a reagent that has this property set to true. +May be used to make normally dangerous meteors safe, or can be used as a tradeoff to unlock a powerful effect when meteors are normally safe. + +Overshadowed by disableExplosions if any reagent used to summon the meteor has it set, since there will be no explosion for blocks to break/not break. + +Default value if not included in a config is false. + +Unused in any default reagent configs. +------------------------------------------------ diff --git a/raw/meteor-reagents/crystallos.json b/raw/meteor-reagents/crystallos.json new file mode 100644 index 00000000..596f0553 --- /dev/null +++ b/raw/meteor-reagents/crystallos.json @@ -0,0 +1,3 @@ +{ + "filler": ["minecraft:ice:0:180"] +} diff --git a/raw/meteor-reagents/incendium.json b/raw/meteor-reagents/incendium.json new file mode 100644 index 00000000..9fa58ce2 --- /dev/null +++ b/raw/meteor-reagents/incendium.json @@ -0,0 +1,7 @@ +{ + "filler": [ + "minecraft:netherrack:0:60", + "minecraft:glowstone:0:60", + "minecraft:soul_sand:0:60" + ] +} diff --git a/raw/meteor-reagents/orbisTerrae.json b/raw/meteor-reagents/orbisTerrae.json new file mode 100644 index 00000000..f4829877 --- /dev/null +++ b/raw/meteor-reagents/orbisTerrae.json @@ -0,0 +1,4 @@ +{ + "radiusChange": 2, + "fillerChanceChange": 20 +} diff --git a/raw/meteor-reagents/tenebrae.json b/raw/meteor-reagents/tenebrae.json new file mode 100644 index 00000000..fef35f58 --- /dev/null +++ b/raw/meteor-reagents/tenebrae.json @@ -0,0 +1,3 @@ +{ + "filler": ["minecraft:obsidian:0:180"] +} diff --git a/raw/meteor-reagents/terrae.json b/raw/meteor-reagents/terrae.json new file mode 100644 index 00000000..bd648d75 --- /dev/null +++ b/raw/meteor-reagents/terrae.json @@ -0,0 +1,4 @@ +{ + "radiusChange": 1, + "fillerChanceChange": 10 +} diff --git a/raw/meteors/DiamondMeteor.json b/raw/meteors/DiamondMeteor.json new file mode 100644 index 00000000..2b4cd5f7 --- /dev/null +++ b/raw/meteors/DiamondMeteor.json @@ -0,0 +1,11 @@ +{ + "ores": [ + "OREDICT:oreDiamond:100", + "OREDICT:oreEmerald:75", + "OREDICT:oreCinnabar:200", + "OREDICT:oreAmber:200" + ], + "radius": 5, + "focusItem": "minecraft:diamond", + "maxWeight": 1000 +} \ No newline at end of file diff --git a/raw/meteors/IronBlockMeteor.json b/raw/meteors/IronBlockMeteor.json new file mode 100644 index 00000000..9c429cf7 --- /dev/null +++ b/raw/meteors/IronBlockMeteor.json @@ -0,0 +1,15 @@ +{ + "ores": [ + "OREDICT:oreIron:400", + "OREDICT:oreGold:30", + "OREDICT:oreCopper:200", + "OREDICT:oreTin:140", + "OREDICT:oreSilver:70", + "OREDICT:oreLead:80", + "OREDICT:oreLapis:60", + "OREDICT:oreRedstone:100" + ], + "radius": 7, + "focusItem": "minecraft:iron_block", + "maxWeight": 1000 +} \ No newline at end of file diff --git a/raw/meteors/NetherStarMeteor.json b/raw/meteors/NetherStarMeteor.json new file mode 100644 index 00000000..10f5765a --- /dev/null +++ b/raw/meteors/NetherStarMeteor.json @@ -0,0 +1,14 @@ +{ + "ores": [ + "OREDICT:oreDiamond:150", + "OREDICT:oreEmerald:100", + "OREDICT:oreQuartz:250", + "OREDICT:oreSunstone:5", + "OREDICT:oreMoonstone:50", + "OREDICT:oreIridium:5", + "OREDICT:oreCertusQuartz:150" + ], + "radius": 3, + "focusItem": "minecraft:nether_star", + "maxWeight": 1000 +} \ No newline at end of file diff --git a/raw/meteors/README b/raw/meteors/README new file mode 100644 index 00000000..06301d75 --- /dev/null +++ b/raw/meteors/README @@ -0,0 +1,117 @@ + ##################################### +### Blood Magic Meteor Config Guide ### + ##################################### + +"Meteor happens" - xQc + +This file and the other default meteor configs (StoneBlockMeteor.json, IronBlockMeteor.json, DiamondMeteor.json, and NetherStarMeteor.json) are generated when the folder config/BloodMagic/meteors/ is not present. Delete that folder if you want to regen these files with default values. + +If you are a player and your pack does not include certain ores in the default meteors (like cinnabar and amber from Thaumcraft in DiamondMeteor.json), feel free to remove those entries in the "ores" property for that meteor so that they don't send warnings that they can't be found to the log. Also feel free to delete this file. + +If you are a pack creator, the instructions on how to create your own custom meteors are below. + + ###################################### +### Custom Meteor File Specification ### + ###################################### +---------------------------------------- +FileName.json: Name your file anything you like with the extension ".json" and place it in config/BloodMagic/meteors/. +Choose something descriptive for the file name; the Focus Item is often a good choice, but it can be anything. IronIngot.json, RAINBOWS.json, and NewMeteor2026.json are all valid names, but meteor.txt is not, as it does not end in .json. + +Your file must contain a valid JSON object, and the properties explained below will alter the meteor's characteristics. +If you don't know how to read/write JSON, look at the default files as a reference or check out https://www.w3schools.com/js/js_json_intro.asp or any other online tutorial. +---------------------------------------- +"ores": Array of Meteor Component Strings + +The most complicated and most important thing to define for your meteor: the main blocks it places. + +These two formats (which can be mixed and matched in the same "ores" property) may be used to specify a Meteor Component (a block, its associated weight, and any required reagents): + modId:itemName:meta:weight(:reagent1, reagent2, ... optional) - Note: specifying meta is REQUIRED, even if 0 + OREDICT:oreDictName:weight(:reagent1, reagent2, ... optional) - Note: OREDICT: at the front stays the same, only replace oreDictName + +For example, the following "ores" property will place iron and gold ore in a 2:1 ratio. It will also add end stone when either sanctus OR magicales is provided (resulting in a ratio of 2 iron : 1 gold : 1 end stone): +"ores": [ + "OREDICT:oreIron:200", + "OREDICT:oreGold:100", + "minecraft:end_stone:0:100:sanctus, magicales" +] + +Reagents that you intend to only use for unlocking blocks in Meteor Component arrays do not need to have a file in config/BloodMagic/meteors/reagents/. Putting an empty one there anyway will not change any behavior. + +If the "ores" property is not present, is empty, or if it contains only blocks with reagents that are not provided (so the meteor would have no blocks to place), the block specified with S:defaultMeteorBlock in config/AWWayofTime.cfg will be used as a default. minecraft:stone is used as a fallback if the config is unset or if the specified block can't be found, such as minceraft:breadrock. + +Try using the command "/iih" ("item in hand") from GTNHLib or "/mt hand" from MineTweaker while holding an item to get its modId, itemName, and meta automatically put in your clipboard. +---------------------------------------- +"filler": Array of Meteor Component Strings + +Just like the "ores" property, you can define custom blocks to be used as filler. Uses the same format to define Meteor Components, so you can set blocks in the filler list to have different relative weights or require specific reagents. + +ALL filler blocks in a meteor will be replaced if it is summoned with a reagent that is configured to replace filler (incendium, tenebrae, and crystallos with the default configs). + +Uses S:defaultMeteorBlock in config/AWWayofTime.cfg as the default filler block, just like the ores property. +---------------------------------------- +"fillerChance": Floating Point Number from 0.0-100.0 inclusive + +Defines the chance (out of 100%) that any block placed will pick a block from the "filler" property instead of the "ores" one. +A value of 50.0 means the meteor will be 50% filler and 50% ores, 75.5 means the meteor will be 75.5% filler and 24.5% ores, etc. +Default value if not specified is 0. + +fillerChance of 100 means that the whole meteor will be filler. The "ores" list will not show up in NEI. +fillerChance of 0 means that the whole meteor will be ore. The "filler" list will not show up in NEI. +---------------------------------------- +"maxWeight": Positive Integer + +IGNORED when fillerChance is defined in the same meteor. It's recommended to use that property for new meteors instead of this one. + +An alternate way to specify the fillerChance which is similar (but NOT identical) to the old weight system. +The formula used to turn maxWeight into fillerChance is 100 * (1 - (total ore list weight / maxWeight)). +The result of this formula will always be clamped between 0.0-100.0 inclusive, just like if you set the fillerChance yourself. + +For example, this example "ores" property has a total list weight of 400: +"ores": [ + "minecraft:log:0:100", + "minecraft:log:1:100", + "minecraft:log:2:100", + "minecraft:log:3:100:virtus" +] +Setting maxWeight to 1000 for that meteor would result in a fillerChance of 60%. +Setting maxWeight to 600 for that meteor would result in a fillerChance of 33.33%. + +This does NOT account for blocks over the max weight requiring (Orbis) Terrae like the old system. Specify that the blocks require the reagent in the Meteor Component string if you want that functionality. +This does NOT account for blocks that are not present because they are missing reagents. The above example with a maxWeight of 1000 will have 60% filler whether or not you supply virtus. + +This DOES account for blocks that can't be found when reading the configs. It is used in the default meteor configs for that purpose. It is recommended to only use this if you expect something similar to happen with your meteors. +---------------------------------------- +"radius": Positive Integer + +Sets the radius (in full blocks out from the center block) of your meteor. +A meteor of radius 5 will have a full diameter of 11, including the center block. +A meteor's radius is also used to calculate the strength of the explosion when it lands if that feature is enabled. The explosion strength is 4 * radius. + +Default value is 1 if the property is not set, which will create a very wimpy meteor. +---------------------------------------- +"cost": Non-Negative Integer + +Sets the LP cost to summon this meteor. + +Uses I:defaultMeteorCost in config/AWWayofTime.cfg if this property is not set. +The default value for that config is 1,000,000 LP. + +Remember that Mark of the Falling Tower takes 100k LP to activate by default. Keep in mind that players can activate the ritual and leave the sacrifice of the Focus Item until after more LP has been added to their Soul Networks. +---------------------------------------- +"focusItem": String in format "modId:name(:meta optional)" + +The Focus Item is the block/item sacrificed to summon the meteor. Avoid configuring multiple meteors to use the same item, because only one will actually be able to be summoned in-game. +Having different focus items with the same ID but different metadata works fine, such as having multiple meteors summoned with different colors of wool. +Specifying Focus Items based on NBT is not currently possible. +Specifying Focus Items based on oredicts is not currently possible. + +As an example, a meteor with this value for "focusItem" will require a birch log: +"focusItem": "minecraft:log:2" + +The default value for meta is 0 if not provided. A meteor with this value for "focusItem" will require coal: +"focusItem": "minecraft:coal" +Charcoal (which is the same item ID with a metadata of 1) will NOT work. + +Setting meta to 32767 will allow any item with the same ID. For the following example, oak, birch, spruce, and jungle logs will all be valid items to summon this meteor (because they all have the same block ID): +"focusItem": "minecraft:log:32767" +---------------------------------------- diff --git a/raw/meteors/StoneBlockMeteor.json b/raw/meteors/StoneBlockMeteor.json new file mode 100644 index 00000000..03025fd6 --- /dev/null +++ b/raw/meteors/StoneBlockMeteor.json @@ -0,0 +1,10 @@ +{ + "ores": [ + "OREDICT:oreCoal:150", + "OREDICT:oreApatite:50", + "OREDICT:oreIron:50" + ], + "radius": 16, + "focusItem": "minecraft:stone", + "maxWeight": 1000 +} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/meteors/meteors.zip b/src/main/resources/assets/alchemicalwizardry/meteors/meteors.zip index 3106a3ac074acd6cb9dd49127e850b32ce981c54..e76fc2380096d54d1327806293f5c0e3a08ca96a 100644 GIT binary patch literal 4310 zcmaKvWmFVgx5o#B0j0Y{7*M)FK%`*=X&5Q#7^H?FhX#>u7?3XMRzSK_8Di*;2c(fM zrF`+;b=Pwr@B7|!)?Ry`4|}iwf9-WX{4|vBVUYs>0NlF(0piwPmWJL{J9j~P7xFe{ zFt~%ID%2GUcjmEmfjg9KXaO(_u5%~MpKu0S^AT~aGOX>aZa*}~PIT&585}|@R|yF5 zX^eH2c0CoTW#eb%Cj8e>|`L|`10F8ghP6}ea zD!!9zfdK&gHuKUM?jUOqx3K$P!rkK3@!m-j_a68?n03M7?oTOui7R6&8yYsVP?hAW zi2J` zh4?OFbhTtMery@n5z(sq`a~Lbpp-p%xw(8BwbeCX%c&ZT6gDZT$A4P$sr)Mw!bOAP;XcEu~bQFP}>@6H*;T~>p- zT0@;7u4c~vuqJ`m#YY@+aT|f01#uWv*U^iG{lFk(a{jDK$9Lb5hcV*U;^(QM1;l~G z#nKnf0SjD(tzZ-yBFsMTYxHzovsbC0Q*^!r3hG_u)uemepdecqW&~I*di{i(u+s}c zsT~gx9=-`nRFG>L?|jUy^qA1k7}{c$%VVNP+_Q0nx2wNpMCa3Ooy!tcH$!?_&UO6O z^$cGKO#*zxI#D0MOykd3bAj_uXLz^uP$hf-z?=~P0Ny#%0?Wv&f;07D@Oe?v+kF!m z4^4X?M+(+i1jcfa{Wzj#nq`qCa@A3k%R0PnRxwvSfAz=mvY=r8T5^86!zg9Au~mp5 zTKptVOG+nGd7_!S$M zhAy9U{)MndCTvv6G z+EPuF@-Iz*AXJ4t+%4sDUh~6~eYLg~yE*S5(fVO-aE~+N3YZ?EtZf=<=OavQh_WM3 z)hW}0n?~rojf{T1eXT|@9OiDY35_gWE4)89g#ytUu08o~MP|dbN1yfCt>VpVt{q$8 z{7Iko4x(h91AdwjC5h}A)fVIM_(rA1-F(HtVel9OD*nGwvEzQvq|x1Wn8Eu)BL& zxH=A{5X{bn77hiv)#_I2DA%*dT}Qa;Nr;$vffwgJkqW3L3Y zKerqN#62VZ!spo}QQetdz-;Xis{B2NPZIu}W5%0|1O&^ml|NO#J}F7V2qm`*dLg{+59wyQ+QP71OAfjEtl(;14D%O%AcGSC5%t|7&&St zO?cP+CEd~x=VrMA>Uj}*Up=OIin)Uc+a5>shkNqq1MR{=N4XvA%lh>*}CH=WD`6MY{Hqx)AX)r5R-z=^~3{Fd6cj8B`%{hp9xJ^Kf z^Gc>0YuhQ~*j8JM6%?Lm)@FSqUL22`BJ-7tzo;1Z-2xCfU$T~JE1Z|w)oWEw_GDSW zCbTwhnuEThaJOJ6`F`koUqxd#>Ej6b;H)NCERlkTwH&;5iLbzuC4eBp@zWqP_evBA zAqA>=0hKR+sEX3djS|`LuYft;bNiBV-%p61Z7rvPtFS{F43p~BI(xMwp4Nw>-nadJ zyb4vV(n#SH&!a#+t;>^Q6A^o?Kv~Qz*?w~qJAj7s_MsN?Uh;3VIJ!r3Cc_!+bFR>vZuAwTELsy$}@K6k%2BI&&(NtPQ9MT@svp0L>@W*!N^CcPr;?#4wq{Yl{jA ze(wq83DT!XE}Jr7jBrDLpd8Fu=yOev&9b8S zCwyBwxkN@+ zl!)OuP|kg&Axw3>Wk~$0rIK`ivzp9Lw3Lq`rMF0v9TIox>oNGd%-fNAigVTyR#yS` z*3c`=={k~_mk=f|F{Z~;!7$EKnmWIl7hiTZhkzEq?yd_C(U%1cbo3xwwQYCd-1Doh zGJ{h+-^IJXxT-bO&R`86A#TK2SbDD}sP5rMepyocwCYh#p$Yk6;zULCu99Y5_oY9 zG*s2N+2i`M;Hs8qt{;dXyeViT|7-ky>z z95;u-^RzRUYc1<9+Jl(%QhPYINV6^ zCUz|RUO)ee(0V6HAim$g?BWDfTs%Jv)9RP)>k4R7{5_sETJZA*B=vqo2c3o`{^HmlXYQ z98BB(IT^~@R>q(kGRuw1w|i#_+muZ57j7JjqMkc_+Ypgqz44`aATr7Ido)So%rv%k zCv!qzAiE}%e_A~J-23os4Se3vIqg5NG^>w5oHIqf$@OWF226Moo{`U(K8)Iz%*5Ub zP1L2SAV-b53D)@KI}iwk%%(j#WWb<9rwL2=%MaK{9BOVIo5MXyGaxADnfwq&kN9!$;Rc9jcaxV9`yx)06CGELNoq|9 z9(jfGRzYf8WuT`Tdjw%+{pNAIxb8b32ahj|q?RA{ zILMlz#mWu@2TC)H2%lkwN6ZDqtUYA#cMbrFD;EQKuO7W?8O`x7bcO8d+dK$(^UL@R zN$fS&a57(YXWK}JiehugO)Fc2=R+I{R^}`fJ8a<`m_zNHE4z>1OP5WXFq6j1_4oQ) ztPz(h3As3)A=OKiGf&)^0(sq`hjfyz-dfo6qV13L3kMrBV?n+Kr}O9pey{XfP)k${ z8%K9_62nz-dh@F`_mLy4D1-XK`5Cg~t=2rK8JO19O}!)ocFBFz9%W`0!Usx;0_ka7;)S&}cU94~~k6$QAWe0vlEZf55-hBe*M%grQCg9e)pPQ8Ro zULbeB1N%`}tB3R$|8(hiaa%G%^B!`=>C2T0+$W>2nxzOo*+)xhkK&?!aSA=fOLeMm zaah*2d4RXblUUPHSAXvG{oweW`o)z3J3;UZ4$;YoSGN9^Rpi|`WiyMu=Y7t)W3UOo zJ;VE%BiZTaso>tHM?^^XvjLdx+ZNbYEP4^q!4?|dmdmnfjNGn`PXB?vzZOpT^^tG` zZ@XbU<2?fyo}|{heEd&UH3ZJGJGNAoS7}_B+n=JxJC7dkm5udNJD${=qcVB22}AY? zaYpnBZW7gYE0%*Ft$?;ev9Qv(n4Q3L!H)3+Ui}IK0AjS7zu%1ua{06~q^{TAnZYsD zD_IiZ_GQHASw`P}whP`wMVfFd4vERUm*%m%+VV5d;lP*2GUs`pqa+4n!jw*G@DveS z$y9l8D&(|?kL1bq9~^~oVffkOjxsv$;x|V@T;UGTKN0c&W7}c%!8@>hdIz=~dwOwt zNPVPjFeKoOrr#q)N-i2a&AeBMDM!`I*Sk!g73uTVpS%Bnm{Dx6gu zJpE|p;I#6@bUl)+wA3t3%rR?I(++LCJDA15B)|8cDf~|Ff1Uh*-|7D{`JerN;_!cW z0|5B}^>^jJgX2FZ{E3}^Pl&$*(SHk}e~$Q*@BSWPhxtFW_h-+aTl%|amheC9OhXy_ SH$4Kd@2>crwjiS4uYUm*8@bH@ literal 4028 zcmbW4XHb*d*2jZ%5CjZWdgzCMNKcRwdIyo-do{FBgdjDPAcz!2iUlMZk={W-S}=&H z^dbmSq#C3JP7q#vXU<$b=iU$ZK6}=z+4Ib-|0?^#`k5J$Qvk^U02+YfV|lx*CH)s@ z006LlW-Mo>V}6qB0J1}%luvvi1hp{V|OwD0C?v0LjvKjfIxTuUvtkgrB6_2>Lc8un+l}{4R?&xy!`N``0vz4p%i4Ou0;BkSPwY2MlkDf+b^`)m@9NXk=m(m4-_1 za!Pre8VdcOZ>Wqaga+ulS6sK@bb@99-z`tCuFE{+$2sffHno936&VTd*?+H$B(1*k z?5rZ2v&vY{yoo2m$1}tN;TrN=X;*)aCHeoy@H|5N2O2Z0%QZyRO~gKFS8nl0kOeR0ItSrlDH{ zE9$3PR6i`Dv=xaf4wb#T=VMNU)ax=W@AVf9D|CrR7oIv#4t3AB&fA~sDY!fh zOY!6Pjn{eICW;#2mU=Nkx#unnb+jaV7qdVW|n7;|aswP%-oAo|sVBZQkvuZ>;O@syK_yVhQ z!YU*bSp$1}OxHX@+D1&4TFqcq54NGg=TE8yEm{KTqz8f|J=;wN;jgg3^M-_k*Gq}A zW3ZPMSl-y^GEd(Z0f#*0Emlt#afVQv0(#%P$rlE;YnCDhP|F&P7V#@%1wq{!3;9J9 zGoRAp=<~jpG!9?~M04;EcIuI8b@6o=Z&1g6)xEXiH@E4$5qWG3ZVx0j$|{rM&m;Ar zx-xOQsE!^JN6QdUqPi`dAJT*YHbJLyv3bh0G2Qz|uq6Z5$(Om?IyROC(Z`LlCbaoC z!m4f>co{8ZVO=N41ga06!qS_&MFnN9<;zId6*ve3TNaY&0+qeqmet z?dVjqt|U6Pm_EMGTv~Q7+a<7KMvOo7X72r|*D4FKq_6Q+$-OAmi)rFbJFE!BYUShQ zu2b-I-bW4fMko?0QBz1WtaE+es37nIYC?!6mKBwSvhM1b9};C;FUu3}7$4dg6=t?! zZjZ>DYMLZN)aJC0In@lI)Puey?e!FRK;uEWbHTDtMH(#Pp2f#P3I0tGlmf!URI7-1naj%)&^fYJ`7Q>_S7Ie87->6mt4NY>|FNU=wpcDuQXJrcjo1 z(DpUALAETG@v7t6melJM5PZxzqtQlvs7YyUr94gjd~H}G?8H!_fz=_eJSe0QeaV!4 z>uw!NFIy|WVBMK5v?!Lit7yIPc7~O^c^E4yP^F}HliqnWQOjwxM3}!`LdcE#B2~2g zdl&TsfBIHIE@lU)ce#ZtR`H{qWTxcB(U&~tzK@m5IHOFguz}p%>eWr^l&%iY;fN~P zBwwn1bu}Z`HH|9*Tav5JX%^$AoqLd#a>jyAkjjV#GPTLt`|UD9#_o{qn$@!{811G^ zLk0hyDVsrhxzBcqVg%&K{mPMYlEMcjYh^!U8Isvep13D~WsG3{>te=^F?TtA3DFdt zt|Uh+ptJauF7b=%HX)-PHLmXy6Sk;)i^W{pe<>?l{o_}s<`j`3mW^ro@e9x;NG!To zcdHzWANS~mZUx^s;T9fS}X0F~|^yuW< z9k^AEZF1^Pqyo)YABni*vSZKSX1EKEo*h?I9Iu=h`g1RI9p81!S}NTQq%Wr{ivD_) zwHxq$(IC*dIzp~s(0Rl+l%ss}ZPZqTi>%1Xv+O4R$ZX-79-O|gh{#fPsDh7iue3=^ zr8#b8T5(Mm^H{ZLZO_c;O7YhLH*Eh^d^(-W%UvEEsojb-`;A(odCCVI<8+_GmKjB} z6Hq&sW2{~oCjz(Q^wiOja-CEV#*DM6*RtYLd!q(#xRY3(GMZkTySpZ9G$s}?n;R!e z^=C$&gxrr&-Xdxjqu0k-!!uAE_dSa^=XB?_G)25#9m6pfKmFD$(M=Z+s^DY_rfaR(Wf^W~lkVi*#r0Q{k zg{rZLwZOJ{`VcmHU)XfjR8?5Nj^;o;H67!_t3p_0~$8Aiz;WW?!`yb`Q`#Xr-#I4RSL}5e_lU zCV#rAjQEb4ywxI5iK08T68;f-N}QL+Ywq!h_>fHP!lb^mo9YF0_w$Qc=Q+&-qdWOa zFiB;URPx$Mt3(4!Q`R{*vy%d8p3%hqE?R5IGqj2_FPUx3@m@YDVlci7J13w(s#^|` zi`-X1lZbwtE9L$4&)$QJt~Lb?jZC&Tb}Z0tUTq?%Vrqu(x!SEJzX6?+@L$rG`|&w~ z9g$dymM0zIw;mR0vUJLPPp1bNW5ieIKu>tU4@g1wLN{dM?oR6UZ5Ge^D6%&VBU z9MgA1RP92pCpS403r_qO3>F^-bSMr`qv@l4kQ(38OA@^oqlb*|)`eH*gQPVRv+>OI z$#d+_K7S93kNO}e=P~3*@(`g!$HVV=#-zGAFM9cL%M3PP=N!r_khqV8SgqPf+-(rw zvl8N$39^(6Yr5eCWtpk(=5d$SSNO;KK{LV#6}6fSon%IZ;AnovllXSpSqVcF?H}+z zHKyCb2XCgQW%GynAJj_{fPC#e$|2?$8ge&7HXYLTA?Ifl?coo`EzWrqEKR%C7)-_S zPyi<#AO>QP8lb&URs*zJNn}V(g&!GZY0zA5|C0yuCy=rmKps;V95uz4cEES|V#P_9KUo-{pX>>bM_ijWwldDh%u2bbh z1lvWY2Jqn{c?Y?;uSeU6caYhUcP4|Gw2)!{OQkk4G{Y(?&+XvrzV5WJzW6Ua9{!RR zenJXziRY#7#M6-^kPNOr$p5vK{$wCBqCksl+EzS{<*_&(d-25FqyiHY5beF0(6o2RjH9?!R9h>%RBFk~lGJtc+qr$TdEf4y zvTM|%sad{)3mGzFL~1ibvU6(W|B2g#&a(db@y9)l|LOlpadZIwpFaR(01g0vLCeKA zV214P{_h&U6V|U9t!I(`9dG?FD!k2P|Fr%m4rY diff --git a/src/main/resources/assets/alchemicalwizardry/meteors/reagents.zip b/src/main/resources/assets/alchemicalwizardry/meteors/reagents.zip index f3571170f67d6789f28aa98eef0e66f35df90db6..4d305b358f5c4fb206b60141f9abe885dd5df925 100644 GIT binary patch literal 3097 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 KBVqjp0R990C^*^x literal 3150 zcmbW4c{J2}AIHa%Wn%36z6`QuH%5|5jj`{$j4>Evo3XDUvKDE^6UiDPrfbbwswv{y zi_9chN)q8pB)Q}E+(&wz`<#33@0|Df{=UE8Ij{HU^F8lBK3@xCI(lw80DuWVU!>{O z_>Zkc8~BQNBATxz@qN0OwuPj_#_Im zuS04d)Jah!k{IvZP)Eux<-VzhbyzCh3jNSpsH1+l1$SkTWtSv1>jHM`ZBl-0%tQEX z=28v@RR#%b9>c8Gj1o8-cN1s4D}}&zu9>|Vf;h(U$htMS-66eEgJ)zp34gF;81(DB zVY%-_o?O0X#$Yqv&zPODTA4?QN^@#@S&icBEiFxJp9mQu{2jCFV#9N8eN zd&b*Pitz=Y^JHOV1AAp0WN|vpNgD!(3tv8;=m5Udj2T{R;b0x9buMd`$Fn#^Cap%A z)|Js4IAZ3Czq&kw3s^pare2UPle~x0FxXLeo$8r#Y0(7iTgB?HVP?n821>Y%rESf3 zM`_gfu19fkR5sh@nwFVv$0ub>Gxm9I8R6Y5Ipp7u%waK|=B!JT_Lf-F=~ay4eyKbox4i>&B7p0Re-Give$7j|%2!y22 zYkW@gmE+<;4aMLKO}Oq99`pWUfWQ~Q@D=$%NxK#*;LFp8A(?G@aJl2;swjT9HV~Yn ziKVy-C(~wxs^EedlLXatvx34^ksRJ*f>2I_U(+hLG$Mx|dHM*uY-r<&wpBhWA*MS3 zjwt=|iUc0d2>h?WBFmSA2<+MyLeTB3__dgs&9PHCS*h}T*D9bFi1@Ob=dbtSq&gK5 zk{_O-%d& z^0gi^zW`~sgsxkVn31;E2hKX7+LXMsl{fQTi4sOzea5TVE`WP+A!jdl08}RJb@{U&Aev-)7y11+g+VYiebwI?g$FVjbf2k zsDg^{-k1Lf$#y;@;UNSD2-@Vw{30i0hNVMW7;3pO7+>tOIWpgNw@Hsck`BFLHw3A018if7!>AGxIkyw#3q6-wv@~FhWt>r$Cu#PZ^fh06`!I6XXDXBd(Uk3K$WHK*o|$ior$5u72mLH7lG8@Say(_gd0o(4Xvi%hL5IkTo`{>eN%ayOwRS?cV} zYZL7jWzH40$0vo|ABB~O-%CQ~yjCd!7AS;Z-gA$&YjbI}H)}fCqA8a%m6f*HgbVSjKf;*jUMol@pL=DA;ioZ-O0PTAQ zp~d#%&M!sTcE@LnVpD0hE9VJw)-GO^r7<;nnVNL6W06Tn9<<*Ro(awQL+_j*SKnsP ztts-qc?FiPE%b&eT3$I3K0CHFvmBTZJ@1D7tZ(=2gL=Em!U;Z->^Y|n!Lo5s7qgqe zEkh+!i-w7-Sd{^x)m#)=-siZ-ROR|S%+#p)(X}ZoJt#(~prWwAd5k$_$_XYt`0iaq zANlzke)aOZ3oQX2`m48vHa8ayY3$*TXvNj^GLJ_y&W9hF@BX44%-Tf?&U60t0 zXXhMEU1tDBtozssTt1d)UVn3{TJpiJn*J1x1$8O_Ql|m{paP`fgaQ^rTk3h+dS`v1WU?NtTFtFW9H?yQu%Ap+Hzlb5vet$uv% zq!X6?V?dW_(ASRh0vOlc({i8>#pRvePvj&t-Tf5OlUfo|UbQdlD%uQ?fwNiTxFH+5 z!8;0BZ?)JC_T<`RNz$O&?unhMK%56U*an5eAyE5G;Skh1OG{#l7i-V-ZTA*cY9#{vBRJhMQLV6-P15%AN&?Q_+-m*Ia_e)tdW z|1DbeuZvdwUNjA@KHXo9fYMZhy+=I$X2Rb3eINt^#P>D;8UQ~a-XD(f@uScHVjgZX zVkk6!?k$Y>xcg-v4AGBVUZ($w)Q<*#f`4AW8~jzEel);P4GzZZ@ALN?IGC6p`R}Rx ypY!ui91bStM+Xz;pYroh@CSqQBmU+e`2WP{@4*l4T@a|Z1O|XMEj0?jz1{D;!}G}i