diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d7bb07118..b67fc68b86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,44 @@ # ChangeLog -Version: 1.2.0.a +Version: 1.2.1 ### ADDITIONS: +- Ported decorative blocks from 1.12 +- Added filtering to Output Hatches +- Added several utility functions to KJS +- Added more ore generator types (Classic & Cuboid) +- Added partial NBT support for recipe inputs +- Added Wood Cutter recipes ### CHANGES: +- Reworked Bedrock Ores + - Note that it is now entirely up to pack developers to register Bedrock Ore Veins! +- Added certain fluid blocks to the minecraft:replaceable tag +- Updated Russian translation ### FIXES: -- Fixed some components not requiring data -- Fixed assembly line recipes with no data not working -- Fixed data module recipe being missing -- Fixed tiered multiblock builders not working \ No newline at end of file +- Fixed some Multiblock builders not working in KJS +- Fixed Turbine Rotors not being damaged +- Fixed Shutter Covers not being registered +- Fixed missing Multiblock Tank recipes +- Fixed GCyM Multiblocks using Perfect Overclocking +- Fixed crash related to the Network Switch Multiblock +- Fixed Data Bank chaining +- Fixed HPCA energy consumption for energy that wasn't input recently +- Fixed Kinetic Output Boxes never stopping +- Fixed World Accelerators using too much energy and always accelerating Block Entities +- Fixed connectivity for Long Distance Pipes +- Fixed Item Collector (now works after reload, no longer requires KJS, fixed tooltip) +- Fixed Research items not rendering in JEI when playing on a server +- Fixed recipes randomly not working after server restarts +- Fixed recipes for ABS & Large Electrolyzer using the wrong wires +- Fixed sounds for Arc Furnace & Boilers not being registered properly +- Fixed Parallel Control Hatch behavior when the recipe voltage matches the machine voltage +- Fixed Wrench interactions in certain situations +- Fixed recipe for Treated Wood +- Fixed KJS Research recipes not registering +- Fixed machines and pipes causing excessive updates to neighboring blocks +- Fixed language entry for Iron III Chloride +- Fixed recycling recipe for Titanium Fluid Cells +- Fixed recipe for Engine Intake Casing +- Fixed any custom recipe capabilities being removed when KJS is installed \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 8643ac3386..5c497b3926 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs = -Xmx6G # Mod Info mod_id = gtceu mod_name = GregTech -mod_version = 1.2.0.a +mod_version = 1.2.1 mod_description = GregTech CE Unofficial, ported from 1.12.2 mod_license = LGPL-3.0 license mod_url = https://github.com/GregTechCEu/GregTech-Modern/ diff --git a/settings.gradle b/settings.gradle index 9946288683..45a69e18a3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -42,7 +42,7 @@ dependencyResolutionManagement { def architecturyPluginVersion = "3.4-SNAPSHOT" def architecturyLoomVersion = "1.5-SNAPSHOT" def macheteVersion = "1.+" - def ldLibVersion = "1.0.25.d" + def ldLibVersion = "1.0.25.f" def mixinextrasVersion = "0.2.0" forge { diff --git a/src/generated/resources/assets/gtceu/blockstates/black_lamp.json b/src/generated/resources/assets/gtceu/blockstates/black_lamp.json new file mode 100644 index 0000000000..df2e9c0c6d --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/black_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/black_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/blue_lamp.json b/src/generated/resources/assets/gtceu/blockstates/blue_lamp.json new file mode 100644 index 0000000000..ced684b1b1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/blue_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/blue_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/brown_lamp.json b/src/generated/resources/assets/gtceu/blockstates/brown_lamp.json new file mode 100644 index 0000000000..ddd4748b9e --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/brown_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/brown_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/chiseled_dark_concrete.json b/src/generated/resources/assets/gtceu/blockstates/chiseled_dark_concrete.json new file mode 100644 index 0000000000..70ea485c64 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/chiseled_dark_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/chiseled_dark_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/chiseled_light_concrete.json b/src/generated/resources/assets/gtceu/blockstates/chiseled_light_concrete.json new file mode 100644 index 0000000000..f797f1044c --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/chiseled_light_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/chiseled_light_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/chiseled_marble.json b/src/generated/resources/assets/gtceu/blockstates/chiseled_marble.json new file mode 100644 index 0000000000..9a8608cc45 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/chiseled_marble.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/chiseled_marble" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/chiseled_red_granite.json b/src/generated/resources/assets/gtceu/blockstates/chiseled_red_granite.json new file mode 100644 index 0000000000..8448849d5e --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/chiseled_red_granite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/chiseled_red_granite" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/cracked_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/cracked_dark_concrete_bricks.json new file mode 100644 index 0000000000..f0296cb99c --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/cracked_dark_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/cracked_dark_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/cracked_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/cracked_light_concrete_bricks.json new file mode 100644 index 0000000000..ce471496a6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/cracked_light_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/cracked_light_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/cracked_marble_bricks.json b/src/generated/resources/assets/gtceu/blockstates/cracked_marble_bricks.json new file mode 100644 index 0000000000..771b94c7d2 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/cracked_marble_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/cracked_marble_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/cracked_red_granite_bricks.json b/src/generated/resources/assets/gtceu/blockstates/cracked_red_granite_bricks.json new file mode 100644 index 0000000000..1ece11ab91 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/cracked_red_granite_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/cracked_red_granite_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/cyan_lamp.json b/src/generated/resources/assets/gtceu/blockstates/cyan_lamp.json new file mode 100644 index 0000000000..3f69dcdda6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/cyan_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/cyan_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/dark_concrete.json b/src/generated/resources/assets/gtceu/blockstates/dark_concrete.json new file mode 100644 index 0000000000..5c3255be4d --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/dark_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/dark_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_bricks.json new file mode 100644 index 0000000000..7818cb94a0 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/dark_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/dark_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_cobblestone.json new file mode 100644 index 0000000000..c49fd53902 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/dark_concrete_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/dark_concrete_small_tile.json b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_small_tile.json new file mode 100644 index 0000000000..a9c4f422ce --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_small_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/dark_concrete_small_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/dark_concrete_tile.json b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_tile.json new file mode 100644 index 0000000000..45f845b565 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/dark_concrete_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/dark_concrete_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/foam.json b/src/generated/resources/assets/gtceu/blockstates/foam.json new file mode 100644 index 0000000000..26e4757bc4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/foam.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/foam" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/gray_lamp.json b/src/generated/resources/assets/gtceu/blockstates/gray_lamp.json new file mode 100644 index 0000000000..dd73057a37 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/gray_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/gray_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/green_lamp.json b/src/generated/resources/assets/gtceu/blockstates/green_lamp.json new file mode 100644 index 0000000000..dda69261ce --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/green_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/green_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/light_blue_lamp.json b/src/generated/resources/assets/gtceu/blockstates/light_blue_lamp.json new file mode 100644 index 0000000000..49ed7133e8 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/light_blue_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/light_blue_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/light_concrete.json b/src/generated/resources/assets/gtceu/blockstates/light_concrete.json new file mode 100644 index 0000000000..5c0d84ad3d --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/light_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/light_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/light_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/light_concrete_bricks.json new file mode 100644 index 0000000000..255c075b2f --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/light_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/light_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/light_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/light_concrete_cobblestone.json new file mode 100644 index 0000000000..a868057510 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/light_concrete_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/light_concrete_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/light_concrete_small_tile.json b/src/generated/resources/assets/gtceu/blockstates/light_concrete_small_tile.json new file mode 100644 index 0000000000..e101522cb6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/light_concrete_small_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/light_concrete_small_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/light_concrete_tile.json b/src/generated/resources/assets/gtceu/blockstates/light_concrete_tile.json new file mode 100644 index 0000000000..c28b42556c --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/light_concrete_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/light_concrete_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/light_gray_lamp.json b/src/generated/resources/assets/gtceu/blockstates/light_gray_lamp.json new file mode 100644 index 0000000000..08fd0e2551 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/light_gray_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/light_gray_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/lime_lamp.json b/src/generated/resources/assets/gtceu/blockstates/lime_lamp.json new file mode 100644 index 0000000000..272dec9eaf --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/lime_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/lime_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/magenta_lamp.json b/src/generated/resources/assets/gtceu/blockstates/magenta_lamp.json new file mode 100644 index 0000000000..276b402f74 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/magenta_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/magenta_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/marble.json b/src/generated/resources/assets/gtceu/blockstates/marble.json new file mode 100644 index 0000000000..e6a1f150b3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/marble.json @@ -0,0 +1,20 @@ +{ + "variants": { + "": [ + { + "model": "gtceu:block/marble" + }, + { + "model": "gtceu:block/marble", + "y": 180 + }, + { + "model": "gtceu:block/marble_mirrored" + }, + { + "model": "gtceu:block/marble_mirrored", + "y": 180 + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/marble_bricks.json b/src/generated/resources/assets/gtceu/blockstates/marble_bricks.json new file mode 100644 index 0000000000..9baf4f7510 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/marble_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/marble_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/marble_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/marble_cobblestone.json new file mode 100644 index 0000000000..c417d553a3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/marble_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/marble_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/marble_small_tile.json b/src/generated/resources/assets/gtceu/blockstates/marble_small_tile.json new file mode 100644 index 0000000000..0405f39539 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/marble_small_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/marble_small_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/marble_tile.json b/src/generated/resources/assets/gtceu/blockstates/marble_tile.json new file mode 100644 index 0000000000..20db5943bd --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/marble_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/marble_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/mossy_dark_concrete_bricks.json new file mode 100644 index 0000000000..c03be8eb3d --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_dark_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_dark_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_dark_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/mossy_dark_concrete_cobblestone.json new file mode 100644 index 0000000000..a5d4f13b5c --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_dark_concrete_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_dark_concrete_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/mossy_light_concrete_bricks.json new file mode 100644 index 0000000000..33cc1361af --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_light_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_light_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_light_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/mossy_light_concrete_cobblestone.json new file mode 100644 index 0000000000..3066b8c6b8 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_light_concrete_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_light_concrete_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_marble_bricks.json b/src/generated/resources/assets/gtceu/blockstates/mossy_marble_bricks.json new file mode 100644 index 0000000000..aaff01b868 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_marble_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_marble_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_marble_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/mossy_marble_cobblestone.json new file mode 100644 index 0000000000..c321806905 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_marble_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_marble_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_red_granite_bricks.json b/src/generated/resources/assets/gtceu/blockstates/mossy_red_granite_bricks.json new file mode 100644 index 0000000000..d3f1085662 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_red_granite_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_red_granite_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/mossy_red_granite_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/mossy_red_granite_cobblestone.json new file mode 100644 index 0000000000..19bc02765b --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/mossy_red_granite_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/mossy_red_granite_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/orange_lamp.json b/src/generated/resources/assets/gtceu/blockstates/orange_lamp.json new file mode 100644 index 0000000000..28356891be --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/orange_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/orange_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/petrified_foam.json b/src/generated/resources/assets/gtceu/blockstates/petrified_foam.json new file mode 100644 index 0000000000..e5be4f6216 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/petrified_foam.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/petrified_foam" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/pink_lamp.json b/src/generated/resources/assets/gtceu/blockstates/pink_lamp.json new file mode 100644 index 0000000000..2df21e50eb --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/pink_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/pink_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/polished_dark_concrete.json b/src/generated/resources/assets/gtceu/blockstates/polished_dark_concrete.json new file mode 100644 index 0000000000..0881f76932 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/polished_dark_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/polished_dark_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/polished_light_concrete.json b/src/generated/resources/assets/gtceu/blockstates/polished_light_concrete.json new file mode 100644 index 0000000000..05d807162b --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/polished_light_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/polished_light_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/polished_marble.json b/src/generated/resources/assets/gtceu/blockstates/polished_marble.json new file mode 100644 index 0000000000..dfc8c8fda7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/polished_marble.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/polished_marble" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/polished_red_granite.json b/src/generated/resources/assets/gtceu/blockstates/polished_red_granite.json new file mode 100644 index 0000000000..947cecf78f --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/polished_red_granite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/polished_red_granite" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/purple_lamp.json b/src/generated/resources/assets/gtceu/blockstates/purple_lamp.json new file mode 100644 index 0000000000..4b1eab8f93 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/purple_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/purple_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/red_granite.json b/src/generated/resources/assets/gtceu/blockstates/red_granite.json new file mode 100644 index 0000000000..f6211539fc --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/red_granite.json @@ -0,0 +1,20 @@ +{ + "variants": { + "": [ + { + "model": "gtceu:block/red_granite" + }, + { + "model": "gtceu:block/red_granite", + "y": 180 + }, + { + "model": "gtceu:block/red_granite_mirrored" + }, + { + "model": "gtceu:block/red_granite_mirrored", + "y": 180 + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/red_granite_bricks.json b/src/generated/resources/assets/gtceu/blockstates/red_granite_bricks.json new file mode 100644 index 0000000000..fa3c1c21ca --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/red_granite_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/red_granite_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/red_granite_cobblestone.json b/src/generated/resources/assets/gtceu/blockstates/red_granite_cobblestone.json new file mode 100644 index 0000000000..1659c98a39 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/red_granite_cobblestone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/red_granite_cobblestone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/red_granite_small_tile.json b/src/generated/resources/assets/gtceu/blockstates/red_granite_small_tile.json new file mode 100644 index 0000000000..b2bbf2b985 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/red_granite_small_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/red_granite_small_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/red_granite_tile.json b/src/generated/resources/assets/gtceu/blockstates/red_granite_tile.json new file mode 100644 index 0000000000..6aa4e97658 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/red_granite_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/red_granite_tile" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/red_lamp.json b/src/generated/resources/assets/gtceu/blockstates/red_lamp.json new file mode 100644 index 0000000000..26707fd3b7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/red_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/red_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/reinforced_stone.json b/src/generated/resources/assets/gtceu/blockstates/reinforced_stone.json new file mode 100644 index 0000000000..5d59230083 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/reinforced_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/reinforced_stone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_button.json b/src/generated/resources/assets/gtceu/blockstates/rubber_button.json new file mode 100644 index 0000000000..0eaddf75e9 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "gtceu:block/rubber_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "gtceu:block/rubber_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "gtceu:block/rubber_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "gtceu:block/rubber_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "gtceu:block/rubber_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "gtceu:block/rubber_button" + }, + "face=floor,facing=north,powered=true": { + "model": "gtceu:block/rubber_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "gtceu:block/rubber_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "gtceu:block/rubber_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "gtceu:block/rubber_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "gtceu:block/rubber_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "gtceu:block/rubber_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "gtceu:block/rubber_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "gtceu:block/rubber_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_door.json b/src/generated/resources/assets/gtceu/blockstates/rubber_door.json new file mode 100644 index 0000000000..f572aff046 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "gtceu:block/rubber_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "gtceu:block/rubber_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "gtceu:block/rubber_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "gtceu:block/rubber_door_top_right_open", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_fence.json b/src/generated/resources/assets/gtceu/blockstates/rubber_fence.json new file mode 100644 index 0000000000..ba30a05b2e --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "gtceu:block/rubber_fence_post" + } + }, + { + "apply": { + "model": "gtceu:block/rubber_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "gtceu:block/rubber_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "gtceu:block/rubber_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "gtceu:block/rubber_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_fence_gate.json b/src/generated/resources/assets/gtceu/blockstates/rubber_fence_gate.json new file mode 100644 index 0000000000..4251b05c7d --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "gtceu:block/rubber_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "gtceu:block/rubber_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "gtceu:block/rubber_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "gtceu:block/rubber_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "gtceu:block/rubber_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "gtceu:block/rubber_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "gtceu:block/rubber_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "gtceu:block/rubber_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "gtceu:block/rubber_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "gtceu:block/rubber_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "gtceu:block/rubber_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "gtceu:block/rubber_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "gtceu:block/rubber_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "gtceu:block/rubber_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "gtceu:block/rubber_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "gtceu:block/rubber_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_pressure_plate.json b/src/generated/resources/assets/gtceu/blockstates/rubber_pressure_plate.json new file mode 100644 index 0000000000..79ecc220df --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "gtceu:block/rubber_pressure_plate" + }, + "powered=true": { + "model": "gtceu:block/rubber_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_sign.json b/src/generated/resources/assets/gtceu/blockstates/rubber_sign.json new file mode 100644 index 0000000000..732881c3cc --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/rubber_sign" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_slab.json b/src/generated/resources/assets/gtceu/blockstates/rubber_slab.json new file mode 100644 index 0000000000..a2b7a0bd36 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "gtceu:block/rubber_slab" + }, + "type=double": { + "model": "gtceu:block/rubber_planks" + }, + "type=top": { + "model": "gtceu:block/rubber_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_stairs.json b/src/generated/resources/assets/gtceu/blockstates/rubber_stairs.json new file mode 100644 index 0000000000..22eac6d88e --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "gtceu:block/rubber_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "gtceu:block/rubber_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "gtceu:block/rubber_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "gtceu:block/rubber_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "gtceu:block/rubber_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "gtceu:block/rubber_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "gtceu:block/rubber_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "gtceu:block/rubber_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "gtceu:block/rubber_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "gtceu:block/rubber_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_trapdoor.json b/src/generated/resources/assets/gtceu/blockstates/rubber_trapdoor.json new file mode 100644 index 0000000000..31c4d5bb8b --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_trapdoor.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/rubber_trapdoor" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_wall_sign.json b/src/generated/resources/assets/gtceu/blockstates/rubber_wall_sign.json new file mode 100644 index 0000000000..37161f7870 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/rubber_wall_sign" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/rubber_wood.json b/src/generated/resources/assets/gtceu/blockstates/rubber_wood.json new file mode 100644 index 0000000000..8e8884e0c8 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/rubber_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "gtceu:block/rubber_wood_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "gtceu:block/rubber_wood" + }, + "axis=z": { + "model": "gtceu:block/rubber_wood_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/small_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/small_dark_concrete_bricks.json new file mode 100644 index 0000000000..a55eef307d --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/small_dark_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/small_dark_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/small_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/small_light_concrete_bricks.json new file mode 100644 index 0000000000..54e7ba70cf --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/small_light_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/small_light_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/small_marble_bricks.json b/src/generated/resources/assets/gtceu/blockstates/small_marble_bricks.json new file mode 100644 index 0000000000..0ab7bfbe7f --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/small_marble_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/small_marble_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/small_red_granite_bricks.json b/src/generated/resources/assets/gtceu/blockstates/small_red_granite_bricks.json new file mode 100644 index 0000000000..268bd9d47b --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/small_red_granite_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/small_red_granite_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/smooth_dark_concrete.json b/src/generated/resources/assets/gtceu/blockstates/smooth_dark_concrete.json new file mode 100644 index 0000000000..ab595aac47 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/smooth_dark_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/smooth_dark_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/smooth_light_concrete.json b/src/generated/resources/assets/gtceu/blockstates/smooth_light_concrete.json new file mode 100644 index 0000000000..d22f262caf --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/smooth_light_concrete.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/smooth_light_concrete" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/smooth_marble.json b/src/generated/resources/assets/gtceu/blockstates/smooth_marble.json new file mode 100644 index 0000000000..9b0c24e9af --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/smooth_marble.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/smooth_marble" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/smooth_red_granite.json b/src/generated/resources/assets/gtceu/blockstates/smooth_red_granite.json new file mode 100644 index 0000000000..fcf26f5434 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/smooth_red_granite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/smooth_red_granite" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/square_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/square_dark_concrete_bricks.json new file mode 100644 index 0000000000..376daf4aae --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/square_dark_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/square_dark_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/square_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/blockstates/square_light_concrete_bricks.json new file mode 100644 index 0000000000..527c78d7be --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/square_light_concrete_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/square_light_concrete_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/square_marble_bricks.json b/src/generated/resources/assets/gtceu/blockstates/square_marble_bricks.json new file mode 100644 index 0000000000..b56d96048d --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/square_marble_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/square_marble_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/square_red_granite_bricks.json b/src/generated/resources/assets/gtceu/blockstates/square_red_granite_bricks.json new file mode 100644 index 0000000000..73f003d85a --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/square_red_granite_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/square_red_granite_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/stripped_rubber_log.json b/src/generated/resources/assets/gtceu/blockstates/stripped_rubber_log.json new file mode 100644 index 0000000000..61885b78f1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/stripped_rubber_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "gtceu:block/stripped_rubber_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "gtceu:block/stripped_rubber_log" + }, + "axis=z": { + "model": "gtceu:block/stripped_rubber_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/stripped_rubber_wood.json b/src/generated/resources/assets/gtceu/blockstates/stripped_rubber_wood.json new file mode 100644 index 0000000000..1f65d74c02 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/stripped_rubber_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "gtceu:block/stripped_rubber_wood_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "gtceu:block/stripped_rubber_wood" + }, + "axis=z": { + "model": "gtceu:block/stripped_rubber_wood_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_button.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_button.json new file mode 100644 index 0000000000..01a5a02a2c --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "gtceu:block/treated_wood_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "gtceu:block/treated_wood_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "gtceu:block/treated_wood_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "gtceu:block/treated_wood_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "gtceu:block/treated_wood_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "gtceu:block/treated_wood_button" + }, + "face=floor,facing=north,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "gtceu:block/treated_wood_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "gtceu:block/treated_wood_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "gtceu:block/treated_wood_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "gtceu:block/treated_wood_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "gtceu:block/treated_wood_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "gtceu:block/treated_wood_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "gtceu:block/treated_wood_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_door.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_door.json new file mode 100644 index 0000000000..d20925cade --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "gtceu:block/treated_wood_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "gtceu:block/treated_wood_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "gtceu:block/treated_wood_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "gtceu:block/treated_wood_door_top_right_open", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_fence.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_fence.json new file mode 100644 index 0000000000..7b3910398a --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "gtceu:block/treated_wood_fence_post" + } + }, + { + "apply": { + "model": "gtceu:block/treated_wood_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "gtceu:block/treated_wood_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "gtceu:block/treated_wood_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "gtceu:block/treated_wood_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_fence_gate.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_fence_gate.json new file mode 100644 index 0000000000..2e716c2261 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "gtceu:block/treated_wood_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "gtceu:block/treated_wood_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "gtceu:block/treated_wood_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "gtceu:block/treated_wood_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "gtceu:block/treated_wood_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "gtceu:block/treated_wood_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "gtceu:block/treated_wood_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "gtceu:block/treated_wood_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "gtceu:block/treated_wood_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_pressure_plate.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_pressure_plate.json new file mode 100644 index 0000000000..dbdc7ac091 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "gtceu:block/treated_wood_pressure_plate" + }, + "powered=true": { + "model": "gtceu:block/treated_wood_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_sign.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_sign.json new file mode 100644 index 0000000000..237da600bd --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/treated_wood_sign" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_slab.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_slab.json new file mode 100644 index 0000000000..c5602a4f19 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "gtceu:block/treated_wood_slab" + }, + "type=double": { + "model": "gtceu:block/treated_wood_planks" + }, + "type=top": { + "model": "gtceu:block/treated_wood_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_stairs.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_stairs.json new file mode 100644 index 0000000000..c350b9f355 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "gtceu:block/treated_wood_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "gtceu:block/treated_wood_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "gtceu:block/treated_wood_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "gtceu:block/treated_wood_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "gtceu:block/treated_wood_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "gtceu:block/treated_wood_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "gtceu:block/treated_wood_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "gtceu:block/treated_wood_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "gtceu:block/treated_wood_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "gtceu:block/treated_wood_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_trapdoor.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_trapdoor.json new file mode 100644 index 0000000000..72fde9de6b --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_trapdoor.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/treated_wood_trapdoor" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/treated_wood_wall_sign.json b/src/generated/resources/assets/gtceu/blockstates/treated_wood_wall_sign.json new file mode 100644 index 0000000000..a31fd4eea6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/treated_wood_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/treated_wood_wall_sign" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/white_lamp.json b/src/generated/resources/assets/gtceu/blockstates/white_lamp.json new file mode 100644 index 0000000000..37486eb9a2 --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/white_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/white_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/blockstates/yellow_lamp.json b/src/generated/resources/assets/gtceu/blockstates/yellow_lamp.json new file mode 100644 index 0000000000..e8793c2fda --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/yellow_lamp.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/yellow_lamp" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/andesite.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/andesite.json index d78be19130..514c85962a 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/andesite.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/andesite.json @@ -117,7 +117,7 @@ ], "page": "gtceu:generation/andesite", "position": [ - -200, + -50, 50 ], "pre_nodes": [ diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/basalt.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/basalt.json index 002b0d86c9..481316acee 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/basalt.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/basalt.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/basalt", "position": [ - -50, - 50 + -250, + 150 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/deepslate.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/deepslate.json index 833b576ec1..6d65ceb249 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/deepslate.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/deepslate.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/deepslate", "position": [ - -150, - 150 + -250, + 100 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/diorite.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/diorite.json index ed27573686..3bee07fcab 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/diorite.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/diorite.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/diorite", "position": [ - -200, - 150 + -100, + 50 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/endstone.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/endstone.json index 24ecd61b58..ba85f49288 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/endstone.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/endstone.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/endstone", "position": [ - -200, - 100 + -150, + 150 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/granite.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/granite.json index 74152de990..9c6fba0d3e 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/granite.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/granite.json @@ -118,7 +118,7 @@ "page": "gtceu:generation/granite", "position": [ -150, - 100 + 50 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/gravel.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/gravel.json index da8d1fe961..851cb01c4d 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/gravel.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/gravel.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/gravel", "position": [ - -100, - 150 + -50, + 100 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/netherrack.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/netherrack.json index 81388da360..27b5c18351 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/netherrack.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/netherrack.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/netherrack", "position": [ - -100, - 100 + -200, + 150 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/red_sand.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/red_sand.json index d4b938e780..2473a14428 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/red_sand.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/red_sand.json @@ -118,7 +118,7 @@ "page": "gtceu:generation/red_sand", "position": [ -100, - 50 + 100 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_leaves.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_leaves.json index 0cb10b9201..7264672ce3 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_leaves.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_leaves.json @@ -8,7 +8,7 @@ ], "page": "gtceu:generation/rubber_leaves", "position": [ - -100, + -150, 0 ], "section": "gtceu:generation" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_log.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_log.json index 511e19286d..78c0e46faa 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_log.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_log.json @@ -8,7 +8,7 @@ ], "page": "gtceu:generation/rubber_log", "position": [ - -150, + -200, 0 ], "section": "gtceu:generation" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_planks.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_planks.json index d9e63b5838..2c9de3688a 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_planks.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_planks.json @@ -8,7 +8,7 @@ ], "page": "gtceu:generation/rubber_planks", "position": [ - -50, + -100, 0 ], "section": "gtceu:generation" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_sapling.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_sapling.json index 1917d83361..d112b52a08 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_sapling.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_sapling.json @@ -8,7 +8,7 @@ ], "page": "gtceu:generation/rubber_sapling", "position": [ - -200, + -250, 0 ], "section": "gtceu:generation" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_slab.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_slab.json new file mode 100644 index 0000000000..bb93912845 --- /dev/null +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/rubber_slab.json @@ -0,0 +1,15 @@ +{ + "button_texture": { + "type": "item", + "res": "gtceu:rubber_slab" + }, + "items": [ + "gtceu:rubber_slab" + ], + "page": "gtceu:generation/rubber_slab", + "position": [ + -50, + 0 + ], + "section": "gtceu:generation" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/sand.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/sand.json index f15d2c299f..83e5f82d8d 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/sand.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/sand.json @@ -118,7 +118,7 @@ "page": "gtceu:generation/sand", "position": [ -150, - 50 + 100 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/stone.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/stone.json index 5f7d9ecfe3..8728269bd9 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/stone.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/stone.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/stone", "position": [ - -50, - 100 + -200, + 50 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/treated_wood_slab.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/treated_wood_slab.json new file mode 100644 index 0000000000..897ed8da5c --- /dev/null +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/treated_wood_slab.json @@ -0,0 +1,15 @@ +{ + "button_texture": { + "type": "item", + "res": "gtceu:treated_wood_slab" + }, + "items": [ + "gtceu:treated_wood_slab" + ], + "page": "gtceu:generation/treated_wood_slab", + "position": [ + -250, + 50 + ], + "section": "gtceu:generation" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/compass/nodes/generation/tuff.json b/src/generated/resources/assets/gtceu/compass/nodes/generation/tuff.json index da0dc4acaf..cfc5cc064c 100644 --- a/src/generated/resources/assets/gtceu/compass/nodes/generation/tuff.json +++ b/src/generated/resources/assets/gtceu/compass/nodes/generation/tuff.json @@ -117,8 +117,8 @@ ], "page": "gtceu:generation/tuff", "position": [ - -50, - 150 + -200, + 100 ], "pre_nodes": [ "gtceu:generation/ore" diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 5eee83c0a9..f7599eece6 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -76,18 +76,24 @@ "behaviour.soft_hammer.enabled": "pǝןqɐuƎ buıʞɹoM", "behaviour.wrench": "ʞɔıןɔʇɥbıᴚ uo sʞɔoןᗺ sǝʇɐʇoᴚ", "block.filter_casing.tooltip": "ʇuǝɯuoɹıʌuǝ ㄥ§ǝǝɹℲ-ǝןɔıʇɹɐԀɐ§ ɐ sǝʇɐǝɹƆ", + "block.gtceu.acid_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH pıɔⱯ", "block.gtceu.active_transformer": "ɹǝɯɹoɟsuɐɹ⟘ ǝʌıʇɔⱯ", "block.gtceu.advanced_computer_casing": "buısɐƆ ɹǝʇndɯoƆ pǝɔuɐʌpⱯ", "block.gtceu.advanced_data_access_hatch": "ɥɔʇɐH ssǝɔɔⱯ ɐʇɐᗡ pǝɔuɐʌpⱯ", "block.gtceu.alloy_blast_smelter": "ɹǝʇןǝɯS ʇsɐןᗺ ʎoןןⱯ", "block.gtceu.aluminium_crate": "ǝʇɐɹƆ ɯnıuıɯnןⱯ", "block.gtceu.aluminium_drum": "ɯnɹᗡ ɯnıuıɯnןⱯ", + "block.gtceu.antimatter_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɹǝʇʇɐɯıʇuⱯ", "block.gtceu.assembly_line": "ǝuıꞀ ʎןqɯǝssⱯ", "block.gtceu.assembly_line_casing": "buısɐƆ ǝuıꞀ ʎןqɯǝssⱯ", "block.gtceu.assembly_line_grating": "buıʇɐɹ⅁ ǝuıꞀ ʎןqɯǝssⱯ", "block.gtceu.assembly_line_unit": "buısɐƆ ןoɹʇuoƆ ʎןqɯǝssⱯ", "block.gtceu.atomic_casing": "buısɐƆ ɔıɯoʇⱯ", "block.gtceu.auto_maintenance_hatch": "ɥɔʇɐH ǝɔuɐuǝʇuıɐW oʇnⱯ", + "block.gtceu.bio_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH oıᗺ", + "block.gtceu.black_lamp": "dɯɐꞀ ʞɔɐןᗺ", + "block.gtceu.blue_lamp": "dɯɐꞀ ǝnןᗺ", + "block.gtceu.boss_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ssoᗺ", "block.gtceu.bronze_brick_casing": "buısɐƆ ʞɔıɹᗺ ǝzuoɹᗺ", "block.gtceu.bronze_crate": "ǝʇɐɹƆ ǝzuoɹᗺ", "block.gtceu.bronze_drum": "ɯnɹᗡ ǝzuoɹᗺ", @@ -96,10 +102,16 @@ "block.gtceu.bronze_large_boiler": "ɹǝןıoᗺ ǝzuoɹᗺ ǝbɹɐꞀ", "block.gtceu.bronze_machine_casing": "buısɐƆ ǝuıɥɔɐW ǝzuoɹᗺ", "block.gtceu.bronze_pipe_casing": "buısɐƆ ǝdıԀ ǝzuoɹᗺ", + "block.gtceu.brown_lamp": "dɯɐꞀ uʍoɹᗺ", "block.gtceu.casing_bronze_bricks": "buısɐƆ ǝuıɥɔɐW ǝzuoɹᗺ", "block.gtceu.casing_coke_bricks": "sʞɔıɹᗺ uǝʌO ǝʞoƆ", "block.gtceu.casing_grate": "buısɐƆ ǝuıɥɔɐW ǝʇɐɹ⅁", "block.gtceu.casing_primitive_bricks": "sʞɔıɹqǝɹıℲ", + "block.gtceu.causality_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ʎʇıןɐsnɐƆ", + "block.gtceu.chiseled_dark_concrete": "ǝʇǝɹɔuoƆ ʞɹɐᗡ pǝןǝsıɥƆ", + "block.gtceu.chiseled_light_concrete": "ǝʇǝɹɔuoƆ ʇɥbıꞀ pǝןǝsıɥƆ", + "block.gtceu.chiseled_marble": "ǝןqɹɐW pǝןǝsıɥƆ", + "block.gtceu.chiseled_red_granite": "ǝʇıuɐɹ⅁ pǝᴚ pǝןǝsıɥƆ", "block.gtceu.clean_machine_casing": "buısɐƆ ןǝǝʇS ssǝןuıɐʇS uɐǝןƆ", "block.gtceu.cleaning_maintenance_hatch": "ɥɔʇɐH ǝɔuɐuǝʇuıɐW buıuɐǝןƆ", "block.gtceu.cleanroom": "ɯooɹuɐǝןƆ", @@ -113,6 +125,10 @@ "block.gtceu.computer_heat_vent": "ʇuǝΛ ʇɐǝH ɹǝʇndɯoƆ", "block.gtceu.configurable_maintenance_hatch": "ɥɔʇɐH ǝɔuɐuǝʇuıɐW ǝןqɐɹnbıɟuoƆ", "block.gtceu.corrosion_proof_casing": "buısɐƆ ɟooɹԀ uoısoɹɹoƆ", + "block.gtceu.cracked_dark_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʞɹɐᗡ pǝʞɔɐɹƆ", + "block.gtceu.cracked_light_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʇɥbıꞀ pǝʞɔɐɹƆ", + "block.gtceu.cracked_marble_bricks": "sʞɔıɹᗺ ǝןqɹɐW pǝʞɔɐɹƆ", + "block.gtceu.cracked_red_granite_bricks": "sʞɔıɹᗺ ǝʇıuɐɹ⅁ pǝᴚ pǝʞɔɐɹƆ", "block.gtceu.cracker": "ɹǝʞɔɐɹƆ", "block.gtceu.creative_chest": "ʇsǝɥƆ ǝʌıʇɐǝɹƆ", "block.gtceu.creative_data_access_hatch": "ɥɔʇɐH ssǝɔɔⱯ ɐʇɐᗡ ǝʌıʇɐǝɹƆ", @@ -120,6 +136,12 @@ "block.gtceu.creative_tank": "ʞuɐ⟘ ǝʌıʇɐǝɹƆ", "block.gtceu.crushing_wheels": "sןǝǝɥM buıɥsnɹƆ", "block.gtceu.cupronickel_coil_block": "ʞɔoןᗺ ןıoƆ ןǝʞɔıuoɹdnƆ", + "block.gtceu.cyan_lamp": "dɯɐꞀ uɐʎƆ", + "block.gtceu.dark_concrete": "ǝʇǝɹɔuoƆ ʞɹɐᗡ", + "block.gtceu.dark_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʞɹɐᗡ", + "block.gtceu.dark_concrete_cobblestone": "ǝuoʇsǝןqqoƆ ǝʇǝɹɔuoƆ ʞɹɐᗡ", + "block.gtceu.dark_concrete_small_tile": "ǝןı⟘ ןןɐɯS ǝʇǝɹɔuoƆ ʞɹɐᗡ", + "block.gtceu.dark_concrete_tile": "ǝןı⟘ ǝʇǝɹɔuoƆ ʞɹɐᗡ", "block.gtceu.data_access_hatch": "ɥɔʇɐH ssǝɔɔⱯ ɐʇɐᗡ", "block.gtceu.data_bank": "ʞuɐᗺ ɐʇɐᗡ", "block.gtceu.data_receiver_hatch": "ɥɔʇɐH uoıʇdǝɔǝᴚ ɐʇɐᗡ ןɐɔıʇdO", @@ -215,10 +237,14 @@ "block.gtceu.ev_transformer_4a": "ɹǝɯɹoɟsuɐɹ⟘ )xㄣ( dɯⱯ-ıH ǝbɐʇןoΛ ǝɯǝɹʇxƎ", "block.gtceu.ev_wiremill": "ɹ§III ןןıɯǝɹıM pǝɔuɐʌpⱯϛ§", "block.gtceu.ev_world_accelerator": "ɹ§III ɹoʇɐɹǝןǝɔɔⱯ pןɹoM pǝɔuɐʌpⱯϛ§", + "block.gtceu.explosion_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH uoısoןdxƎ", "block.gtceu.extreme_combustion_engine": "ǝuıbuƎ uoıʇsnqɯoƆ ǝɯǝɹʇxƎ", "block.gtceu.extreme_engine_intake_casing": "buısɐƆ ǝʞɐʇuI ǝuıbuƎ ǝɯǝɹʇxƎ", "block.gtceu.filter_casing": "buısɐƆ ɹǝʇןıℲ", + "block.gtceu.fire_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝɹıℲ", "block.gtceu.firebricks": "sʞɔıɹqǝɹıℲ", + "block.gtceu.foam": "ɯɐoℲ", + "block.gtceu.frost_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ʇsoɹℲ", "block.gtceu.frostproof_machine_casing": "buısɐƆ ǝuıɥɔɐW ɯnıuıɯnןⱯ ɟooɹԀ ʇsoɹℲ", "block.gtceu.fusion_casing": "buısɐƆ ǝuıɥɔɐW uoısnℲ", "block.gtceu.fusion_casing_mk2": "II ʞW buısɐƆ ǝuıɥɔɐW uoısnℲ", @@ -226,13 +252,19 @@ "block.gtceu.fusion_coil": "ʞɔoןᗺ ןıoƆ uoısnℲ", "block.gtceu.fusion_glass": "ssɐן⅁ uoısnℲ", "block.gtceu.gas_large_turbine": "ǝuıqɹn⟘ sɐ⅁ ǝbɹɐꞀ", + "block.gtceu.generic_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɔıɹǝuǝ⅁", "block.gtceu.gold_drum": "ɯnɹᗡ pןo⅁", - "block.gtceu.greenhouse": "ǝsnoɥuǝǝɹ⅁", + "block.gtceu.gray_lamp": "dɯɐꞀ ʎɐɹ⅁", + "block.gtceu.green_lamp": "dɯɐꞀ uǝǝɹ⅁", + "block.gtceu.gregification_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH uoıʇɐɔıɟıbǝɹ⅁", "block.gtceu.heat_vent": "ʇuǝΛ ʇɐǝH", "block.gtceu.heatproof_machine_casing": "buısɐƆ ǝuıɥɔɐW ɹɐʌuI ɟooɹԀ ʇɐǝH", "block.gtceu.high_performance_computation_array": ")ⱯƆԀH( ʎɐɹɹⱯ uoıʇɐʇndɯoƆ ǝɔuɐɯɹoɟɹǝԀ ɥbıH", "block.gtceu.high_power_casing": "buısɐƆ ɹǝʍoԀ ɥbıH", + "block.gtceu.high_pressure_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝɹnssǝɹԀ ɥbıH", + "block.gtceu.high_temperature_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝɹnʇɐɹǝdɯǝ⟘ ɥbıH", "block.gtceu.high_temperature_smelting_casing": "buısɐƆ buıʇןǝɯS ǝɹnʇɐɹǝdɯǝ⟘ ɥbıH", + "block.gtceu.high_voltage_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝbɐʇןoΛ ɥbıH", "block.gtceu.hp_steam_alloy_smelter": "ɹǝʇןǝɯS ʎoןןⱯ ɯɐǝʇS ǝɹnssǝɹԀ ɥbıH", "block.gtceu.hp_steam_compressor": "ɹossǝɹdɯoƆ ɯɐǝʇS ǝɹnssǝɹԀ ɥbıH", "block.gtceu.hp_steam_extractor": "ɹoʇɔɐɹʇxƎ ɯɐǝʇS ǝɹnssǝɹԀ ɥbıH", @@ -441,7 +473,16 @@ "block.gtceu.large_sifting_funnel": "ןǝuunℲ buıʇɟıS ǝbɹɐꞀ", "block.gtceu.large_solidifier": "ʎɐɹɹⱯ uoıʇɐɔıɟıpıןoS ǝbɹɐꞀ", "block.gtceu.large_wiremill": "ʎɹoʇɔɐℲ ǝɹıM ǝbɹɐꞀ", + "block.gtceu.laser_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɹǝsɐꞀ", "block.gtceu.laser_safe_engraving_casing": "buısɐƆ buıʌɐɹbuƎ ǝɟɐS-ɹǝsɐꞀ", + "block.gtceu.light_blue_lamp": "dɯɐꞀ ǝnןᗺ ʇɥbıꞀ", + "block.gtceu.light_concrete": "ǝʇǝɹɔuoƆ ʇɥbıꞀ", + "block.gtceu.light_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʇɥbıꞀ", + "block.gtceu.light_concrete_cobblestone": "ǝuoʇsǝןqqoƆ ǝʇǝɹɔuoƆ ʇɥbıꞀ", + "block.gtceu.light_concrete_small_tile": "ǝןı⟘ ןןɐɯS ǝʇǝɹɔuoƆ ʇɥbıꞀ", + "block.gtceu.light_concrete_tile": "ǝןı⟘ ǝʇǝɹɔuoƆ ʇɥbıꞀ", + "block.gtceu.light_gray_lamp": "dɯɐꞀ ʎɐɹ⅁ ʇɥbıꞀ", + "block.gtceu.lime_lamp": "dɯɐꞀ ǝɯıꞀ", "block.gtceu.long_distance_fluid_pipeline": "ǝuıןǝdıԀ pınןℲ ǝɔuɐʇsıᗡ buoꞀ", "block.gtceu.long_distance_fluid_pipeline_endpoint": "ʇuıodpuƎ ǝuıןǝdıԀ pınןℲ ǝɔuɐʇsıᗡ buoꞀ", "block.gtceu.long_distance_item_pipeline": "ǝuıןǝdıԀ ɯǝʇI ǝɔuɐʇsıᗡ buoꞀ", @@ -623,7 +664,15 @@ "block.gtceu.lv_transformer_4a": "ɹǝɯɹoɟsuɐɹ⟘ )xㄣ( dɯⱯ-ıH ǝbɐʇןoΛ ʍoꞀ", "block.gtceu.lv_wiremill": "ɹ§ ןןıɯǝɹıM ɔısɐᗺ", "block.gtceu.lv_world_accelerator": "ɹ§ ɹoʇɐɹǝןǝɔɔⱯ pןɹoM ɔısɐᗺ", + "block.gtceu.magenta_lamp": "dɯɐꞀ ɐʇuǝbɐW", + "block.gtceu.magic_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɔıbɐW", + "block.gtceu.magnetic_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɔıʇǝubɐW", "block.gtceu.maintenance_hatch": "ɥɔʇɐH ǝɔuɐuǝʇuıɐW", + "block.gtceu.marble": "ǝןqɹɐW", + "block.gtceu.marble_bricks": "sʞɔıɹᗺ ǝןqɹɐW", + "block.gtceu.marble_cobblestone": "ǝuoʇsǝןqqoƆ ǝןqɹɐW", + "block.gtceu.marble_small_tile": "ǝןı⟘ ןןɐɯS ǝןqɹɐW", + "block.gtceu.marble_tile": "ǝןı⟘ ǝןqɹɐW", "block.gtceu.max_16a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ Ɐ9Ɩ XⱯW", "block.gtceu.max_1a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ ⱯƖ XⱯW", "block.gtceu.max_4a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ Ɐㄣ XⱯW", @@ -651,7 +700,17 @@ "block.gtceu.mega_blast_furnace": "ǝɔɐuɹnℲ ɥʇɹɐǝH ʎɹɐʇoᴚ", "block.gtceu.mega_vacuum_freezer": "ɹǝןןıɥƆ ʇsɐןᗺ ʞןnᗺ", "block.gtceu.miner_pipe": "ǝdıԀ ɹǝuıW", + "block.gtceu.mob_infestation_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH uoıʇɐʇsǝɟuI qoW", + "block.gtceu.mob_spawner_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɹǝuʍɐdS qoW", "block.gtceu.molybdenum_disilicide_coil_block": "ʞɔoןᗺ ןıoƆ ǝpıɔıןısıᗡ ɯnuǝpqʎןoW", + "block.gtceu.mossy_dark_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʞɹɐᗡ ʎssoW", + "block.gtceu.mossy_dark_concrete_cobblestone": "ǝuoʇsǝןqqoƆ ǝʇǝɹɔuoƆ ʞɹɐᗡ ʎssoW", + "block.gtceu.mossy_light_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʇɥbıꞀ ʎssoW", + "block.gtceu.mossy_light_concrete_cobblestone": "ǝuoʇsǝןqqoƆ ǝʇǝɹɔuoƆ ʇɥbıꞀ ʎssoW", + "block.gtceu.mossy_marble_bricks": "sʞɔıɹᗺ ǝןqɹɐW ʎssoW", + "block.gtceu.mossy_marble_cobblestone": "ǝuoʇsǝןqqoƆ ǝןqɹɐW ʎssoW", + "block.gtceu.mossy_red_granite_bricks": "sʞɔıɹᗺ ǝʇıuɐɹ⅁ pǝᴚ ʎssoW", + "block.gtceu.mossy_red_granite_cobblestone": "ǝuoʇsǝןqqoƆ ǝʇıuɐɹ⅁ pǝᴚ ʎssoW", "block.gtceu.multi_smelter": "ɹǝʇןǝɯS ıʇןnW", "block.gtceu.mv_16a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ Ɐ9Ɩ ΛW", "block.gtceu.mv_1a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ ⱯƖ ΛW", @@ -731,6 +790,7 @@ "block.gtceu.naquadah_coil_block": "ʞɔoןᗺ ןıoƆ ɥɐpɐnbɐN", "block.gtceu.network_switch": "ɥɔʇıʍS ʞɹoʍʇǝN", "block.gtceu.nichrome_coil_block": "ʞɔoןᗺ ןıoƆ ǝɯoɹɥɔıN", + "block.gtceu.noise_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝsıoN", "block.gtceu.nonconducting_casing": "buısɐƆ buıʇɔnpuoɔuoN", "block.gtceu.normal_laser_pipe": "ǝdıԀ ɹǝsɐꞀ ןɐɯɹoN", "block.gtceu.normal_optical_pipe": "ǝdıԀ ןɐɔıʇdO ןɐɯɹoN", @@ -807,28 +867,66 @@ "block.gtceu.opv_sifter": "ɹ§ ɹǝʇɟıS ʎɹɐpuǝbǝꞀן§6§", "block.gtceu.opv_thermal_centrifuge": "ɹ§ ǝbnɟıɹʇuǝƆ ןɐɯɹǝɥ⟘ ʎɹɐpuǝbǝꞀן§6§", "block.gtceu.opv_wiremill": "ɹ§ ןןıɯǝɹıM ʎɹɐpuǝbǝꞀן§6§", + "block.gtceu.orange_lamp": "dɯɐꞀ ǝbuɐɹO", "block.gtceu.palladium_substation": "uoıʇɐʇsqnS ɯnıpɐןןɐԀ", + "block.gtceu.petrified_foam": "ɯɐoℲ pǝıɟıɹʇǝԀ", + "block.gtceu.pink_lamp": "dɯɐꞀ ʞuıԀ", "block.gtceu.plascrete": "ǝʇǝɹɔsɐןԀ", "block.gtceu.plasma_large_turbine": "ǝuıqɹn⟘ ɐɯsɐןԀ ǝbɹɐꞀ", + "block.gtceu.polished_dark_concrete": "ǝʇǝɹɔuoƆ ʞɹɐᗡ pǝɥsıןoԀ", + "block.gtceu.polished_light_concrete": "ǝʇǝɹɔuoƆ ʇɥbıꞀ pǝɥsıןoԀ", + "block.gtceu.polished_marble": "ǝןqɹɐW pǝɥsıןoԀ", + "block.gtceu.polished_red_granite": "ǝʇıuɐɹ⅁ pǝᴚ pǝɥsıןoԀ", "block.gtceu.power_substation": "uoıʇɐʇsqnS ɹǝʍoԀ", "block.gtceu.primitive_blast_furnace": "ǝɔɐuɹnℲ ʇsɐןᗺ ǝʌıʇıɯıɹԀ", "block.gtceu.primitive_pump": "dɯnԀ ǝʌıʇıɯıɹԀ", "block.gtceu.ptfe_pipe_casing": "buısɐƆ ǝdıԀ ƎℲ⟘Ԁ", "block.gtceu.pump_deck": "ʞɔǝᗡ dɯnԀ", "block.gtceu.pump_hatch": "ɥɔʇɐH dɯnԀ", + "block.gtceu.purple_lamp": "dɯɐꞀ ǝןdɹnԀ", "block.gtceu.pyrolyse_oven": "uǝʌO ǝsʎןoɹʎԀ", + "block.gtceu.radioactive_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝʌıʇɔɐoıpɐᴚ", "block.gtceu.reaction_safe_mixing_casing": "buısɐƆ buıxıW ǝɟɐS-uoıʇɔɐǝᴚ", + "block.gtceu.red_granite": "ǝʇıuɐɹ⅁ pǝᴚ", + "block.gtceu.red_granite_bricks": "sʞɔıɹᗺ ǝʇıuɐɹ⅁ pǝᴚ", + "block.gtceu.red_granite_cobblestone": "ǝuoʇsǝןqqoƆ ǝʇıuɐɹ⅁ pǝᴚ", + "block.gtceu.red_granite_small_tile": "ǝןı⟘ ןןɐɯS ǝʇıuɐɹ⅁ pǝᴚ", + "block.gtceu.red_granite_tile": "ǝןı⟘ ǝʇıuɐɹ⅁ pǝᴚ", + "block.gtceu.red_lamp": "dɯɐꞀ pǝᴚ", + "block.gtceu.reinforced_stone": "ǝuoʇS pǝɔɹoɟuıǝᴚ", "block.gtceu.research_station": "uoıʇɐʇS ɥɔɹɐǝsǝᴚ", "block.gtceu.robust_machine_casing": "buısɐƆ ǝuıɥɔɐW ןǝǝʇsuǝʇsbun⟘ ʇsnqoᴚ", "block.gtceu.rtm_alloy_coil_block": "ʞɔoןᗺ ןıoƆ ʎoןןⱯ W⟘ᴚ", + "block.gtceu.rubber_button": "uoʇʇnᗺ ɹǝqqnᴚ", + "block.gtceu.rubber_door": "ɹooᗡ ɹǝqqnᴚ", + "block.gtceu.rubber_fence": "ǝɔuǝℲ ɹǝqqnᴚ", + "block.gtceu.rubber_fence_gate": "ǝʇɐ⅁ ǝɔuǝℲ ɹǝqqnᴚ", "block.gtceu.rubber_leaves": "sǝʌɐǝꞀ ɹǝqqnᴚ", "block.gtceu.rubber_log": "boꞀ ɹǝqqnᴚ", "block.gtceu.rubber_planks": "sʞuɐןԀ ɹǝqqnᴚ", + "block.gtceu.rubber_pressure_plate": "ǝʇɐןԀ ǝɹnssǝɹԀ ɹǝqqnᴚ", "block.gtceu.rubber_sapling": "buıןdɐS ɹǝqqnᴚ", + "block.gtceu.rubber_slab": "qɐןS ɹǝqqnᴚ", + "block.gtceu.rubber_stairs": "sɹıɐʇS ɹǝqqnᴚ", + "block.gtceu.rubber_trapdoor": "ɹoopdɐɹ⟘ ɹǝqqnᴚ", + "block.gtceu.rubber_wood": "pooM ɹǝqqnᴚ", "block.gtceu.secure_maceration_casing": "buısɐƆ uoıʇɐɹǝɔɐW ǝɹnɔǝS", "block.gtceu.shock_proof_cutting_casing": "buısɐƆ buıʇʇnƆ ɟooɹԀ ʞɔoɥS", "block.gtceu.slicing_blades": "sǝpɐןᗺ buıɔıןS", + "block.gtceu.small_dark_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʞɹɐᗡ ןןɐɯS", + "block.gtceu.small_light_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʇɥbıꞀ ןןɐɯS", + "block.gtceu.small_marble_bricks": "sʞɔıɹᗺ ǝןqɹɐW ןןɐɯS", + "block.gtceu.small_red_granite_bricks": "sʞɔıɹᗺ ǝʇıuɐɹ⅁ pǝᴚ ןןɐɯS", + "block.gtceu.smooth_dark_concrete": "ǝʇǝɹɔuoƆ ʞɹɐᗡ ɥʇooɯS", + "block.gtceu.smooth_light_concrete": "ǝʇǝɹɔuoƆ ʇɥbıꞀ ɥʇooɯS", + "block.gtceu.smooth_marble": "ǝןqɹɐW ɥʇooɯS", + "block.gtceu.smooth_red_granite": "ǝʇıuɐɹ⅁ pǝᴚ ɥʇooɯS", "block.gtceu.solid_machine_casing": "buısɐƆ ǝuıɥɔɐW pıןoS", + "block.gtceu.spatial_storage_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝbɐɹoʇS ןɐıʇɐdS", + "block.gtceu.square_dark_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʞɹɐᗡ ǝɹɐnbS", + "block.gtceu.square_light_concrete_bricks": "sʞɔıɹᗺ ǝʇǝɹɔuoƆ ʇɥbıꞀ ǝɹɐnbS", + "block.gtceu.square_marble_bricks": "sʞɔıɹᗺ ǝןqɹɐW ǝɹɐnbS", + "block.gtceu.square_red_granite_bricks": "sʞɔıɹᗺ ǝʇıuɐɹ⅁ pǝᴚ ǝɹɐnbS", "block.gtceu.stable_machine_casing": "buısɐƆ ǝuıɥɔɐW ɯnıuɐʇı⟘ ǝןqɐʇS", "block.gtceu.stainless_steel_crate": "ǝʇɐɹƆ ןǝǝʇS ssǝןuıɐʇS", "block.gtceu.stainless_steel_drum": "ɯnɹᗡ ןǝǝʇS ssǝןuıɐʇS", @@ -865,6 +963,8 @@ "block.gtceu.steel_turbine_casing": "buısɐƆ ǝuıqɹn⟘ ןǝǝʇS", "block.gtceu.sterilizing_filter_casing": "buısɐƆ ɹǝʇןıℲ buızıןıɹǝʇS", "block.gtceu.stress_proof_casing": "buısɐƆ ɟooɹԀ ssǝɹʇS", + "block.gtceu.stripped_rubber_log": "boꞀ ɹǝqqnᴚ pǝddıɹʇS", + "block.gtceu.stripped_rubber_wood": "pooM ɹǝqqnᴚ pǝddıɹʇS", "block.gtceu.sturdy_machine_casing": "buısɐƆ ǝuıɥɔɐW Ǝ-SSH ʎpɹnʇS", "block.gtceu.superconducting_coil": "ʞɔoןᗺ ןıoƆ buıʇɔnpuoɔɹǝdnS", "block.gtceu.tempered_glass": "ssɐן⅁ pǝɹǝdɯǝ⟘", @@ -875,7 +975,15 @@ "block.gtceu.titanium_large_boiler": "ɹǝןıoᗺ ɯnıuɐʇı⟘ ǝbɹɐꞀ", "block.gtceu.titanium_pipe_casing": "buısɐƆ ǝdıԀ ɯnıuɐʇı⟘", "block.gtceu.titanium_turbine_casing": "buısɐƆ ǝuıqɹn⟘ ɯnıuɐʇı⟘", + "block.gtceu.treated_wood_button": "uoʇʇnᗺ pooM pǝʇɐǝɹ⟘", + "block.gtceu.treated_wood_door": "ɹooᗡ pooM pǝʇɐǝɹ⟘", + "block.gtceu.treated_wood_fence": "ǝɔuǝℲ pooM pǝʇɐǝɹ⟘", + "block.gtceu.treated_wood_fence_gate": "ǝʇɐ⅁ ǝɔuǝℲ pooM pǝʇɐǝɹ⟘", "block.gtceu.treated_wood_planks": "sʞuɐןԀ pooM pǝʇɐǝɹ⟘", + "block.gtceu.treated_wood_pressure_plate": "ǝʇɐןԀ ǝɹnssǝɹԀ pooM pǝʇɐǝɹ⟘", + "block.gtceu.treated_wood_slab": "qɐןS pooM pǝʇɐǝɹ⟘", + "block.gtceu.treated_wood_stairs": "sɹıɐʇS pooM pǝʇɐǝɹ⟘", + "block.gtceu.treated_wood_trapdoor": "ɹoopdɐɹ⟘ pooM pǝʇɐǝɹ⟘", "block.gtceu.trinium_coil_block": "ʞɔoןᗺ ןıoƆ ɯnıuıɹ⟘", "block.gtceu.tritanium_coil_block": "ʞɔoןᗺ ןıoƆ ɯnıuɐʇıɹ⟘", "block.gtceu.tungsten_steel_crate": "ǝʇɐɹƆ ןǝǝʇsuǝʇsbun⟘", @@ -885,6 +993,7 @@ "block.gtceu.tungstensteel_large_boiler": "ɹǝןıoᗺ ןǝǝʇsuǝʇsbun⟘ ǝbɹɐꞀ", "block.gtceu.tungstensteel_pipe_casing": "buısɐƆ ǝdıԀ ןǝǝʇsuǝʇsbun⟘", "block.gtceu.tungstensteel_turbine_casing": "buısɐƆ ǝuıqɹn⟘ ןǝǝʇsuǝʇsbun⟘", + "block.gtceu.turret_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ʇǝɹɹn⟘", "block.gtceu.uev_1024a_laser_source_hatch": "ɥɔʇɐH ǝɔɹnoS ɹǝsɐꞀ Ɐㄣᄅ0'Ɩ ΛƎ∩ɐ§", "block.gtceu.uev_1024a_laser_target_hatch": "ɥɔʇɐH ʇǝbɹɐ⟘ ɹǝsɐꞀ Ɐㄣᄅ0'Ɩ ΛƎ∩ɐ§", "block.gtceu.uev_16a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ Ɐ9Ɩ ΛƎ∩", @@ -1276,7 +1385,9 @@ "block.gtceu.uxv_wiremill": "ɹ§ΛI ןןıɯǝɹıM ɔıdƎǝ§", "block.gtceu.vacuum_freezer": "ɹǝzǝǝɹℲ ɯnnɔɐΛ", "block.gtceu.vibration_safe_casing": "buısɐƆ ǝɟɐS-uoıʇɐɹqıΛ", + "block.gtceu.void_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH pıoΛ", "block.gtceu.watertight_casing": "buısɐƆ ʇɥbıʇɹǝʇɐM", + "block.gtceu.white_lamp": "dɯɐꞀ ǝʇıɥM", "block.gtceu.wire_coil.tooltip_cracking": ":ʇıu∩ buıʞɔɐɹƆ8§", "block.gtceu.wire_coil.tooltip_energy_cracking": "%s%%ɟ§ :ǝbɐs∩ ʎbɹǝuƎɐ§ ", "block.gtceu.wire_coil.tooltip_energy_smelter": "ǝdıɔǝɹ ɹǝd8§ ʇ/∩Ǝ %sɟ§ :ǝbɐs∩ ʎbɹǝuƎɐ§ ", @@ -1291,6 +1402,13 @@ "block.gtceu.wood_wall": "ןןɐM pooM", "block.gtceu.wooden_multiblock_tank": "ʞuɐ⟘ ʞɔoןqıʇןnW uǝpooM", "block.gtceu.wooden_tank_valve": "ǝʌןɐΛ ʞuɐ⟘ uǝpooM", + "block.gtceu.yellow_lamp": "dɯɐꞀ ʍoןןǝʎ", + "block.gtceu.yellow_stripes_block.a": "ʞɔoןᗺ sǝdıɹʇS ʍoןןǝʎ", + "block.gtceu.yellow_stripes_block.b": "ʞɔoןᗺ sǝdıɹʇS ʍoןןǝʎ", + "block.gtceu.yellow_stripes_block.c": "ʞɔoןᗺ sǝdıɹʇS ʍoןןǝʎ", + "block.gtceu.yellow_stripes_block.d": "ʞɔoןᗺ sǝdıɹʇS ʍoןןǝʎ", + "block.gtceu.yellow_stripes_block_a": "Ɐ ʞɔoןᗺ sǝdıɹʇS ʍoןןǝʎ", + "block.gtceu.yellow_stripes_block_b": "ᗺ ʞɔoןᗺ sǝdıɹʇS ʍoןןǝʎ", "block.gtceu.zpm_1024a_laser_source_hatch": "ɥɔʇɐH ǝɔɹnoS ɹǝsɐꞀ Ɐㄣᄅ0'Ɩ WԀZɔ§", "block.gtceu.zpm_1024a_laser_target_hatch": "ɥɔʇɐH ʇǝbɹɐ⟘ ɹǝsɐꞀ Ɐㄣᄅ0'Ɩ WԀZɔ§", "block.gtceu.zpm_16a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ Ɐ9Ɩ WԀZ", @@ -1495,8 +1613,10 @@ "compass.node.gtceu.generation/rubber_log": "boꞀ ɹǝqqnᴚ", "compass.node.gtceu.generation/rubber_planks": "sʞuɐןԀ ɹǝqqnᴚ", "compass.node.gtceu.generation/rubber_sapling": "buıןdɐS ɹǝqqnᴚ", + "compass.node.gtceu.generation/rubber_slab": "qɐןS ɹǝqqnᴚ", "compass.node.gtceu.generation/sand": "puɐS", "compass.node.gtceu.generation/stone": "ǝuoʇS", + "compass.node.gtceu.generation/treated_wood_slab": "qɐןS pooM pǝʇɐǝɹ⟘", "compass.node.gtceu.generation/tuff": "ɟɟn⟘", "compass.node.gtceu.hv/cleanroom": "ɯooɹuɐǝןƆ", "compass.node.gtceu.hv/implosion_compressor": "ɹossǝɹdɯoƆ uoısoןdɯI", @@ -1603,14 +1723,12 @@ "compass.node.gtceu.materials/block": "ʞɔoןᗺ", "compass.node.gtceu.materials/bolt": "ʇןoᗺ", "compass.node.gtceu.materials/chainsaw_head": "pɐǝH ʍɐsuıɐɥƆ", - "compass.node.gtceu.materials/chipped_gem": "ɯǝ⅁ pǝddıɥƆ", "compass.node.gtceu.materials/crushed_ore": "ǝɹO pǝɥsnɹƆ", "compass.node.gtceu.materials/dense_plate": "ǝʇɐןԀ ǝsuǝᗡ", "compass.node.gtceu.materials/double_plate": "ǝʇɐןԀ ǝןqnoᗡ", "compass.node.gtceu.materials/dust": "ʇsnᗡ", "compass.node.gtceu.materials/exquisite_gem": "ɯǝ⅁ ǝʇısınbxƎ", "compass.node.gtceu.materials/fine_wire": "ǝɹıM ǝuıℲ", - "compass.node.gtceu.materials/flawed_gem": "ɯǝ⅁ pǝʍɐןℲ", "compass.node.gtceu.materials/flawless_gem": "ɯǝ⅁ ssǝןʍɐןℲ", "compass.node.gtceu.materials/foil": "ןıoℲ", "compass.node.gtceu.materials/frame": "ǝɯɐɹℲ", @@ -1844,8 +1962,8 @@ "config.gtceu.option.addLoot": "ʇooꞀppɐ", "config.gtceu.option.allUniqueStoneTypes": "sǝdʎ⟘ǝuoʇSǝnbıu∩ןןɐ", "config.gtceu.option.animationTime": "ǝɯı⟘uoıʇɐɯıuɐ", + "config.gtceu.option.bedrockOreDistance": "ǝɔuɐʇsıᗡǝɹOʞɔoɹpǝq", "config.gtceu.option.bedrockOreDropTagPrefix": "xıɟǝɹԀbɐ⟘doɹᗡǝɹOʞɔoɹpǝq", - "config.gtceu.option.bedrockOreMultiplier": "ɹǝıןdıʇןnWǝɹOʞɔoɹpǝq", "config.gtceu.option.casingsPerCraft": "ʇɟɐɹƆɹǝԀsbuısɐɔ", "config.gtceu.option.cleanMultiblocks": "sʞɔoןqıʇןnWuɐǝןɔ", "config.gtceu.option.client": "ʇuǝıןɔ", @@ -2264,7 +2382,6 @@ "gtceu.fusion_reactor": "ɹoʇɔɐǝᴚ uoısnℲ", "gtceu.gas_collector": "ɹoʇɔǝןןoƆ sɐ⅁", "gtceu.gas_turbine": "ǝuıqɹn⟘ sɐ⅁", - "gtceu.greenhouse": "ǝsnoɥuǝǝɹ⅁", "gtceu.gui.auto_output.name": "oʇnɐ", "gtceu.gui.charger_slot.tooltip.0": "ɹ§ʇoןS ɹǝbɹɐɥƆɟ§", "gtceu.gui.charger_slot.tooltip.1": "ɹ§sǝıɹǝʇʇɐq %s ɯoɹɟ ɹǝʍod sʍɐɹᗡㄥ§", @@ -3179,6 +3296,9 @@ "gtceu.multiblock.network_switch.description": "˙uoıʇɐʇndɯoƆ ɹıǝɥʇ ssǝɔɔɐ oʇ ǝןqɐ ǝq oʇ ɥɔʇıʍS ʞɹoʍʇǝN ǝɥʇ ɹoɟ ʇuǝuodɯoƆ ǝbpıɹᗺ ɐ ǝʌɐɥ ʇsnɯ sⱯƆԀH ˙ɥɔʇɐH uoıʇdǝɔǝᴚ ɐʇɐᗡ uoıʇɐʇndɯoƆ ǝuo ʇdǝɔɔɐ ʎןuo uɐɔ uoıʇɐʇS ɥɔɹɐǝsǝᴚ ǝɥʇ sɐ 'uoıʇɐʇndɯoƆ ɹǝɥbıɥ ɥɔnɯ sǝɹınbǝɹ ɥɔıɥʍ ɐʇɐᗡ ɥɔɹɐǝsǝᴚ ɹoɟ ʎɹɐssǝɔǝu sı ʇI ˙sǝɥɔʇɐH uoıssıɯsuɐɹ⟘ ɹo uoıʇdǝɔǝᴚ ɐʇɐᗡ uoıʇɐʇndɯoƆ ɟo ɹǝqɯnu ʎuɐ ʇdǝɔɔɐ uɐɔ ʇI ˙suoıʇɐuıʇsǝp ʎuɐɯ oʇ sǝɔɹnos ʎuɐɯ ɯoɹɟ uoıʇɐʇndɯoƆ buıʇnqıɹʇsıp ɹoɟ pǝsn ǝɹnʇɔnɹʇs ʞɔoןqıʇןnɯ ɐ sı ɥɔʇıʍS ʞɹoʍʇǝN ǝɥ⟘", "gtceu.multiblock.not_enough_energy": "˙ʎbɹǝuǝ ǝɹoɯ spǝǝu ǝuıɥɔɐW :⅁NINᴚⱯM", "gtceu.multiblock.not_enough_energy_output": "¡ʍoꞀ oo⟘ ɹǝı⟘ oɯɐuʎᗡ ʎbɹǝuƎ :⅁NINᴚⱯM", + "gtceu.multiblock.ore_rig.drilled_ore_entry": "%s - ", + "gtceu.multiblock.ore_rig.drilled_ores_list": ":sǝɹO", + "gtceu.multiblock.ore_rig.ore_amount": "%s :ǝʇɐᴚ buıןןıɹᗡ", "gtceu.multiblock.page_switcher.io.both": "sʇndʇnO + sʇnduI pǝuıqɯoƆϛ§", "gtceu.multiblock.page_switcher.io.export": "sʇndʇnOㄣ§", "gtceu.multiblock.page_switcher.io.import": "sʇnduIᄅ§", @@ -4701,7 +4821,7 @@ "material.gtceu.iridium_chloride": "ǝpıɹoןɥƆ ɯnıpıɹI", "material.gtceu.iridium_metal_residue": "ǝnpısǝᴚ ןɐʇǝW ɯnıpıɹI", "material.gtceu.iron": "uoɹI", - "material.gtceu.iron_iii_chloride": "ǝpıɹoןɥƆ ııI uoɹI", + "material.gtceu.iron_iii_chloride": "ǝpıɹoןɥƆ III uoɹI", "material.gtceu.isoprene": "ǝuǝɹdosI", "material.gtceu.kanthal": "ןɐɥʇuɐʞ", "material.gtceu.krypton": "uoʇdʎɹʞ", @@ -5169,12 +5289,15 @@ "tagprefix.deepslate": "ǝɹO %s ǝʇɐןsdǝǝᗡ", "tagprefix.dense_plate": "ǝʇɐןԀ %s ǝsuǝᗡ", "tagprefix.diorite": "ǝɹO %s ǝʇıɹoıᗡ", + "tagprefix.door": "ɹooᗡ %s", "tagprefix.double_plate": "ǝʇɐןԀ %s ǝןqnoᗡ", "tagprefix.drill_head": "pɐǝH ןןıɹᗡ %s", "tagprefix.dust": "ʇsnᗡ %s", "tagprefix.dye": "ǝʎᗡ %s", "tagprefix.endstone": "ǝɹO %s puƎ", "tagprefix.exquisite_gem": "%s ǝʇısınbxƎ", + "tagprefix.fence": "ǝɔuǝℲ %s", + "tagprefix.fence_gate": "ǝʇɐ⅁ ǝɔuǝℲ %s", "tagprefix.fine_wire": "ǝɹıM %s ǝuıℲ", "tagprefix.flawed_gem": "%s pǝʍɐןℲ", "tagprefix.flawless_gem": "%s ssǝןʍɐןℲ", @@ -5188,6 +5311,7 @@ "tagprefix.impure_dust": "ʇsnᗡ %s ɟo ǝןıԀ ǝɹndɯI", "tagprefix.ingot": "ʇobuI %s", "tagprefix.lens": "suǝꞀ %s", + "tagprefix.log": "boꞀ %s", "tagprefix.long_rod": "poᴚ %s buoꞀ", "tagprefix.netherrack": "ǝɹO %s ɹǝɥʇǝN", "tagprefix.nugget": "ʇǝbbnN %s", @@ -5231,10 +5355,12 @@ "tagprefix.sand": "ǝɹO %s puɐS", "tagprefix.screw": "ʍǝɹɔS %s", "tagprefix.screwdriver_tip": "dı⟘ ɹǝʌıɹpʍǝɹɔS %s", + "tagprefix.slab": "qɐןS %s", "tagprefix.small_dust": "ʇsnᗡ %s ɟo ǝןıԀ ןןɐɯS", "tagprefix.small_gear": "ɹɐǝ⅁ %s ןןɐɯS", "tagprefix.small_spring": "buıɹdS %s ןןɐɯS", "tagprefix.spring": "buıɹdS %s", + "tagprefix.stairs": "sɹıɐʇS %s", "tagprefix.stone": "ǝɹO %s", "tagprefix.tiny_dust": "ʇsnᗡ %s ɟo ǝןıԀ ʎuı⟘", "tagprefix.tuff": "ǝɹO %s ɟɟn⟘", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 157d5620ba..75b34bff02 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -76,18 +76,24 @@ "behaviour.soft_hammer.enabled": "Working Enabled", "behaviour.wrench": "Rotates Blocks on Rightclick", "block.filter_casing.tooltip": "Creates a §aParticle-Free§7 environment", + "block.gtceu.acid_hazard_sign_block": "Acid Hazard Sign Block", "block.gtceu.active_transformer": "Active Transformer", "block.gtceu.advanced_computer_casing": "Advanced Computer Casing", "block.gtceu.advanced_data_access_hatch": "Advanced Data Access Hatch", "block.gtceu.alloy_blast_smelter": "Alloy Blast Smelter", "block.gtceu.aluminium_crate": "Aluminium Crate", "block.gtceu.aluminium_drum": "Aluminium Drum", + "block.gtceu.antimatter_hazard_sign_block": "Antimatter Hazard Sign Block", "block.gtceu.assembly_line": "Assembly Line", "block.gtceu.assembly_line_casing": "Assembly Line Casing", "block.gtceu.assembly_line_grating": "Assembly Line Grating", "block.gtceu.assembly_line_unit": "Assembly Control Casing", "block.gtceu.atomic_casing": "Atomic Casing", "block.gtceu.auto_maintenance_hatch": "Auto Maintenance Hatch", + "block.gtceu.bio_hazard_sign_block": "Bio Hazard Sign Block", + "block.gtceu.black_lamp": "Black Lamp", + "block.gtceu.blue_lamp": "Blue Lamp", + "block.gtceu.boss_hazard_sign_block": "Boss Hazard Sign Block", "block.gtceu.bronze_brick_casing": "Bronze Brick Casing", "block.gtceu.bronze_crate": "Bronze Crate", "block.gtceu.bronze_drum": "Bronze Drum", @@ -96,10 +102,16 @@ "block.gtceu.bronze_large_boiler": "Large Bronze Boiler", "block.gtceu.bronze_machine_casing": "Bronze Machine Casing", "block.gtceu.bronze_pipe_casing": "Bronze Pipe Casing", + "block.gtceu.brown_lamp": "Brown Lamp", "block.gtceu.casing_bronze_bricks": "Bronze Machine Casing", "block.gtceu.casing_coke_bricks": "Coke Oven Bricks", "block.gtceu.casing_grate": "Grate Machine Casing", "block.gtceu.casing_primitive_bricks": "Firebricks", + "block.gtceu.causality_hazard_sign_block": "Causality Hazard Sign Block", + "block.gtceu.chiseled_dark_concrete": "Chiseled Dark Concrete", + "block.gtceu.chiseled_light_concrete": "Chiseled Light Concrete", + "block.gtceu.chiseled_marble": "Chiseled Marble", + "block.gtceu.chiseled_red_granite": "Chiseled Red Granite", "block.gtceu.clean_machine_casing": "Clean Stainless Steel Casing", "block.gtceu.cleaning_maintenance_hatch": "Cleaning Maintenance Hatch", "block.gtceu.cleanroom": "Cleanroom", @@ -113,6 +125,10 @@ "block.gtceu.computer_heat_vent": "Computer Heat Vent", "block.gtceu.configurable_maintenance_hatch": "Configurable Maintenance Hatch", "block.gtceu.corrosion_proof_casing": "Corrosion Proof Casing", + "block.gtceu.cracked_dark_concrete_bricks": "Cracked Dark Concrete Bricks", + "block.gtceu.cracked_light_concrete_bricks": "Cracked Light Concrete Bricks", + "block.gtceu.cracked_marble_bricks": "Cracked Marble Bricks", + "block.gtceu.cracked_red_granite_bricks": "Cracked Red Granite Bricks", "block.gtceu.cracker": "Cracker", "block.gtceu.creative_chest": "Creative Chest", "block.gtceu.creative_data_access_hatch": "Creative Data Access Hatch", @@ -120,6 +136,12 @@ "block.gtceu.creative_tank": "Creative Tank", "block.gtceu.crushing_wheels": "Crushing Wheels", "block.gtceu.cupronickel_coil_block": "Cupronickel Coil Block", + "block.gtceu.cyan_lamp": "Cyan Lamp", + "block.gtceu.dark_concrete": "Dark Concrete", + "block.gtceu.dark_concrete_bricks": "Dark Concrete Bricks", + "block.gtceu.dark_concrete_cobblestone": "Dark Concrete Cobblestone", + "block.gtceu.dark_concrete_small_tile": "Dark Concrete Small Tile", + "block.gtceu.dark_concrete_tile": "Dark Concrete Tile", "block.gtceu.data_access_hatch": "Data Access Hatch", "block.gtceu.data_bank": "Data Bank", "block.gtceu.data_receiver_hatch": "Optical Data Reception Hatch", @@ -215,10 +237,14 @@ "block.gtceu.ev_transformer_4a": "Extreme Voltage Hi-Amp (4x) Transformer", "block.gtceu.ev_wiremill": "§5Advanced Wiremill III§r", "block.gtceu.ev_world_accelerator": "§5Advanced World Accelerator III§r", + "block.gtceu.explosion_hazard_sign_block": "Explosion Hazard Sign Block", "block.gtceu.extreme_combustion_engine": "Extreme Combustion Engine", "block.gtceu.extreme_engine_intake_casing": "Extreme Engine Intake Casing", "block.gtceu.filter_casing": "Filter Casing", + "block.gtceu.fire_hazard_sign_block": "Fire Hazard Sign Block", "block.gtceu.firebricks": "Firebricks", + "block.gtceu.foam": "Foam", + "block.gtceu.frost_hazard_sign_block": "Frost Hazard Sign Block", "block.gtceu.frostproof_machine_casing": "Frost Proof Aluminium Machine Casing", "block.gtceu.fusion_casing": "Fusion Machine Casing", "block.gtceu.fusion_casing_mk2": "Fusion Machine Casing MK II", @@ -226,13 +252,19 @@ "block.gtceu.fusion_coil": "Fusion Coil Block", "block.gtceu.fusion_glass": "Fusion Glass", "block.gtceu.gas_large_turbine": "Large Gas Turbine", + "block.gtceu.generic_hazard_sign_block": "Generic Hazard Sign Block", "block.gtceu.gold_drum": "Gold Drum", - "block.gtceu.greenhouse": "Greenhouse", + "block.gtceu.gray_lamp": "Gray Lamp", + "block.gtceu.green_lamp": "Green Lamp", + "block.gtceu.gregification_hazard_sign_block": "Gregification Hazard Sign Block", "block.gtceu.heat_vent": "Heat Vent", "block.gtceu.heatproof_machine_casing": "Heat Proof Invar Machine Casing", "block.gtceu.high_performance_computation_array": "High Performance Computation Array (HPCA)", "block.gtceu.high_power_casing": "High Power Casing", + "block.gtceu.high_pressure_hazard_sign_block": "High Pressure Hazard Sign Block", + "block.gtceu.high_temperature_hazard_sign_block": "High Temperature Hazard Sign Block", "block.gtceu.high_temperature_smelting_casing": "High Temperature Smelting Casing", + "block.gtceu.high_voltage_hazard_sign_block": "High Voltage Hazard Sign Block", "block.gtceu.hp_steam_alloy_smelter": "High Pressure Steam Alloy Smelter", "block.gtceu.hp_steam_compressor": "High Pressure Steam Compressor", "block.gtceu.hp_steam_extractor": "High Pressure Steam Extractor", @@ -441,7 +473,16 @@ "block.gtceu.large_sifting_funnel": "Large Sifting Funnel", "block.gtceu.large_solidifier": "Large Solidification Array", "block.gtceu.large_wiremill": "Large Wire Factory", + "block.gtceu.laser_hazard_sign_block": "Laser Hazard Sign Block", "block.gtceu.laser_safe_engraving_casing": "Laser-Safe Engraving Casing", + "block.gtceu.light_blue_lamp": "Light Blue Lamp", + "block.gtceu.light_concrete": "Light Concrete", + "block.gtceu.light_concrete_bricks": "Light Concrete Bricks", + "block.gtceu.light_concrete_cobblestone": "Light Concrete Cobblestone", + "block.gtceu.light_concrete_small_tile": "Light Concrete Small Tile", + "block.gtceu.light_concrete_tile": "Light Concrete Tile", + "block.gtceu.light_gray_lamp": "Light Gray Lamp", + "block.gtceu.lime_lamp": "Lime Lamp", "block.gtceu.long_distance_fluid_pipeline": "Long Distance Fluid Pipeline", "block.gtceu.long_distance_fluid_pipeline_endpoint": "Long Distance Fluid Pipeline Endpoint", "block.gtceu.long_distance_item_pipeline": "Long Distance Item Pipeline", @@ -623,7 +664,15 @@ "block.gtceu.lv_transformer_4a": "Low Voltage Hi-Amp (4x) Transformer", "block.gtceu.lv_wiremill": "Basic Wiremill §r", "block.gtceu.lv_world_accelerator": "Basic World Accelerator §r", + "block.gtceu.magenta_lamp": "Magenta Lamp", + "block.gtceu.magic_hazard_sign_block": "Magic Hazard Sign Block", + "block.gtceu.magnetic_hazard_sign_block": "Magnetic Hazard Sign Block", "block.gtceu.maintenance_hatch": "Maintenance Hatch", + "block.gtceu.marble": "Marble", + "block.gtceu.marble_bricks": "Marble Bricks", + "block.gtceu.marble_cobblestone": "Marble Cobblestone", + "block.gtceu.marble_small_tile": "Marble Small Tile", + "block.gtceu.marble_tile": "Marble Tile", "block.gtceu.max_16a_energy_converter": "MAX 16A Energy Converter", "block.gtceu.max_1a_energy_converter": "MAX 1A Energy Converter", "block.gtceu.max_4a_energy_converter": "MAX 4A Energy Converter", @@ -651,7 +700,17 @@ "block.gtceu.mega_blast_furnace": "Rotary Hearth Furnace", "block.gtceu.mega_vacuum_freezer": "Bulk Blast Chiller", "block.gtceu.miner_pipe": "Miner Pipe", + "block.gtceu.mob_infestation_hazard_sign_block": "Mob Infestation Hazard Sign Block", + "block.gtceu.mob_spawner_hazard_sign_block": "Mob Spawner Hazard Sign Block", "block.gtceu.molybdenum_disilicide_coil_block": "Molybdenum Disilicide Coil Block", + "block.gtceu.mossy_dark_concrete_bricks": "Mossy Dark Concrete Bricks", + "block.gtceu.mossy_dark_concrete_cobblestone": "Mossy Dark Concrete Cobblestone", + "block.gtceu.mossy_light_concrete_bricks": "Mossy Light Concrete Bricks", + "block.gtceu.mossy_light_concrete_cobblestone": "Mossy Light Concrete Cobblestone", + "block.gtceu.mossy_marble_bricks": "Mossy Marble Bricks", + "block.gtceu.mossy_marble_cobblestone": "Mossy Marble Cobblestone", + "block.gtceu.mossy_red_granite_bricks": "Mossy Red Granite Bricks", + "block.gtceu.mossy_red_granite_cobblestone": "Mossy Red Granite Cobblestone", "block.gtceu.multi_smelter": "Multi Smelter", "block.gtceu.mv_16a_energy_converter": "MV 16A Energy Converter", "block.gtceu.mv_1a_energy_converter": "MV 1A Energy Converter", @@ -731,6 +790,7 @@ "block.gtceu.naquadah_coil_block": "Naquadah Coil Block", "block.gtceu.network_switch": "Network Switch", "block.gtceu.nichrome_coil_block": "Nichrome Coil Block", + "block.gtceu.noise_hazard_sign_block": "Noise Hazard Sign Block", "block.gtceu.nonconducting_casing": "Nonconducting Casing", "block.gtceu.normal_laser_pipe": "Normal Laser Pipe", "block.gtceu.normal_optical_pipe": "Normal Optical Pipe", @@ -807,28 +867,66 @@ "block.gtceu.opv_sifter": "§9§lLegendary Sifter §r", "block.gtceu.opv_thermal_centrifuge": "§9§lLegendary Thermal Centrifuge §r", "block.gtceu.opv_wiremill": "§9§lLegendary Wiremill §r", + "block.gtceu.orange_lamp": "Orange Lamp", "block.gtceu.palladium_substation": "Palladium Substation", + "block.gtceu.petrified_foam": "Petrified Foam", + "block.gtceu.pink_lamp": "Pink Lamp", "block.gtceu.plascrete": "Plascrete", "block.gtceu.plasma_large_turbine": "Large Plasma Turbine", + "block.gtceu.polished_dark_concrete": "Polished Dark Concrete", + "block.gtceu.polished_light_concrete": "Polished Light Concrete", + "block.gtceu.polished_marble": "Polished Marble", + "block.gtceu.polished_red_granite": "Polished Red Granite", "block.gtceu.power_substation": "Power Substation", "block.gtceu.primitive_blast_furnace": "Primitive Blast Furnace", "block.gtceu.primitive_pump": "Primitive Pump", "block.gtceu.ptfe_pipe_casing": "PTFE Pipe Casing", "block.gtceu.pump_deck": "Pump Deck", "block.gtceu.pump_hatch": "Pump Hatch", + "block.gtceu.purple_lamp": "Purple Lamp", "block.gtceu.pyrolyse_oven": "Pyrolyse Oven", + "block.gtceu.radioactive_hazard_sign_block": "Radioactive Hazard Sign Block", "block.gtceu.reaction_safe_mixing_casing": "Reaction-Safe Mixing Casing", + "block.gtceu.red_granite": "Red Granite", + "block.gtceu.red_granite_bricks": "Red Granite Bricks", + "block.gtceu.red_granite_cobblestone": "Red Granite Cobblestone", + "block.gtceu.red_granite_small_tile": "Red Granite Small Tile", + "block.gtceu.red_granite_tile": "Red Granite Tile", + "block.gtceu.red_lamp": "Red Lamp", + "block.gtceu.reinforced_stone": "Reinforced Stone", "block.gtceu.research_station": "Research Station", "block.gtceu.robust_machine_casing": "Robust Tungstensteel Machine Casing", "block.gtceu.rtm_alloy_coil_block": "RTM Alloy Coil Block", + "block.gtceu.rubber_button": "Rubber Button", + "block.gtceu.rubber_door": "Rubber Door", + "block.gtceu.rubber_fence": "Rubber Fence", + "block.gtceu.rubber_fence_gate": "Rubber Fence Gate", "block.gtceu.rubber_leaves": "Rubber Leaves", "block.gtceu.rubber_log": "Rubber Log", "block.gtceu.rubber_planks": "Rubber Planks", + "block.gtceu.rubber_pressure_plate": "Rubber Pressure Plate", "block.gtceu.rubber_sapling": "Rubber Sapling", + "block.gtceu.rubber_slab": "Rubber Slab", + "block.gtceu.rubber_stairs": "Rubber Stairs", + "block.gtceu.rubber_trapdoor": "Rubber Trapdoor", + "block.gtceu.rubber_wood": "Rubber Wood", "block.gtceu.secure_maceration_casing": "Secure Maceration Casing", "block.gtceu.shock_proof_cutting_casing": "Shock Proof Cutting Casing", "block.gtceu.slicing_blades": "Slicing Blades", + "block.gtceu.small_dark_concrete_bricks": "Small Dark Concrete Bricks", + "block.gtceu.small_light_concrete_bricks": "Small Light Concrete Bricks", + "block.gtceu.small_marble_bricks": "Small Marble Bricks", + "block.gtceu.small_red_granite_bricks": "Small Red Granite Bricks", + "block.gtceu.smooth_dark_concrete": "Smooth Dark Concrete", + "block.gtceu.smooth_light_concrete": "Smooth Light Concrete", + "block.gtceu.smooth_marble": "Smooth Marble", + "block.gtceu.smooth_red_granite": "Smooth Red Granite", "block.gtceu.solid_machine_casing": "Solid Machine Casing", + "block.gtceu.spatial_storage_hazard_sign_block": "Spatial Storage Hazard Sign Block", + "block.gtceu.square_dark_concrete_bricks": "Square Dark Concrete Bricks", + "block.gtceu.square_light_concrete_bricks": "Square Light Concrete Bricks", + "block.gtceu.square_marble_bricks": "Square Marble Bricks", + "block.gtceu.square_red_granite_bricks": "Square Red Granite Bricks", "block.gtceu.stable_machine_casing": "Stable Titanium Machine Casing", "block.gtceu.stainless_steel_crate": "Stainless Steel Crate", "block.gtceu.stainless_steel_drum": "Stainless Steel Drum", @@ -865,6 +963,8 @@ "block.gtceu.steel_turbine_casing": "Steel Turbine Casing", "block.gtceu.sterilizing_filter_casing": "Sterilizing Filter Casing", "block.gtceu.stress_proof_casing": "Stress Proof Casing", + "block.gtceu.stripped_rubber_log": "Stripped Rubber Log", + "block.gtceu.stripped_rubber_wood": "Stripped Rubber Wood", "block.gtceu.sturdy_machine_casing": "Sturdy HSS-E Machine Casing", "block.gtceu.superconducting_coil": "Superconducting Coil Block", "block.gtceu.tempered_glass": "Tempered Glass", @@ -875,7 +975,15 @@ "block.gtceu.titanium_large_boiler": "Large Titanium Boiler", "block.gtceu.titanium_pipe_casing": "Titanium Pipe Casing", "block.gtceu.titanium_turbine_casing": "Titanium Turbine Casing", + "block.gtceu.treated_wood_button": "Treated Wood Button", + "block.gtceu.treated_wood_door": "Treated Wood Door", + "block.gtceu.treated_wood_fence": "Treated Wood Fence", + "block.gtceu.treated_wood_fence_gate": "Treated Wood Fence Gate", "block.gtceu.treated_wood_planks": "Treated Wood Planks", + "block.gtceu.treated_wood_pressure_plate": "Treated Wood Pressure Plate", + "block.gtceu.treated_wood_slab": "Treated Wood Slab", + "block.gtceu.treated_wood_stairs": "Treated Wood Stairs", + "block.gtceu.treated_wood_trapdoor": "Treated Wood Trapdoor", "block.gtceu.trinium_coil_block": "Trinium Coil Block", "block.gtceu.tritanium_coil_block": "Tritanium Coil Block", "block.gtceu.tungsten_steel_crate": "Tungstensteel Crate", @@ -885,6 +993,7 @@ "block.gtceu.tungstensteel_large_boiler": "Large Tungstensteel Boiler", "block.gtceu.tungstensteel_pipe_casing": "Tungstensteel Pipe Casing", "block.gtceu.tungstensteel_turbine_casing": "Tungstensteel Turbine Casing", + "block.gtceu.turret_hazard_sign_block": "Turret Hazard Sign Block", "block.gtceu.uev_1024a_laser_source_hatch": "§aUEV 1,024A Laser Source Hatch", "block.gtceu.uev_1024a_laser_target_hatch": "§aUEV 1,024A Laser Target Hatch", "block.gtceu.uev_16a_energy_converter": "UEV 16A Energy Converter", @@ -1276,7 +1385,9 @@ "block.gtceu.uxv_wiremill": "§eEpic Wiremill IV§r", "block.gtceu.vacuum_freezer": "Vacuum Freezer", "block.gtceu.vibration_safe_casing": "Vibration-Safe Casing", + "block.gtceu.void_hazard_sign_block": "Void Hazard Sign Block", "block.gtceu.watertight_casing": "Watertight Casing", + "block.gtceu.white_lamp": "White Lamp", "block.gtceu.wire_coil.tooltip_cracking": "§8Cracking Unit:", "block.gtceu.wire_coil.tooltip_energy_cracking": " §aEnergy Usage: §f%s%%", "block.gtceu.wire_coil.tooltip_energy_smelter": " §aEnergy Usage: §f%s EU/t §8per recipe", @@ -1291,6 +1402,13 @@ "block.gtceu.wood_wall": "Wood Wall", "block.gtceu.wooden_multiblock_tank": "Wooden Multiblock Tank", "block.gtceu.wooden_tank_valve": "Wooden Tank Valve", + "block.gtceu.yellow_lamp": "Yellow Lamp", + "block.gtceu.yellow_stripes_block.a": "Yellow Stripes Block", + "block.gtceu.yellow_stripes_block.b": "Yellow Stripes Block", + "block.gtceu.yellow_stripes_block.c": "Yellow Stripes Block", + "block.gtceu.yellow_stripes_block.d": "Yellow Stripes Block", + "block.gtceu.yellow_stripes_block_a": "Yellow Stripes Block A", + "block.gtceu.yellow_stripes_block_b": "Yellow Stripes Block B", "block.gtceu.zpm_1024a_laser_source_hatch": "§cZPM 1,024A Laser Source Hatch", "block.gtceu.zpm_1024a_laser_target_hatch": "§cZPM 1,024A Laser Target Hatch", "block.gtceu.zpm_16a_energy_converter": "ZPM 16A Energy Converter", @@ -1495,8 +1613,10 @@ "compass.node.gtceu.generation/rubber_log": "Rubber Log", "compass.node.gtceu.generation/rubber_planks": "Rubber Planks", "compass.node.gtceu.generation/rubber_sapling": "Rubber Sapling", + "compass.node.gtceu.generation/rubber_slab": "Rubber Slab", "compass.node.gtceu.generation/sand": "Sand", "compass.node.gtceu.generation/stone": "Stone", + "compass.node.gtceu.generation/treated_wood_slab": "Treated Wood Slab", "compass.node.gtceu.generation/tuff": "Tuff", "compass.node.gtceu.hv/cleanroom": "Cleanroom", "compass.node.gtceu.hv/implosion_compressor": "Implosion Compressor", @@ -1603,14 +1723,12 @@ "compass.node.gtceu.materials/block": "Block", "compass.node.gtceu.materials/bolt": "Bolt", "compass.node.gtceu.materials/chainsaw_head": "Chainsaw Head", - "compass.node.gtceu.materials/chipped_gem": "Chipped Gem", "compass.node.gtceu.materials/crushed_ore": "Crushed Ore", "compass.node.gtceu.materials/dense_plate": "Dense Plate", "compass.node.gtceu.materials/double_plate": "Double Plate", "compass.node.gtceu.materials/dust": "Dust", "compass.node.gtceu.materials/exquisite_gem": "Exquisite Gem", "compass.node.gtceu.materials/fine_wire": "Fine Wire", - "compass.node.gtceu.materials/flawed_gem": "Flawed Gem", "compass.node.gtceu.materials/flawless_gem": "Flawless Gem", "compass.node.gtceu.materials/foil": "Foil", "compass.node.gtceu.materials/frame": "Frame", @@ -1844,8 +1962,8 @@ "config.gtceu.option.addLoot": "addLoot", "config.gtceu.option.allUniqueStoneTypes": "allUniqueStoneTypes", "config.gtceu.option.animationTime": "animationTime", + "config.gtceu.option.bedrockOreDistance": "bedrockOreDistance", "config.gtceu.option.bedrockOreDropTagPrefix": "bedrockOreDropTagPrefix", - "config.gtceu.option.bedrockOreMultiplier": "bedrockOreMultiplier", "config.gtceu.option.casingsPerCraft": "casingsPerCraft", "config.gtceu.option.cleanMultiblocks": "cleanMultiblocks", "config.gtceu.option.client": "client", @@ -2264,7 +2382,6 @@ "gtceu.fusion_reactor": "Fusion Reactor", "gtceu.gas_collector": "Gas Collector", "gtceu.gas_turbine": "Gas Turbine", - "gtceu.greenhouse": "Greenhouse", "gtceu.gui.auto_output.name": "auto", "gtceu.gui.charger_slot.tooltip.0": "§fCharger Slot§r", "gtceu.gui.charger_slot.tooltip.1": "§7Draws power from %s batteries§r", @@ -3179,6 +3296,9 @@ "gtceu.multiblock.network_switch.description": "The Network Switch is a multiblock structure used for distributing Computation from many sources to many destinations. It can accept any number of Computation Data Reception or Transmission Hatches. It is necessary for Research Data which requires much higher Computation, as the Research Station can only accept one Computation Data Reception Hatch. HPCAs must have a Bridge Component for the Network Switch to be able to access their Computation.", "gtceu.multiblock.not_enough_energy": "WARNING: Machine needs more energy.", "gtceu.multiblock.not_enough_energy_output": "WARNING: Energy Dynamo Tier Too Low!", + "gtceu.multiblock.ore_rig.drilled_ore_entry": " - %s", + "gtceu.multiblock.ore_rig.drilled_ores_list": "Ores:", + "gtceu.multiblock.ore_rig.ore_amount": "Drilling Rate: %s", "gtceu.multiblock.page_switcher.io.both": "§5Combined Inputs + Outputs", "gtceu.multiblock.page_switcher.io.export": "§4Outputs", "gtceu.multiblock.page_switcher.io.import": "§2Inputs", @@ -4701,7 +4821,7 @@ "material.gtceu.iridium_chloride": "Iridium Chloride", "material.gtceu.iridium_metal_residue": "Iridium Metal Residue", "material.gtceu.iron": "Iron", - "material.gtceu.iron_iii_chloride": "Iron Iii Chloride", + "material.gtceu.iron_iii_chloride": "Iron III Chloride", "material.gtceu.isoprene": "Isoprene", "material.gtceu.kanthal": "Kanthal", "material.gtceu.krypton": "Krypton", @@ -5169,12 +5289,15 @@ "tagprefix.deepslate": "Deepslate %s Ore", "tagprefix.dense_plate": "Dense %s Plate", "tagprefix.diorite": "Diorite %s Ore", + "tagprefix.door": "%s Door", "tagprefix.double_plate": "Double %s Plate", "tagprefix.drill_head": "%s Drill Head", "tagprefix.dust": "%s Dust", "tagprefix.dye": "%s Dye", "tagprefix.endstone": "End %s Ore", "tagprefix.exquisite_gem": "Exquisite %s", + "tagprefix.fence": "%s Fence", + "tagprefix.fence_gate": "%s Fence Gate", "tagprefix.fine_wire": "Fine %s Wire", "tagprefix.flawed_gem": "Flawed %s", "tagprefix.flawless_gem": "Flawless %s", @@ -5188,6 +5311,7 @@ "tagprefix.impure_dust": "Impure Pile of %s Dust", "tagprefix.ingot": "%s Ingot", "tagprefix.lens": "%s Lens", + "tagprefix.log": "%s Log", "tagprefix.long_rod": "Long %s Rod", "tagprefix.netherrack": "Nether %s Ore", "tagprefix.nugget": "%s Nugget", @@ -5231,10 +5355,12 @@ "tagprefix.sand": "Sand %s Ore", "tagprefix.screw": "%s Screw", "tagprefix.screwdriver_tip": "%s Screwdriver Tip", + "tagprefix.slab": "%s Slab", "tagprefix.small_dust": "Small Pile of %s Dust", "tagprefix.small_gear": "Small %s Gear", "tagprefix.small_spring": "Small %s Spring", "tagprefix.spring": "%s Spring", + "tagprefix.stairs": "%s Stairs", "tagprefix.stone": "%s Ore", "tagprefix.tiny_dust": "Tiny Pile of %s Dust", "tagprefix.tuff": "Tuff %s Ore", diff --git a/src/generated/resources/assets/gtceu/models/block/black_lamp.json b/src/generated/resources/assets/gtceu/models/block/black_lamp.json new file mode 100644 index 0000000000..b13f545806 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/black_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/black_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/blue_lamp.json b/src/generated/resources/assets/gtceu/models/block/blue_lamp.json new file mode 100644 index 0000000000..11b54361ab --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/blue_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/blue_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/brown_lamp.json b/src/generated/resources/assets/gtceu/models/block/brown_lamp.json new file mode 100644 index 0000000000..4df8935d52 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/brown_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/brown_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/chiseled_dark_concrete.json b/src/generated/resources/assets/gtceu/models/block/chiseled_dark_concrete.json new file mode 100644 index 0000000000..694d7e4bac --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/chiseled_dark_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/chiseled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/chiseled_light_concrete.json b/src/generated/resources/assets/gtceu/models/block/chiseled_light_concrete.json new file mode 100644 index 0000000000..b1fe7b5eb3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/chiseled_light_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/chiseled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/chiseled_marble.json b/src/generated/resources/assets/gtceu/models/block/chiseled_marble.json new file mode 100644 index 0000000000..f0dfee1572 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/chiseled_marble.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/chiseled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/chiseled_red_granite.json b/src/generated/resources/assets/gtceu/models/block/chiseled_red_granite.json new file mode 100644 index 0000000000..e3261149b5 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/chiseled_red_granite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/chiseled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/cracked_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/cracked_dark_concrete_bricks.json new file mode 100644 index 0000000000..f7681526cd --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/cracked_dark_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/bricks_cracked" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/cracked_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/cracked_light_concrete_bricks.json new file mode 100644 index 0000000000..f7389738b6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/cracked_light_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/bricks_cracked" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/cracked_marble_bricks.json b/src/generated/resources/assets/gtceu/models/block/cracked_marble_bricks.json new file mode 100644 index 0000000000..3c8195ee15 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/cracked_marble_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/bricks_cracked" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/cracked_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/block/cracked_red_granite_bricks.json new file mode 100644 index 0000000000..7e13d74fc2 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/cracked_red_granite_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/bricks_cracked" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/cyan_lamp.json b/src/generated/resources/assets/gtceu/models/block/cyan_lamp.json new file mode 100644 index 0000000000..a16fa4b114 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/cyan_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/cyan_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/dark_concrete.json b/src/generated/resources/assets/gtceu/models/block/dark_concrete.json new file mode 100644 index 0000000000..d57529c017 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/dark_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/dark_concrete_bricks.json new file mode 100644 index 0000000000..2fd73ba66d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/dark_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/dark_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/dark_concrete_cobblestone.json new file mode 100644 index 0000000000..874878447d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/dark_concrete_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/cobble" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/dark_concrete_small_tile.json b/src/generated/resources/assets/gtceu/models/block/dark_concrete_small_tile.json new file mode 100644 index 0000000000..d1ab3ba38b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/dark_concrete_small_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/tiled_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/dark_concrete_tile.json b/src/generated/resources/assets/gtceu/models/block/dark_concrete_tile.json new file mode 100644 index 0000000000..5ffdebf6ca --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/dark_concrete_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/tiled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/foam.json b/src/generated/resources/assets/gtceu/models/block/foam.json new file mode 100644 index 0000000000..d724c8d097 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/foam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/foam" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/gray_lamp.json b/src/generated/resources/assets/gtceu/models/block/gray_lamp.json new file mode 100644 index 0000000000..beda3952f8 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/gray_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/gray_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/green_lamp.json b/src/generated/resources/assets/gtceu/models/block/green_lamp.json new file mode 100644 index 0000000000..1e775ab175 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/green_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/green_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/light_blue_lamp.json b/src/generated/resources/assets/gtceu/models/block/light_blue_lamp.json new file mode 100644 index 0000000000..bd78d14381 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/light_blue_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/light_blue_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/light_concrete.json b/src/generated/resources/assets/gtceu/models/block/light_concrete.json new file mode 100644 index 0000000000..1ebc91a46d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/light_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/light_concrete_bricks.json new file mode 100644 index 0000000000..7cf07b2988 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/light_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/light_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/light_concrete_cobblestone.json new file mode 100644 index 0000000000..20eb21fa12 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/light_concrete_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/cobble" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/light_concrete_small_tile.json b/src/generated/resources/assets/gtceu/models/block/light_concrete_small_tile.json new file mode 100644 index 0000000000..292ac8add4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/light_concrete_small_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/tiled_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/light_concrete_tile.json b/src/generated/resources/assets/gtceu/models/block/light_concrete_tile.json new file mode 100644 index 0000000000..4858362883 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/light_concrete_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/tiled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/light_gray_lamp.json b/src/generated/resources/assets/gtceu/models/block/light_gray_lamp.json new file mode 100644 index 0000000000..666321c85a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/light_gray_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/light_gray_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/lime_lamp.json b/src/generated/resources/assets/gtceu/models/block/lime_lamp.json new file mode 100644 index 0000000000..ed4e87fd1b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/lime_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/lime_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/magenta_lamp.json b/src/generated/resources/assets/gtceu/models/block/magenta_lamp.json new file mode 100644 index 0000000000..f27631b8b7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/magenta_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/magenta_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/marble.json b/src/generated/resources/assets/gtceu/models/block/marble.json new file mode 100644 index 0000000000..cbe4cbf7f0 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/marble.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/marble_bricks.json b/src/generated/resources/assets/gtceu/models/block/marble_bricks.json new file mode 100644 index 0000000000..cbae2c9420 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/marble_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/marble_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/marble_cobblestone.json new file mode 100644 index 0000000000..978a1bd347 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/marble_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/cobble" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/marble_mirrored.json b/src/generated/resources/assets/gtceu/models/block/marble_mirrored.json new file mode 100644 index 0000000000..ff3999dedd --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/marble_mirrored.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_mirrored_all", + "textures": { + "all": "gtceu:block/stones/marble/stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/marble_small_tile.json b/src/generated/resources/assets/gtceu/models/block/marble_small_tile.json new file mode 100644 index 0000000000..d166ff85ac --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/marble_small_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/tiled_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/marble_tile.json b/src/generated/resources/assets/gtceu/models/block/marble_tile.json new file mode 100644 index 0000000000..208aacf109 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/marble_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/tiled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/mossy_dark_concrete_bricks.json new file mode 100644 index 0000000000..f9c7b4120d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_dark_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/bricks_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_dark_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/mossy_dark_concrete_cobblestone.json new file mode 100644 index 0000000000..23407f818b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_dark_concrete_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/cobble_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/mossy_light_concrete_bricks.json new file mode 100644 index 0000000000..c476458d6a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_light_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/bricks_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_light_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/mossy_light_concrete_cobblestone.json new file mode 100644 index 0000000000..3ecaba2ab3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_light_concrete_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/cobble_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_marble_bricks.json b/src/generated/resources/assets/gtceu/models/block/mossy_marble_bricks.json new file mode 100644 index 0000000000..7cabe5f8ec --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_marble_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/bricks_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_marble_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/mossy_marble_cobblestone.json new file mode 100644 index 0000000000..59a9aae347 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_marble_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/cobble_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/block/mossy_red_granite_bricks.json new file mode 100644 index 0000000000..370c22d3bf --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_red_granite_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/bricks_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/mossy_red_granite_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/mossy_red_granite_cobblestone.json new file mode 100644 index 0000000000..7d8b1de52a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/mossy_red_granite_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/cobble_mossy" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/orange_lamp.json b/src/generated/resources/assets/gtceu/models/block/orange_lamp.json new file mode 100644 index 0000000000..7f918a2a33 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/orange_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/orange_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/petrified_foam.json b/src/generated/resources/assets/gtceu/models/block/petrified_foam.json new file mode 100644 index 0000000000..4c9b5ce7a4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/petrified_foam.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/petrified_foam" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/pink_lamp.json b/src/generated/resources/assets/gtceu/models/block/pink_lamp.json new file mode 100644 index 0000000000..f04f81253b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/pink_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/pink_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/polished_dark_concrete.json b/src/generated/resources/assets/gtceu/models/block/polished_dark_concrete.json new file mode 100644 index 0000000000..517d4c9946 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/polished_dark_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/polished_light_concrete.json b/src/generated/resources/assets/gtceu/models/block/polished_light_concrete.json new file mode 100644 index 0000000000..af23415dc7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/polished_light_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/polished_marble.json b/src/generated/resources/assets/gtceu/models/block/polished_marble.json new file mode 100644 index 0000000000..eb762e72e5 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/polished_marble.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/polished_red_granite.json b/src/generated/resources/assets/gtceu/models/block/polished_red_granite.json new file mode 100644 index 0000000000..10f2780418 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/polished_red_granite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/polished" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/purple_lamp.json b/src/generated/resources/assets/gtceu/models/block/purple_lamp.json new file mode 100644 index 0000000000..e68e70a95a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/purple_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/purple_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/red_granite.json b/src/generated/resources/assets/gtceu/models/block/red_granite.json new file mode 100644 index 0000000000..c41dee2805 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/red_granite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/block/red_granite_bricks.json new file mode 100644 index 0000000000..79473e5597 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/red_granite_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/red_granite_cobblestone.json b/src/generated/resources/assets/gtceu/models/block/red_granite_cobblestone.json new file mode 100644 index 0000000000..5b39c0c969 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/red_granite_cobblestone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/cobble" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/red_granite_mirrored.json b/src/generated/resources/assets/gtceu/models/block/red_granite_mirrored.json new file mode 100644 index 0000000000..07ad06a66f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/red_granite_mirrored.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_mirrored_all", + "textures": { + "all": "gtceu:block/stones/red_granite/stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/red_granite_small_tile.json b/src/generated/resources/assets/gtceu/models/block/red_granite_small_tile.json new file mode 100644 index 0000000000..7f770eede3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/red_granite_small_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/tiled_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/red_granite_tile.json b/src/generated/resources/assets/gtceu/models/block/red_granite_tile.json new file mode 100644 index 0000000000..96d6bcee18 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/red_granite_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/tiled" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/red_lamp.json b/src/generated/resources/assets/gtceu/models/block/red_lamp.json new file mode 100644 index 0000000000..7d5081fac1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/red_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/red_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/reinforced_stone.json b/src/generated/resources/assets/gtceu/models/block/reinforced_stone.json new file mode 100644 index 0000000000..f08ae2a4f1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/reinforced_stone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/reinforced_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_button.json b/src/generated/resources/assets/gtceu/models/block/rubber_button.json new file mode 100644 index 0000000000..b98dad651e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_button_pressed.json b/src/generated/resources/assets/gtceu/models/block/rubber_button_pressed.json new file mode 100644 index 0000000000..ab7014c0bf --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_left.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_left.json new file mode 100644 index 0000000000..5a458a3ae4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_left", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_left_open.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_left_open.json new file mode 100644 index 0000000000..ca5908f26f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_left_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_right.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_right.json new file mode 100644 index 0000000000..5178628ce9 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_right", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_right_open.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_right_open.json new file mode 100644 index 0000000000..f7b5e85a7f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_bottom_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_right_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_top_left.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_left.json new file mode 100644 index 0000000000..12461c3665 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_left", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_top_left_open.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_left_open.json new file mode 100644 index 0000000000..33c8d3c92c --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_left_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_top_right.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_right.json new file mode 100644 index 0000000000..2167a8ef4e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_right", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_door_top_right_open.json b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_right_open.json new file mode 100644 index 0000000000..5af622fddc --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_door_top_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_right_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate.json b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate.json new file mode 100644 index 0000000000..0aa2852cdf --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_open.json b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_open.json new file mode 100644 index 0000000000..4b8597c1dd --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_wall.json b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_wall.json new file mode 100644 index 0000000000..2353f26989 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_wall_open.json b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_wall_open.json new file mode 100644 index 0000000000..1ef257d0b1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_fence_post.json b/src/generated/resources/assets/gtceu/models/block/rubber_fence_post.json new file mode 100644 index 0000000000..4b5ae14579 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_fence_side.json b/src/generated/resources/assets/gtceu/models/block/rubber_fence_side.json new file mode 100644 index 0000000000..b96e018fc5 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_pressure_plate.json b/src/generated/resources/assets/gtceu/models/block/rubber_pressure_plate.json new file mode 100644 index 0000000000..411708bd21 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_pressure_plate_down.json b/src/generated/resources/assets/gtceu/models/block/rubber_pressure_plate_down.json new file mode 100644 index 0000000000..4a6a51ddce --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_sign.json b/src/generated/resources/assets/gtceu/models/block/rubber_sign.json new file mode 100644 index 0000000000..9791a71075 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/rubber_sign" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_slab.json b/src/generated/resources/assets/gtceu/models/block/rubber_slab.json new file mode 100644 index 0000000000..55808655a6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "gtceu:block/rubber_planks", + "side": "gtceu:block/rubber_planks", + "top": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_slab_top.json b/src/generated/resources/assets/gtceu/models/block/rubber_slab_top.json new file mode 100644 index 0000000000..42c6065d46 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "gtceu:block/rubber_planks", + "side": "gtceu:block/rubber_planks", + "top": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_stairs.json b/src/generated/resources/assets/gtceu/models/block/rubber_stairs.json new file mode 100644 index 0000000000..b1b5f83e98 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "gtceu:block/rubber_planks", + "side": "gtceu:block/rubber_planks", + "top": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_stairs_inner.json b/src/generated/resources/assets/gtceu/models/block/rubber_stairs_inner.json new file mode 100644 index 0000000000..5d66dcb30d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "gtceu:block/rubber_planks", + "side": "gtceu:block/rubber_planks", + "top": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_stairs_outer.json b/src/generated/resources/assets/gtceu/models/block/rubber_stairs_outer.json new file mode 100644 index 0000000000..5f2a9fcae1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "gtceu:block/rubber_planks", + "side": "gtceu:block/rubber_planks", + "top": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_trapdoor.json b/src/generated/resources/assets/gtceu/models/block/rubber_trapdoor.json new file mode 100644 index 0000000000..fd524066dc --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_trapdoor.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/rubber_trapdoor" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_wall_sign.json b/src/generated/resources/assets/gtceu/models/block/rubber_wall_sign.json new file mode 100644 index 0000000000..913d7c0d1b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_wall_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/rubber_wall_sign" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_wood.json b/src/generated/resources/assets/gtceu/models/block/rubber_wood.json new file mode 100644 index 0000000000..c6d1bfcd8d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "gtceu:block/rubber_log", + "side": "gtceu:block/rubber_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/rubber_wood_horizontal.json b/src/generated/resources/assets/gtceu/models/block/rubber_wood_horizontal.json new file mode 100644 index 0000000000..d9a14e3bd6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/rubber_wood_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "gtceu:block/rubber_log", + "side": "gtceu:block/rubber_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/small_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/small_dark_concrete_bricks.json new file mode 100644 index 0000000000..6502bb51da --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/small_dark_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/bricks_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/small_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/small_light_concrete_bricks.json new file mode 100644 index 0000000000..1edb147cb9 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/small_light_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/bricks_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/small_marble_bricks.json b/src/generated/resources/assets/gtceu/models/block/small_marble_bricks.json new file mode 100644 index 0000000000..40c5602280 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/small_marble_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/bricks_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/small_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/block/small_red_granite_bricks.json new file mode 100644 index 0000000000..7ac7659643 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/small_red_granite_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/bricks_small" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/smooth_dark_concrete.json b/src/generated/resources/assets/gtceu/models/block/smooth_dark_concrete.json new file mode 100644 index 0000000000..d1da1c50dc --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/smooth_dark_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/smooth" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/smooth_light_concrete.json b/src/generated/resources/assets/gtceu/models/block/smooth_light_concrete.json new file mode 100644 index 0000000000..699dc05d84 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/smooth_light_concrete.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/smooth" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/smooth_marble.json b/src/generated/resources/assets/gtceu/models/block/smooth_marble.json new file mode 100644 index 0000000000..a63de58142 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/smooth_marble.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/smooth" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/smooth_red_granite.json b/src/generated/resources/assets/gtceu/models/block/smooth_red_granite.json new file mode 100644 index 0000000000..18bbac5d2c --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/smooth_red_granite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/smooth" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/square_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/square_dark_concrete_bricks.json new file mode 100644 index 0000000000..835ead9d9a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/square_dark_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/dark_concrete/bricks_square" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/square_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/block/square_light_concrete_bricks.json new file mode 100644 index 0000000000..054a81bad5 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/square_light_concrete_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/light_concrete/bricks_square" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/square_marble_bricks.json b/src/generated/resources/assets/gtceu/models/block/square_marble_bricks.json new file mode 100644 index 0000000000..24bd41f82e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/square_marble_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/marble/bricks_square" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/square_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/block/square_red_granite_bricks.json new file mode 100644 index 0000000000..93a5ac2475 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/square_red_granite_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/stones/red_granite/bricks_square" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/stripped_rubber_log.json b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_log.json new file mode 100644 index 0000000000..205a69eb4c --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "gtceu:block/stripped_rubber_log_top", + "side": "gtceu:block/stripped_rubber_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/stripped_rubber_log_horizontal.json b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_log_horizontal.json new file mode 100644 index 0000000000..3073bcaf8f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "gtceu:block/stripped_rubber_log_top", + "side": "gtceu:block/stripped_rubber_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/stripped_rubber_wood.json b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_wood.json new file mode 100644 index 0000000000..c6186d5d3f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "gtceu:block/stripped_rubber_wood", + "side": "gtceu:block/stripped_rubber_wood" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/stripped_rubber_wood_horizontal.json b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_wood_horizontal.json new file mode 100644 index 0000000000..7577a2733d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/stripped_rubber_wood_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "gtceu:block/stripped_rubber_wood", + "side": "gtceu:block/stripped_rubber_wood" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_button.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_button.json new file mode 100644 index 0000000000..28d1ba8c85 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_button_pressed.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_button_pressed.json new file mode 100644 index 0000000000..0497587e04 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_left.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_left.json new file mode 100644 index 0000000000..5a458a3ae4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_left", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_left_open.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_left_open.json new file mode 100644 index 0000000000..ca5908f26f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_left_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_right.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_right.json new file mode 100644 index 0000000000..5178628ce9 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_right", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_right_open.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_right_open.json new file mode 100644 index 0000000000..f7b5e85a7f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_bottom_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_right_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_left.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_left.json new file mode 100644 index 0000000000..12461c3665 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_left", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_left_open.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_left_open.json new file mode 100644 index 0000000000..33c8d3c92c --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_left_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_right.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_right.json new file mode 100644 index 0000000000..2167a8ef4e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_right", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_right_open.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_right_open.json new file mode 100644 index 0000000000..5af622fddc --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_door_top_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_right_open", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate.json new file mode 100644 index 0000000000..077b0fb307 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_open.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_open.json new file mode 100644 index 0000000000..fcedb9dd1d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_wall.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_wall.json new file mode 100644 index 0000000000..d8bdb1d777 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_wall_open.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_wall_open.json new file mode 100644 index 0000000000..5f7433da0e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_post.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_post.json new file mode 100644 index 0000000000..cbdda6fb45 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_side.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_side.json new file mode 100644 index 0000000000..c38ab3ee0b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_pressure_plate.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_pressure_plate.json new file mode 100644 index 0000000000..9736415f4e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_pressure_plate_down.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_pressure_plate_down.json new file mode 100644 index 0000000000..848fad4d3b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_sign.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_sign.json new file mode 100644 index 0000000000..2d48afc4a9 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/treated_wood_sign" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_slab.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_slab.json new file mode 100644 index 0000000000..2f4e206022 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "gtceu:block/treated_wood_planks", + "side": "gtceu:block/treated_wood_planks", + "top": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_slab_top.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_slab_top.json new file mode 100644 index 0000000000..a406c91ad9 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "gtceu:block/treated_wood_planks", + "side": "gtceu:block/treated_wood_planks", + "top": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs.json new file mode 100644 index 0000000000..43d703b30a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "gtceu:block/treated_wood_planks", + "side": "gtceu:block/treated_wood_planks", + "top": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs_inner.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs_inner.json new file mode 100644 index 0000000000..1ecbe73aeb --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "gtceu:block/treated_wood_planks", + "side": "gtceu:block/treated_wood_planks", + "top": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs_outer.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs_outer.json new file mode 100644 index 0000000000..21fd3e73ce --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "gtceu:block/treated_wood_planks", + "side": "gtceu:block/treated_wood_planks", + "top": "gtceu:block/treated_wood_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_trapdoor.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_trapdoor.json new file mode 100644 index 0000000000..8bad4accc3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_trapdoor.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/treated_wood_trapdoor" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/treated_wood_wall_sign.json b/src/generated/resources/assets/gtceu/models/block/treated_wood_wall_sign.json new file mode 100644 index 0000000000..f20c7ffd33 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/treated_wood_wall_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/treated_wood_wall_sign" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/white_lamp.json b/src/generated/resources/assets/gtceu/models/block/white_lamp.json new file mode 100644 index 0000000000..976259ba70 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/white_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/white_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/block/yellow_lamp.json b/src/generated/resources/assets/gtceu/models/block/yellow_lamp.json new file mode 100644 index 0000000000..6a46a3494a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/yellow_lamp.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "gtceu:block/yellow_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/black_lamp.json b/src/generated/resources/assets/gtceu/models/item/black_lamp.json new file mode 100644 index 0000000000..5009d942bb --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/black_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/black_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/blue_lamp.json b/src/generated/resources/assets/gtceu/models/item/blue_lamp.json new file mode 100644 index 0000000000..21629af87f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/blue_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/blue_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/brown_lamp.json b/src/generated/resources/assets/gtceu/models/item/brown_lamp.json new file mode 100644 index 0000000000..2a031d3fe6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/brown_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/brown_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/chiseled_dark_concrete.json b/src/generated/resources/assets/gtceu/models/item/chiseled_dark_concrete.json new file mode 100644 index 0000000000..3f384d322a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/chiseled_dark_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/chiseled_dark_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/chiseled_light_concrete.json b/src/generated/resources/assets/gtceu/models/item/chiseled_light_concrete.json new file mode 100644 index 0000000000..afd45becf0 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/chiseled_light_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/chiseled_light_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/chiseled_marble.json b/src/generated/resources/assets/gtceu/models/item/chiseled_marble.json new file mode 100644 index 0000000000..ed0bef1479 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/chiseled_marble.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/chiseled_marble" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/chiseled_red_granite.json b/src/generated/resources/assets/gtceu/models/item/chiseled_red_granite.json new file mode 100644 index 0000000000..e12782b7d7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/chiseled_red_granite.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/chiseled_red_granite" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/cracked_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/cracked_dark_concrete_bricks.json new file mode 100644 index 0000000000..6f9d6bd774 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/cracked_dark_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/cracked_dark_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/cracked_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/cracked_light_concrete_bricks.json new file mode 100644 index 0000000000..eee47273c3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/cracked_light_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/cracked_light_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/cracked_marble_bricks.json b/src/generated/resources/assets/gtceu/models/item/cracked_marble_bricks.json new file mode 100644 index 0000000000..70197c5872 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/cracked_marble_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/cracked_marble_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/cracked_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/item/cracked_red_granite_bricks.json new file mode 100644 index 0000000000..23d1c85d2e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/cracked_red_granite_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/cracked_red_granite_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/cyan_lamp.json b/src/generated/resources/assets/gtceu/models/item/cyan_lamp.json new file mode 100644 index 0000000000..610b95fa37 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/cyan_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/cyan_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/dark_concrete.json b/src/generated/resources/assets/gtceu/models/item/dark_concrete.json new file mode 100644 index 0000000000..494c5dacc5 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/dark_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/dark_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/dark_concrete_bricks.json new file mode 100644 index 0000000000..9664badff3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/dark_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/dark_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/dark_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/dark_concrete_cobblestone.json new file mode 100644 index 0000000000..2e41546e3d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/dark_concrete_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/dark_concrete_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/dark_concrete_small_tile.json b/src/generated/resources/assets/gtceu/models/item/dark_concrete_small_tile.json new file mode 100644 index 0000000000..26e7c927d4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/dark_concrete_small_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/dark_concrete_small_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/dark_concrete_tile.json b/src/generated/resources/assets/gtceu/models/item/dark_concrete_tile.json new file mode 100644 index 0000000000..c1f6b31163 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/dark_concrete_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/dark_concrete_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/foam.json b/src/generated/resources/assets/gtceu/models/item/foam.json new file mode 100644 index 0000000000..1bedf6b3e3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/foam.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/foam" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/gray_lamp.json b/src/generated/resources/assets/gtceu/models/item/gray_lamp.json new file mode 100644 index 0000000000..f1f49ba032 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/gray_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/gray_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/green_lamp.json b/src/generated/resources/assets/gtceu/models/item/green_lamp.json new file mode 100644 index 0000000000..34ee092395 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/green_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/green_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/light_blue_lamp.json b/src/generated/resources/assets/gtceu/models/item/light_blue_lamp.json new file mode 100644 index 0000000000..0aa9f92d08 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/light_blue_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/light_blue_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/light_concrete.json b/src/generated/resources/assets/gtceu/models/item/light_concrete.json new file mode 100644 index 0000000000..a442f57914 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/light_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/light_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/light_concrete_bricks.json new file mode 100644 index 0000000000..bc217d3dce --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/light_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/light_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/light_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/light_concrete_cobblestone.json new file mode 100644 index 0000000000..1b3d3f81e7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/light_concrete_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/light_concrete_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/light_concrete_small_tile.json b/src/generated/resources/assets/gtceu/models/item/light_concrete_small_tile.json new file mode 100644 index 0000000000..c88d86bf68 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/light_concrete_small_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/light_concrete_small_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/light_concrete_tile.json b/src/generated/resources/assets/gtceu/models/item/light_concrete_tile.json new file mode 100644 index 0000000000..581c391137 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/light_concrete_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/light_concrete_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/light_gray_lamp.json b/src/generated/resources/assets/gtceu/models/item/light_gray_lamp.json new file mode 100644 index 0000000000..4ff258a6e7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/light_gray_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/light_gray_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/lime_lamp.json b/src/generated/resources/assets/gtceu/models/item/lime_lamp.json new file mode 100644 index 0000000000..a154c799b5 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/lime_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/lime_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/magenta_lamp.json b/src/generated/resources/assets/gtceu/models/item/magenta_lamp.json new file mode 100644 index 0000000000..917e0ebbd2 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/magenta_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/magenta_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/marble.json b/src/generated/resources/assets/gtceu/models/item/marble.json new file mode 100644 index 0000000000..89a226f2cd --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/marble.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/marble" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/marble_bricks.json b/src/generated/resources/assets/gtceu/models/item/marble_bricks.json new file mode 100644 index 0000000000..cfe0dc4c3e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/marble_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/marble_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/marble_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/marble_cobblestone.json new file mode 100644 index 0000000000..9587b74306 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/marble_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/marble_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/marble_small_tile.json b/src/generated/resources/assets/gtceu/models/item/marble_small_tile.json new file mode 100644 index 0000000000..e39ce78c72 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/marble_small_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/marble_small_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/marble_tile.json b/src/generated/resources/assets/gtceu/models/item/marble_tile.json new file mode 100644 index 0000000000..8092e9838f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/marble_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/marble_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/mossy_dark_concrete_bricks.json new file mode 100644 index 0000000000..d0972e0fe6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_dark_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_dark_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_dark_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/mossy_dark_concrete_cobblestone.json new file mode 100644 index 0000000000..75458ad63c --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_dark_concrete_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_dark_concrete_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/mossy_light_concrete_bricks.json new file mode 100644 index 0000000000..fe046ba8d0 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_light_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_light_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_light_concrete_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/mossy_light_concrete_cobblestone.json new file mode 100644 index 0000000000..dcc0e3484e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_light_concrete_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_light_concrete_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_marble_bricks.json b/src/generated/resources/assets/gtceu/models/item/mossy_marble_bricks.json new file mode 100644 index 0000000000..8f6574e03a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_marble_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_marble_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_marble_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/mossy_marble_cobblestone.json new file mode 100644 index 0000000000..3e6040adaa --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_marble_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_marble_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/item/mossy_red_granite_bricks.json new file mode 100644 index 0000000000..e6f9901f01 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_red_granite_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_red_granite_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/mossy_red_granite_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/mossy_red_granite_cobblestone.json new file mode 100644 index 0000000000..3705126107 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/mossy_red_granite_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/mossy_red_granite_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/orange_lamp.json b/src/generated/resources/assets/gtceu/models/item/orange_lamp.json new file mode 100644 index 0000000000..f7bfda11c7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/orange_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/orange_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/petrified_foam.json b/src/generated/resources/assets/gtceu/models/item/petrified_foam.json new file mode 100644 index 0000000000..4582195931 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/petrified_foam.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/petrified_foam" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/pink_lamp.json b/src/generated/resources/assets/gtceu/models/item/pink_lamp.json new file mode 100644 index 0000000000..f39eb45c97 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/pink_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/pink_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/polished_dark_concrete.json b/src/generated/resources/assets/gtceu/models/item/polished_dark_concrete.json new file mode 100644 index 0000000000..b88df3a62f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/polished_dark_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/polished_dark_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/polished_light_concrete.json b/src/generated/resources/assets/gtceu/models/item/polished_light_concrete.json new file mode 100644 index 0000000000..d133332104 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/polished_light_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/polished_light_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/polished_marble.json b/src/generated/resources/assets/gtceu/models/item/polished_marble.json new file mode 100644 index 0000000000..d6c66615f1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/polished_marble.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/polished_marble" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/polished_red_granite.json b/src/generated/resources/assets/gtceu/models/item/polished_red_granite.json new file mode 100644 index 0000000000..c85443e20b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/polished_red_granite.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/polished_red_granite" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/purple_lamp.json b/src/generated/resources/assets/gtceu/models/item/purple_lamp.json new file mode 100644 index 0000000000..bfb10ac85f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/purple_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/purple_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/red_granite.json b/src/generated/resources/assets/gtceu/models/item/red_granite.json new file mode 100644 index 0000000000..adb6460249 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/red_granite.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/red_granite" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/item/red_granite_bricks.json new file mode 100644 index 0000000000..54812d0460 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/red_granite_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/red_granite_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/red_granite_cobblestone.json b/src/generated/resources/assets/gtceu/models/item/red_granite_cobblestone.json new file mode 100644 index 0000000000..bfb6f4119f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/red_granite_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/red_granite_cobblestone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/red_granite_small_tile.json b/src/generated/resources/assets/gtceu/models/item/red_granite_small_tile.json new file mode 100644 index 0000000000..f5efeb1c39 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/red_granite_small_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/red_granite_small_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/red_granite_tile.json b/src/generated/resources/assets/gtceu/models/item/red_granite_tile.json new file mode 100644 index 0000000000..1a9dbdea02 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/red_granite_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/red_granite_tile" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/red_lamp.json b/src/generated/resources/assets/gtceu/models/item/red_lamp.json new file mode 100644 index 0000000000..1c324092d6 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/red_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/red_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/reinforced_stone.json b/src/generated/resources/assets/gtceu/models/item/reinforced_stone.json new file mode 100644 index 0000000000..1e991017e4 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/reinforced_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/reinforced_stone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_button.json b/src/generated/resources/assets/gtceu/models/item/rubber_button.json new file mode 100644 index 0000000000..ac15af2a4e --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_button.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_button" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_door.json b/src/generated/resources/assets/gtceu/models/item/rubber_door.json new file mode 100644 index 0000000000..2c8a2621d1 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_door.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_door" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_fence.json b/src/generated/resources/assets/gtceu/models/item/rubber_fence.json new file mode 100644 index 0000000000..d530dc11c0 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_fence" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_fence_gate.json b/src/generated/resources/assets/gtceu/models/item/rubber_fence_gate.json new file mode 100644 index 0000000000..b792192f76 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_fence_gate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_pressure_plate.json b/src/generated/resources/assets/gtceu/models/item/rubber_pressure_plate.json new file mode 100644 index 0000000000..020d8b64d5 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_pressure_plate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_sign.json b/src/generated/resources/assets/gtceu/models/item/rubber_sign.json new file mode 100644 index 0000000000..8f001c3916 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_sign.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_sign" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_slab.json b/src/generated/resources/assets/gtceu/models/item/rubber_slab.json new file mode 100644 index 0000000000..bd7a60b86f --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_slab" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_stairs.json b/src/generated/resources/assets/gtceu/models/item/rubber_stairs.json new file mode 100644 index 0000000000..6d8337d246 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_stairs" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_trapdoor.json b/src/generated/resources/assets/gtceu/models/item/rubber_trapdoor.json new file mode 100644 index 0000000000..2a2d201498 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_trapdoor" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/rubber_wood.json b/src/generated/resources/assets/gtceu/models/item/rubber_wood.json new file mode 100644 index 0000000000..ac6d6a1437 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/rubber_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/rubber_wood" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/small_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/small_dark_concrete_bricks.json new file mode 100644 index 0000000000..a742b029cc --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/small_dark_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/small_dark_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/small_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/small_light_concrete_bricks.json new file mode 100644 index 0000000000..aa59308860 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/small_light_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/small_light_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/small_marble_bricks.json b/src/generated/resources/assets/gtceu/models/item/small_marble_bricks.json new file mode 100644 index 0000000000..9f2e68595d --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/small_marble_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/small_marble_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/small_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/item/small_red_granite_bricks.json new file mode 100644 index 0000000000..7269328500 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/small_red_granite_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/small_red_granite_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/smooth_dark_concrete.json b/src/generated/resources/assets/gtceu/models/item/smooth_dark_concrete.json new file mode 100644 index 0000000000..6b0806d048 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/smooth_dark_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/smooth_dark_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/smooth_light_concrete.json b/src/generated/resources/assets/gtceu/models/item/smooth_light_concrete.json new file mode 100644 index 0000000000..76f116d1c3 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/smooth_light_concrete.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/smooth_light_concrete" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/smooth_marble.json b/src/generated/resources/assets/gtceu/models/item/smooth_marble.json new file mode 100644 index 0000000000..bd8441464c --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/smooth_marble.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/smooth_marble" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/smooth_red_granite.json b/src/generated/resources/assets/gtceu/models/item/smooth_red_granite.json new file mode 100644 index 0000000000..8c7c9eb839 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/smooth_red_granite.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/smooth_red_granite" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/square_dark_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/square_dark_concrete_bricks.json new file mode 100644 index 0000000000..cf0957c411 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/square_dark_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/square_dark_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/square_light_concrete_bricks.json b/src/generated/resources/assets/gtceu/models/item/square_light_concrete_bricks.json new file mode 100644 index 0000000000..023b70b467 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/square_light_concrete_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/square_light_concrete_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/square_marble_bricks.json b/src/generated/resources/assets/gtceu/models/item/square_marble_bricks.json new file mode 100644 index 0000000000..4d8eeb992b --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/square_marble_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/square_marble_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/square_red_granite_bricks.json b/src/generated/resources/assets/gtceu/models/item/square_red_granite_bricks.json new file mode 100644 index 0000000000..9c13cb48a7 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/square_red_granite_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/square_red_granite_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/stripped_rubber_log.json b/src/generated/resources/assets/gtceu/models/item/stripped_rubber_log.json new file mode 100644 index 0000000000..2268fb21dc --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/stripped_rubber_log.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/stripped_rubber_log" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/stripped_rubber_wood.json b/src/generated/resources/assets/gtceu/models/item/stripped_rubber_wood.json new file mode 100644 index 0000000000..3d6a1334fe --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/stripped_rubber_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/stripped_rubber_wood" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_button.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_button.json new file mode 100644 index 0000000000..d06f211a34 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_button.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_button" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_door.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_door.json new file mode 100644 index 0000000000..27888e7e43 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_door.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_door" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_fence.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_fence.json new file mode 100644 index 0000000000..c285d0117a --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_fence" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_fence_gate.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_fence_gate.json new file mode 100644 index 0000000000..907627e311 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_fence_gate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_pressure_plate.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_pressure_plate.json new file mode 100644 index 0000000000..d1916f09ac --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_pressure_plate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_sign.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_sign.json new file mode 100644 index 0000000000..dc4d3e1917 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_sign.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_sign" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_slab.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_slab.json new file mode 100644 index 0000000000..d5aa45d183 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_slab" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_stairs.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_stairs.json new file mode 100644 index 0000000000..381835d655 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_stairs" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/treated_wood_trapdoor.json b/src/generated/resources/assets/gtceu/models/item/treated_wood_trapdoor.json new file mode 100644 index 0000000000..2d3625ff62 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/treated_wood_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/treated_wood_trapdoor" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/white_lamp.json b/src/generated/resources/assets/gtceu/models/item/white_lamp.json new file mode 100644 index 0000000000..1c31c46135 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/white_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/white_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/yellow_lamp.json b/src/generated/resources/assets/gtceu/models/item/yellow_lamp.json new file mode 100644 index 0000000000..0156ca91e9 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/item/yellow_lamp.json @@ -0,0 +1,3 @@ +{ + "parent": "gtceu:block/yellow_lamp" +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/blocks/mineable/wrench.json b/src/generated/resources/data/forge/tags/blocks/mineable/wrench.json index 23be2c886d..bfbd1cd616 100644 --- a/src/generated/resources/data/forge/tags/blocks/mineable/wrench.json +++ b/src/generated/resources/data/forge/tags/blocks/mineable/wrench.json @@ -117,6 +117,31 @@ "gtceu:computer_casing", "gtceu:advanced_computer_casing", "gtceu:computer_heat_vent", - "gtceu:high_power_casing" + "gtceu:high_power_casing", + "gtceu:acid_hazard_sign_block", + "gtceu:antimatter_hazard_sign_block", + "gtceu:bio_hazard_sign_block", + "gtceu:boss_hazard_sign_block", + "gtceu:causality_hazard_sign_block", + "gtceu:explosion_hazard_sign_block", + "gtceu:fire_hazard_sign_block", + "gtceu:frost_hazard_sign_block", + "gtceu:generic_hazard_sign_block", + "gtceu:gregification_hazard_sign_block", + "gtceu:high_pressure_hazard_sign_block", + "gtceu:high_voltage_hazard_sign_block", + "gtceu:high_temperature_hazard_sign_block", + "gtceu:laser_hazard_sign_block", + "gtceu:magic_hazard_sign_block", + "gtceu:magnetic_hazard_sign_block", + "gtceu:mob_infestation_hazard_sign_block", + "gtceu:mob_spawner_hazard_sign_block", + "gtceu:noise_hazard_sign_block", + "gtceu:radioactive_hazard_sign_block", + "gtceu:spatial_storage_hazard_sign_block", + "gtceu:turret_hazard_sign_block", + "gtceu:void_hazard_sign_block", + "gtceu:yellow_stripes_block_a", + "gtceu:yellow_stripes_block_b" ] } \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/blocks/needs_wood_tool.json b/src/generated/resources/data/forge/tags/blocks/needs_wood_tool.json new file mode 100644 index 0000000000..6592f7cb72 --- /dev/null +++ b/src/generated/resources/data/forge/tags/blocks/needs_wood_tool.json @@ -0,0 +1,56 @@ +{ + "values": [ + "gtceu:red_granite", + "gtceu:smooth_red_granite", + "gtceu:red_granite_cobblestone", + "gtceu:mossy_red_granite_cobblestone", + "gtceu:polished_red_granite", + "gtceu:red_granite_bricks", + "gtceu:cracked_red_granite_bricks", + "gtceu:mossy_red_granite_bricks", + "gtceu:chiseled_red_granite", + "gtceu:red_granite_tile", + "gtceu:red_granite_small_tile", + "gtceu:small_red_granite_bricks", + "gtceu:square_red_granite_bricks", + "gtceu:marble", + "gtceu:smooth_marble", + "gtceu:marble_cobblestone", + "gtceu:mossy_marble_cobblestone", + "gtceu:polished_marble", + "gtceu:marble_bricks", + "gtceu:cracked_marble_bricks", + "gtceu:mossy_marble_bricks", + "gtceu:chiseled_marble", + "gtceu:marble_tile", + "gtceu:marble_small_tile", + "gtceu:small_marble_bricks", + "gtceu:square_marble_bricks", + "gtceu:light_concrete", + "gtceu:smooth_light_concrete", + "gtceu:light_concrete_cobblestone", + "gtceu:mossy_light_concrete_cobblestone", + "gtceu:polished_light_concrete", + "gtceu:light_concrete_bricks", + "gtceu:cracked_light_concrete_bricks", + "gtceu:mossy_light_concrete_bricks", + "gtceu:chiseled_light_concrete", + "gtceu:light_concrete_tile", + "gtceu:light_concrete_small_tile", + "gtceu:small_light_concrete_bricks", + "gtceu:square_light_concrete_bricks", + "gtceu:dark_concrete", + "gtceu:smooth_dark_concrete", + "gtceu:dark_concrete_cobblestone", + "gtceu:mossy_dark_concrete_cobblestone", + "gtceu:polished_dark_concrete", + "gtceu:dark_concrete_bricks", + "gtceu:cracked_dark_concrete_bricks", + "gtceu:mossy_dark_concrete_bricks", + "gtceu:chiseled_dark_concrete", + "gtceu:dark_concrete_tile", + "gtceu:dark_concrete_small_tile", + "gtceu:small_dark_concrete_bricks", + "gtceu:square_dark_concrete_bricks" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/concrete.json b/src/generated/resources/data/forge/tags/items/concrete.json index 75ccbb2e97..99c8ab401a 100644 --- a/src/generated/resources/data/forge/tags/items/concrete.json +++ b/src/generated/resources/data/forge/tags/items/concrete.json @@ -1,68 +1,20 @@ { "values": [ - { - "id": "minecraft:white_concrete", - "required": false - }, - { - "id": "minecraft:orange_concrete", - "required": false - }, - { - "id": "minecraft:magenta_concrete", - "required": false - }, - { - "id": "minecraft:light_blue_concrete", - "required": false - }, - { - "id": "minecraft:yellow_concrete", - "required": false - }, - { - "id": "minecraft:lime_concrete", - "required": false - }, - { - "id": "minecraft:pink_concrete", - "required": false - }, - { - "id": "minecraft:gray_concrete", - "required": false - }, - { - "id": "minecraft:light_gray_concrete", - "required": false - }, - { - "id": "minecraft:cyan_concrete", - "required": false - }, - { - "id": "minecraft:purple_concrete", - "required": false - }, - { - "id": "minecraft:blue_concrete", - "required": false - }, - { - "id": "minecraft:brown_concrete", - "required": false - }, - { - "id": "minecraft:green_concrete", - "required": false - }, - { - "id": "minecraft:red_concrete", - "required": false - }, - { - "id": "minecraft:black_concrete", - "required": false - } + "minecraft:white_concrete", + "minecraft:orange_concrete", + "minecraft:magenta_concrete", + "minecraft:light_blue_concrete", + "minecraft:yellow_concrete", + "minecraft:lime_concrete", + "minecraft:pink_concrete", + "minecraft:gray_concrete", + "minecraft:light_gray_concrete", + "minecraft:cyan_concrete", + "minecraft:purple_concrete", + "minecraft:blue_concrete", + "minecraft:brown_concrete", + "minecraft:green_concrete", + "minecraft:red_concrete", + "minecraft:black_concrete" ] } \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/concrete_powder.json b/src/generated/resources/data/forge/tags/items/concrete_powder.json index 35121d16e5..57a09c9b25 100644 --- a/src/generated/resources/data/forge/tags/items/concrete_powder.json +++ b/src/generated/resources/data/forge/tags/items/concrete_powder.json @@ -1,68 +1,20 @@ { "values": [ - { - "id": "minecraft:white_concrete_powder", - "required": false - }, - { - "id": "minecraft:orange_concrete_powder", - "required": false - }, - { - "id": "minecraft:magenta_concrete_powder", - "required": false - }, - { - "id": "minecraft:light_blue_concrete_powder", - "required": false - }, - { - "id": "minecraft:yellow_concrete_powder", - "required": false - }, - { - "id": "minecraft:lime_concrete_powder", - "required": false - }, - { - "id": "minecraft:pink_concrete_powder", - "required": false - }, - { - "id": "minecraft:gray_concrete_powder", - "required": false - }, - { - "id": "minecraft:light_gray_concrete_powder", - "required": false - }, - { - "id": "minecraft:cyan_concrete_powder", - "required": false - }, - { - "id": "minecraft:purple_concrete_powder", - "required": false - }, - { - "id": "minecraft:blue_concrete_powder", - "required": false - }, - { - "id": "minecraft:brown_concrete_powder", - "required": false - }, - { - "id": "minecraft:green_concrete_powder", - "required": false - }, - { - "id": "minecraft:red_concrete_powder", - "required": false - }, - { - "id": "minecraft:black_concrete_powder", - "required": false - } + "minecraft:white_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:light_blue_concrete_powder", + "minecraft:yellow_concrete_powder", + "minecraft:lime_concrete_powder", + "minecraft:pink_concrete_powder", + "minecraft:gray_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:purple_concrete_powder", + "minecraft:blue_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder" ] } \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/rods/wooden.json b/src/generated/resources/data/forge/tags/items/rods/wooden.json new file mode 100644 index 0000000000..8f1bd1515e --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/rods/wooden.json @@ -0,0 +1,5 @@ +{ + "values": [ + "gtceu:treated_wood_rod" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/acid_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/acid_hazard_sign_block.json new file mode 100644 index 0000000000..8c96d3e887 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/acid_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:acid_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/advanced_computer_casing.json b/src/generated/resources/data/gtceu/loot_tables/blocks/advanced_computer_casing.json index 47ca12ca33..c50ba56ef0 100644 --- a/src/generated/resources/data/gtceu/loot_tables/blocks/advanced_computer_casing.json +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/advanced_computer_casing.json @@ -16,6 +16,5 @@ ], "rolls": 1.0 } - ], - "random_sequence": "gtceu:blocks/advanced_computer_casing" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/antimatter_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/antimatter_hazard_sign_block.json new file mode 100644 index 0000000000..30a51dd060 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/antimatter_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:antimatter_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/bio_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/bio_hazard_sign_block.json new file mode 100644 index 0000000000..6de951af02 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/bio_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:bio_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/black_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/black_lamp.json new file mode 100644 index 0000000000..8f2ebeea46 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/black_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:black_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/blue_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/blue_lamp.json new file mode 100644 index 0000000000..d1505784bd --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/blue_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:blue_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/boss_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/boss_hazard_sign_block.json new file mode 100644 index 0000000000..cb523a46b9 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/boss_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:boss_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/brown_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/brown_lamp.json new file mode 100644 index 0000000000..347bd9a6e6 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/brown_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:brown_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/causality_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/causality_hazard_sign_block.json new file mode 100644 index 0000000000..97a893cabd --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/causality_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:causality_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_dark_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_dark_concrete.json new file mode 100644 index 0000000000..e31630118b --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_dark_concrete.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:chiseled_dark_concrete" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_light_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_light_concrete.json new file mode 100644 index 0000000000..5215258623 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_light_concrete.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:chiseled_light_concrete" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_marble.json b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_marble.json new file mode 100644 index 0000000000..1163b4a2ac --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_marble.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:chiseled_marble" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_red_granite.json b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_red_granite.json new file mode 100644 index 0000000000..e31e965fe8 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/chiseled_red_granite.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:chiseled_red_granite" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/computer_casing.json b/src/generated/resources/data/gtceu/loot_tables/blocks/computer_casing.json index 2c3d69ed6a..09873fc369 100644 --- a/src/generated/resources/data/gtceu/loot_tables/blocks/computer_casing.json +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/computer_casing.json @@ -16,6 +16,5 @@ ], "rolls": 1.0 } - ], - "random_sequence": "gtceu:blocks/computer_casing" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/computer_heat_vent.json b/src/generated/resources/data/gtceu/loot_tables/blocks/computer_heat_vent.json index 27ab2bf1e8..4031519484 100644 --- a/src/generated/resources/data/gtceu/loot_tables/blocks/computer_heat_vent.json +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/computer_heat_vent.json @@ -16,6 +16,5 @@ ], "rolls": 1.0 } - ], - "random_sequence": "gtceu:blocks/computer_heat_vent" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_dark_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_dark_concrete_bricks.json new file mode 100644 index 0000000000..aeaedc6578 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_dark_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:cracked_dark_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_light_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_light_concrete_bricks.json new file mode 100644 index 0000000000..df1c066992 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_light_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:cracked_light_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_marble_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_marble_bricks.json new file mode 100644 index 0000000000..ba461ff8b1 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_marble_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:cracked_marble_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_red_granite_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_red_granite_bricks.json new file mode 100644 index 0000000000..f7c6e6b03c --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/cracked_red_granite_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:cracked_red_granite_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/cyan_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/cyan_lamp.json new file mode 100644 index 0000000000..313ae5d7c0 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/cyan_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:cyan_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete.json new file mode 100644 index 0000000000..47bb4cc533 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete.json @@ -0,0 +1,44 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "gtceu:dark_concrete" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "gtceu:dark_concrete_cobblestone" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_bricks.json new file mode 100644 index 0000000000..e96a9e3703 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:dark_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_cobblestone.json new file mode 100644 index 0000000000..08a90cda91 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:dark_concrete_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_small_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_small_tile.json new file mode 100644 index 0000000000..5df06feadf --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_small_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:dark_concrete_small_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_tile.json new file mode 100644 index 0000000000..2832152e1c --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/dark_concrete_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:dark_concrete_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/explosion_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/explosion_hazard_sign_block.json new file mode 100644 index 0000000000..8b01c61bfc --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/explosion_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:explosion_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/fire_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/fire_hazard_sign_block.json new file mode 100644 index 0000000000..3d6228b3e9 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/fire_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:fire_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/foam.json b/src/generated/resources/data/gtceu/loot_tables/blocks/foam.json new file mode 100644 index 0000000000..5c1fd16d60 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/foam.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:foam" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/frost_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/frost_hazard_sign_block.json new file mode 100644 index 0000000000..547f297bb3 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/frost_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:frost_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/generic_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/generic_hazard_sign_block.json new file mode 100644 index 0000000000..0e7227feb2 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/generic_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:generic_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/gray_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/gray_lamp.json new file mode 100644 index 0000000000..2ee1b15750 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/gray_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:gray_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/green_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/green_lamp.json new file mode 100644 index 0000000000..f6c2d2bd0e --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/green_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:green_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/gregification_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/gregification_hazard_sign_block.json new file mode 100644 index 0000000000..30b89f4ded --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/gregification_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:gregification_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/high_pressure_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/high_pressure_hazard_sign_block.json new file mode 100644 index 0000000000..b0df112896 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/high_pressure_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:high_pressure_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/high_temperature_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/high_temperature_hazard_sign_block.json new file mode 100644 index 0000000000..ebc01882db --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/high_temperature_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:high_temperature_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/high_voltage_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/high_voltage_hazard_sign_block.json new file mode 100644 index 0000000000..8efef69419 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/high_voltage_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:high_voltage_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/laser_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/laser_hazard_sign_block.json new file mode 100644 index 0000000000..2edccbbf89 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/laser_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:laser_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/light_blue_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/light_blue_lamp.json new file mode 100644 index 0000000000..ba07e7a350 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/light_blue_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:light_blue_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete.json new file mode 100644 index 0000000000..c439cf630e --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete.json @@ -0,0 +1,44 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "gtceu:light_concrete" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "gtceu:light_concrete_cobblestone" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_bricks.json new file mode 100644 index 0000000000..b65d4a1d88 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:light_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_cobblestone.json new file mode 100644 index 0000000000..f116532a60 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:light_concrete_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_small_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_small_tile.json new file mode 100644 index 0000000000..224b3867e4 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_small_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:light_concrete_small_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_tile.json new file mode 100644 index 0000000000..81b4080956 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/light_concrete_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:light_concrete_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/light_gray_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/light_gray_lamp.json new file mode 100644 index 0000000000..cf8411b277 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/light_gray_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:light_gray_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/lime_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/lime_lamp.json new file mode 100644 index 0000000000..9c67d54acb --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/lime_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:lime_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/magenta_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/magenta_lamp.json new file mode 100644 index 0000000000..e4967c8446 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/magenta_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:magenta_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/magic_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/magic_hazard_sign_block.json new file mode 100644 index 0000000000..89fc847c0d --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/magic_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:magic_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/magnetic_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/magnetic_hazard_sign_block.json new file mode 100644 index 0000000000..76ac3d1ef5 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/magnetic_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:magnetic_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/marble.json b/src/generated/resources/data/gtceu/loot_tables/blocks/marble.json new file mode 100644 index 0000000000..8de5d306cc --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/marble.json @@ -0,0 +1,44 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "gtceu:marble" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "gtceu:marble_cobblestone" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/marble_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_bricks.json new file mode 100644 index 0000000000..5e25af0c41 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:marble_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/marble_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_cobblestone.json new file mode 100644 index 0000000000..610113195d --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:marble_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/marble_small_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_small_tile.json new file mode 100644 index 0000000000..95d7ec7c6b --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_small_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:marble_small_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/marble_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_tile.json new file mode 100644 index 0000000000..ed8e5ba5f8 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/marble_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:marble_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mob_infestation_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mob_infestation_hazard_sign_block.json new file mode 100644 index 0000000000..aa36380b06 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mob_infestation_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mob_infestation_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mob_spawner_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mob_spawner_hazard_sign_block.json new file mode 100644 index 0000000000..2179a2d8f9 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mob_spawner_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mob_spawner_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_dark_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_dark_concrete_bricks.json new file mode 100644 index 0000000000..739bed69a6 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_dark_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_dark_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_dark_concrete_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_dark_concrete_cobblestone.json new file mode 100644 index 0000000000..e8671d7103 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_dark_concrete_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_dark_concrete_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_light_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_light_concrete_bricks.json new file mode 100644 index 0000000000..3604eac1a6 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_light_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_light_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_light_concrete_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_light_concrete_cobblestone.json new file mode 100644 index 0000000000..84f8687f7c --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_light_concrete_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_light_concrete_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_marble_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_marble_bricks.json new file mode 100644 index 0000000000..d241dd39ea --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_marble_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_marble_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_marble_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_marble_cobblestone.json new file mode 100644 index 0000000000..e67540526f --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_marble_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_marble_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_red_granite_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_red_granite_bricks.json new file mode 100644 index 0000000000..139b1eafca --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_red_granite_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_red_granite_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_red_granite_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_red_granite_cobblestone.json new file mode 100644 index 0000000000..5493dba6c1 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/mossy_red_granite_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:mossy_red_granite_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/noise_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/noise_hazard_sign_block.json new file mode 100644 index 0000000000..5a7c7183e2 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/noise_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:noise_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/orange_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/orange_lamp.json new file mode 100644 index 0000000000..87186cb3ef --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/orange_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:orange_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/petrified_foam.json b/src/generated/resources/data/gtceu/loot_tables/blocks/petrified_foam.json new file mode 100644 index 0000000000..ba93e006e3 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/petrified_foam.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:petrified_foam" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/pink_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/pink_lamp.json new file mode 100644 index 0000000000..16acc0bedc --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/pink_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:pink_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/polished_dark_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_dark_concrete.json new file mode 100644 index 0000000000..3cad0dde9b --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_dark_concrete.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:polished_dark_concrete" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/polished_light_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_light_concrete.json new file mode 100644 index 0000000000..6e83bf3626 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_light_concrete.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:polished_light_concrete" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/polished_marble.json b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_marble.json new file mode 100644 index 0000000000..2831eda15c --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_marble.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:polished_marble" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/polished_red_granite.json b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_red_granite.json new file mode 100644 index 0000000000..e4ff5bed9d --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/polished_red_granite.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:polished_red_granite" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/purple_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/purple_lamp.json new file mode 100644 index 0000000000..dc5ae7e773 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/purple_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:purple_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/radioactive_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/radioactive_hazard_sign_block.json new file mode 100644 index 0000000000..3f731938ce --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/radioactive_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:radioactive_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite.json b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite.json new file mode 100644 index 0000000000..1559a0a3bc --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite.json @@ -0,0 +1,44 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "gtceu:red_granite" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "gtceu:red_granite_cobblestone" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_bricks.json new file mode 100644 index 0000000000..c6b74f114d --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:red_granite_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_cobblestone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_cobblestone.json new file mode 100644 index 0000000000..40814c32d6 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_cobblestone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:red_granite_cobblestone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_small_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_small_tile.json new file mode 100644 index 0000000000..e3c7408036 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_small_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:red_granite_small_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_tile.json b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_tile.json new file mode 100644 index 0000000000..4ca5a50984 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/red_granite_tile.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:red_granite_tile" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/red_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/red_lamp.json new file mode 100644 index 0000000000..71a3be8972 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/red_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:red_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/reinforced_stone.json b/src/generated/resources/data/gtceu/loot_tables/blocks/reinforced_stone.json new file mode 100644 index 0000000000..b12fb57583 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/reinforced_stone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:reinforced_stone" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_button.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_button.json new file mode 100644 index 0000000000..1a79427568 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_button.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_button" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_door.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_door.json new file mode 100644 index 0000000000..a2fe012781 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_door.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "gtceu:rubber_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "name": "gtceu:rubber_door" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_fence.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_fence.json new file mode 100644 index 0000000000..84a0c75ef6 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_fence" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_fence_gate.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_fence_gate.json new file mode 100644 index 0000000000..e395baff49 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_fence_gate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_fence_gate" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_pressure_plate.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_pressure_plate.json new file mode 100644 index 0000000000..5b1bba0652 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_pressure_plate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_pressure_plate" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_sign.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_sign.json new file mode 100644 index 0000000000..21adccc608 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_slab.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_slab.json new file mode 100644 index 0000000000..8d491cf2cc --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_slab.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_slab" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_stairs.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_stairs.json new file mode 100644 index 0000000000..1d8cd69cc9 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_stairs.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_stairs" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_trapdoor.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_trapdoor.json new file mode 100644 index 0000000000..236b94d8ae --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_trapdoor.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_trapdoor" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_wall_sign.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_wall_sign.json new file mode 100644 index 0000000000..21adccc608 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_wall_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_wood.json b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_wood.json new file mode 100644 index 0000000000..3726dc2c3b --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/rubber_wood.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:rubber_wood" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/small_dark_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/small_dark_concrete_bricks.json new file mode 100644 index 0000000000..9f0687b9d3 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/small_dark_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:small_dark_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/small_light_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/small_light_concrete_bricks.json new file mode 100644 index 0000000000..95452e05b7 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/small_light_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:small_light_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/small_marble_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/small_marble_bricks.json new file mode 100644 index 0000000000..05cba8cbc5 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/small_marble_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:small_marble_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/small_red_granite_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/small_red_granite_bricks.json new file mode 100644 index 0000000000..8461cd83d8 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/small_red_granite_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:small_red_granite_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_dark_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_dark_concrete.json new file mode 100644 index 0000000000..c23df589bb --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_dark_concrete.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:smooth_dark_concrete" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_light_concrete.json b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_light_concrete.json new file mode 100644 index 0000000000..92b845196f --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_light_concrete.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:smooth_light_concrete" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_marble.json b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_marble.json new file mode 100644 index 0000000000..62e4f88562 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_marble.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:smooth_marble" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_red_granite.json b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_red_granite.json new file mode 100644 index 0000000000..c6990f60d3 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/smooth_red_granite.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:smooth_red_granite" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/spatial_storage_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/spatial_storage_hazard_sign_block.json new file mode 100644 index 0000000000..26e3dca2f2 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/spatial_storage_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:spatial_storage_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/square_dark_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/square_dark_concrete_bricks.json new file mode 100644 index 0000000000..4a89cc66cd --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/square_dark_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:square_dark_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/square_light_concrete_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/square_light_concrete_bricks.json new file mode 100644 index 0000000000..b8b746bc98 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/square_light_concrete_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:square_light_concrete_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/square_marble_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/square_marble_bricks.json new file mode 100644 index 0000000000..da29d4dc4a --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/square_marble_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:square_marble_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/square_red_granite_bricks.json b/src/generated/resources/data/gtceu/loot_tables/blocks/square_red_granite_bricks.json new file mode 100644 index 0000000000..14199eeabe --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/square_red_granite_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:square_red_granite_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/stripped_rubber_log.json b/src/generated/resources/data/gtceu/loot_tables/blocks/stripped_rubber_log.json new file mode 100644 index 0000000000..943076820d --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/stripped_rubber_log.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:stripped_rubber_log" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/stripped_rubber_wood.json b/src/generated/resources/data/gtceu/loot_tables/blocks/stripped_rubber_wood.json new file mode 100644 index 0000000000..4991d397e5 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/stripped_rubber_wood.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:stripped_rubber_wood" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_button.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_button.json new file mode 100644 index 0000000000..f32a9285d9 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_button.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_button" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_door.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_door.json new file mode 100644 index 0000000000..d957208274 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_door.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "gtceu:treated_wood_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "name": "gtceu:treated_wood_door" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_fence.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_fence.json new file mode 100644 index 0000000000..983d80eea7 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_fence" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_fence_gate.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_fence_gate.json new file mode 100644 index 0000000000..d990f5274b --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_fence_gate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_fence_gate" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_pressure_plate.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_pressure_plate.json new file mode 100644 index 0000000000..903ae1243b --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_pressure_plate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_pressure_plate" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_sign.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_sign.json new file mode 100644 index 0000000000..6497f09ec9 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_slab.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_slab.json new file mode 100644 index 0000000000..5d1f82d73b --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_slab.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_slab" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_stairs.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_stairs.json new file mode 100644 index 0000000000..697240b862 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_stairs.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_stairs" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_trapdoor.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_trapdoor.json new file mode 100644 index 0000000000..a129705db7 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_trapdoor.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_trapdoor" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_wall_sign.json b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_wall_sign.json new file mode 100644 index 0000000000..6497f09ec9 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/treated_wood_wall_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:treated_wood_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/turret_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/turret_hazard_sign_block.json new file mode 100644 index 0000000000..473bca1989 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/turret_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:turret_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/void_hazard_sign_block.json b/src/generated/resources/data/gtceu/loot_tables/blocks/void_hazard_sign_block.json new file mode 100644 index 0000000000..360fbb9b7e --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/void_hazard_sign_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:void_hazard_sign_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/white_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/white_lamp.json new file mode 100644 index 0000000000..fa0606f5cd --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/white_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:white_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/wood_wall.json b/src/generated/resources/data/gtceu/loot_tables/blocks/wood_wall.json index 098cad432f..1d1f91312c 100644 --- a/src/generated/resources/data/gtceu/loot_tables/blocks/wood_wall.json +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/wood_wall.json @@ -16,6 +16,5 @@ ], "rolls": 1.0 } - ], - "random_sequence": "gtceu:blocks/wood_wall" + ] } \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_lamp.json b/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_lamp.json new file mode 100644 index 0000000000..8730c48384 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_lamp.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:yellow_lamp" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_stripes_block_a.json b/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_stripes_block_a.json new file mode 100644 index 0000000000..8a5e57221d --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_stripes_block_a.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:yellow_stripes_block_a" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_stripes_block_b.json b/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_stripes_block_b.json new file mode 100644 index 0000000000..ec00c10526 --- /dev/null +++ b/src/generated/resources/data/gtceu/loot_tables/blocks/yellow_stripes_block_b.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "gtceu:yellow_stripes_block_b" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/base_stone_overworld.json b/src/generated/resources/data/minecraft/tags/blocks/base_stone_overworld.json new file mode 100644 index 0000000000..1c1f05bed7 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/base_stone_overworld.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:red_granite", + "gtceu:marble" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/dripstone_replaceable_blocks.json b/src/generated/resources/data/minecraft/tags/blocks/dripstone_replaceable_blocks.json new file mode 100644 index 0000000000..1c1f05bed7 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/dripstone_replaceable_blocks.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:red_granite", + "gtceu:marble" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json b/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json new file mode 100644 index 0000000000..1e50540c7c --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_fence_gate", + "gtceu:treated_wood_fence_gate" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 68d4e85c3d..e7aad2be5c 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -109,6 +109,83 @@ "gtceu:computer_casing", "gtceu:advanced_computer_casing", "gtceu:computer_heat_vent", - "gtceu:high_power_casing" + "gtceu:high_power_casing", + "gtceu:acid_hazard_sign_block", + "gtceu:antimatter_hazard_sign_block", + "gtceu:bio_hazard_sign_block", + "gtceu:boss_hazard_sign_block", + "gtceu:causality_hazard_sign_block", + "gtceu:explosion_hazard_sign_block", + "gtceu:fire_hazard_sign_block", + "gtceu:frost_hazard_sign_block", + "gtceu:generic_hazard_sign_block", + "gtceu:gregification_hazard_sign_block", + "gtceu:high_pressure_hazard_sign_block", + "gtceu:high_voltage_hazard_sign_block", + "gtceu:high_temperature_hazard_sign_block", + "gtceu:laser_hazard_sign_block", + "gtceu:magic_hazard_sign_block", + "gtceu:magnetic_hazard_sign_block", + "gtceu:mob_infestation_hazard_sign_block", + "gtceu:mob_spawner_hazard_sign_block", + "gtceu:noise_hazard_sign_block", + "gtceu:radioactive_hazard_sign_block", + "gtceu:spatial_storage_hazard_sign_block", + "gtceu:turret_hazard_sign_block", + "gtceu:void_hazard_sign_block", + "gtceu:yellow_stripes_block_a", + "gtceu:yellow_stripes_block_b", + "gtceu:red_granite", + "gtceu:smooth_red_granite", + "gtceu:red_granite_cobblestone", + "gtceu:mossy_red_granite_cobblestone", + "gtceu:polished_red_granite", + "gtceu:red_granite_bricks", + "gtceu:cracked_red_granite_bricks", + "gtceu:mossy_red_granite_bricks", + "gtceu:chiseled_red_granite", + "gtceu:red_granite_tile", + "gtceu:red_granite_small_tile", + "gtceu:small_red_granite_bricks", + "gtceu:square_red_granite_bricks", + "gtceu:marble", + "gtceu:smooth_marble", + "gtceu:marble_cobblestone", + "gtceu:mossy_marble_cobblestone", + "gtceu:polished_marble", + "gtceu:marble_bricks", + "gtceu:cracked_marble_bricks", + "gtceu:mossy_marble_bricks", + "gtceu:chiseled_marble", + "gtceu:marble_tile", + "gtceu:marble_small_tile", + "gtceu:small_marble_bricks", + "gtceu:square_marble_bricks", + "gtceu:light_concrete", + "gtceu:smooth_light_concrete", + "gtceu:light_concrete_cobblestone", + "gtceu:mossy_light_concrete_cobblestone", + "gtceu:polished_light_concrete", + "gtceu:light_concrete_bricks", + "gtceu:cracked_light_concrete_bricks", + "gtceu:mossy_light_concrete_bricks", + "gtceu:chiseled_light_concrete", + "gtceu:light_concrete_tile", + "gtceu:light_concrete_small_tile", + "gtceu:small_light_concrete_bricks", + "gtceu:square_light_concrete_bricks", + "gtceu:dark_concrete", + "gtceu:smooth_dark_concrete", + "gtceu:dark_concrete_cobblestone", + "gtceu:mossy_dark_concrete_cobblestone", + "gtceu:polished_dark_concrete", + "gtceu:dark_concrete_bricks", + "gtceu:cracked_dark_concrete_bricks", + "gtceu:mossy_dark_concrete_bricks", + "gtceu:chiseled_dark_concrete", + "gtceu:dark_concrete_tile", + "gtceu:dark_concrete_small_tile", + "gtceu:small_dark_concrete_bricks", + "gtceu:square_dark_concrete_bricks" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/moss_replaceable.json b/src/generated/resources/data/minecraft/tags/blocks/moss_replaceable.json new file mode 100644 index 0000000000..1c1f05bed7 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/moss_replaceable.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:red_granite", + "gtceu:marble" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/slabs.json b/src/generated/resources/data/minecraft/tags/blocks/slabs.json new file mode 100644 index 0000000000..082757e8b2 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/slabs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_slab", + "gtceu:treated_wood_slab" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/stairs.json b/src/generated/resources/data/minecraft/tags/blocks/stairs.json new file mode 100644 index 0000000000..c2972c46b6 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/stairs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_stairs", + "gtceu:treated_wood_stairs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/standing_signs.json b/src/generated/resources/data/minecraft/tags/blocks/standing_signs.json new file mode 100644 index 0000000000..0b0a692e5b --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/standing_signs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_sign", + "gtceu:treated_wood_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/stone_ore_replaceables.json b/src/generated/resources/data/minecraft/tags/blocks/stone_ore_replaceables.json new file mode 100644 index 0000000000..1c1f05bed7 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/stone_ore_replaceables.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:red_granite", + "gtceu:marble" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wall_signs.json b/src/generated/resources/data/minecraft/tags/blocks/wall_signs.json new file mode 100644 index 0000000000..095a42b742 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wall_signs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_wall_sign", + "gtceu:treated_wood_wall_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json new file mode 100644 index 0000000000..aab9d23519 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_button", + "gtceu:treated_wood_button" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json new file mode 100644 index 0000000000..9437a7467e --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_door", + "gtceu:treated_wood_door" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json new file mode 100644 index 0000000000..813fd83777 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_fence", + "gtceu:treated_wood_fence" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json new file mode 100644 index 0000000000..37e0c16ffd --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_pressure_plate", + "gtceu:treated_wood_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json b/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json new file mode 100644 index 0000000000..a821a736ba --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_trapdoor", + "gtceu:treated_wood_trapdoor" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/signs.json b/src/generated/resources/data/minecraft/tags/items/signs.json new file mode 100644 index 0000000000..0b0a692e5b --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/signs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_sign", + "gtceu:treated_wood_sign" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/slabs.json b/src/generated/resources/data/minecraft/tags/items/slabs.json new file mode 100644 index 0000000000..082757e8b2 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/slabs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_slab", + "gtceu:treated_wood_slab" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/stairs.json b/src/generated/resources/data/minecraft/tags/items/stairs.json new file mode 100644 index 0000000000..c2972c46b6 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/stairs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_stairs", + "gtceu:treated_wood_stairs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json b/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json new file mode 100644 index 0000000000..aab9d23519 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_button", + "gtceu:treated_wood_button" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/wooden_doors.json b/src/generated/resources/data/minecraft/tags/items/wooden_doors.json new file mode 100644 index 0000000000..9437a7467e --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/wooden_doors.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_door", + "gtceu:treated_wood_door" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/wooden_fences.json b/src/generated/resources/data/minecraft/tags/items/wooden_fences.json new file mode 100644 index 0000000000..813fd83777 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/wooden_fences.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_fence", + "gtceu:treated_wood_fence" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json b/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json new file mode 100644 index 0000000000..37e0c16ffd --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_pressure_plate", + "gtceu:treated_wood_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json b/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json new file mode 100644 index 0000000000..a821a736ba --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gtceu:rubber_trapdoor", + "gtceu:treated_wood_trapdoor" + ] +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java index 74567eff0a..a05b4be13e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java +++ b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java @@ -124,6 +124,13 @@ default void registerFluidVeins() { } + /** + * Use {@link com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition#builder(ResourceLocation)} to register the veins. + */ + default void registerBedrockOreVeins() { + + } + /** * Register Material -> Casing block mappings here */ diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/SimpleCoilType.java b/src/main/java/com/gregtechceu/gtceu/api/block/SimpleCoilType.java index d6ff15648a..8495f8023c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/SimpleCoilType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/SimpleCoilType.java @@ -1,14 +1,17 @@ package com.gregtechceu.gtceu.api.block; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.utils.SupplierMemoizer; import lombok.Getter; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.StringRepresentable; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -public class SimpleCoilType implements ICoilType, StringRepresentable { +import java.util.function.Supplier; +public class SimpleCoilType implements ICoilType, StringRepresentable { @Getter private final String name; //electric blast furnace properties @@ -21,18 +24,18 @@ public class SimpleCoilType implements ICoilType, StringRepresentable { private final int tier; @Getter private final int energyDiscount; - @Getter - private final Material material; + @NotNull + private final Supplier<@Nullable Material> material; @Getter private final ResourceLocation texture; - public SimpleCoilType(String name, int coilTemperature, int level, int energyDiscount, int tier, Material material, ResourceLocation texture) { + public SimpleCoilType(String name, int coilTemperature, int level, int energyDiscount, int tier, @NotNull Supplier<@Nullable Material> material, ResourceLocation texture) { this.name = name; this.coilTemperature = coilTemperature; this.level = level; this.energyDiscount = energyDiscount; this.tier = tier; - this.material = material; + this.material = SupplierMemoizer.memoize(material); this.texture = texture; } @@ -47,4 +50,10 @@ public String toString() { public String getSerializedName() { return name; } + + @Nullable + @Override + public Material getMaterial() { + return material.get(); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java index ba0cf31295..38ef96de21 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java @@ -120,6 +120,13 @@ public ResourceTexture sideTips(Player player, Set toolTypes, Direct return result == null ? super.getCapability(cap, side) : result; } + @Override + public void setChanged() { + if (getLevel() != null) { + getLevel().blockEntityChanged(getBlockPos()); + } + } + @Nullable public static LazyOptional getCapability(MetaMachine machine, @NotNull Capability cap, @Nullable Direction side) { if (cap == GTCapability.CAPABILITY_COVERABLE) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java index b0543b8d93..59e286fb91 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java @@ -303,6 +303,12 @@ public boolean triggerEvent(int id, int para) { return false; } + @Override + public void setChanged() { + if (getLevel() != null) { + getLevel().blockEntityChanged(getBlockPos()); + } + } ////////////////////////////////////// //******* Interaction *******// diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java index ac44d62bf8..bdc35faa2b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java @@ -8,7 +8,7 @@ public class BlockStateRecipeCapability extends RecipeCapability { public final static BlockStateRecipeCapability CAP = new BlockStateRecipeCapability(); protected BlockStateRecipeCapability() { - super("block_state", 0xFFABABAB, SerializerBlockState.INSTANCE); + super("block_state", 0xFFABABAB, false, 5, SerializerBlockState.INSTANCE); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java index 98b64bf8da..7bb9df0f0d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java @@ -21,7 +21,7 @@ public class CWURecipeCapability extends RecipeCapability { public final static CWURecipeCapability CAP = new CWURecipeCapability(); protected CWURecipeCapability() { - super("cwu", 0xFFEEEE00, SerializerInteger.INSTANCE); + super("cwu", 0xFFEEEE00, false, 3, SerializerInteger.INSTANCE); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java index 2e4dafe67b..7a10f95e0b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java @@ -16,7 +16,7 @@ public class EURecipeCapability extends RecipeCapability { public final static EURecipeCapability CAP = new EURecipeCapability(); protected EURecipeCapability() { - super("eu", 0xFFFFFF00, SerializerLong.INSTANCE); + super("eu", 0xFFFFFF00, false, 2, SerializerLong.INSTANCE); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java index 3bfecb75c5..fd766e7b4e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java @@ -1,17 +1,39 @@ package com.gregtechceu.gtceu.api.capability.recipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.recipe.content.SerializerFluidIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.lookup.AbstractMapIngredient; import com.gregtechceu.gtceu.api.recipe.lookup.MapFluidIngredient; import com.gregtechceu.gtceu.api.recipe.lookup.MapFluidTagIngredient; +import com.gregtechceu.gtceu.api.recipe.ui.GTRecipeTypeUI; +import com.gregtechceu.gtceu.integration.GTRecipeWidget; +import com.gregtechceu.gtceu.utils.OverlayingFluidStorage; +import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; +import com.lowdragmc.lowdraglib.gui.widget.TankWidget; +import com.lowdragmc.lowdraglib.gui.widget.Widget; +import com.lowdragmc.lowdraglib.jei.IngredientIO; import com.lowdragmc.lowdraglib.side.fluid.FluidStack; +import com.lowdragmc.lowdraglib.side.fluid.IFluidTransfer; +import com.lowdragmc.lowdraglib.utils.TagOrCycleFluidTransfer; +import com.mojang.datafixers.util.Either; +import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.TagKey; import net.minecraft.world.level.material.Fluid; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnknownNullability; +import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; /** * @author KilaBash @@ -23,7 +45,7 @@ public class FluidRecipeCapability extends RecipeCapability { public final static FluidRecipeCapability CAP = new FluidRecipeCapability(); protected FluidRecipeCapability() { - super("fluid", 0xFF3C70EE, SerializerFluidIngredient.INSTANCE); + super("fluid", 0xFF3C70EE, true, 1, SerializerFluidIngredient.INSTANCE); } @Override @@ -108,4 +130,85 @@ public List compressIngredients(Collection ingredients) { public boolean isRecipeSearchFilter() { return true; } + + @Override + public @NotNull List createXEIContainerContents(List contents, GTRecipe recipe, IO io) { + return contents.stream().map(content -> content.content) + .map(this::of) + .map(FluidRecipeCapability::mapFluid) + .collect(Collectors.toList()); + } + + public Object createXEIContainer(List contents) { + // cast is safe if you don't pass the wrong thing. + //noinspection unchecked + return new TagOrCycleFluidTransfer((List, Long>>, List>>) contents); + } + + @NotNull + @Override + public Widget createWidget() { + TankWidget tank = new TankWidget(); + tank.initTemplate(); + tank.setFillDirection(ProgressTexture.FillDirection.ALWAYS_FULL); + return tank; + } + + @NotNull + @Override + public Class getWidgetClass() { + return TankWidget.class; + } + + @Override + public void applyWidgetInfo(@NotNull Widget widget, + int index, + boolean isXEI, + IO io, + GTRecipeTypeUI.@UnknownNullability("null when storage == null") RecipeHolder recipeHolder, + @NotNull GTRecipeType recipeType, + @UnknownNullability("null when content == null") GTRecipe recipe, + @Nullable Content content, + @Nullable Object storage) { + if (widget instanceof TankWidget tank) { + if (storage instanceof TagOrCycleFluidTransfer fluidTransfer) { + tank.setFluidTank(fluidTransfer, index); + } else if (storage instanceof IFluidTransfer fluidTransfer) { + tank.setFluidTank(new OverlayingFluidStorage(fluidTransfer, index)); + } + tank.setIngredientIO(io == IO.IN ? IngredientIO.INPUT : IngredientIO.OUTPUT); + tank.setAllowClickFilled(!isXEI); + tank.setAllowClickDrained(!isXEI); + if (content != null) { + tank.setXEIChance(content.chance); + tank.setOnAddedTooltips((w, tooltips) -> { + GTRecipeWidget.setConsumedChance(content, tooltips); + if (index >= recipe.getOutputContents(this).size()) { + tooltips.add(Component.translatable("gtceu.gui.content.per_tick")); + } + }); + } + } + } + + // Maps fluids to Either<(tag with count), FluidStack>s + public static Either, Long>>, List> mapFluid(FluidIngredient ingredient) { + long amount = ingredient.getAmount(); + CompoundTag tag = ingredient.getNbt(); + + List, Long>> tags = new ArrayList<>(); + List fluids = new ArrayList<>(); + for (FluidIngredient.Value value : ingredient.values) { + if (value instanceof FluidIngredient.TagValue tagValue) { + tags.add(Pair.of(tagValue.getTag(), amount)); + } else { + fluids.addAll(value.getFluids().stream().map(fluid -> FluidStack.create(fluid, amount, tag)).toList()); + } + } + if (!tags.isEmpty()) { + return Either.left(tags); + }else { + return Either.right(fluids); + } + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IFilteredHandler.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IFilteredHandler.java new file mode 100644 index 0000000000..106adadfca --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IFilteredHandler.java @@ -0,0 +1,27 @@ +package com.gregtechceu.gtceu.api.capability.recipe; + +import java.util.Comparator; +import java.util.function.Predicate; + +public interface IFilteredHandler extends Predicate { + Comparator> PRIORITY_COMPARATOR = Comparator.comparingInt(IFilteredHandler::getPriority); + int NO_PRIORITY = Integer.MIN_VALUE; + + /** + * Test an ingredient for filtering & priority. + * @param ingredient the ingredient + * @return {@code true} if the input argument matches the predicate, + * otherwise {@code false} + */ + @Override + default boolean test(K ingredient) { + return true; + } + + /** + * The priority of this recipe handler. + */ + default int getPriority() { + return NO_PRIORITY; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IRecipeHandler.java index 24dc8ba336..9cb03af2c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IRecipeHandler.java @@ -4,16 +4,29 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.jetbrains.annotations.Nullable; + +import java.util.Comparator; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; /** * @author KilaBash * @date 2023/2/20 * @implNote IRecipeHandler */ -public interface IRecipeHandler { +public interface IRecipeHandler extends IFilteredHandler { + /** + * Comparator for entries that can be used in insertion logic + */ + Comparator> ENTRY_COMPARATOR = (o1, o2) -> { + // #1: non-empty storage first + boolean empty1 = o1.getTotalContentAmount() <= 0; + boolean empty2 = o2.getTotalContentAmount() <= 0; + if (empty1 != empty2) return empty1 ? 1 : -1; + + // #2: filter priority + return IFilteredHandler.PRIORITY_COMPARATOR.compare(o1, o2); + }; /** * matching or handling the given recipe. @@ -46,6 +59,8 @@ default int getSize() { List getContents(); + double getTotalContentAmount(); + /** * Whether the content of same capability can only be handled distinct. */ @@ -53,6 +68,10 @@ default boolean isDistinct() { return false; } + default boolean isProxy() { + return false; + } + RecipeCapability getCapability(); @SuppressWarnings("unchecked") diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java index 62806a0bf3..4e4b53103e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java @@ -3,23 +3,49 @@ import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.recipe.ResearchData; +import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.recipe.content.SerializerIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.IntCircuitIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; import com.gregtechceu.gtceu.api.recipe.lookup.*; -import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.api.recipe.ui.GTRecipeTypeUI; +import com.gregtechceu.gtceu.common.recipe.ResearchCondition; +import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.core.mixins.IngredientAccessor; +import com.gregtechceu.gtceu.core.mixins.IntersectionIngredientAccessor; import com.gregtechceu.gtceu.core.mixins.TagValueAccessor; +import com.gregtechceu.gtceu.integration.GTRecipeWidget; import com.gregtechceu.gtceu.utils.IngredientEquality; +import com.gregtechceu.gtceu.utils.ResearchManager; +import com.lowdragmc.lowdraglib.gui.widget.SlotWidget; +import com.lowdragmc.lowdraglib.gui.widget.Widget; +import com.lowdragmc.lowdraglib.jei.IngredientIO; +import com.lowdragmc.lowdraglib.side.item.IItemTransfer; +import com.lowdragmc.lowdraglib.utils.CycleItemStackHandler; +import com.lowdragmc.lowdraglib.utils.TagOrCycleItemStackTransfer; +import com.mojang.datafixers.util.Either; +import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.Registry; +import net.minecraft.network.chat.Component; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraftforge.common.crafting.IntersectionIngredient; +import net.minecraftforge.common.crafting.PartialNBTIngredient; import net.minecraftforge.common.crafting.StrictNBTIngredient; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnknownNullability; -import java.util.Collection; -import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author KilaBash @@ -31,7 +57,7 @@ public class ItemRecipeCapability extends RecipeCapability { public final static ItemRecipeCapability CAP = new ItemRecipeCapability(); protected ItemRecipeCapability() { - super("item", 0xFFD96106, SerializerIngredient.INSTANCE); + super("item", 0xFFD96106, true, 0, SerializerIngredient.INSTANCE); } @Override @@ -52,9 +78,13 @@ public List convertToMapIngredient(Object obj) { // all kinds of special cases if (ingredient instanceof StrictNBTIngredient nbt) { ingredients.addAll(MapItemStackNBTIngredient.from(nbt)); + } else if (ingredient instanceof PartialNBTIngredient nbt) { + ingredients.addAll(MapItemStackPartialNBTIngredient.from(nbt)); } else if (ingredient instanceof SizedIngredient sized) { if (sized.getInner() instanceof StrictNBTIngredient nbt) { ingredients.addAll(MapItemStackNBTIngredient.from(nbt)); + } else if (sized.getInner() instanceof PartialNBTIngredient nbt) { + ingredients.addAll(MapItemStackPartialNBTIngredient.from(nbt)); } else if (sized.getInner() instanceof IntersectionIngredient intersection) { ingredients.add(new MapIntersectionIngredient(intersection)); } else { @@ -90,6 +120,9 @@ public List convertToMapIngredient(Object obj) { if (stack.hasTag()) { ingredients.add(new MapItemStackNBTIngredient(stack, StrictNBTIngredient.of(stack))); } + if (stack.getShareTag() != null) { + ingredients.add(new MapItemStackPartialNBTIngredient(stack, PartialNBTIngredient.of(stack.getItem(), stack.getShareTag()))); + } TagPrefix prefix = ChemicalHelper.getPrefix(stack.getItem()); if (prefix != null && TagPrefix.ORES.containsKey(prefix)) { Material material = ChemicalHelper.getMaterial(stack.getItem()).material(); @@ -153,4 +186,220 @@ public boolean isRecipeSearchFilter() { return true; } + @Override + public @NotNull List createXEIContainerContents(List contents, GTRecipe recipe, IO io) { + var outputStacks = contents.stream().map(content -> content.content) + .map(this::of) + .map(ItemRecipeCapability::mapItem) + .collect(Collectors.toList()); + + List, Integer>>, List>> scannerPossibilities = null; + if (io == IO.OUT && recipe.recipeType.isScanner()) { + scannerPossibilities = new ArrayList<>(); + // Scanner Output replacing, used for cycling research outputs + Pair researchData = null; + for (Content stack : recipe.getOutputContents(ItemRecipeCapability.CAP)) { + researchData = ResearchManager.readResearchId(ItemRecipeCapability.CAP.of(stack.content).getItems()[0]); + if (researchData != null) break; + } + if (researchData != null) { + Collection possibleRecipes = researchData.getFirst().getDataStickEntry(researchData.getSecond()); + if (possibleRecipes != null) { + for (GTRecipe r : possibleRecipes) { + ItemStack researchItem = ItemRecipeCapability.CAP.of(r.getOutputContents(ItemRecipeCapability.CAP).get(0).content).getItems()[0]; + researchItem = researchItem.copy(); + researchItem.setCount(1); + boolean didMatch = false; + for (Either, Integer>>, List> stacks : scannerPossibilities) { + for (ItemStack stack : stacks.map( + tag -> tag + .stream() + .flatMap(key -> Registry.ITEM.getTag(key.getFirst()).stream()) + .flatMap(holders -> holders.stream().map(holder -> new ItemStack(holder.get()))) + .collect(Collectors.toList()), + Function.identity())) { + if (ItemStack.isSame(stack, researchItem)) { + didMatch = true; + break; + } + } + } + if (!didMatch) scannerPossibilities.add(Either.right(List.of(researchItem))); + } + } + scannerPossibilities.add(outputStacks.get(0)); + } + } + + if (scannerPossibilities != null && !scannerPossibilities.isEmpty()) { + outputStacks = scannerPossibilities; + } + while (outputStacks.size() < recipe.recipeType.getMaxOutputs(ItemRecipeCapability.CAP)) outputStacks.add(null); + + return new ArrayList<>(outputStacks); + } + + public Object createXEIContainer(List contents) { + // cast is safe if you don't pass the wrong thing. + //noinspection unchecked + return new TagOrCycleItemStackTransfer((List, Integer>>, List>>) contents); + } + + @NotNull + @Override + public Widget createWidget() { + SlotWidget slot = new SlotWidget(); + slot.initTemplate(); + return slot; + } + + @NotNull + @Override + public Class getWidgetClass() { + return SlotWidget.class; + } + + @Override + public void applyWidgetInfo(@NotNull Widget widget, + int index, + boolean isXEI, + IO io, + GTRecipeTypeUI.@UnknownNullability("null when storage == null") RecipeHolder recipeHolder, + @NotNull GTRecipeType recipeType, + @UnknownNullability("null when content == null") GTRecipe recipe, + @Nullable Content content, + @Nullable Object storage) { + if (widget instanceof SlotWidget slot) { + if (storage instanceof IItemTransfer items) { + if (index >= 0 && index < items.getSlots()) { + slot.setHandlerSlot(items, index); + slot.setIngredientIO(io == IO.IN ? IngredientIO.INPUT : IngredientIO.OUTPUT); + slot.setCanTakeItems(!isXEI); + slot.setCanPutItems(!isXEI && io.support(IO.IN)); + } + // 1 over container size. + // If in a recipe viewer and a research slot can be added, add it. + if (isXEI && recipeType.isHasResearchSlot() && index == items.getSlots()) { + if (ConfigHolder.INSTANCE.machines.enableResearch) { + ResearchCondition condition = recipeHolder.conditions().stream().filter(ResearchCondition.class::isInstance).findAny().map(ResearchCondition.class::cast).orElse(null); + if (condition != null) { + List dataItems = new ArrayList<>(); + for (ResearchData.ResearchEntry entry : condition.data) { + ItemStack dataStick = entry.getDataItem().copy(); + ResearchManager.writeResearchToNBT(dataStick.getOrCreateTag(), entry.getResearchId(), recipeType); + dataItems.add(dataStick); + } + CycleItemStackHandler handler = new CycleItemStackHandler(List.of(dataItems)); + slot.setHandlerSlot(handler, 0); + slot.setIngredientIO(IngredientIO.INPUT); + slot.setCanTakeItems(false); + slot.setCanPutItems(false); + } + } + } + } + if (content != null) { + slot.setXEIChance(content.chance); + slot.setOnAddedTooltips((w, tooltips) -> { + GTRecipeWidget.setConsumedChance(content, tooltips); + if (index >= recipe.getOutputContents(this).size()) { + tooltips.add(Component.translatable("gtceu.gui.content.per_tick")); + } + }); + } + } + } + + // Maps ingredients to Either <(Tag with count), ItemStack>s + @SuppressWarnings("deprecation") + private static Either, Integer>>, List> mapItem(Ingredient ingredient) { + if (ingredient instanceof SizedIngredient sizedIngredient) { + final int amount = sizedIngredient.getAmount(); + if (sizedIngredient.getInner() instanceof IntersectionIngredient intersection) { + List children = ((IntersectionIngredientAccessor)intersection).getChildren(); + if (children.isEmpty()) { + return Either.right(null); + } + var childEither = mapItem(children.get(0)); + return Either.right(childEither.map(tags -> { + List tagItems = tags.stream() + .map(pair -> Pair.of(Registry.ITEM.getTag(pair.getFirst()).stream(), pair.getSecond())) + .flatMap(pair -> pair.getFirst().flatMap(tag -> tag.stream().map(holder -> new ItemStack(holder.value(), pair.getSecond())))) + .collect(Collectors.toList()); + ListIterator iterator = tagItems.listIterator(); + while (iterator.hasNext()) { + var item = iterator.next(); + for (int i = 1; i < children.size(); ++i) { + if (!children.get(i).test(item)) { + iterator.remove(); + break; + } + } + ItemStack newItem = item.copy(); + newItem.setCount(amount); + iterator.set(newItem); + } + return tagItems; + }, items -> { + items = new ArrayList<>(items); + ListIterator iterator = items.listIterator(); + while (iterator.hasNext()) { + var item = iterator.next(); + for (int i = 1; i < children.size(); ++i) { + if (!children.get(i).test(item)) { + iterator.remove(); + break; + } + } + ItemStack newItem = item.copy(); + newItem.setCount(amount); + iterator.set(newItem); + } + return items; + })); + } else if (((IngredientAccessor)sizedIngredient.getInner()).getValues().length > 0 && ((IngredientAccessor)sizedIngredient.getInner()).getValues()[0] instanceof Ingredient.TagValue tagValue) { + return Either.left(List.of(Pair.of(((TagValueAccessor)tagValue).getTag(), amount))); + } + } else if (ingredient instanceof IntersectionIngredient intersection) { + // Map intersection ingredients to the items inside, as recipe viewers don't support them. + List children = ((IntersectionIngredientAccessor)intersection).getChildren(); + if (children.isEmpty()) { + return Either.right(null); + } + var childEither = mapItem(children.get(0)); + return Either.right(childEither.map(tags -> { + List tagItems = tags.stream() + .map(pair -> Pair.of(Registry.ITEM.getTag(pair.getFirst()).stream(), pair.getSecond())) + .flatMap(pair -> pair.getFirst().flatMap(tag -> tag.stream().map(holder -> new ItemStack(holder.value(), pair.getSecond())))) + .collect(Collectors.toList()); + ListIterator iterator = tagItems.listIterator(); + while (iterator.hasNext()) { + var item = iterator.next(); + for (int i = 1; i < children.size(); ++i) { + if (!children.get(i).test(item)) { + iterator.remove(); + break; + } + } + } + return tagItems; + }, items -> { + items = new ArrayList<>(items); + ListIterator iterator = items.listIterator(); + while (iterator.hasNext()) { + var item = iterator.next(); + for (int i = 1; i < children.size(); ++i) { + if (!children.get(i).test(item)) { + iterator.remove(); + break; + } + } + } + return items; + })); + } else if (((IngredientAccessor)ingredient).getValues().length > 0 && ((IngredientAccessor)ingredient).getValues()[0] instanceof Ingredient.TagValue tagValue) { + return Either.left(List.of(Pair.of(((TagValueAccessor)tagValue).getTag(), 1))); + } + return Either.right(Arrays.stream(ingredient.getItems()).toList()); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java index dac4642236..b4232f5cd0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java @@ -1,32 +1,41 @@ package com.gregtechceu.gtceu.api.capability.recipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.recipe.content.IContentSerializer; import com.gregtechceu.gtceu.api.recipe.lookup.AbstractMapIngredient; +import com.gregtechceu.gtceu.api.recipe.ui.GTRecipeTypeUI; +import com.lowdragmc.lowdraglib.gui.widget.Widget; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import io.netty.buffer.Unpooled; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import org.apache.commons.lang3.mutable.MutableInt; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnknownNullability; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Locale; +import java.util.*; /** * Used to detect whether a machine has a certain capability. */ public abstract class RecipeCapability { + public static final Comparator> COMPARATOR = Comparator.comparingInt(o -> o.sortIndex); public final String name; public final int color; + public final boolean doRenderSlot; + public final int sortIndex; public final IContentSerializer serializer; - protected RecipeCapability(String name, int color, IContentSerializer serializer) { + protected RecipeCapability(String name, int color, boolean doRenderSlot, int sortIndex, IContentSerializer serializer) { this.name = name; this.color = color; + this.doRenderSlot = doRenderSlot; + this.sortIndex = sortIndex; this.serializer = serializer; } @@ -93,7 +102,7 @@ public boolean isRecipeSearchFilter() { } /** - * Does the recipe test if this capability is workable? if not, you should test validity somewhere later. + * Does the recipe test if this capability is workable? if not, you should test validity somewhere else. */ public boolean doMatchInRecipe() { return true; @@ -105,6 +114,38 @@ public boolean doAddGuiSlots() { public void addXEIInfo(WidgetGroup group, int xOffset, List contents, boolean perTick, boolean isInput, MutableInt yOffset) { + } + + @NotNull + public List createXEIContainerContents(List contents, GTRecipe recipe, IO io) { + return new ArrayList<>(); + } + + @Nullable + public Object createXEIContainer(List contents) { + return null; + } + + @UnknownNullability("null when getWidgetClass() == null") + public Widget createWidget() { + return null; + } + + @Nullable + public Class getWidgetClass() { + return null; + } + + public void applyWidgetInfo(@NotNull Widget widget, + int index, + boolean isXEI, + IO io, + GTRecipeTypeUI.@UnknownNullability("null when storage == null") RecipeHolder recipeHolder, + @NotNull GTRecipeType recipeType, + @UnknownNullability("null when content == null") GTRecipe recipe, + @Nullable Content content, + @Nullable Object storage) { + } //TODO diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/StressRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/StressRecipeCapability.java index 4764ce2d39..77d488fa54 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/StressRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/StressRecipeCapability.java @@ -17,7 +17,7 @@ public class StressRecipeCapability extends RecipeCapability { public final static StressRecipeCapability CAP = new StressRecipeCapability(); protected StressRecipeCapability() { - super("su", 0xFF77A400, SerializerFloat.INSTANCE); + super("su", 0xFF77A400, false, 4, SerializerFloat.INSTANCE); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java index 455abef79c..57a507f401 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java @@ -11,6 +11,7 @@ import com.gregtechceu.gtceu.api.data.tag.TagUtil; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.data.recipe.misc.WoodMachineRecipes; import com.gregtechceu.gtceu.data.tags.TagsHandler; import com.gregtechceu.gtceu.utils.SupplierMemoizer; import com.lowdragmc.lowdraglib.Platform; @@ -366,9 +367,6 @@ public static void reinitializeUnification() { }); } GTItems.toUnify.forEach(ChemicalHelper::registerUnificationItems); - //GTBlocks.MATERIAL_BLOCKS.rowMap().forEach((prefix, map) -> map.forEach((material, block) -> ChemicalHelper.registerUnificationItems(prefix, material, block))); - //GTBlocks.CABLE_BLOCKS.rowMap().forEach((prefix, map) -> map.forEach((material, block) -> ChemicalHelper.registerUnificationItems(prefix, material, block))); - //GTBlocks.FLUID_PIPE_BLOCKS.rowMap().forEach((prefix, map) -> map.forEach((material, block) -> ChemicalHelper.registerUnificationItems(prefix, material, block))); - // add new stuff here as more maps are added, IDK a better way + WoodMachineRecipes.registerUnificationInfo(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java index b9ea1d1f47..ec0a9b3726 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java @@ -51,7 +51,6 @@ import org.apache.logging.log4j.util.TriConsumer; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.*; @@ -598,8 +597,20 @@ public static TagPrefix get(String name) { .generationCondition(material -> material.hasProperty(PropertyKey.INGOT) || material.hasProperty(PropertyKey.GEM) || material.hasFlag(MaterialFlags.FORCE_GENERATE_BLOCK)) .unificationEnabled(true); + public static final TagPrefix log = new TagPrefix("log") + .unformattedTagPath("logs", true); public static final TagPrefix planks = new TagPrefix("planks") .unformattedTagPath("planks", true); + public static final TagPrefix slab = new TagPrefix("slab") + .unformattedTagPath("slabs", true); + public static final TagPrefix stairs = new TagPrefix("stairs") + .unformattedTagPath("stairs", true); + public static final TagPrefix fence = new TagPrefix("fence") + .unformattedTagPath("fences"); + public static final TagPrefix fenceGate = new TagPrefix("fenceGate") + .unformattedTagPath("fence_gates"); + public static final TagPrefix door = new TagPrefix("door") + .unformattedTagPath("doors", true); // Prefix to determine which kind of Rock this is. // Also has a base tag path of only the material, for things like obsidian etc. @@ -776,7 +787,11 @@ public TagPrefix registerOre(Supplier stoneType, Supplier } public TagPrefix defaultTagPath(String path) { - this.tags.add(TagType.withDefaultFormatter(path)); + return this.defaultTagPath(path, false); + } + + public TagPrefix defaultTagPath(String path, boolean isVanilla) { + this.tags.add(TagType.withDefaultFormatter(path, isVanilla)); return this; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagType.java b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagType.java index fc0c05ac77..be803728c7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagType.java @@ -23,9 +23,9 @@ private TagType(String tagPath) { * Create a tag with a specified path, with the "default" formatter, meaning * that there is 1 "%s" format character in the path, intended for the Material name. */ - public static TagType withDefaultFormatter(String tagPath) { + public static TagType withDefaultFormatter(String tagPath, boolean isVanilla) { TagType type = new TagType(tagPath); - type.formatter = (prefix, mat) -> TagUtil.createItemTag(type.tagPath.formatted(mat.getName())); + type.formatter = (prefix, mat) -> TagUtil.createItemTag(type.tagPath.formatted(mat.getName()), isVanilla); return type; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java index 6ff4746c4f..d046d2fd53 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java @@ -267,6 +267,24 @@ public GTOreDefinition veinedVeinGenerator(Consumer config) return this; } + public GTOreDefinition classicVeinGenerator(Consumer config) { + var veinGenerator = new ClassicVeinGenerator(this); + + config.accept(veinGenerator); + this.veinGenerator = veinGenerator; + + return this; + } + + public GTOreDefinition cuboidVeinGenerator(Consumer config) { + var veinGenerator = new CuboidVeinGenerator(this); + + config.accept(veinGenerator); + this.veinGenerator = veinGenerator; + + return this; + } + @Tolerate @Nullable public VeinGenerator veinGenerator(ResourceLocation id) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGeneratorUtils.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGeneratorUtils.java index def81cce12..0d8d10c04f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGeneratorUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGeneratorUtils.java @@ -82,7 +82,7 @@ public static Optional getWorldGenLayerKey(IWorldGenLayer layer) { } public static boolean isSameDimension(ResourceKey first, ResourceKey second) { - return first.location().equals(second.location()); + return first == second; } public static Map> groupByChunks(Map input) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockfluid/BedrockFluidVeinSavedData.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockfluid/BedrockFluidVeinSavedData.java index 7d83354b5c..b050271128 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockfluid/BedrockFluidVeinSavedData.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockfluid/BedrockFluidVeinSavedData.java @@ -78,7 +78,8 @@ public CompoundTag save(CompoundTag nbt) { * @return The FluidVeinWorldInfo corresponding with the given chunk */ public FluidVeinWorldEntry getFluidVeinWorldEntry(int chunkX, int chunkZ) { - if (!veinFluids.containsKey(new ChunkPos(chunkX, chunkZ))) { + ChunkPos pos = new ChunkPos(chunkX, chunkZ); + if (!veinFluids.containsKey(pos)) { BedrockFluidDefinition definition = null; int query = RandomSource.create(Objects.hash(serverLevel.getSeed(), chunkX / VEIN_CHUNK_SIZE, chunkZ / VEIN_CHUNK_SIZE)).nextInt(); var biome = serverLevel.getBiome(new BlockPos(chunkX << 4, 64, chunkZ << 4)); @@ -108,10 +109,10 @@ public FluidVeinWorldEntry getFluidVeinWorldEntry(int chunkX, int chunkZ) { } maximumYield = Math.min(maximumYield, definition.getMaximumYield()); } - veinFluids.put(new ChunkPos(chunkX, chunkZ), new FluidVeinWorldEntry(definition, maximumYield, MAXIMUM_VEIN_OPERATIONS)); + veinFluids.put(pos, new FluidVeinWorldEntry(definition, maximumYield, MAXIMUM_VEIN_OPERATIONS)); setDirty(); } - return veinFluids.get(new ChunkPos(chunkX, chunkZ)); + return veinFluids.get(pos); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreDefinition.java new file mode 100644 index 0000000000..74473e4b6d --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreDefinition.java @@ -0,0 +1,187 @@ +package com.gregtechceu.gtceu.api.data.worldgen.bedrockore; + +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.worldgen.BiomeWeightModifier; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.data.GTOres; +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.util.ExtraCodecs; +import net.minecraft.util.valueproviders.IntProvider; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.biome.Biome; + +import java.util.*; + +@Accessors(fluent = true, chain = true) +public class BedrockOreDefinition { + public static final MapCodec> MATERIAL = Codec.mapPair(GTCEuAPI.materialManager.codec().fieldOf("material"), Codec.INT.fieldOf("chance")); + + public static final Codec FULL_CODEC = RecordCodecBuilder.create( + instance -> instance.group( + Codec.INT.fieldOf("weight").forGetter(ft -> ft.weight), + Codec.INT.fieldOf("size").forGetter(ft -> ft.size), + IntProvider.POSITIVE_CODEC.fieldOf("yield").forGetter(ft -> ft.yield), + Codec.INT.fieldOf("depletion_amount").forGetter(ft -> ft.depletionAmount), + ExtraCodecs.NON_NEGATIVE_INT.fieldOf("depletion_chance").forGetter(ft -> ft.depletionChance), + Codec.INT.fieldOf("depleted_yield").forGetter(ft -> ft.depletedYield), + MATERIAL.codec().listOf().fieldOf("materials").forGetter(ft -> ft.materials), + BiomeWeightModifier.CODEC.listOf().optionalFieldOf("weight_modifier", List.of()).forGetter(ft -> ft.originalModifiers), + ResourceKey.codec(Registry.DIMENSION_REGISTRY).listOf().fieldOf("dimension_filter").forGetter(ft -> new ArrayList<>(ft.dimensionFilter)) + ).apply(instance, (weight, size, yield, depletionAmount, depletionChance, depletedYield, materials, biomeWeightModifier, dimensionFilter) -> new BedrockOreDefinition(weight, size, yield, depletionAmount, depletionChance, depletedYield, materials, biomeWeightModifier, new HashSet<>(dimensionFilter))) + ); + + @Getter @Setter + private int weight; // weight value for determining which vein will appear + @Getter @Setter + private int size; // size in chunks + @Getter @Setter + private IntProvider yield;// the [minimum, maximum] yields + @Getter @Setter + private int depletionAmount; // amount of ore the vein gets drained by + @Getter @Setter + private int depletionChance; // the chance [0, 100] that the vein will deplete by 1 + @Getter @Setter + private int depletedYield; // yield after the vein is depleted + @Getter @Setter + private List> materials; // the ores which the vein contains + @Getter + private BiomeWeightModifier biomeWeightModifier; // weighting of biomes + private List originalModifiers; // weighting of biomes + @Getter @Setter + public Set> dimensionFilter; // filtering of dimensions + + public BedrockOreDefinition(ResourceLocation name, int size, int weight, IntProvider yield, int depletionAmount, int depletionChance, int depletedYield, List> materials, List originalModifiers, Set> dimensionFilter) { + this(weight, size, yield, depletionAmount, depletionChance, depletedYield, materials, originalModifiers, dimensionFilter); + GTRegistries.BEDROCK_ORE_DEFINITIONS.register(name, this); + } + + public BedrockOreDefinition(int weight, int size, IntProvider yield, int depletionAmount, int depletionChance, int depletedYield, List> materials, List originalModifiers, Set> dimensionFilter) { + this.weight = weight; + this.size = size; + this.yield = yield; + this.depletionAmount = depletionAmount; + this.depletionChance = depletionChance; + this.depletedYield = depletedYield; + this.materials = materials; + this.originalModifiers = originalModifiers; + this.biomeWeightModifier = new BiomeWeightModifier(HolderSet.direct(originalModifiers.stream().flatMap(mod -> mod.biomes.stream()).toList()), originalModifiers.stream().mapToInt(mod -> mod.addedWeight).sum()) { + @Override + public Integer apply(Holder biome) { + int mod = 0; + for (var modifier : originalModifiers) { + if (modifier.biomes.contains(biome)) { + mod += modifier.apply(biome); + } + } + return mod; + } + }; + this.dimensionFilter = dimensionFilter; + } + + public void setOriginalModifiers(List modifiers) { + this.originalModifiers = modifiers; + this.biomeWeightModifier = new BiomeWeightModifier(HolderSet.direct(originalModifiers.stream().flatMap(mod -> mod.biomes.stream()).toList()), originalModifiers.stream().mapToInt(mod -> mod.addedWeight).sum()) { + @Override + public Integer apply(Holder biome) { + int mod = 0; + for (var modifier : originalModifiers) { + if (modifier.biomes.contains(biome)) { + mod += modifier.apply(biome); + } + } + return mod; + } + }; + } + + public static Builder builder(ResourceLocation name) { + return new Builder(name); + } + + @Accessors(chain = true, fluent = true) + public static class Builder { + private final ResourceLocation name; + @Setter + private int weight; // weight value for determining which vein will appear + @Setter + private int size; // size of the vein, in chunks. + @Setter + private IntProvider yield;// the [minimum, maximum) yields + @Setter + private int depletionAmount; // amount of fluid the vein gets drained by + @Setter + private int depletionChance = 1; // the chance [0, 100] that the vein will deplete by 1 + @Setter + private int depletedYield; // yield after the vein is depleted + @Setter + private List> materials; // the ores which the vein contains + @Setter + private Set> dimensions; + private final List biomes = new LinkedList<>(); + + private Builder(ResourceLocation name) { + this.name = name; + } + + public Builder copy(ResourceLocation name) { + var copied = new Builder(name); + copied.weight = weight; + copied.yield = yield; + copied.depletionAmount = depletionAmount; + copied.depletionChance = depletionChance; + copied.depletedYield = depletedYield; + copied.materials = materials; + return copied; + } + + public Builder material(Material material, int amount) { + if (this.materials == null) this.materials = new ArrayList<>(); + this.materials.add(Pair.of(material, amount)); + return this; + } + + public Builder yield(int min, int max) { + return this.yield(UniformInt.of(min, max)); + } + + public Builder biomes(int weight, TagKey biomes) { + this.biomes.add(new BiomeWeightModifier(GTRegistries.builtinRegistry() + .registryOrThrow(Registry.BIOME_REGISTRY).getOrCreateTag(biomes), weight)); + return this; + } + + @SafeVarargs + public final Builder biomes(int weight, ResourceKey... biomes) { + this.biomes.add(new BiomeWeightModifier(HolderSet.direct(GTRegistries.builtinRegistry() + .registryOrThrow(Registry.BIOME_REGISTRY)::getHolderOrThrow, biomes), weight)); + return this; + } + + public Builder biomes(int weight, HolderSet biomes) { + this.biomes.add(new BiomeWeightModifier(biomes, weight)); + return this; + } + + public BedrockOreDefinition register() { + var definition = new BedrockOreDefinition(weight, size, yield, depletionAmount, depletionChance, depletedYield, materials, biomes, dimensions); + GTOres.toReRegisterBedrock.put(name, definition); + return definition; + } + } + +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreVeinSavedData.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreVeinSavedData.java index ea330fefd9..8ce3af83ca 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreVeinSavedData.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/BedrockOreVeinSavedData.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.WorldGeneratorUtils; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -25,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; /** * @author KilaBash @@ -85,15 +85,22 @@ public CompoundTag save(CompoundTag nbt) { public OreVeinWorldEntry getOreVeinWorldEntry(int chunkX, int chunkZ) { ChunkPos pos = new ChunkPos(chunkX, chunkZ); if (!veinOres.containsKey(pos)) { - GTOreDefinition definition = null; + int minDistance = ConfigHolder.INSTANCE.worldgen.oreVeins.bedrockOreDistance; + if (chunkX % minDistance != 0 || chunkZ % minDistance != 0) { + OreVeinWorldEntry entry = new OreVeinWorldEntry(null, 0, MAXIMUM_VEIN_OPERATIONS); + veinOres.put(pos, entry); + return entry; + } + + BedrockOreDefinition definition = null; int query = RandomSource.create(Objects.hash(serverLevel.getSeed(), chunkX / VEIN_CHUNK_SIZE, chunkZ / VEIN_CHUNK_SIZE)).nextInt(); var biome = serverLevel.getBiome(new BlockPos(chunkX << 4, 64, chunkZ << 4)); int totalWeight = getTotalWeight(biome); if (totalWeight > 0) { int weight = Math.abs(query % totalWeight); - for (var oreDefinition : GTRegistries.ORE_VEINS) { + for (var oreDefinition : GTRegistries.BEDROCK_ORE_DEFINITIONS) { int veinWeight = oreDefinition.weight() + (oreDefinition.biomeWeightModifier() != null ? oreDefinition.biomeWeightModifier().apply(biome) : 0); - if (veinWeight > 0 && oreDefinition.dimensionFilter().stream().anyMatch(dim -> WorldGeneratorUtils.isSameDimension(dim, serverLevel.dimension()))) { + if (veinWeight > 0 && (oreDefinition.dimensionFilter == null || oreDefinition.dimensionFilter().stream().anyMatch(dim -> WorldGeneratorUtils.isSameDimension(dim, serverLevel.dimension())))) { weight -= veinWeight; if (weight < 0) { definition = oreDefinition; @@ -103,48 +110,34 @@ public OreVeinWorldEntry getOreVeinWorldEntry(int chunkX, int chunkZ) { } } - var random = RandomSource.create(31L * 31 * chunkX + chunkZ * 31L + Long.hashCode(serverLevel.getSeed())); - - int maximumYield = 0; - if (definition != null) { - if (definition.maximumYield() - definition.minimumYield() <= 0) { - maximumYield = definition.minimumYield(); - } else { - maximumYield = random.nextInt(definition.maximumYield() - definition.minimumYield()) + definition.minimumYield(); - } - maximumYield = Math.round(Math.min(maximumYield, definition.maximumYield()) * ConfigHolder.INSTANCE.worldgen.oreVeins.bedrockOreMultiplier); - } - veinOres.put(new ChunkPos(chunkX, chunkZ), new OreVeinWorldEntry(definition, maximumYield, MAXIMUM_VEIN_OPERATIONS)); + createVein(pos, definition); setDirty(); } return veinOres.get(pos); } - public void createVein(ChunkPos pos, GTOreDefinition definition) { + public void createVein(ChunkPos pos, @Nullable BedrockOreDefinition definition) { if (definition != null) { - int radius = SectionPos.blockToSectionCoord(definition.clusterSize() / 2f); + int radius = definition.size() / 2; for (int x = pos.x - radius; x <= pos.x + radius; ++x) { for (int z = pos.z - radius; z <= pos.z + radius; ++z) { ChunkPos pos2 = new ChunkPos(x, z); - if (!veinOres.containsKey(pos2)) { - float distanceFromOriginal = Math.abs(pos.x - x) + Math.abs(pos.z - z); - distanceFromOriginal = distanceFromOriginal == 0 ? 1 : distanceFromOriginal; - distanceFromOriginal = (float) Math.pow(distanceFromOriginal, 2); - - var random = RandomSource.create(31L * 31 * pos2.x + pos2.z * 31L + Long.hashCode(serverLevel.getSeed())); - - int maximumYield = 0; - if ((definition.maximumYield() - definition.minimumYield()) / distanceFromOriginal <= 0) { - maximumYield = definition.minimumYield(); - } else { - maximumYield = (int) (random.nextInt((definition.maximumYield() - definition.minimumYield()) + definition.minimumYield()) / distanceFromOriginal); - maximumYield = Math.max(maximumYield, definition.minimumYield()); - } - maximumYield = Math.min(maximumYield, definition.maximumYield()); - - veinOres.put(pos2, new OreVeinWorldEntry(definition, maximumYield, MAXIMUM_VEIN_OPERATIONS)); + float distanceFromOriginal = Math.abs(pos.x - x) + Math.abs(pos.z - z); + distanceFromOriginal = distanceFromOriginal == 0 ? 1 : distanceFromOriginal; + distanceFromOriginal = (float) Math.pow(distanceFromOriginal, 2); + + var random = RandomSource.create(31L * 31 * pos2.x + pos2.z * 31L + Long.hashCode(serverLevel.getSeed())); + + int maximumYield; + if ((definition.yield().getMaxValue() - definition.yield().getMinValue()) / distanceFromOriginal <= 0) { + maximumYield = definition.yield().getMinValue(); + } else { + maximumYield = (int) ((definition.yield().sample(random) + definition.yield().getMinValue()) / distanceFromOriginal); + maximumYield = Math.max(maximumYield, definition.yield().getMinValue()); } + maximumYield = Math.min(maximumYield, definition.yield().getMaxValue()); + veinOres.put(pos2, new OreVeinWorldEntry(definition, maximumYield, MAXIMUM_VEIN_OPERATIONS)); } } } @@ -159,8 +152,8 @@ public void createVein(ChunkPos pos, GTOreDefinition definition) { public int getTotalWeight(Holder biome) { return biomeWeights.computeIfAbsent(biome, b -> { int totalWeight = 0; - for (var definition : GTRegistries.ORE_VEINS) { - if (definition.dimensionFilter().stream().anyMatch(dim -> WorldGeneratorUtils.isSameDimension(dim, serverLevel.dimension()))) { + for (var definition : GTRegistries.BEDROCK_ORE_DEFINITIONS) { + if (definition.dimensionFilter == null || definition.dimensionFilter().stream().anyMatch(dim -> WorldGeneratorUtils.isSameDimension(dim, serverLevel.dimension()))) { totalWeight += definition.biomeWeightModifier() != null ? definition.biomeWeightModifier().apply(biome) : 0; totalWeight += definition.weight(); } @@ -215,7 +208,7 @@ public int getOperationsRemaining(int chunkX, int chunkZ) { public List> getOreInChunk(int chunkX, int chunkZ) { OreVeinWorldEntry info = getOreVeinWorldEntry(chunkX, chunkZ); if (info.getDefinition() == null) return null; - return info.getDefinition().getBedrockVeinMaterials(); + return info.getDefinition().materials().stream().map(pair -> Map.entry(pair.getSecond(), pair.getFirst())).collect(Collectors.toList()); } /** @@ -237,7 +230,7 @@ public void depleteVein(int chunkX, int chunkZ, int amount, boolean ignoreVeinSt return; } - GTOreDefinition definition = info.getDefinition(); + BedrockOreDefinition definition = info.getDefinition(); // prevent division by zero, veins that never deplete don't need updating if (definition == null || definition.depletionChance() == 0) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/OreVeinWorldEntry.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/OreVeinWorldEntry.java index e62ff836f4..c1b3a74371 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/OreVeinWorldEntry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/OreVeinWorldEntry.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.data.worldgen.bedrockore; -import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.config.ConfigHolder; import lombok.Getter; @@ -11,21 +10,21 @@ import org.jetbrains.annotations.Nullable; /** - * @author KilaBash - * @date 2023/7/11 - * @implNote FluidVeinWorldEntry + * @author Screret + * @date 2023/12/20 + * @implNote OreVeinWorldEntry */ public class OreVeinWorldEntry { @Nullable @Getter - private GTOreDefinition vein; + private BedrockOreDefinition definition; @Getter private int oreYield; @Getter private int operationsRemaining; - public OreVeinWorldEntry(@Nullable GTOreDefinition vein, int oreYield, int operationsRemaining) { - this.vein = vein; + public OreVeinWorldEntry(@Nullable BedrockOreDefinition vein, int oreYield, int operationsRemaining) { + this.definition = vein; this.oreYield = oreYield; this.operationsRemaining = operationsRemaining; } @@ -34,10 +33,6 @@ private OreVeinWorldEntry() { } - public GTOreDefinition getDefinition() { - return this.vein; - } - @SuppressWarnings("unused") public void setOperationsRemaining(int amount) { this.operationsRemaining = amount; @@ -51,8 +46,8 @@ public CompoundTag writeToNBT() { var tag = new CompoundTag(); tag.putInt("oreYield", oreYield); tag.putInt("operationsRemaining", operationsRemaining); - if (vein != null) { - tag.putString("vein", GTRegistries.ORE_VEINS.getKey(vein).toString()); + if (definition != null) { + tag.putString("vein", GTRegistries.BEDROCK_ORE_DEFINITIONS.getKey(definition).toString()); } return tag; } @@ -64,7 +59,7 @@ public static OreVeinWorldEntry readFromNBT(@NotNull CompoundTag tag) { info.operationsRemaining = tag.getInt("operationsRemaining"); if (tag.contains("vein")) { - info.vein = GTRegistries.ORE_VEINS.get(new ResourceLocation(tag.getString("vein"))); + info.definition = GTRegistries.BEDROCK_ORE_DEFINITIONS.get(new ResourceLocation(tag.getString("vein"))); } return info; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/VeinGenerators.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/VeinGenerators.java index e000dd8ab5..fab68cad8e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/VeinGenerators.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/VeinGenerators.java @@ -11,6 +11,7 @@ import java.util.function.Function; +@SuppressWarnings("unused") public class VeinGenerators { public static final Codec NO_OP = register(GTCEu.id("no_op"), NoopVeinGenerator.CODEC, entry -> NoopVeinGenerator.INSTANCE); @@ -19,6 +20,8 @@ public class VeinGenerators { public static final Codec GEODE = register(GTCEu.id("geode"), GeodeVeinGenerator.CODEC, GeodeVeinGenerator::new); public static final Codec DIKE = register(GTCEu.id("dike"), DikeVeinGenerator.CODEC, DikeVeinGenerator::new); public static final Codec VEINED = register(GTCEu.id("veined"), VeinedVeinGenerator.CODEC, VeinedVeinGenerator::new); + public static final Codec CLASSIC = register(GTCEu.id("classic"), ClassicVeinGenerator.CODEC, ClassicVeinGenerator::new); + public static final Codec CUBOID = register(GTCEu.id("cuboid"), CuboidVeinGenerator.CODEC, CuboidVeinGenerator::new); public static Codec register(ResourceLocation id, Codec codec, Function function) { WorldGeneratorUtils.VEIN_GENERATORS.put(id, codec); diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java index a6337c4680..fbecad892e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java @@ -48,8 +48,8 @@ public class SurfaceIndicatorGenerator extends IndicatorGenerator { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.either(BlockState.CODEC, GTCEuAPI.materialManager.codec()).fieldOf("block").forGetter(ext -> ext.block), IntProvider.codec(1, 32).fieldOf("radius").forGetter(ext -> ext.radius), - FloatProvider.codec(0.0f, 1.0f).fieldOf("density").forGetter(ext -> ext.density), - StringRepresentable.fromEnum(IndicatorPlacement::values).fieldOf("placement").forGetter(ext -> ext.placement) + FloatProvider.codec(0.0f, 2.0f).fieldOf("density").forGetter(ext -> ext.density), + IndicatorPlacement.CODEC.fieldOf("placement").forGetter(ext -> ext.placement) ).apply(instance, SurfaceIndicatorGenerator::new)); private Either block = Either.left(Blocks.AIR.defaultBlockState()); @@ -206,6 +206,8 @@ public enum IndicatorPlacement implements StringRepresentable { block -> getBlockState(block, Direction.UP) ); + public static final Codec CODEC = StringRepresentable.fromEnum(IndicatorPlacement::values); + public final TriFunction resolver; public final Function, BlockState> stateTransformer; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/ClassicVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/ClassicVeinGenerator.java new file mode 100644 index 0000000000..0c4d645688 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/ClassicVeinGenerator.java @@ -0,0 +1,312 @@ +package com.gregtechceu.gtceu.api.data.worldgen.generator.veins; + +import com.google.common.base.Preconditions; +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; +import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; +import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; +import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; +import com.mojang.datafixers.util.Either; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.AllArgsConstructor; +import lombok.Setter; +import lombok.experimental.Accessors; +import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; +import net.minecraft.util.ExtraCodecs; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.BulkSectionAccess; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.levelgen.XoroshiroRandomSource; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; +import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Stream; + +@Accessors(fluent = true, chain = true) +public class ClassicVeinGenerator extends VeinGenerator { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Layer.CODEC.fieldOf("primary").forGetter(val -> val.primary), + Layer.CODEC.fieldOf("secondary").forGetter(val -> val.secondary), + Layer.CODEC.fieldOf("between").forGetter(val -> val.between), + Layer.CODEC.fieldOf("sporadic").forGetter(val -> val.sporadic), + ExtraCodecs.POSITIVE_INT.optionalFieldOf("y_radius", 3).forGetter(val -> val.yRadius) + ).apply(instance, ClassicVeinGenerator::new)); + + private Layer primary; + private Layer secondary; + private Layer between; + private Layer sporadic; + private int yRadius = 3; + + // Provided for readability + private int sporadicDivisor; + private int startPrimary; + private int startBetween; + + @Setter + private RuleTest[] rules; + + public ClassicVeinGenerator(GTOreDefinition entry) { + super(entry); + } + + public ClassicVeinGenerator(Layer primary, Layer secondary, Layer between, Layer sporadic, int yRadius) { + this.primary = primary; + this.secondary = secondary; + this.between = between; + this.sporadic = sporadic; + this.yRadius = yRadius; + } + + @Override + public List, Integer>> getAllEntries() { + List, Integer>> result = new ArrayList<>(); + int totalWeight = primary.layers + secondary.layers + between.layers; + primary.target + .map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, primary.layers / totalWeight))); + secondary.target + .map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, secondary.layers / totalWeight))); + between.target + .map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, between.layers / totalWeight))); + sporadic.target + .map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, 1))); + return result; + } + + @Override + public Map generate(WorldGenLevel level, RandomSource random, GTOreDefinition entry, BlockPos origin) { + Map generatedBlocks = new Object2ObjectOpenHashMap<>(); + + int radius = entry.clusterSize(); + int ySize = radius / 2; + int xy2 = radius * radius * ySize * ySize; + int xz2 = radius * radius * radius * radius; + int yz2 = ySize * ySize * radius * radius; + int xyz2 = xy2 * radius * radius; + + int xPos = origin.getX(); + int yPos = origin.getY(); + int zPos = origin.getZ(); + + int max = Math.max(ySize, radius); + int yMax = Math.min(max, yRadius); + BlockPos minPos = new BlockPos(xPos - max, yPos - yMax, zPos - max); + + for (int xOffset = -max; xOffset <= max; xOffset++) { + int xr = yz2 * xOffset * xOffset; + if (xr > xyz2) continue; + for (int yOffset = -yMax; yOffset <= yMax; yOffset++) { + int yr = xr + xz2 * yOffset * yOffset + xy2; + if (yr > xyz2) continue; + if (level.isOutsideBuildHeight(yOffset + yPos)) + continue; + for (int zOffset = -max; zOffset <= max; zOffset++) { + int zr = yr + xy2 * zOffset * zOffset; + if (zr > xyz2) continue; + + final var randomSeed = random.nextLong(); // Fully deterministic regardless of chunk order + BlockPos currentPos = new BlockPos(xOffset + xPos, yOffset + yPos, zOffset + zPos); + generatedBlocks.put(currentPos, (access, section) -> + placeBlock(access, section, randomSeed, entry, currentPos, minPos) + ); + } + } + } + return generatedBlocks; + } + + private void placeBlock(BulkSectionAccess access, LevelChunkSection section, long randomSeed, + GTOreDefinition entry, + BlockPos blockPos, BlockPos lowestPos) { + RandomSource random = new XoroshiroRandomSource(randomSeed); + int x = SectionPos.sectionRelative(blockPos.getX()); + int y = SectionPos.sectionRelative(blockPos.getY()); + int z = SectionPos.sectionRelative(blockPos.getZ()); + + BlockState blockState = section.getBlockState(x, y, z); + int layer = blockPos.getY() - lowestPos.getY(); + + // First try to spawn "between" + if (layer >= startBetween && layer - startBetween + 1 <= between.layers) { + if (random.nextFloat() <= entry.density() / 2) { + between.place(blockState, access, section, randomSeed, entry, blockPos); + return; + } + } + + // Then try primary/secondary + if (layer >= startPrimary) { + if (random.nextFloat() <= entry.density()) { + primary.place(blockState, access, section, randomSeed, entry, blockPos); + return; + } + } else { + if (random.nextFloat() <= entry.density()) { + secondary.place(blockState, access, section, randomSeed, entry, blockPos); + return; + } + } + + // Then lastly, try sporadic + if (random.nextFloat() <= entry.density() / sporadicDivisor) { + sporadic.place(blockState, access, section, randomSeed, entry, blockPos); + } + } + + @Override + public VeinGenerator build() { + primary.layers = primary.layers == -1 ? 4 : primary.layers; + secondary.layers = secondary.layers == -1 ? 3 : secondary.layers; + between.layers = between.layers == -1 ? 3 : between.layers; + + // Ensure "between" is not more than the total primary and secondary layers + Preconditions.checkArgument(primary.layers + secondary.layers >= between.layers, + "Error: cannot be more \"between\" layers than primary and secondary layers combined!"); + + this.sporadicDivisor = primary.layers + secondary.layers - 1; + this.startPrimary = secondary.layers; + this.startBetween = secondary.layers - between.layers / 2; + return this; + } + + @Override + public VeinGenerator copy() { + return new ClassicVeinGenerator(this.primary.copy(), this.secondary.copy(), this.between.copy(), this.sporadic.copy(), this.yRadius); + } + + @Override + public Codec codec() { + return CODEC; + } + + public ClassicVeinGenerator primary(Consumer builder) { + Layer.Builder layerBuilder = new Layer.Builder(rules); + builder.accept(layerBuilder); + primary = layerBuilder.build(); + return this; + } + + public ClassicVeinGenerator secondary(Consumer builder) { + Layer.Builder layerBuilder = new Layer.Builder(rules); + builder.accept(layerBuilder); + secondary = layerBuilder.build(); + return this; + } + + public ClassicVeinGenerator between(Consumer builder) { + Layer.Builder layerBuilder = new Layer.Builder(rules); + builder.accept(layerBuilder); + between = layerBuilder.build(); + return this; + } + + public ClassicVeinGenerator sporadic(Consumer builder) { + Layer.Builder layerBuilder = new Layer.Builder(rules); + builder.accept(layerBuilder); + sporadic = layerBuilder.build(); + return this; + } + + @AllArgsConstructor + public static class Layer { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.either(OreConfiguration.TargetBlockState.CODEC.listOf(), GTCEuAPI.materialManager.codec()).fieldOf("targets").forGetter(layer -> layer.target), + Codec.INT.optionalFieldOf("layers", -1).forGetter(layer -> layer.layers) + ).apply(instance, Layer::new)); + + public final Either, Material> target; + public int layers; + + public void place(BlockState blockState, BulkSectionAccess access, LevelChunkSection section, long randomSeed, GTOreDefinition entry, BlockPos pos) { + RandomSource random = new XoroshiroRandomSource(randomSeed); + int x = SectionPos.sectionRelative(pos.getX()); + int y = SectionPos.sectionRelative(pos.getY()); + int z = SectionPos.sectionRelative(pos.getZ()); + + target.ifLeft(blockStates -> { + for (OreConfiguration.TargetBlockState targetState : blockStates) { + if (!OreVeinUtil.canPlaceOre(blockState, access::getBlockState, random, entry, targetState, pos)) + continue; + if (targetState.state.isAir()) + continue; + section.setBlockState(x, y, z, targetState.state, false); + break; + } + }).ifRight(material -> { + if (!OreVeinUtil.canPlaceOre(blockState, access::getBlockState, random, entry, pos)) + return; + BlockState currentState = access.getBlockState(pos); + var prefix = ChemicalHelper.getOrePrefix(currentState); + if (prefix.isEmpty()) return; + Block toPlace = ChemicalHelper.getBlock(prefix.get(), material); + if (toPlace == null || toPlace.defaultBlockState().isAir()) + return; + section.setBlockState(x, y, z, toPlace.defaultBlockState(), false); + }); + } + + public Layer copy() { + return new Layer(this.target.mapBoth(ArrayList::new, Function.identity()), layers); + } + + public static class Builder { + private Either, Material> target; + private int size = 1; + private final RuleTest[] rules; + + protected Builder(RuleTest... rules) { + this.rules = rules; + } + + public Layer.Builder block(Supplier block) { + return state(block.get().defaultBlockState()); + } + + public Layer.Builder state(Supplier state) { + return state(state.get()); + } + + public Layer.Builder state(BlockState state) { + this.target = Either.left(Arrays.stream(this.rules).map(rule -> OreConfiguration.target(rule, state)).toList()); + return this; + } + + public Layer.Builder mat(Material material) { + this.target = Either.right(material); + return this; + } + + public Layer.Builder size(int size) { + this.size = size; + return this; + } + + public Layer build() { + return new Layer(target, size); + } + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/CuboidVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/CuboidVeinGenerator.java new file mode 100644 index 0000000000..78c83820ad --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/CuboidVeinGenerator.java @@ -0,0 +1,281 @@ +package com.gregtechceu.gtceu.api.data.worldgen.generator.veins; + +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; +import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; +import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; +import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; +import com.mojang.datafixers.util.Either; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.AllArgsConstructor; +import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.BulkSectionAccess; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.levelgen.XoroshiroRandomSource; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +@AllArgsConstructor +public class CuboidVeinGenerator extends VeinGenerator { + public static final Codec, Material>> LAYER_CODEC = Codec.either(OreConfiguration.TargetBlockState.CODEC.listOf(), GTCEuAPI.materialManager.codec()); + + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + LAYER_CODEC.fieldOf("top").forGetter(val -> val.top), + LAYER_CODEC.fieldOf("middle").forGetter(val -> val.middle), + LAYER_CODEC.fieldOf("bottom").forGetter(val -> val.bottom), + LAYER_CODEC.fieldOf("spread").forGetter(val -> val.spread), + Codec.INT.fieldOf("min_y").forGetter(val -> val.minY), + Codec.INT.fieldOf("max_y").forGetter(val -> val.maxY) + ).apply(instance, CuboidVeinGenerator::new)); + + private Either, Material> top; + private Either, Material> middle; + private Either, Material> bottom; + private Either, Material> spread; + + private int minY, maxY; + + public CuboidVeinGenerator(GTOreDefinition entry) { + super(entry); + } + + @Override + public List, Integer>> getAllEntries() { + List, Integer>> result = new ArrayList<>(); + // Entries' values are counted based on how many layers the entry is in. + top.map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, 2))); + middle.map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, 3))); + bottom.map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, 4))); + spread.map(blockStates -> blockStates.stream().map(state -> Either.left(state.state)), + material -> Stream.of(Either.right(material))) + .forEach(entry -> result.add(Map.entry(entry, 7))); + return result; + } + + @Override + public Map generate(WorldGenLevel level, RandomSource random, GTOreDefinition entry, BlockPos origin) { + Map generatedBlocks = new Object2ObjectOpenHashMap<>(); + + int size = entry.clusterSize(); + + int westBound = origin.getX() - random.nextInt(size); + int eastBound = origin.getX() + random.nextInt(size); + int northBound = origin.getZ() - random.nextInt(size); + int southBound = origin.getZ() + random.nextInt(size); + + int minY = this.minY; + int startY = minY + random.nextInt(this.maxY - minY - 5); + + int topAmount = 0; + int middleAmount = 0; + int bottomAmount = 0; + int spreadAmount = 0; + + for (int layerOffset = -1; layerOffset <= 7; layerOffset++) { + int layer = startY + layerOffset; + if (level.isOutsideBuildHeight(layer)) + continue; + for (int x = westBound; x < eastBound; x++) { + for (int z = northBound; z < southBound; z++) { + final var randomSeed = random.nextLong(); // Fully deterministic regardless of chunk order + + // determine density based on distance from the origin chunk + // this makes the vein more concentrated towards the center + double xLength = origin.getX() - x; + double zLength = origin.getZ() - z; + double volume = Math.sqrt(2 + (xLength * xLength) + (zLength * zLength)); + + int localDensity = (int) Math.max(1, entry.density() * volume); + int weightX = Math.max(1, Math.max(Mth.abs(westBound - x), Mth.abs(eastBound - x)) / localDensity); + int weightZ = Math.max(1, Math.max(Mth.abs(southBound - z), Mth.abs(northBound - z)) / localDensity); + + BlockPos pos = new BlockPos(x, layer, z); + if (layerOffset <= 1) { + // layers -1, 0, and 1 are bottom and spread + if (placeBottom(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + bottomAmount++; + } else if (placeSpread(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + spreadAmount++; + } + } else if (layerOffset == 2) { + // layer 2 is bottom, middle, and spread + if (placeMiddle(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + middleAmount++; + } else if (placeBottom(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + bottomAmount++; + } else if (placeSpread(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + spreadAmount++; + } + } else if (layerOffset == 3) { + // layer 3 is middle, and spread + if (placeMiddle(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + middleAmount++; + } else if (placeSpread(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + spreadAmount++; + } + } else if (layerOffset <= 5) { + // layers 4 and 5 is top, middle, and spread + if (placeMiddle(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + middleAmount++; + } else if (placeTop(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + topAmount++; + } else if (placeSpread(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + spreadAmount++; + } + } else { + // layers 6 and 7 is top and spread + if (placeTop(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + topAmount++; + } else if (placeSpread(generatedBlocks, entry, randomSeed, pos, random, weightX, weightZ)) { + spreadAmount++; + } + } + } + } + } + + return generatedBlocks; + } + + /** + * Check if an ore should be placed + * + * @param random the random to use + * @param weightX the x weight + * @param weightZ the z weight + * @return if the ore should be placed + */ + protected static boolean shouldPlaceOre(@NotNull RandomSource random, int weightX, int weightZ) { + return random.nextInt(weightX) == 0 || random.nextInt(weightZ) == 0; + } + + /** + * Place the top ore + * + * @return if the ore was placed + */ + private boolean placeTop(Map generatedBlocks, GTOreDefinition entry, + long randomSeed, BlockPos pos, + RandomSource random, int weightX, int weightZ) { + var top = this.top; + if (shouldPlaceOre(random, weightX, weightZ)) { + generatedBlocks.put(pos, (access, section) -> placeOre(access, section, pos, randomSeed, top, entry)); + return true; + } + return false; + } + + /** + * Place the middle ore + * + * @return if the ore was placed + */ + private boolean placeMiddle(Map generatedBlocks, GTOreDefinition entry, + long randomSeed, BlockPos pos, + RandomSource random, int weightX, int weightZ) { + var middle = this.middle; + if (random.nextInt(2) == 0 && shouldPlaceOre(random, weightX, weightZ)) { + generatedBlocks.put(pos, (access, section) -> placeOre(access, section, pos, randomSeed, middle, entry)); + return true; + } + return false; + } + + /** + * Place the bottom ore + * + * @return if the ore was placed + */ + private boolean placeBottom(Map generatedBlocks, GTOreDefinition entry, + long randomSeed, BlockPos pos, + RandomSource random, int weightX, int weightZ) { + var bottom = this.bottom; + if (shouldPlaceOre(random, weightX, weightZ)) { + generatedBlocks.put(pos, (access, section) -> placeOre(access, section, pos, randomSeed, bottom, entry)); + return true; + } + return false; + } + + /** + * Place the spread ore + * + * @return if the ore was placed + */ + private boolean placeSpread(Map generatedBlocks, GTOreDefinition entry, + long randomSeed, BlockPos pos, + RandomSource random, int weightX, int weightZ) { + var spread = this.spread; + if (random.nextInt(7) == 0 && shouldPlaceOre(random, weightX, weightZ)) { + generatedBlocks.put(pos, (access, section) -> placeOre(access, section, pos, randomSeed, spread, entry)); + return true; + } + return false; + } + + public void placeOre(BulkSectionAccess access, LevelChunkSection section, BlockPos pos, long randomSeed, Either, Material> ore, GTOreDefinition entry) { + RandomSource random = new XoroshiroRandomSource(randomSeed); + int x = SectionPos.sectionRelative(pos.getX()); + int y = SectionPos.sectionRelative(pos.getY()); + int z = SectionPos.sectionRelative(pos.getZ()); + + BlockState existing = section.getBlockState(x, y, z); + + ore.ifLeft(blockStates -> { + for (OreConfiguration.TargetBlockState targetState : blockStates) { + if (!OreVeinUtil.canPlaceOre(existing, access::getBlockState, random, entry, targetState, pos)) + continue; + if (targetState.state.isAir()) + continue; + section.setBlockState(x, y, z, targetState.state, false); + break; + } + }).ifRight(material -> { + if (!OreVeinUtil.canPlaceOre(existing, access::getBlockState, random, entry, pos)) + return; + BlockState currentState = access.getBlockState(pos); + var prefix = ChemicalHelper.getOrePrefix(currentState); + if (prefix.isEmpty()) return; + Block toPlace = ChemicalHelper.getBlock(prefix.get(), material); + if (toPlace == null || toPlace.defaultBlockState().isAir()) + return; + section.setBlockState(x, y, z, toPlace.defaultBlockState(), false); + }); + } + + @Override + public VeinGenerator build() { + return null; + } + + @Override + public VeinGenerator copy() { + return null; + } + + @Override + public Codec codec() { + return null; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java index 213f833021..280814f710 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java @@ -7,7 +7,6 @@ import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.utils.GTUtil; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; @@ -154,7 +153,7 @@ public VeinGenerator build() { @Override public VeinGenerator copy() { - return new DikeVeinGenerator(blocks, minYLevel, maxYLevel); + return new DikeVeinGenerator(new ArrayList<>(blocks), minYLevel, maxYLevel); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java index 3fbc857fb4..aed530d5f1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java @@ -8,7 +8,6 @@ import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.mojang.datafixers.util.Either; import com.mojang.datafixers.util.Pair; import com.mojang.serialization.Codec; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/LayeredVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/LayeredVeinGenerator.java index 3ed9c1290e..0f73c2bb66 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/LayeredVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/LayeredVeinGenerator.java @@ -94,7 +94,6 @@ public Map generate(WorldGenLevel level, RandomSource List resolvedLayers = new ArrayList<>(); List layerDiameterOffsets = new ArrayList<>(); - BlockPos.MutableBlockPos posCursor = new BlockPos.MutableBlockPos(); int layerCoordinate = random.nextInt(4); int slantyCoordinate = random.nextInt(3); float slope = random.nextFloat() * .75f; @@ -160,13 +159,13 @@ private static void placeBlock(BulkSectionAccess access, LevelChunkSection secti int y = SectionPos.sectionRelative(pos.getY()); int z = SectionPos.sectionRelative(pos.getZ()); - BlockState blockstate = section.getBlockState(x, y, z); + BlockState blockState = section.getBlockState(x, y, z); BlockPos.MutableBlockPos posCursor = pos.mutable(); if (random.nextFloat() <= density) { state.ifLeft(blockStates -> { for (OreConfiguration.TargetBlockState targetState : blockStates) { - if (!OreVeinUtil.canPlaceOre(blockstate, access::getBlockState, random, entry, targetState, posCursor)) + if (!OreVeinUtil.canPlaceOre(blockState, access::getBlockState, random, entry, targetState, posCursor)) continue; if (targetState.state.isAir()) continue; @@ -174,7 +173,7 @@ private static void placeBlock(BulkSectionAccess access, LevelChunkSection secti break; } }).ifRight(material -> { - if (!OreVeinUtil.canPlaceOre(blockstate, access::getBlockState, random, entry, posCursor)) + if (!OreVeinUtil.canPlaceOre(blockState, access::getBlockState, random, entry, posCursor)) return; BlockState currentState = access.getBlockState(posCursor); var prefix = ChemicalHelper.getOrePrefix(currentState); @@ -206,16 +205,15 @@ public LayeredVeinGenerator withLayerPattern(NonNullSupplier pat public VeinGenerator build() { if (this.layerPatterns != null && !this.layerPatterns.isEmpty()) return this; - List layerPatterns = this.bakingLayerPatterns.stream() + this.layerPatterns = this.bakingLayerPatterns.stream() .map(NonNullSupplier::get) .toList(); - this.layerPatterns = layerPatterns; return this; } @Override public VeinGenerator copy() { - return new LayeredVeinGenerator(this.layerPatterns); + return new LayeredVeinGenerator(new ArrayList<>(this.layerPatterns)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java index 256a69d9b6..04428fcada 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java @@ -7,7 +7,6 @@ import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -123,7 +122,7 @@ public VeinGenerator build() { @Override public VeinGenerator copy() { - return new StandardVeinGenerator(this.blocks); + return new StandardVeinGenerator(this.blocks.mapBoth(ArrayList::new, Function.identity())); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java index 635a2d2ed6..8f53373914 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java @@ -10,7 +10,6 @@ import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTFeatures; import com.gregtechceu.gtceu.utils.GTUtil; -import com.jozufozu.flywheel.util.NonNullSupplier; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -38,14 +37,11 @@ import net.minecraft.world.level.levelgen.blending.Blender; import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; import net.minecraft.world.level.levelgen.structure.templatesystem.AlwaysTrueTest; -import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; -import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -71,8 +67,8 @@ public class VeinedVeinGenerator extends VeinGenerator { Codec.FLOAT.fieldOf("rare_block_chance").orElse(0.02f).forGetter(it -> it.rareBlockChance)//, ).apply(instance, VeinedVeinGenerator::new)); - public List oreBlocks; - public List rareBlocks; + public List oreBlocks = new ArrayList<>(); + public List rareBlocks = new ArrayList<>(); @Setter public BlockState fillerBlock; @Setter @@ -106,14 +102,14 @@ public List, Integer>> getAllEntries() { material -> Stream.of(Map.entry(Either.right(material), definition.weight)) ) ); - var s2 = this.rareBlocks == null ? null : this.rareBlocks.stream().flatMap(definition -> + var s2 = this.rareBlocks.stream().flatMap(definition -> definition.block.map( state -> state.stream().map(target -> Map.entry(Either.left(target.state), definition.weight)), material -> Stream.of(Map.entry(Either.right(material), definition.weight)) ) ); - return (s2 == null ? s1 : Stream.concat(s1, s2)).collect(Collectors.toList()); + return Stream.concat(s1, s2).collect(Collectors.toList()); } @Override @@ -123,7 +119,7 @@ public Map generate(WorldGenLevel level, RandomSource Registry densityFunctions = GTRegistries.builtinRegistry().registry(Registry.DENSITY_FUNCTION_REGISTRY).get(); List> commonEntries = oreBlocks.stream().map(b -> Map.entry(b.weight, b)).toList(); - List> rareEntries = rareBlocks == null ? null : rareBlocks.stream().map(b -> Map.entry(b.weight, b)).toList(); // never accessed if rareBlocks is null + List> rareEntries = rareBlocks.stream().map(b -> Map.entry(b.weight, b)).toList(); // never accessed if rareBlocks is null RandomState randomState = level.getLevel().getChunkSource().randomState(); Blender blender; @@ -209,7 +205,6 @@ public Blender getBlender() { return generatedBlocks; } - @Nullable private void placeBlock(BulkSectionAccess access, LevelChunkSection section, long randomSeed, GTOreDefinition entry, double chance, List> rareEntries, BlockPos.MutableBlockPos pos, List> commonEntries) { RandomSource random = new XoroshiroRandomSource(randomSeed); int sectionX = SectionPos.sectionRelative(pos.getX()); @@ -268,7 +263,7 @@ public VeinGenerator build() { @Override public VeinGenerator copy() { - return new VeinedVeinGenerator(this.oreBlocks, this.rareBlocks, this.fillerBlock, this.minYLevel, this.maxYLevel, this.veininessThreshold, this.edgeRoundoffBegin, this.maxEdgeRoundoff, this.minRichness, this.maxRichness, this.maxRichnessThreshold, this.rareBlockChance); + return new VeinedVeinGenerator(new ArrayList<>(this.oreBlocks), new ArrayList<>(this.rareBlocks), this.fillerBlock, this.minYLevel, this.maxYLevel, this.veininessThreshold, this.edgeRoundoffBegin, this.maxEdgeRoundoff, this.minRichness, this.maxRichness, this.maxRichnessThreshold, this.rareBlockChance); } @Override @@ -286,7 +281,6 @@ public VeinedVeinGenerator oreBlock(BlockState blockState, int weight) { } public VeinedVeinGenerator oreBlock(VeinBlockDefinition material) { - if (this.oreBlocks == null) this.oreBlocks = new ArrayList<>(); this.oreBlocks.add(material); return this; } @@ -301,7 +295,6 @@ public VeinedVeinGenerator rareBlock(BlockState blockState, int weight) { } public VeinedVeinGenerator rareBlock(VeinBlockDefinition material) { - if (this.rareBlocks == null) this.rareBlocks = new ArrayList<>(); this.rareBlocks.add(material); return this; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreGenerator.java index 8486bf424d..05984f17a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreGenerator.java @@ -95,25 +95,13 @@ private Optional generateOres(VeinConfiguration config, WorldGenL Map generatedVeins = definition.veinGenerator() .generate(level, config.newRandom(), definition, config.data.center()); - if (generatedVeins.isEmpty()) { logEmptyVein(config); return Optional.empty(); } - generateBedrockOreVein(config, level); return Optional.of(new GeneratedVein(chunkPos, definition.layer(), generatedVeins)); } - - private static void generateBedrockOreVein(VeinConfiguration config, WorldGenLevel level) { - if (ConfigHolder.INSTANCE.machines.doBedrockOres) { - BedrockOreVeinSavedData.getOrCreate(level.getLevel()).createVein( - new ChunkPos(config.data.center()), - config.data.definition() - ); - } - } - private List createConfigs(WorldGenLevel level, ChunkGenerator generator, ChunkPos chunkPos) { var random = new XoroshiroRandomSource(level.getSeed() ^ chunkPos.toLong()); diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreVeinUtil.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreVeinUtil.java index ec1eb30712..c6f37ff541 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreVeinUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/ores/OreVeinUtil.java @@ -42,7 +42,7 @@ private OreVeinUtil() { public static boolean canPlaceOre(BlockState pState, Function pAdjacentStateAccessor, RandomSource pRandom, GTOreDefinition entry, OreConfiguration.TargetBlockState pTargetState, - BlockPos.MutableBlockPos pMatablePos) { + BlockPos pMatablePos) { if (!pTargetState.target.test(pState, pRandom)) return false; if (shouldSkipAirCheck(pRandom, entry.discardChanceOnAirExposure())) @@ -53,7 +53,7 @@ public static boolean canPlaceOre(BlockState pState, Function pAdjacentStateAccessor, RandomSource pRandom, GTOreDefinition entry, - BlockPos.MutableBlockPos pMatablePos) { + BlockPos pMatablePos) { if (!entry.layer().getTarget().test(pState, pRandom)) return false; if (shouldSkipAirCheck(pRandom, entry.discardChanceOnAirExposure())) @@ -121,8 +121,7 @@ public static Supplier> resolveBiomes(List biomes) { RegistryOps registryOps = RegistryOps.create(JsonOps.INSTANCE, GTRegistries.builtinRegistry()); JsonElement codecInput = resolveBiomeCodecInput(biomes); return () -> RegistryCodecs.homogeneousList(BuiltinRegistries.BIOME.key()) - .decode(registryOps, codecInput) - .map(Pair::getFirst) + .parse(registryOps, codecInput) .getOrThrow(false, GTCEu.LOGGER::error); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java b/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java index d815260bae..5ccfa431a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java @@ -242,8 +242,8 @@ public void scan(OreInfo[][][] storage, LevelChunk chunk) { var oreVein = BedrockOreVeinSavedData.getOrCreate(serverLevel).getOreVeinWorldEntry(chunk.getPos().x, chunk.getPos().z); if (oreVein.getDefinition() != null) { var left = 100 * oreVein.getOperationsRemaining() / BedrockOreVeinSavedData.MAXIMUM_VEIN_OPERATIONS; - for (var entry : oreVein.getDefinition().getBedrockVeinMaterials()) { - storage[0][0] = ArrayUtils.add(storage[0][0], new OreInfo(entry.getValue(), entry.getKey(), left, oreVein.getOreYield())); + for (var entry : oreVein.getDefinition().materials()) { + storage[0][0] = ArrayUtils.add(storage[0][0], new OreInfo(entry.getFirst(), entry.getSecond(), left, oreVein.getOreYield())); } } } @@ -261,7 +261,8 @@ public IGuiTexture getItemIcon(OreInfo item) { ItemStack stack = ChemicalHelper.get(TagPrefix.get(ConfigHolder.INSTANCE.machines.bedrockOreDropTagPrefix), material); if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.crushed, material); // backup 1: crushed; if raw ore doesn't exist if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.gem, material); // backup 2: gem; if crushed ore doesn't exist - if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.ore, material); // backup 3: just fallback to normal ore... + if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.ore, material); // backup 3: ore; if gem doesn't exist + if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.dust, material); // backup 4: just fallback to dust... return new ItemStackTexture(stack).scale(0.8f); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index e3e6155b5d..9c6f9fb767 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -4,8 +4,10 @@ import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.item.MetaMachineItem; +import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.lowdragmc.lowdraglib.client.renderer.IRenderer; import com.lowdragmc.lowdraglib.utils.ShapeUtils; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -23,14 +25,12 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.EnumMap; import java.util.List; import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; -import java.util.function.Function; -import java.util.function.Supplier; +import java.util.function.*; /** * @author KilaBash @@ -56,9 +56,22 @@ public class MachineDefinition implements Supplier { @Getter @Setter private int defaultPaintingColor; @Getter @Setter - private BiFunction recipeModifier; + private RecipeModifier recipeModifier; @Getter @Setter private boolean alwaysTryModifyRecipe; + @NotNull + @Getter @Setter + private BiPredicate beforeWorking = (machine, recipe) -> true; + @NotNull + @Getter @Setter + private Predicate onWorking = (machine) -> true; + @NotNull + @Getter @Setter + private Consumer onWaiting = (machine) -> {}; + @NotNull + @Getter @Setter + private Consumer afterWorking = (machine) -> {}; + @Getter @Setter private IRenderer renderer; @Setter diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java index c82129dc9b..667261227a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java @@ -1,10 +1,8 @@ package com.gregtechceu.gtceu.api.machine; +import com.google.common.collect.Tables; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; -import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; -import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; @@ -26,7 +24,8 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.Collections; -import java.util.List; +import java.util.EnumMap; +import java.util.LinkedHashMap; import java.util.function.BiFunction; /** @@ -101,6 +100,7 @@ public boolean canVoidRecipeOutputs(RecipeCapability capability) { //*********** GUI ***********// ////////////////////////////////////// + @SuppressWarnings("UnstableApiUsage") public static BiFunction EDITABLE_UI_CREATOR = Util.memoize((path, recipeType)-> new EditableMachineUI("generator", path, () -> { WidgetGroup template = recipeType.getRecipeUI().createEditableUITemplate(false, false).createDefault(); WidgetGroup group = new WidgetGroup(0, 0, template.getSize().width + 4 + 8, template.getSize().height + 8); @@ -112,15 +112,18 @@ public boolean canVoidRecipeOutputs(RecipeCapability capability) { return group; }, (template, machine) -> { if (machine instanceof SimpleGeneratorMachine generatorMachine) { + var storages = Tables.newCustomTable(new EnumMap<>(IO.class), LinkedHashMap, Object>::new); + storages.put(IO.IN, ItemRecipeCapability.CAP, generatorMachine.importItems.storage); + storages.put(IO.OUT, ItemRecipeCapability.CAP, generatorMachine.exportItems.storage); + storages.put(IO.IN, FluidRecipeCapability.CAP, generatorMachine.importFluids); + storages.put(IO.OUT, FluidRecipeCapability.CAP, generatorMachine.exportFluids); + generatorMachine.getRecipeType().getRecipeUI().createEditableUITemplate(false, false).setupUI(template, new GTRecipeTypeUI.RecipeHolder(generatorMachine.recipeLogic::getProgressPercent, - generatorMachine.importItems.storage, - generatorMachine.exportItems.storage, - generatorMachine.importFluids, - generatorMachine.exportFluids, - new CompoundTag(), - Collections.emptyList(), - false, false)); + storages, + new CompoundTag(), + Collections.emptyList(), + false, false)); createEnergyBar().setupUI(template, generatorMachine); } })); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index 1f3261f1fc..59380fe28f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -1,8 +1,9 @@ package com.gregtechceu.gtceu.api.machine; +import com.google.common.collect.Tables; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.gui.editor.EditableUI; @@ -52,9 +53,7 @@ import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.Collections; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.function.BiFunction; /** @@ -288,8 +287,6 @@ public void onDrops(List drops, Player entity) { @Override protected InteractionResult onWrenchClick(Player playerIn, InteractionHand hand, Direction gridSide, BlockHitResult hitResult) { if (!playerIn.isShiftKeyDown() && !isRemote()) { - var tool = playerIn.getItemInHand(hand); - if (tool.getDamageValue() >= tool.getMaxDamage()) return InteractionResult.PASS; if (hasFrontFacing() && gridSide == getFrontFacing()) return InteractionResult.PASS; // important not to use getters here, which have different logic @@ -354,6 +351,7 @@ public void attachConfigurators(ConfiguratorPanel configuratorPanel) { configuratorPanel.attachConfigurators(new CircuitFancyConfigurator(circuitInventory.storage)); } + @SuppressWarnings("UnstableApiUsage") public static BiFunction EDITABLE_UI_CREATOR = Util.memoize((path, recipeType) -> new EditableMachineUI("simple", path, () -> { WidgetGroup template = recipeType.getRecipeUI().createEditableUITemplate(false, false).createDefault(); SlotWidget batterySlot = createBatterySlot().createDefault(); @@ -373,15 +371,20 @@ public void attachConfigurators(ConfiguratorPanel configuratorPanel) { return group; }, (template, machine) -> { if (machine instanceof SimpleTieredMachine tieredMachine) { + var storages = Tables.newCustomTable(new EnumMap<>(IO.class), LinkedHashMap, Object>::new); + storages.put(IO.IN, ItemRecipeCapability.CAP, tieredMachine.importItems.storage); + storages.put(IO.OUT, ItemRecipeCapability.CAP, tieredMachine.exportItems.storage); + storages.put(IO.IN, FluidRecipeCapability.CAP, tieredMachine.importFluids); + storages.put(IO.OUT, FluidRecipeCapability.CAP, tieredMachine.exportFluids); + storages.put(IO.IN, CWURecipeCapability.CAP, tieredMachine.importComputation); + storages.put(IO.OUT, CWURecipeCapability.CAP, tieredMachine.exportComputation); + tieredMachine.getRecipeType().getRecipeUI().createEditableUITemplate(false, false).setupUI(template, new GTRecipeTypeUI.RecipeHolder(tieredMachine.recipeLogic::getProgressPercent, - tieredMachine.importItems.storage, - tieredMachine.exportItems.storage, - tieredMachine.importFluids, - tieredMachine.exportFluids, - new CompoundTag(), - Collections.emptyList(), - false, false)); + storages, + new CompoundTag(), + Collections.emptyList(), + false, false)); createBatterySlot().setupUI(template, tieredMachine); // createCircuitConfigurator().setupUI(template, tieredMachine); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java index 2ad454156f..b5d82e3a16 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -72,7 +72,7 @@ public WorkableTieredMachine(IMachineBlockEntity holder, int tier, Int2LongFunct this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; this.tankScalingFunction = tankScalingFunction; - this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), HashMap::new); + this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), IdentityHashMap::new); this.traitSubscriptions = new ArrayList<>(); this.recipeLogic = createRecipeLogic(args); this.importItems = createImportItemHandler(args); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java index ab61010747..f730a8ad0b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IRecipeLogicMachine.java @@ -80,29 +80,29 @@ default boolean isRecipeLogicAvailable() { /** * Called in {@link RecipeLogic#setupRecipe(GTRecipe)} ()} */ - default void beforeWorking() { - + default boolean beforeWorking(@Nullable GTRecipe recipe) { + return self().getDefinition().getBeforeWorking().test(this, recipe); } /** * Called per tick in {@link RecipeLogic#handleRecipeWorking()} */ - default void onWorking() { - + default boolean onWorking() { + return self().getDefinition().getOnWorking().test(this); } /** * Called per tick in {@link RecipeLogic#handleRecipeWorking()} */ default void onWaiting() { - + self().getDefinition().getOnWaiting().accept(this); } /** * Called in {@link RecipeLogic#onRecipeFinish()} before outputs are produced */ default void afterWorking() { - + self().getDefinition().getAfterWorking().accept(this); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java index 637b38f67f..4f401af3fa 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java @@ -123,13 +123,15 @@ default void causeRandomMaintenanceProblems() { } @Override - default void afterWorking(IWorkableMultiController controller) { + default boolean afterWorking(IWorkableMultiController controller) { if (ConfigHolder.INSTANCE.machines.enableMaintenance) { calculateMaintenance(this, controller.getRecipeLogic().getProgress()); if (hasMaintenanceProblems()) { controller.getRecipeLogic().markLastRecipeDirty(); + return false; } } + return true; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java index dfab316980..9d6a89478b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java @@ -63,11 +63,12 @@ default GTRecipe modifyRecipe(GTRecipe recipe) { } @Override - default void afterWorking(IWorkableMultiController controller) { + default boolean afterWorking(IWorkableMultiController controller) { val supplier = controller.self().getDefinition().getRecoveryItems(); if (supplier != null) { recoverItemsTable(supplier.get()); } + return IMultiPart.super.afterWorking(controller); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java index e052d0cdb3..87a3c95b8b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.gui.fancy.TooltipsPanel; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineFeature; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.IRecipeHandlerTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -80,29 +81,36 @@ default BlockState getFormedAppearance(BlockState sourceState, BlockPos sourcePo /** * Called per tick in {@link RecipeLogic#handleRecipeWorking()} */ - default void onWorking(IWorkableMultiController controller) { - + default boolean onWorking(IWorkableMultiController controller) { + return true; } /** * Called per tick in {@link RecipeLogic#handleRecipeWorking()} */ - default void onWaiting(IWorkableMultiController controller) { + default boolean onWaiting(IWorkableMultiController controller) { + return true; + } + /** + * Called in {@link WorkableMultiblockMachine#setWorkingEnabled(boolean)} + */ + default boolean onPaused(IWorkableMultiController controller) { + return true; } /** * Called in {@link RecipeLogic#onRecipeFinish()} before outputs are produced */ - default void afterWorking(IWorkableMultiController controller) { - + default boolean afterWorking(IWorkableMultiController controller) { + return true; } /** * Called in {@link RecipeLogic#setupRecipe(GTRecipe)} ()} */ - default void beforeWorking(IWorkableMultiController controller) { - + default boolean beforeWorking(IWorkableMultiController controller) { + return true; } /** diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java index 9b99817327..a5863ddb80 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java @@ -129,7 +129,7 @@ default void damageRotor(int damageAmount) { var stack = getRotorStack(); var behavior = TurbineRotorBehaviour.getBehaviour(stack); if (behavior != null) { - behavior.setPartDamage(stack, damageAmount); + behavior.applyRotorDamage(stack, damageAmount); setRotorStack(stack); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java index 86c4055d47..d96751bb7f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java @@ -65,7 +65,7 @@ public WorkableMultiblockMachine(IMachineBlockEntity holder, Object... args) { this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; this.recipeLogic = createRecipeLogic(args); - this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), HashMap::new); + this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), IdentityHashMap::new); this.traitSubscriptions = new ArrayList<>(); } @@ -224,20 +224,27 @@ public void afterWorking() { for (IMultiPart part : getParts()) { part.afterWorking(this); } + IWorkableMultiController.super.afterWorking(); } @Override - public void beforeWorking() { + public boolean beforeWorking(@Nullable GTRecipe recipe) { for (IMultiPart part : getParts()) { - part.beforeWorking(this); + if (!part.beforeWorking(this)) { + return false; + } } + return IWorkableMultiController.super.beforeWorking(recipe); } @Override - public void onWorking() { + public boolean onWorking() { for (IMultiPart part : getParts()) { - part.onWorking(this); + if (!part.onWorking(this)) { + return false; + } } + return IWorkableMultiController.super.onWorking(); } @Override @@ -245,6 +252,17 @@ public void onWaiting() { for (IMultiPart part : getParts()) { part.onWaiting(this); } + IWorkableMultiController.super.onWaiting(); + } + + @Override + public void setWorkingEnabled(boolean isWorkingAllowed) { + if (!isWorkingAllowed) { + for (IMultiPart part : getParts()) { + part.onPaused(this); + } + } + IWorkableMultiController.super.setWorkingEnabled(isWorkingAllowed); } @NotNull diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java index 2caa070091..245711d29a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.machine.steam; +import com.google.common.collect.Tables; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -21,7 +22,6 @@ import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; import com.lowdragmc.lowdraglib.side.fluid.FluidHelper; -import com.lowdragmc.lowdraglib.side.fluid.IFluidTransfer; import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; import com.lowdragmc.lowdraglib.utils.Position; @@ -34,11 +34,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -157,7 +154,16 @@ public void afterWorking() { @Override public ModularUI createUI(Player entityPlayer) { - var group = getRecipeType().getRecipeUI().createUITemplate(recipeLogic::getProgressPercent, importItems.storage, exportItems.storage, IFluidTransfer.EMPTY, IFluidTransfer.EMPTY, new CompoundTag(), Collections.emptyList(), true, isHighPressure); + var storages = Tables.newCustomTable(new EnumMap<>(IO.class), LinkedHashMap, Object>::new); + storages.put(IO.IN, ItemRecipeCapability.CAP, importItems.storage); + storages.put(IO.OUT, ItemRecipeCapability.CAP, exportItems.storage); + + var group = getRecipeType().getRecipeUI().createUITemplate(recipeLogic::getProgressPercent, + storages, + new CompoundTag(), + Collections.emptyList(), + true, + isHighPressure); Position pos = new Position((Math.max(group.getSize().width + 4 + 8, 176) - 4 - group.getSize().width) / 2 + 4, 32); group.setSelfPosition(pos); return new ModularUI(176, 166, this, entityPlayer) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java index 06ebd050e9..18ce48cab7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java @@ -82,7 +82,7 @@ public abstract class SteamBoilerMachine extends SteamWorkableMachine implements public SteamBoilerMachine(IMachineBlockEntity holder, boolean isHighPressure, Object... args) { super(holder, isHighPressure, args); this.waterTank = createWaterTank(args); - this.waterTank.setFilter(fluid -> Fluids.WATER == fluid.getFluid()); + this.waterTank.setFilter(fluid -> fluid.getFluid().is(GTMaterials.Water.getFluidTag())); } ////////////////////////////////////// @@ -256,11 +256,13 @@ public static GTRecipe recipeModifier(MetaMachine machine, @NotNull GTRecipe rec } @Override - public void onWorking() { + public boolean onWorking() { + boolean value = super.onWorking(); if (currentTemperature < getMaxTemperature()) { currentTemperature = Math.max(1, currentTemperature); updateSteamSubscription(); } + return value; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java index 43e8f07965..a0f8570b49 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java @@ -60,6 +60,19 @@ public List getContents() { return List.of(realSum); } + @Override + public double getTotalContentAmount() { + List tankContents = new ArrayList<>(); + for (int i = 0; i < steamTank.getTanks(); ++i) { + FluidStack stack = steamTank.getFluidInTank(i); + if (!stack.isEmpty()) { + tankContents.add(stack); + } + } + long sum = tankContents.stream().map(FluidStack::getAmount).reduce(0L, Long::sum); + return (long) Math.ceil(sum * conversionRate); + } + @Override public RecipeCapability getCapability() { return EURecipeCapability.CAP; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java index e9797eb6d1..a8aff7fb33 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java @@ -66,7 +66,7 @@ public SteamWorkableMachine(IMachineBlockEntity holder, boolean isHighPressure, this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; this.recipeLogic = createRecipeLogic(args); - this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), HashMap::new); + this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), IdentityHashMap::new); this.traitSubscriptions = new ArrayList<>(); this.outputFacing = hasFrontFacing() ? getFrontFacing().getOpposite() : Direction.UP; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyRecipeTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyRecipeTrait.java index 1a763b4c08..3d8060a397 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyRecipeTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ItemHandlerProxyRecipeTrait.java @@ -54,6 +54,15 @@ public List getContents() { return contents; } + @Override + public double getTotalContentAmount() { + long amount = 0; + for (NotifiableRecipeHandlerTrait handler : handlers) { + amount += handler.getTotalContentAmount(); + } + return amount; + } + @Override public RecipeCapability getCapability() { return ItemRecipeCapability.CAP; @@ -74,6 +83,11 @@ public void setDistinct(boolean distinct) { recomputeEnabledState(); } + @Override + public boolean isProxy() { + return true; + } + public void recomputeEnabledState() { this.enabled = isDistinct(); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java index bd19c077d5..bdf3f0a9f7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java @@ -14,6 +14,7 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.common.blockentity.OpticalPipeBlockEntity; import com.gregtechceu.gtceu.utils.GTUtil; import lombok.Getter; import net.minecraft.core.Direction; @@ -79,7 +80,7 @@ public int requestCWUt(int cwut, boolean simulate, @NotNull Collection seen) { return 0; } for (IMultiController controller : part.getControllers()) { + if (!controller.isFormed()) { + continue; + } if (controller instanceof IOpticalComputationProvider provider) { return provider.getMaxCWUt(seen); } @@ -119,7 +123,7 @@ public int getMaxCWUt(@NotNull Collection seen) { } } else { // Ask the attached Transmitter hatch, if it exists - IOpticalComputationProvider provider = getComputationProvider(); + IOpticalComputationProvider provider = getOpticalNetProvider(); if (provider == null) return 0; return provider.getMaxCWUt(seen); } @@ -141,6 +145,9 @@ public boolean canBridge(@NotNull Collection seen) return false; } for (IMultiController controller : part.getControllers()) { + if (!controller.isFormed()) { + continue; + } if (controller instanceof IOpticalComputationProvider provider) { return provider.canBridge(seen); } @@ -158,7 +165,7 @@ public boolean canBridge(@NotNull Collection seen) } } else { // Ask the attached Transmitter hatch, if it exists - IOpticalComputationProvider provider = getComputationProvider(); + IOpticalComputationProvider provider = getOpticalNetProvider(); if (provider == null) return true; // nothing found, so don't report a problem, just pass quietly return provider.canBridge(seen); } @@ -169,7 +176,7 @@ public boolean canBridge(@NotNull Collection seen) @Override public List handleRecipeInner(IO io, GTRecipe recipe, List left, @Nullable String slotName, boolean simulate) { - IOpticalComputationProvider provider = getComputationProvider(); + IOpticalComputationProvider provider = getOpticalNetProvider(); if (provider == null) return left; int sum = left.stream().reduce(0, Integer::sum); @@ -212,6 +219,11 @@ public List getContents() { return List.of(lastOutputCwu); } + @Override + public double getTotalContentAmount() { + return lastOutputCwu; + } + @Override public RecipeCapability getCapability() { return CWURecipeCapability.CAP; @@ -220,20 +232,42 @@ public RecipeCapability getCapability() { @Nullable @Override public IOpticalComputationProvider getComputationProvider() { + if (this.handlerIO.support(IO.OUT)) { + return this; + } if (machine instanceof IOpticalComputationReceiver receiver) { return receiver.getComputationProvider(); } else if (machine instanceof IOpticalComputationProvider provider) { return provider; } else if (machine instanceof IRecipeCapabilityHolder recipeCapabilityHolder) { if (recipeCapabilityHolder.getCapabilitiesProxy().contains(IO.IN, CWURecipeCapability.CAP) && !recipeCapabilityHolder.getCapabilitiesProxy().get(IO.IN, CWURecipeCapability.CAP).isEmpty()) { - return (IOpticalComputationProvider) recipeCapabilityHolder.getCapabilitiesProxy().get(IO.IN, CWURecipeCapability.CAP).get(0); + var provider = (IOpticalComputationProvider) recipeCapabilityHolder.getCapabilitiesProxy().get(IO.IN, CWURecipeCapability.CAP).get(0); + if (provider != this) { + return provider; + } } } for (Direction direction : GTUtil.DIRECTIONS) { BlockEntity blockEntity = machine.getLevel().getBlockEntity(machine.getPos().relative(direction)); if (blockEntity == null) continue; - return blockEntity.getCapability(GTCapability.CAPABILITY_COMPUTATION_PROVIDER, direction.getOpposite()).orElse(null); + //noinspection DataFlowIssue can be null just fine. + IOpticalComputationProvider provider = blockEntity.getCapability(GTCapability.CAPABILITY_COMPUTATION_PROVIDER, direction.getOpposite()).orElse(null); + //noinspection ConstantValue can be null because above. + if (provider != null && provider != this) { + return provider; + } + } + return null; + } + + @Nullable + private IOpticalComputationProvider getOpticalNetProvider() { + for (Direction direction : GTUtil.DIRECTIONS) { + BlockEntity blockEntity = machine.getLevel().getBlockEntity(machine.getPos().relative(direction)); + if (blockEntity instanceof OpticalPipeBlockEntity) { + return blockEntity.getCapability(GTCapability.CAPABILITY_COMPUTATION_PROVIDER, direction.getOpposite()).orElse(null); + } } return null; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java index 016b6a7275..21023eebda 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java @@ -289,6 +289,11 @@ public List getContents() { return List.of(energyStored); } + @Override + public double getTotalContentAmount() { + return energyStored; + } + @Override public RecipeCapability getCapability() { return EURecipeCapability.CAP; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java index 90f61ca922..317aea6394 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java @@ -6,18 +6,17 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; -import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; import com.lowdragmc.lowdraglib.misc.FluidStorage; +import com.lowdragmc.lowdraglib.side.fluid.FluidHelper; import com.lowdragmc.lowdraglib.side.fluid.FluidStack; import com.lowdragmc.lowdraglib.side.fluid.FluidTransferHelper; import com.lowdragmc.lowdraglib.side.fluid.IFluidTransfer; +import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; import lombok.Getter; import lombok.Setter; import net.minecraft.core.Direction; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,12 +35,20 @@ public class NotifiableFluidTank extends NotifiableRecipeHandlerTrait handleIngredient(IO io, List stack.isFluidEqual(this.lockedFluid.getFluid())); + return; + } + this.lockedFluid.setFluid(FluidStack.empty()); + setFilter(stack -> true); + onContentsChanged(); + } + public NotifiableFluidTank setFilter(Predicate filter) { for (FluidStorage storage : getStorages()) { storage.setValidator(filter); @@ -180,6 +213,18 @@ public List getContents() { return Arrays.asList(ingredients.toArray()); } + @Override + public double getTotalContentAmount() { + long amount = 0; + for (int i = 0; i < getTanks(); ++i) { + FluidStack stack = getFluidInTank(i); + if (!stack.isEmpty()) { + amount += stack.getAmount(); + } + } + return amount; + } + public boolean isEmpty() { if (isEmpty == null) { isEmpty = true; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java index 2dabe5fa32..092d5050f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java @@ -1,16 +1,19 @@ package com.gregtechceu.gtceu.api.machine.trait; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.DummyCraftingContainer; import com.lowdragmc.lowdraglib.misc.ItemStackTransfer; import com.lowdragmc.lowdraglib.side.item.IItemTransfer; import com.lowdragmc.lowdraglib.side.item.ItemTransferHelper; import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; +import dev.latvian.mods.kubejs.recipe.ingredientaction.IngredientAction; import lombok.Getter; import net.minecraft.core.Direction; import net.minecraft.world.item.ItemStack; @@ -73,11 +76,11 @@ public ManagedFieldHolder getFieldHolder() { @Override public List handleRecipeInner(IO io, GTRecipe recipe, List left, @Nullable String slotName, boolean simulate) { - return handleIngredient(io, left, simulate, this.handlerIO, storage); + return handleIngredient(io, recipe, left, simulate, this.handlerIO, storage); } @Nullable - public static List handleIngredient(IO io, List left, boolean simulate, IO handlerIO, ItemStackTransfer storage) { + public static List handleIngredient(IO io, GTRecipe recipe, List left, boolean simulate, IO handlerIO, ItemStackTransfer storage) { if (io != handlerIO) return left; var capability = simulate ? storage.copy() : storage; Iterator iterator = left.iterator(); @@ -92,7 +95,19 @@ public static List handleIngredient(IO io, List left, bo ItemStack[] ingredientStacks = ingredient.getItems(); for (ItemStack ingredientStack : ingredientStacks) { if (ingredientStack.is(itemStack.getItem())) { - ItemStack extracted = capability.extractItem(i, ingredientStack.getCount(), false); + ItemStack extracted = ItemStack.EMPTY; + boolean didRunIngredientAction = false; + if (GTCEu.isKubeJSLoaded()) { + //noinspection unchecked must be List to be able to load without KJS. + ItemStack actioned = KJSCallWrapper.applyIngredientAction(capability, i, (List) recipe.ingredientActions); + if (!actioned.isEmpty()) { + extracted = actioned; + didRunIngredientAction = true; + } + } + if (!didRunIngredientAction) { + extracted = capability.extractItem(i, ingredientStack.getCount(), false); + } ingredientStack.setCount(ingredientStack.getCount() - extracted.getCount()); if (ingredientStack.isEmpty()) { iterator.remove(); @@ -114,7 +129,19 @@ public static List handleIngredient(IO io, List left, bo ItemStack output = items[0]; if (!output.isEmpty()) { for (int i = 0; i < capability.getSlots(); i++) { - ItemStack leftStack = capability.insertItem(i, output.copy(), false); + ItemStack leftStack = ItemStack.EMPTY; + boolean didRunIngredientAction = false; + if (GTCEu.isKubeJSLoaded()) { + //noinspection unchecked must be List to be able to load without KJS. + ItemStack actioned = KJSCallWrapper.applyIngredientAction(capability, i, (List) recipe.ingredientActions); + if (!actioned.isEmpty()) { + leftStack = actioned; + didRunIngredientAction = true; + } + } + if (!didRunIngredientAction) { + leftStack = capability.insertItem(i, output.copy(), false); + } output.setCount(leftStack.getCount()); if (output.isEmpty()) break; } @@ -151,6 +178,18 @@ public List getContents() { return Arrays.asList(stacks.toArray()); } + @Override + public double getTotalContentAmount() { + long amount = 0; + for (int i = 0; i < getSlots(); ++i) { + ItemStack stack = getStackInSlot(i); + if (!stack.isEmpty()) { + amount += stack.getCount(); + } + } + return amount; + } + public boolean isEmpty() { if (isEmpty == null) { isEmpty = true; @@ -242,4 +281,23 @@ public void restoreFromSnapshot(Object snapshot) { storage.restoreFromSnapshot(snapshot); } + public static class KJSCallWrapper { + public static ItemStack applyIngredientAction(ItemStackTransfer storage, int index, List ingredientActions) { + var stack = storage.getStackInSlot(index); + + if (stack.isEmpty()) { + return ItemStack.EMPTY; + } + + DummyCraftingContainer container = new DummyCraftingContainer(storage); + for (var action : ingredientActions) { + if (action.checkFilter(index, stack)) { + return action.transform(stack.copy(), index, container); + } + } + + return ItemStack.EMPTY; + } + } + } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java index faa273fc02..58a61d37b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java @@ -18,6 +18,7 @@ import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; import lombok.Getter; +import lombok.Setter; import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.world.item.crafting.RecipeManager; @@ -60,7 +61,7 @@ public enum Status { @Nullable @Getter @Persisted protected GTRecipe lastOriginRecipe; @Persisted - @Getter + @Getter @Setter protected int progress; @Getter @Persisted protected int duration; @@ -206,7 +207,10 @@ public void handleRecipeWorking() { result = handleTickRecipe(lastRecipe); if (result.isSuccess()) { setStatus(Status.WORKING); - machine.onWorking(); + if (!machine.onWorking()) { + this.interruptRecipe(); + return; + } progress++; totalContinuousRunningTime++; } else { @@ -310,7 +314,9 @@ public GTRecipe.ActionResult handleTickRecipe(GTRecipe recipe) { public void setupRecipe(GTRecipe recipe) { if (handleFuelRecipe()) { - machine.beforeWorking(); + if (!machine.beforeWorking(recipe)) { + return; + } recipe.preWorking(this.machine); if (handleRecipeIO(recipe, IO.IN)) { recipeDirty = false; diff --git a/src/main/java/com/gregtechceu/gtceu/api/misc/IgnoreEnergyRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/api/misc/IgnoreEnergyRecipeHandler.java index 3b8ce76a54..01b6fb5e86 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/misc/IgnoreEnergyRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/misc/IgnoreEnergyRecipeHandler.java @@ -20,6 +20,11 @@ public List getContents() { return List.of(Long.MAX_VALUE); } + @Override + public double getTotalContentAmount() { + return Long.MAX_VALUE; + } + @Override public RecipeCapability getCapability() { return EURecipeCapability.CAP; diff --git a/src/main/java/com/gregtechceu/gtceu/api/misc/ItemRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/api/misc/ItemRecipeHandler.java index 0b5be74743..3d4753140b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/misc/ItemRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/misc/ItemRecipeHandler.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; import com.lowdragmc.lowdraglib.misc.ItemStackTransfer; import lombok.Getter; import net.minecraft.world.item.ItemStack; @@ -14,7 +13,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Iterator; import java.util.List; import static com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler.handleIngredient; @@ -36,7 +34,7 @@ public ItemRecipeHandler(IO handlerIO, int slots) { @Override public List handleRecipeInner(IO io, GTRecipe recipe, List left, @Nullable String slotName, boolean simulate) { - return handleIngredient(io, left, simulate, this.handlerIO, storage); + return handleIngredient(io, recipe, left, simulate, this.handlerIO, storage); } @Override @@ -51,6 +49,18 @@ public List getContents() { return Arrays.asList(ingredients.toArray()); } + @Override + public double getTotalContentAmount() { + long amount = 0; + for (int i = 0; i < storage.getSlots(); ++i) { + ItemStack stack = storage.getStackInSlot(i); + if (!stack.isEmpty()) { + amount += stack.getCount(); + } + } + return amount; + } + @Override public int getSize() { return this.storage.getSlots(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/DummyCraftingContainer.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/DummyCraftingContainer.java new file mode 100644 index 0000000000..9855504f4d --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/DummyCraftingContainer.java @@ -0,0 +1,80 @@ +package com.gregtechceu.gtceu.api.recipe; + +import com.lowdragmc.lowdraglib.side.item.IItemTransfer; +import net.minecraft.core.NonNullList; +import net.minecraft.world.entity.player.StackedContents; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +public class DummyCraftingContainer extends CraftingContainer { + + private final IItemTransfer itemTransfer; + + public DummyCraftingContainer(IItemTransfer itemHandler) { + super(null, 0, 0); + this.itemTransfer = itemHandler; + } + + @Override + public int getContainerSize() { + return this.itemTransfer.getSlots(); + } + + @Override + public boolean isEmpty() { + for (int slot = 0; slot < this.getContainerSize(); slot++) { + if (!this.getItem(slot).isEmpty()) + return false; + } + + return true; + } + + @Override + public @NotNull ItemStack getItem(int slot) { + return slot >= this.getContainerSize() ? ItemStack.EMPTY : this.itemTransfer.getStackInSlot(slot); + } + + @Override + public @NotNull ItemStack removeItemNoUpdate(int slot) { + return this.itemTransfer.extractItem(slot, Integer.MAX_VALUE, false, false); + } + + @Override + public @NotNull ItemStack removeItem(int slot, int count) { + return this.itemTransfer.extractItem(slot, count, false, true); + } + + @Override + public void setItem(int slot, @NotNull ItemStack stack) { + this.itemTransfer.setStackInSlot(slot, stack); + } + + @Override + public void clearContent() { + for (int i = 0; i < this.itemTransfer.getSlots(); ++i) { + this.itemTransfer.setStackInSlot(i, ItemStack.EMPTY); + } + } + + @Override + public void fillStackedContents(@NotNull StackedContents helper) {} + + private static NonNullList createInventory(IItemTransfer itemHandler) { + NonNullList inv = NonNullList.create(); + + for (int slot = 0; slot < itemHandler.getSlots(); slot++) { + ItemStack stack = itemHandler.getStackInSlot(slot); + + if (stack.isEmpty()) + continue; + + ItemStack stackCopy = stack.copy(); + inv.add(stackCopy); + } + + return inv; + } + +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java index 5ed85e30ee..368ea77c92 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java @@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.*; import java.util.function.Supplier; @@ -44,13 +43,26 @@ public class GTRecipe implements net.minecraft.world.item.crafting.Recipe, List> tickInputs; public final Map, List> tickOutputs; public final List conditions; + // for KubeJS. actual type is List. + // Must be List to not cause crashes without KubeJS. + public final List ingredientActions; @NotNull public CompoundTag data; public int duration; @Getter public boolean isFuel; - public GTRecipe(GTRecipeType recipeType, ResourceLocation id, Map, List> inputs, Map, List> outputs, Map, List> tickInputs, Map, List> tickOutputs, List conditions, @NotNull CompoundTag data, int duration, boolean isFuel) { + public GTRecipe(GTRecipeType recipeType, + ResourceLocation id, + Map, List> inputs, + Map, List> outputs, + Map, List> tickInputs, + Map, List> tickOutputs, + List conditions, + List ingredientActions, + @NotNull CompoundTag data, + int duration, + boolean isFuel) { this.recipeType = recipeType; this.id = id; this.inputs = inputs; @@ -58,6 +70,7 @@ public GTRecipe(GTRecipeType recipeType, ResourceLocation id, Map, List> copyContents(Map(conditions), data, duration, isFuel); + return new GTRecipe(recipeType, id, copyContents(inputs, null), copyContents(outputs, null), copyContents(tickInputs, null), copyContents(tickOutputs, null), new ArrayList<>(conditions), new ArrayList<>(ingredientActions), data, duration, isFuel); } public GTRecipe copy(ContentModifier modifier) { @@ -88,7 +101,7 @@ public GTRecipe copy(ContentModifier modifier) { } public GTRecipe copy(ContentModifier modifier, boolean modifyDuration) { - var copied = new GTRecipe(recipeType, id, copyContents(inputs, modifier), copyContents(outputs, modifier), copyContents(tickInputs, modifier), copyContents(tickOutputs, modifier), new ArrayList<>(conditions), data, duration, isFuel); + var copied = new GTRecipe(recipeType, id, copyContents(inputs, modifier), copyContents(outputs, modifier), copyContents(tickInputs, modifier), copyContents(tickOutputs, modifier), new ArrayList<>(conditions), new ArrayList<>(ingredientActions), data, duration, isFuel); if (modifyDuration) { copied.duration = modifier.apply(this.duration).intValue(); } @@ -283,7 +296,10 @@ private Tuple> handlerContentsInternal( if (!capabilityProxies.contains(capIO, capability)) return new Tuple<>(content, contentSlot); - var handlers = capabilityProxies.get(capIO, capability); + //noinspection DataFlowIssue checked above. + var handlers = new ArrayList<>(capabilityProxies.get(capIO, capability)); + handlers.sort(IRecipeHandler.ENTRY_COMPARATOR); + // handle distinct first for (IRecipeHandler handler : handlers) { if (!handler.isDistinct()) continue; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java index f79c4b51e1..a648a46a7c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java @@ -3,14 +3,15 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.recipe.ResearchCondition; import net.minecraft.core.Registry; +import dev.latvian.mods.kubejs.recipe.ingredientaction.IngredientAction; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.TagParser; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.GsonHelper; import net.minecraft.util.Tuple; @@ -73,8 +74,12 @@ public Map, List> capabilitiesFromJson(JsonObject j } } } + List ingredientActions = new ArrayList<>(); + if (GTCEu.isKubeJSLoaded()) { + ingredientActions = KJSCallWrapper.getIngredientActions(json); + } boolean isFuel = GsonHelper.getAsBoolean(json, "isFuel", false); - return new GTRecipe((GTRecipeType) Registry.RECIPE_TYPE.get(new ResourceLocation(recipeType)), id, inputs, outputs, tickInputs, tickOutputs, conditions, data, duration, isFuel); + return new GTRecipe((GTRecipeType) Registry.RECIPE_TYPE.get(new ResourceLocation(recipeType)), id, inputs, outputs, tickInputs, tickOutputs, conditions, ingredientActions, data, duration, isFuel); } public static Tuple, List> entryReader(FriendlyByteBuf buf) { @@ -109,29 +114,62 @@ public static Map, List> tuplesToMap(List, List> inputs = tuplesToMap(buf.readCollection(c -> new ArrayList<>(), GTRecipeSerializer::entryReader)); Map, List> tickInputs = tuplesToMap(buf.readCollection(c -> new ArrayList<>(), GTRecipeSerializer::entryReader)); Map, List> outputs = tuplesToMap(buf.readCollection(c -> new ArrayList<>(), GTRecipeSerializer::entryReader)); Map, List> tickOutputs = tuplesToMap(buf.readCollection(c -> new ArrayList<>(), GTRecipeSerializer::entryReader)); List conditions = buf.readCollection(c -> new ArrayList<>(), GTRecipeSerializer::conditionReader); + List ingredientActions = new ArrayList<>(); + if (GTCEu.isKubeJSLoaded()) { + ingredientActions = KJSCallWrapper.getIngredientActions(buf); + } CompoundTag data = buf.readNbt(); + if (data == null) { + data = new CompoundTag(); + } boolean isFuel = buf.readBoolean(); - return new GTRecipe((GTRecipeType) Registry.RECIPE_TYPE.get(new ResourceLocation(recipeType)), id, inputs, outputs, tickInputs, tickOutputs, conditions, data, duration, isFuel); + GTRecipeType type = (GTRecipeType) Registry.RECIPE_TYPE.get(recipeType); + GTRecipe recipe = new GTRecipe(type, id, inputs, outputs, tickInputs, tickOutputs, conditions, ingredientActions, data, duration, isFuel); + + // a little special piece of code for loading all the research entries into the recipe type's list on the client. + ResearchCondition researchCondition = conditions.stream().filter(ResearchCondition.class::isInstance).findAny().map(ResearchCondition.class::cast).orElse(null); + if (researchCondition != null) { + for (ResearchData.ResearchEntry entry : researchCondition.data) { + type.addDataStickEntry(entry.getResearchId(), recipe); + } + } + return recipe; } @Override public void toNetwork(FriendlyByteBuf buf, GTRecipe recipe) { - buf.writeUtf(recipe.recipeType == null ? "dummy" : recipe.recipeType.toString()); + buf.writeResourceLocation(recipe.recipeType.registryName); buf.writeVarInt(recipe.duration); buf.writeCollection(recipe.inputs.entrySet(), GTRecipeSerializer::entryWriter); buf.writeCollection(recipe.tickInputs.entrySet(), GTRecipeSerializer::entryWriter); buf.writeCollection(recipe.outputs.entrySet(), GTRecipeSerializer::entryWriter); buf.writeCollection(recipe.tickOutputs.entrySet(), GTRecipeSerializer::entryWriter); buf.writeCollection(recipe.conditions, GTRecipeSerializer::conditionWriter); + if (GTCEu.isKubeJSLoaded()) { + KJSCallWrapper.writeIngredientActions(recipe.ingredientActions, buf); + } buf.writeNbt(recipe.data); buf.writeBoolean(recipe.isFuel); } + public static class KJSCallWrapper { + public static List getIngredientActions(JsonObject json) { + return IngredientAction.parseList(json.get("kubejs:actions")); + } + public static List getIngredientActions(FriendlyByteBuf buf) { + return IngredientAction.readList(buf); + } + public static void writeIngredientActions(List ingredientActions, FriendlyByteBuf buf) { + //noinspection unchecked must be List to be able to load without KJS. + IngredientAction.writeList(buf, (List) ingredientActions); + + } + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java index 366635b74b..74df64262c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java @@ -32,7 +32,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -50,8 +49,8 @@ public class GTRecipeType implements RecipeType { public final ResourceLocation registryName; public final String group; - public final Object2IntMap> maxInputs = new Object2IntOpenHashMap<>(); - public final Object2IntMap> maxOutputs = new Object2IntOpenHashMap<>(); + public final TreeMap, Integer> maxInputs = new TreeMap<>(RecipeCapability.COMPARATOR); + public final TreeMap, Integer> maxOutputs = new TreeMap<>(RecipeCapability.COMPARATOR); @Setter private GTRecipeBuilder recipeBuilder; @Getter @@ -136,7 +135,8 @@ public GTRecipeType setMaxSize(IO io, RecipeCapability cap, int max) { } public GTRecipeType setSlotOverlay(boolean isOutput, boolean isFluid, IGuiTexture slotOverlay) { - return this.setSlotOverlay(isOutput, isFluid, false, slotOverlay).setSlotOverlay(isOutput, isFluid, true, slotOverlay); + this.recipeUI.setSlotOverlay(isOutput, isFluid, slotOverlay); + return this; } public GTRecipeType setSlotOverlay(boolean isOutput, boolean isFluid, boolean isLast, IGuiTexture slotOverlay) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/ResearchData.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/ResearchData.java index 5d90ed21e8..cff23583b2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/ResearchData.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/ResearchData.java @@ -6,7 +6,7 @@ import com.mojang.serialization.JsonOps; import lombok.AllArgsConstructor; import lombok.Getter; -import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; @@ -51,6 +51,20 @@ public JsonArray toJson() { return json; } + public static ResearchData fromNetwork(FriendlyByteBuf buf) { + List entries = new ArrayList<>(); + int size = buf.readVarInt(); + for (int i = 0; i < size; ++i) { + entries.add(ResearchEntry.fromNetwork(buf)); + } + return new ResearchData(entries); + } + + public void toNetwork(FriendlyByteBuf buf) { + buf.writeVarInt(this.entries.size()); + this.entries.forEach(entry -> entry.toNetwork(buf)); + } + /** * An entry containing information about a researchable recipe. *

@@ -84,5 +98,16 @@ public JsonObject toJson() { json.add("dataItem", ItemStack.CODEC.encodeStart(JsonOps.INSTANCE, dataItem).getOrThrow(false, GTCEu.LOGGER::error)); return json; } + + public static ResearchEntry fromNetwork(FriendlyByteBuf buf) { + String researchId = buf.readUtf(); + ItemStack dataItem = buf.readItem(); + return new ResearchEntry(researchId, dataItem); + } + + public void toNetwork(FriendlyByteBuf buf) { + buf.writeUtf(this.researchId); + buf.writeItem(this.dataItem); + } } } \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java index 3add8b73da..881e96c5bc 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java @@ -4,11 +4,10 @@ import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.lowdragmc.lowdraglib.LDLib; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.side.fluid.FluidStack; import com.lowdragmc.lowdraglib.utils.LocalizationUtils; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import dev.emi.emi.screen.RecipeScreen; +import lombok.AllArgsConstructor; import lombok.Getter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; @@ -16,9 +15,9 @@ import net.minecraft.world.level.material.Fluid; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; - import org.jetbrains.annotations.Nullable; +@AllArgsConstructor public class Content { @Getter public Object content; @@ -29,14 +28,6 @@ public class Content { @Nullable public String uiName; - public Content(Object content, float chance, float tierChanceBoost, @Nullable String slotName, @Nullable String uiName) { - this.content = content; - this.chance = chance; - this.tierChanceBoost = tierChanceBoost; - this.slotName = slotName; - this.uiName = uiName; - } - public Content copy(RecipeCapability capability, @Nullable ContentModifier modifier) { if (modifier == null || chance == 0) { return new Content(capability.copyContent(content), chance, tierChanceBoost, slotName, uiName); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/GTRecipeLookup.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/GTRecipeLookup.java index aa1eb32696..6bac5e59c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/GTRecipeLookup.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/GTRecipeLookup.java @@ -76,7 +76,7 @@ protected List> prepareRecipeFind(@NotNull IRecipeCa list.addAll(fromHolder(holder)); // nothing was added, so return nothing - if (list.size() == 0) return null; + if (list.isEmpty()) return null; return list; } @@ -430,6 +430,9 @@ protected List> fromHolder(@NotNull IRecipeCapabilit r.getCapabilitiesProxy().row(IO.IN).forEach((cap, handlers) -> { if (cap.isRecipeSearchFilter() && !handlers.isEmpty()) { for (IRecipeHandler handler : handlers) { + if (handler.isProxy()) { + continue; + } List compressed = cap.compressIngredients(handler.getContents()); for (Object content : compressed) { retrieveCachedIngredient(list, cap.convertToMapIngredient(content), ingredientRoot); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/MapFluidTagIngredient.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/MapFluidTagIngredient.java index 390618b19b..7642accc66 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/MapFluidTagIngredient.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/MapFluidTagIngredient.java @@ -22,10 +22,6 @@ public boolean equals(Object obj) { if (super.equals(obj)) { return tag == ((MapFluidTagIngredient) obj).tag; } - // equality jank - if (obj instanceof MapFluidIngredient ingredient) { - return ingredient.fluid.is(tag); - } return false; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/MapItemStackPartialNBTIngredient.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/MapItemStackPartialNBTIngredient.java new file mode 100644 index 0000000000..a63bc075d1 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/MapItemStackPartialNBTIngredient.java @@ -0,0 +1,69 @@ +package com.gregtechceu.gtceu.api.recipe.lookup; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.Registry; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.crafting.PartialNBTIngredient; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class MapItemStackPartialNBTIngredient extends MapItemStackIngredient { + PartialNBTIngredient nbtIngredient; + + public MapItemStackPartialNBTIngredient(ItemStack stack, PartialNBTIngredient nbtIngredient) { + super(stack, nbtIngredient); + this.nbtIngredient = nbtIngredient; + } + + @NotNull + public static List from(@NotNull PartialNBTIngredient r) { + ObjectArrayList list = new ObjectArrayList<>(); + for (ItemStack s : r.getItems()) { + list.add(new MapItemStackPartialNBTIngredient(s, r)); + } + return list; + } + + @Override + protected int hash() { + return stack.getItem().hashCode() * 31; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof MapItemStackPartialNBTIngredient other) { + if (this.stack.getItem() != other.stack.getItem()) { + return false; + } + if (this.nbtIngredient != null) { + if (other.nbtIngredient != null) { + if (this.nbtIngredient.getItems().length != other.nbtIngredient.getItems().length) + return false; + for (ItemStack stack : this.nbtIngredient.getItems()) { + if (!other.nbtIngredient.test(stack)) { + return false; + } + } + return true; + } + } else if (other.nbtIngredient != null) { + return other.nbtIngredient.test(this.stack); + } + } + return false; + } + + @Override + public String toString() { + return "MapItemStackPartialNBTIngredient{" + "item=" + Registry.ITEM.getKey(stack.getItem()) + "}"; + } + + @Override + public boolean isSpecialIngredient() { + return true; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/RecipeModifier.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/RecipeModifier.java new file mode 100644 index 0000000000..ef27a120f0 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/RecipeModifier.java @@ -0,0 +1,14 @@ +package com.gregtechceu.gtceu.api.recipe.modifier; + +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +@FunctionalInterface +public interface RecipeModifier { + GTRecipe apply(MetaMachine machine, GTRecipe recipe); +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/RecipeModifierList.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/RecipeModifierList.java new file mode 100644 index 0000000000..3f1cb35d7f --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/RecipeModifierList.java @@ -0,0 +1,29 @@ +package com.gregtechceu.gtceu.api.recipe.modifier; + +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class RecipeModifierList implements RecipeModifier { + private final RecipeModifier[] modifiers; + + public RecipeModifierList(RecipeModifier... modifiers) { + this.modifiers = modifiers; + } + + @Override + public GTRecipe apply(MetaMachine machine, GTRecipe recipe) { + GTRecipe modifiedRecipe = recipe; + + for (RecipeModifier modifier : modifiers) { + modifiedRecipe = modifier.apply(machine, modifiedRecipe); + } + + return modifiedRecipe; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/ui/GTRecipeTypeUI.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/ui/GTRecipeTypeUI.java index 0e93b79cb2..fe1401d5e1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/ui/GTRecipeTypeUI.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/ui/GTRecipeTypeUI.java @@ -1,8 +1,10 @@ package com.gregtechceu.gtceu.api.recipe.ui; +import com.google.common.collect.Table; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.SteamTexture; import com.gregtechceu.gtceu.api.gui.WidgetUtils; @@ -11,14 +13,9 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.RecipeCondition; -import com.gregtechceu.gtceu.api.recipe.ResearchData; -import com.gregtechceu.gtceu.common.recipe.ResearchCondition; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.emi.recipe.GTRecipeTypeEmiCategory; import com.gregtechceu.gtceu.integration.jei.recipe.GTRecipeTypeCategory; import com.gregtechceu.gtceu.integration.rei.recipe.GTRecipeTypeDisplayCategory; -import com.gregtechceu.gtceu.utils.ResearchManager; -import com.gregtechceu.gtceu.utils.OverlayingFluidStorage; import com.lowdragmc.lowdraglib.LDLib; import com.lowdragmc.lowdraglib.Platform; import com.lowdragmc.lowdraglib.gui.editor.configurator.IConfigurableWidget; @@ -28,18 +25,13 @@ import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; import com.lowdragmc.lowdraglib.gui.widget.*; -import com.lowdragmc.lowdraglib.jei.IngredientIO; import com.lowdragmc.lowdraglib.jei.JEIPlugin; -import com.lowdragmc.lowdraglib.side.fluid.IFluidTransfer; -import com.lowdragmc.lowdraglib.side.item.IItemTransfer; -import com.lowdragmc.lowdraglib.utils.CycleItemStackHandler; import com.lowdragmc.lowdraglib.utils.Position; import com.lowdragmc.lowdraglib.utils.Size; -import com.lowdragmc.lowdraglib.utils.TagOrCycleFluidTransfer; import dev.emi.emi.api.EmiApi; import it.unimi.dsi.fastutil.bytes.Byte2ObjectArrayMap; import it.unimi.dsi.fastutil.bytes.Byte2ObjectMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2IntLinkedOpenHashMap; import lombok.Getter; import lombok.Setter; import me.shedaniel.rei.api.client.view.ViewSearchBuilder; @@ -47,22 +39,20 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtAccounter; import net.minecraft.nbt.NbtIo; -import net.minecraft.nbt.Tag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.DataInputStream; import java.io.InputStream; import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import java.util.Map; +import java.util.TreeMap; import java.util.function.BiConsumer; import java.util.function.DoubleSupplier; +@SuppressWarnings("UnusedReturnValue") public class GTRecipeTypeUI { @Getter @@ -93,7 +83,6 @@ public class GTRecipeTypeUI { private Size jeiSize; @Getter private int originalWidth; - private final Map> researchEntries = new Object2ObjectOpenHashMap<>(); /** * @param recipeType the recipemap corresponding to this ui @@ -116,7 +105,7 @@ public CompoundTag getCustomUI() { try { var resource = resourceManager.getResourceOrThrow(new ResourceLocation(recipeType.registryName.getNamespace(), "ui/recipe_type/%s.rtui".formatted(recipeType.registryName.getPath()))); try (InputStream inputStream = resource.open()){ - try (DataInputStream dataInputStream = new DataInputStream(inputStream);){ + try (DataInputStream dataInputStream = new DataInputStream(inputStream)) { this.customUICache = NbtIo.read(dataInputStream, NbtAccounter.UNLIMITED); } } @@ -150,21 +139,34 @@ public Size getJEISize() { return size; } - public record RecipeHolder(DoubleSupplier progressSupplier, IItemTransfer importItems, IItemTransfer exportItems, IFluidTransfer importFluids, IFluidTransfer exportFluids, CompoundTag data, List conditions, boolean isSteam, boolean isHighPressure) {} + public record RecipeHolder(DoubleSupplier progressSupplier, + Table, Object> storages, + CompoundTag data, + List conditions, + boolean isSteam, + boolean isHighPressure) {} /** * Auto layout UI template for recipes. * @param progressSupplier progress. To create a JEI / REI UI, use the para {@link ProgressWidget#JEIProgress}. */ - public WidgetGroup createUITemplate(DoubleSupplier progressSupplier, IItemTransfer importItems, IItemTransfer exportItems, IFluidTransfer importFluids, IFluidTransfer exportFluids, CompoundTag data, List conditions, boolean isSteam, boolean isHighPressure) { + public WidgetGroup createUITemplate(DoubleSupplier progressSupplier, + Table, Object> storages, + CompoundTag data, + List conditions, + boolean isSteam, + boolean isHighPressure) { var template = createEditableUITemplate(isSteam, isHighPressure); var group = template.createDefault(); - template.setupUI(group, new RecipeHolder(progressSupplier, importItems, exportItems, importFluids, exportFluids, data, conditions, isSteam, isHighPressure)); + template.setupUI(group, new RecipeHolder(progressSupplier, storages, data, conditions, isSteam, isHighPressure)); return group; } - public WidgetGroup createUITemplate(DoubleSupplier progressSupplier, IItemTransfer importItems, IItemTransfer exportItems, IFluidTransfer importFluids, IFluidTransfer exportFluids, CompoundTag data, List conditions) { - return createUITemplate(progressSupplier, importItems, exportItems, importFluids, exportFluids, data, conditions, false, false); + public WidgetGroup createUITemplate(DoubleSupplier progressSupplier, + Table, Object> storages, + CompoundTag data, + List conditions) { + return createUITemplate(progressSupplier, storages, data, conditions, false, false); } /** @@ -234,108 +236,71 @@ public IEditableUI createEditableUITemplate(final boo }).setHoverTooltips("gtceu.recipe_type.show_recipes")); } } - // bind item in - WidgetUtils.widgetByIdForEach(template, "^%s_[0-9]+$".formatted(ItemRecipeCapability.CAP.slotName(IO.IN)), SlotWidget.class, slot -> { - var index = WidgetUtils.widgetIdIndex(slot); - if (index >= 0 && index < recipeHolder.importItems.getSlots()) { - slot.setHandlerSlot(recipeHolder.importItems, index); - slot.setIngredientIO(IngredientIO.INPUT); - slot.setCanTakeItems(!isJEI); - slot.setCanPutItems(!isJEI); - } - // 1 over container size. - // If in a recipe viewer and a research slot can be added, add it. - if (isJEI && recipeType.isHasResearchSlot() && index == recipeHolder.importItems.getSlots()) { - if (ConfigHolder.INSTANCE.machines.enableResearch) { - ResearchCondition condition = recipeHolder.conditions.stream().filter(ResearchCondition.class::isInstance).findAny().map(ResearchCondition.class::cast).orElse(null); - if (condition == null) { - return; - } - List dataItems = new ArrayList<>(); - for (ResearchData.ResearchEntry entry : condition.data) { - ItemStack dataStick = entry.getDataItem().copy(); - ResearchManager.writeResearchToNBT(dataStick.getOrCreateTag(), entry.getResearchId(), this.recipeType); - dataItems.add(dataStick); - } - CycleItemStackHandler handler = new CycleItemStackHandler(List.of(dataItems)); - slot.setHandlerSlot(handler, 0); - slot.setIngredientIO(IngredientIO.INPUT); - slot.setCanTakeItems(false); - slot.setCanPutItems(false); - } - } - }); - // bind item out - WidgetUtils.widgetByIdForEach(template, "^%s_[0-9]+$".formatted(ItemRecipeCapability.CAP.slotName(IO.OUT)), SlotWidget.class, slot -> { - var index = WidgetUtils.widgetIdIndex(slot); - if (index >= 0 && index < recipeHolder.exportItems.getSlots()) { - slot.setHandlerSlot(recipeHolder.exportItems, index); - slot.setIngredientIO(IngredientIO.OUTPUT); - slot.setCanTakeItems(!isJEI); - slot.setCanPutItems(false); - } - }); - // bind fluid in - WidgetUtils.widgetByIdForEach(template, "^%s_[0-9]+$".formatted(FluidRecipeCapability.CAP.slotName(IO.IN)), TankWidget.class, tank -> { - var index = WidgetUtils.widgetIdIndex(tank); - if (index >= 0 && index < recipeHolder.importFluids.getTanks()) { - if (recipeHolder.importFluids instanceof TagOrCycleFluidTransfer fluidTransfer) { - tank.setFluidTank(fluidTransfer, index); - } else { - tank.setFluidTank(new OverlayingFluidStorage(recipeHolder.importFluids, index)); + // Bind I/O + for (var capabilityEntry : recipeHolder.storages.rowMap().entrySet()) { + IO io = capabilityEntry.getKey(); + for (var storagesEntry : capabilityEntry.getValue().entrySet()) { + RecipeCapability cap = storagesEntry.getKey(); + Object storage = storagesEntry.getValue(); + // bind overlays + Class widgetClass = cap.getWidgetClass(); + if (widgetClass != null) { + WidgetUtils.widgetByIdForEach(template, "^%s_[0-9]+$".formatted(cap.slotName(io)), widgetClass, widget -> { + var index = WidgetUtils.widgetIdIndex(widget); + cap.applyWidgetInfo(widget, index, isJEI, io, recipeHolder, recipeType, null, null, storage); + }); } - tank.setIngredientIO(IngredientIO.INPUT); - tank.setAllowClickFilled(!isJEI); - tank.setAllowClickDrained(!isJEI); } - }); - // bind fluid out - WidgetUtils.widgetByIdForEach(template, "^%s_[0-9]+$".formatted(FluidRecipeCapability.CAP.slotName(IO.OUT)), TankWidget.class, tank -> { - var index = WidgetUtils.widgetIdIndex(tank); - if (index >= 0 && index < recipeHolder.exportFluids.getTanks()) { - if (recipeHolder.exportFluids instanceof TagOrCycleFluidTransfer fluidTransfer) { - tank.setFluidTank(fluidTransfer, index); - } else { - tank.setFluidTank(new OverlayingFluidStorage(recipeHolder.exportFluids, index)); - } - tank.setIngredientIO(IngredientIO.OUTPUT); - tank.setAllowClickFilled(!isJEI); - tank.setAllowClickDrained(false); - } - }); + } }); } protected WidgetGroup addInventorySlotGroup(boolean isOutputs, boolean isSteam, boolean isHighPressure) { - var itemCount = isOutputs ? recipeType.getMaxOutputs(ItemRecipeCapability.CAP) : recipeType.getMaxInputs(ItemRecipeCapability.CAP); - var fluidCount = isOutputs ? recipeType.getMaxOutputs(FluidRecipeCapability.CAP) : recipeType.getMaxInputs(FluidRecipeCapability.CAP); - var itemR = (itemCount + 2) / 3; - var fluidR = (fluidCount + 2) / 3; - var itemC = Math.min(itemCount, 3); - var fluidC = Math.min(fluidCount, 3); - WidgetGroup group = new WidgetGroup(0, 0, Math.max(itemC, fluidC) * 18 + 8, (itemR + fluidR) * 18 + 8); - int index = 0; - for (int slotIndex = 0; slotIndex < itemCount; slotIndex++) { - var slot = new SlotWidget(); - slot.initTemplate(); - slot.setSelfPosition(new Position((index % 3) * 18 + 4, (index / 3) * 18 + 4)); - slot.setBackground(getOverlaysForSlot(isOutputs, false, slotIndex == itemCount - 1, isSteam, isHighPressure)); - slot.setId(ItemRecipeCapability.CAP.slotName(isOutputs ? IO.OUT : IO.IN, slotIndex)); - group.addWidget(slot); - index++; + int maxCount = 0; + int totalR = 0; + TreeMap, Integer> map = new TreeMap<>(RecipeCapability.COMPARATOR); + if (isOutputs) { + for (var value : recipeType.maxOutputs.entrySet()) { + if (value.getKey().doRenderSlot) { + int val = value.getValue(); + if (val > maxCount) { + maxCount = Math.min(val, 3); + } + totalR += (val + 2) / 3; + map.put(value.getKey(), val); + } + } + } else { + for (var value : recipeType.maxInputs.entrySet()) { + if (value.getKey().doRenderSlot) { + int val = value.getValue(); + if (val > maxCount) { + maxCount = Math.min(val, 3); + } + totalR += (val + 2) / 3; + map.put(value.getKey(), val); + } + } } - // move to new row - index += (3 - (index % 3)) % 3; - for (int i = 0; i < fluidCount; i++) { - var tank = new TankWidget(); - tank.initTemplate(); - tank.setFillDirection(ProgressTexture.FillDirection.ALWAYS_FULL); - tank.setSelfPosition(new Position((index % 3) * 18 + 4, (index / 3) * 18 + 4)); - tank.setBackground(getOverlaysForSlot(isOutputs, true, i == fluidCount - 1, isSteam, isHighPressure)); - tank.setId(FluidRecipeCapability.CAP.slotName(isOutputs ? IO.OUT : IO.IN, i)); - group.addWidget(tank); - index++; + WidgetGroup group = new WidgetGroup(0, 0, maxCount * 18 + 8, totalR * 18 + 8); + int index = 0; + for (var entry : map.entrySet()) { + RecipeCapability cap = entry.getKey(); + if (cap.getWidgetClass() == null) { + continue; + } + int capCount = entry.getValue(); + for (int slotIndex = 0; slotIndex < capCount; slotIndex++) { + var slot = cap.createWidget(); + slot.setSelfPosition(new Position((index % 3) * 18 + 4, (index / 3) * 18 + 4)); + slot.setBackground(getOverlaysForSlot(isOutputs, cap, slotIndex == capCount - 1, isSteam, isHighPressure)); + slot.setId(cap.slotName(isOutputs ? IO.OUT : IO.IN, slotIndex)); + group.addWidget(slot); + index++; + } + // move to new row + index += (3 - (index % 3)) % 3; } return group; } @@ -343,12 +308,12 @@ protected WidgetGroup addInventorySlotGroup(boolean isOutputs, boolean isSteam, /** * Add a slot to this ui */ - protected void addSlot(WidgetGroup group, int x, int y, int slotIndex, int count, boolean isFluid, boolean isOutputs, boolean isSteam, boolean isHighPressure) { - if (!isFluid) { + protected void addSlot(WidgetGroup group, int x, int y, int slotIndex, int count, RecipeCapability capability, boolean isOutputs, boolean isSteam, boolean isHighPressure) { + if (capability != FluidRecipeCapability.CAP) { var slot = new SlotWidget(); slot.initTemplate(); slot.setSelfPosition(new Position(x, y)); - slot.setBackground(getOverlaysForSlot(isOutputs, false, slotIndex == count - 1, isSteam, isHighPressure)); + slot.setBackground(getOverlaysForSlot(isOutputs, capability, slotIndex == count - 1, isSteam, isHighPressure)); slot.setId(ItemRecipeCapability.CAP.slotName(isOutputs ? IO.OUT : IO.IN, slotIndex)); group.addWidget(slot); } else { @@ -356,7 +321,7 @@ protected void addSlot(WidgetGroup group, int x, int y, int slotIndex, int count tank.initTemplate(); tank.setFillDirection(ProgressTexture.FillDirection.ALWAYS_FULL); tank.setSelfPosition(new Position(x, y)); - tank.setBackground(getOverlaysForSlot(isOutputs, true, slotIndex == count - 1, isSteam, isHighPressure)); + tank.setBackground(getOverlaysForSlot(isOutputs, capability, slotIndex == count - 1, isSteam, isHighPressure)); tank.setId(FluidRecipeCapability.CAP.slotName(isOutputs ? IO.OUT : IO.IN, slotIndex)); group.addWidget(tank); } @@ -388,9 +353,9 @@ protected static int[] determineSlotsGrid(int itemCount) { } - protected IGuiTexture getOverlaysForSlot(boolean isOutput, boolean isFluid, boolean isLast, boolean isSteam, boolean isHighPressure) { - IGuiTexture base = isFluid ? GuiTextures.FLUID_SLOT : (isSteam ? GuiTextures.SLOT_STEAM.get(isHighPressure) : GuiTextures.SLOT); - byte overlayKey = (byte) ((isOutput ? 2 : 0) + (isFluid ? 1 : 0) + (isLast ? 4 : 0)); + protected IGuiTexture getOverlaysForSlot(boolean isOutput, RecipeCapability capability, boolean isLast, boolean isSteam, boolean isHighPressure) { + IGuiTexture base = capability == FluidRecipeCapability.CAP ? GuiTextures.FLUID_SLOT : (isSteam ? GuiTextures.SLOT_STEAM.get(isHighPressure) : GuiTextures.SLOT); + byte overlayKey = (byte) ((isOutput ? 2 : 0) + (capability == FluidRecipeCapability.CAP ? 1 : 0) + (isLast ? 4 : 0)); if (slotOverlays.containsKey(overlayKey)) { return new GuiTextureGroup(base, slotOverlays.get(overlayKey)); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java index 8880d656f2..c528a9962b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.BedrockFluidDefinition; +import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.RecipeCondition; @@ -53,6 +54,7 @@ public final class GTRegistries { public static final GTRegistry.RL COMPASS_SECTIONS = new GTRegistry.RL<>(GTCEu.id("compass_section")); public static final GTRegistry.RL COMPASS_NODES = new GTRegistry.RL<>(GTCEu.id("compass_node")); public static final GTRegistry.RL BEDROCK_FLUID_DEFINITIONS = new GTRegistry.RL<>(GTCEu.id("bedrock_fluid")); + public static final GTRegistry.RL BEDROCK_ORE_DEFINITIONS = new GTRegistry.RL<>(GTCEu.id("bedrock_ore")); public static final GTRegistry.RL ORE_VEINS = new GTRegistry.RL<>(GTCEu.id("ore_vein")); public static final DeferredRegister> TRUNK_PLACER_TYPE = DeferredRegister.create(Registry.TRUNK_PLACER_TYPE_REGISTRY, GTCEu.MOD_ID); diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java index 667b2702e2..2ac11798bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java @@ -8,9 +8,12 @@ import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.OverclockingLogic; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; import com.gregtechceu.gtceu.client.renderer.machine.*; import com.gregtechceu.gtceu.api.block.IMachineBlock; import com.gregtechceu.gtceu.api.data.RotationState; @@ -54,6 +57,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.function.TriFunction; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import java.util.*; @@ -111,9 +115,22 @@ public class MachineBuilder extends Builde @Setter private BiConsumer> tooltipBuilder; @Setter - private BiFunction recipeModifier = GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK); + private RecipeModifier recipeModifier = GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK); @Setter private boolean alwaysTryModifyRecipe; + @NotNull + @Getter @Setter + private BiPredicate beforeWorking = (machine, recipe) -> true; + @NotNull + @Getter @Setter + private Predicate onWorking = (machine) -> true; + @NotNull + @Getter @Setter + private Consumer onWaiting = (machine) -> {}; + @NotNull + @Getter @Setter + private Consumer afterWorking = (machine) -> {}; + @Setter private Supplier appearance; @Setter @Nullable @@ -218,12 +235,20 @@ public MachineBuilder abilities(PartAbility... abilities) { return this; } - public MachineBuilder recipeModifier(BiFunction recipeModifier, boolean alwaysTryModifyRecipe) { + public MachineBuilder recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { this.recipeModifier = recipeModifier; this.alwaysTryModifyRecipe = alwaysTryModifyRecipe; return this; } + public MachineBuilder recipeModifiers(RecipeModifier... recipeModifiers) { + return this.recipeModifier(new RecipeModifierList(recipeModifiers)); + } + + public MachineBuilder recipeModifiers(boolean alwaysTryModifyRecipe, RecipeModifier... recipeModifiers) { + return this.recipeModifier(new RecipeModifierList(recipeModifiers), alwaysTryModifyRecipe); + } + public MachineBuilder noRecipeModifier() { this.recipeModifier = ((machine, recipe) -> recipe); this.alwaysTryModifyRecipe = false; @@ -342,6 +367,11 @@ public DEFINITION register() { }); definition.setRecipeModifier(recipeModifier); definition.setAlwaysTryModifyRecipe(alwaysTryModifyRecipe); + definition.setBeforeWorking(this.beforeWorking); + definition.setOnWorking(this.onWorking); + definition.setOnWaiting(this.onWaiting); + definition.setAfterWorking(this.afterWorking); + if (renderer == null) { renderer = () -> new MachineRenderer(new ResourceLocation(registrate.getModid(), "block/machine/" + name)); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java index 237bdcede2..888e2bb8c1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java @@ -1,22 +1,22 @@ package com.gregtechceu.gtceu.api.registry.registrate; -import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; -import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; -import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.block.IMachineBlock; +import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.data.RotationState; +import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; +import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.pattern.BlockPattern; import com.gregtechceu.gtceu.api.pattern.MultiblockShapeInfo; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.common.data.GTCompassNodes; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.common.data.GTCompassSections; import com.gregtechceu.gtceu.utils.SupplierMemoizer; import com.lowdragmc.lowdraglib.client.renderer.IRenderer; @@ -256,15 +256,25 @@ public MultiblockMachineBuilder paintingColor(int paintingColor) { } @Override - public MultiblockMachineBuilder recipeModifier(BiFunction recipeModifier) { + public MultiblockMachineBuilder recipeModifier(RecipeModifier recipeModifier) { return (MultiblockMachineBuilder) super.recipeModifier(recipeModifier); } @Override - public MultiblockMachineBuilder recipeModifier(BiFunction recipeModifier, boolean alwaysTryModifyRecipe) { + public MultiblockMachineBuilder recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { return (MultiblockMachineBuilder) super.recipeModifier(recipeModifier, alwaysTryModifyRecipe); } + @Override + public MultiblockMachineBuilder recipeModifiers(RecipeModifier... recipeModifiers) { + return (MultiblockMachineBuilder) super.recipeModifiers(recipeModifiers); + } + + @Override + public MultiblockMachineBuilder recipeModifiers(boolean alwaysTryModifyRecipe, RecipeModifier... recipeModifiers) { + return (MultiblockMachineBuilder) super.recipeModifiers(alwaysTryModifyRecipe, recipeModifiers); + } + public MultiblockMachineBuilder noRecipeModifier() { return (MultiblockMachineBuilder) super.noRecipeModifier(); } @@ -274,6 +284,26 @@ public MultiblockMachineBuilder alwaysTryModifyRecipe(boolean alwaysTryModifyRec return (MultiblockMachineBuilder) super.alwaysTryModifyRecipe(alwaysTryModifyRecipe); } + @Override + public MultiblockMachineBuilder beforeWorking(BiPredicate beforeWorking) { + return (MultiblockMachineBuilder) super.beforeWorking(beforeWorking); + } + + @Override + public MultiblockMachineBuilder onWorking(Predicate onWorking) { + return (MultiblockMachineBuilder) super.onWorking(onWorking); + } + + @Override + public MultiblockMachineBuilder onWaiting(Consumer onWaiting) { + return (MultiblockMachineBuilder) super.onWaiting(onWaiting); + } + + @Override + public MultiblockMachineBuilder afterWorking(Consumer afterWorking) { + return (MultiblockMachineBuilder) super.afterWorking(afterWorking); + } + @Override public MultiblockMachineBuilder editableUI(@Nullable EditableMachineUI editableUI) { return (MultiblockMachineBuilder) super.editableUI(editableUI); diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/QuantumTankRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/QuantumTankRenderer.java index 3111368a0c..824160d9fa 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/QuantumTankRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/QuantumTankRenderer.java @@ -63,7 +63,7 @@ public void renderItem(ItemStack stack, ItemTransforms.TransformType transformTy @OnlyIn(Dist.CLIENT) public void render(BlockEntity blockEntity, float partialTicks, PoseStack poseStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay) { if (blockEntity instanceof IMachineBlockEntity machineBlockEntity && machineBlockEntity.getMetaMachine() instanceof QuantumTankMachine machine) { - renderTank(poseStack, buffer, machine.getFrontFacing(), machine.getStored(), machine.getLockedFluid().getFluid()); + renderTank(poseStack, buffer, machine.getFrontFacing(), machine.getStored(), machine.getCache().getLockedFluid().getFluid()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/WorldAcceleratorRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/WorldAcceleratorRenderer.java index 3cdbf6c12d..44caa0d5c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/WorldAcceleratorRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/WorldAcceleratorRenderer.java @@ -19,18 +19,18 @@ import java.util.function.Consumer; public class WorldAcceleratorRenderer extends TieredHullMachineRenderer{ - private final WorkableOverlayModel BEModeModel, RTModeModel; + private final WorkableOverlayModel blockEntityModeModel, randomTickModeModel; public WorldAcceleratorRenderer(int tier, ResourceLocation beModeModelPath, ResourceLocation rtModeModelPath) { super(tier, GTCEu.id("block/machine/hull_machine")); - BEModeModel = new WorkableOverlayModel(beModeModelPath); - RTModeModel = new WorkableOverlayModel(rtModeModelPath); + blockEntityModeModel = new WorkableOverlayModel(beModeModelPath); + randomTickModeModel = new WorkableOverlayModel(rtModeModelPath); } - private WorkableOverlayModel getModeModel(boolean isRandomTickMode){ - if (isRandomTickMode){ - return RTModeModel; + private WorkableOverlayModel getModeModel(boolean isRandomTickMode) { + if (isRandomTickMode) { + return randomTickModeModel; } - return BEModeModel; + return blockEntityModeModel; } @Override @@ -50,8 +50,8 @@ public void renderMachine(List quads, MachineDefinition definition, @ public void onPrepareTextureAtlas(ResourceLocation atlasName, Consumer register) { super.onPrepareTextureAtlas(atlasName, register); if (atlasName.equals(TextureAtlas.LOCATION_BLOCKS)) { - RTModeModel.registerTextureAtlas(register); - BEModeModel.registerTextureAtlas(register); + randomTickModeModel.registerTextureAtlas(register); + blockEntityModeModel.registerTextureAtlas(register); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/StoneBlockType.java b/src/main/java/com/gregtechceu/gtceu/common/block/StoneBlockType.java new file mode 100644 index 0000000000..1ddfd0202f --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/block/StoneBlockType.java @@ -0,0 +1,35 @@ +package com.gregtechceu.gtceu.common.block; + +import javax.annotation.Nonnull; + +public enum StoneBlockType { + STONE("stone", "%s"), + SMOOTH("smooth", "smooth_%s"), + COBBLE("cobble", "%s_cobblestone", 2.0f, 6.0f), + COBBLE_MOSSY("cobble_mossy", "mossy_%s_cobblestone", 2.0f, 6.0f), + POLISHED("polished", "polished_%s"), + BRICKS("bricks", "%s_bricks"), + BRICKS_CRACKED("bricks_cracked", "cracked_%s_bricks"), + BRICKS_MOSSY("bricks_mossy", "mossy_%s_bricks"), + CHISELED("chiseled", "chiseled_%s"), + TILED("tiled", "%s_tile"), + TILED_SMALL("tiled_small", "%s_small_tile"), + BRICKS_SMALL("bricks_small", "small_%s_bricks"), + BRICKS_SQUARE("bricks_square", "square_%s_bricks"); + + public final String id; + public final String blockId; + public final float hardness; + public final float resistance; + + StoneBlockType(@Nonnull String id, @Nonnull String blockId) { + this(id, blockId, 1.5f, 6.0f); // vanilla stone stats + } + + StoneBlockType(@Nonnull String id, @Nonnull String blockId, float hardness, float resistance) { + this.id = id; + this.blockId = blockId; + this.hardness = hardness; + this.resistance = resistance; + } +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/StoneTypes.java b/src/main/java/com/gregtechceu/gtceu/common/block/StoneTypes.java new file mode 100644 index 0000000000..326d4389a7 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/block/StoneTypes.java @@ -0,0 +1,74 @@ +package com.gregtechceu.gtceu.common.block; + +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.common.data.GTBlocks; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import lombok.Getter; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.MaterialColor; + +import javax.annotation.Nonnull; +import java.util.function.Supplier; + +public enum StoneTypes implements StringRepresentable { + + STONE("stone", MaterialColor.STONE, true, () -> Blocks.STONE::defaultBlockState, GTMaterials.Stone, false), + DEEPSLATE("deepslate", MaterialColor.DEEPSLATE, true, () -> Blocks.DEEPSLATE::defaultBlockState, GTMaterials.Deepslate, false), + RED_GRANITE("red_granite", MaterialColor.COLOR_RED, true, () -> GTBlocks.RED_GRANITE::getDefaultState, GTMaterials.GraniteRed), + MARBLE("marble", MaterialColor.QUARTZ, true, () -> GTBlocks.MARBLE::getDefaultState, GTMaterials.Marble), + ANDESITE("andesite", MaterialColor.STONE, true, () -> Blocks.ANDESITE::defaultBlockState, GTMaterials.Andesite, false), + GRANITE("granite", MaterialColor.DIRT, true, () -> Blocks.GRANITE::defaultBlockState, GTMaterials.Granite, false) , + DIORITE("diorite", MaterialColor.QUARTZ, true, () -> Blocks.DIORITE::defaultBlockState, GTMaterials.Diorite, false), + BASALT("basalt", MaterialColor.TERRACOTTA_BLACK, true, () -> Blocks.BASALT::defaultBlockState, GTMaterials.Basalt, false), + CONCRETE_LIGHT("light_concrete", MaterialColor.STONE, false, () -> GTBlocks.LIGHT_CONCRETE::getDefaultState, GTMaterials.Concrete), + CONCRETE_DARK("dark_concrete", MaterialColor.STONE, false, () -> GTBlocks.DARK_CONCRETE::getDefaultState, GTMaterials.Concrete), + ; + + private final String name; + public final MaterialColor mapColor; + @Getter + public final boolean natural; + @Getter + public final Supplier> state; + @Getter + public final Material material; + + + public final boolean generateBlocks; + + StoneTypes(@Nonnull String name, @Nonnull MaterialColor MaterialColor, boolean natural, Supplier> state, Material material) { + this(name, MaterialColor, natural, state, material, true); + } + + StoneTypes(@Nonnull String name, @Nonnull MaterialColor mapColor, boolean natural, Supplier> state, Material material, boolean generateBlocks) { + this.name = name; + this.mapColor = mapColor; + this.natural = natural; + this.state = state; + this.material = material; + this.generateBlocks = generateBlocks; + } + + @Nonnull + @Override + public String getSerializedName() { + return this.name; + } + + public TagPrefix getTagPrefix() { + return switch (this) { + //case RED_GRANITE, MARBLE -> + // TagPrefix.ore; + case CONCRETE_LIGHT, CONCRETE_DARK -> + TagPrefix.block; + default -> TagPrefix.block; + }; + } + + public static void init() { + + } +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java index 08bd430c66..fc88e3fef9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java @@ -11,6 +11,9 @@ import com.gregtechceu.gtceu.api.block.*; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.SignItem; +import net.minecraft.world.level.block.state.properties.WoodType; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; import com.gregtechceu.gtceu.api.data.chemical.material.stack.UnificationEntry; @@ -78,8 +81,9 @@ import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; - +import net.minecraftforge.client.model.generators.ModelProvider; import org.jetbrains.annotations.NotNull; + import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -89,6 +93,8 @@ import static com.gregtechceu.gtceu.api.GTValues.*; import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; import static com.gregtechceu.gtceu.common.data.GCyMBlocks.*; +import static com.gregtechceu.gtceu.common.data.GTModels.createModelBlockState; +import static com.gregtechceu.gtceu.utils.FormattingUtil.toEnglishName; import static net.minecraftforge.client.model.generators.ModelProvider.BLOCK_FOLDER; /** @@ -543,9 +549,6 @@ private static void registerOpticalPipeBlock(int index) { .build() .register(); - // todo multiblock tanks - //WOOD_WALL("wood_wall", GTCEu.id("")); - // Machine Casings public static final BlockEntry MACHINE_CASING_ULV = createMachineCasingBlock(ULV); @@ -895,7 +898,7 @@ private static BlockEntry createFireboxCasing(BoilerFireboxType typ }, properties)) .initialProperties(() -> Blocks.OAK_SAPLING) .lang("Rubber Sapling") - .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), prov.models().cross(Registry.BLOCK.getKey(ctx.getEntry()).getPath(), prov.blockTexture(ctx.getEntry())))) + .blockstate(GTModels::createCrossBlockState) .addLayer(() -> RenderType::cutoutMipped) .tag(BlockTags.SAPLINGS) .item() @@ -960,17 +963,142 @@ public static ItemColor leavesItemColor() { .build() .register(); + public static final WoodType RUBBER_TYPE = WoodType.register(WoodType.create(GTCEu.id("rubber").toString())); + + public static final BlockEntry STRIPPED_RUBBER_LOG = REGISTRATE.block("stripped_rubber_log", RotatedPillarBlock::new) + .initialProperties(() -> Blocks.STRIPPED_SPRUCE_LOG) + .lang("Stripped Rubber Log") + .blockstate((ctx, provider) -> provider.logBlock(ctx.get())) + .simpleItem() + .register(); + public static final BlockEntry RUBBER_WOOD = REGISTRATE.block("rubber_wood", RotatedPillarBlock::new) + .initialProperties(() -> Blocks.SPRUCE_WOOD) + .lang("Rubber Wood") + .blockstate((ctx, provider) -> provider.axisBlock(ctx.get(), provider.blockTexture(GTBlocks.RUBBER_LOG.get()), provider.blockTexture(GTBlocks.RUBBER_LOG.get()))) + .simpleItem() + .register(); + public static final BlockEntry STRIPPED_RUBBER_WOOD = REGISTRATE.block("stripped_rubber_wood", RotatedPillarBlock::new) + .initialProperties(() -> Blocks.STRIPPED_SPRUCE_WOOD) + .lang("Stripped Rubber Wood") + .blockstate((ctx, provider) -> provider.axisBlock(ctx.get(), provider.blockTexture(ctx.get()), provider.blockTexture(ctx.get()))) + .simpleItem() + .register(); + public static final BlockEntry RUBBER_PLANK = REGISTRATE - .block("rubber_planks", Block::new) - .initialProperties(() -> Blocks.OAK_PLANKS) - .lang("Rubber Planks") - .properties(p -> p.color(MaterialColor.TERRACOTTA_GRAY)) - .tag(BlockTags.PLANKS) - .item() - .tag(ItemTags.PLANKS) - .onRegister(compassNode(GTCompassSections.GENERATIONS)) - .build() - .register(); + .block("rubber_planks", Block::new) + .initialProperties(() -> Blocks.SPRUCE_PLANKS) + .lang("Rubber Planks") + .tag(BlockTags.PLANKS) + .item() + .tag(ItemTags.PLANKS) + .onRegister(compassNode(GTCompassSections.GENERATIONS)) + .build() + .register(); + + public static final BlockEntry RUBBER_SLAB = REGISTRATE + .block("rubber_slab", SlabBlock::new) + .initialProperties(() -> Blocks.SPRUCE_SLAB) + .lang("Rubber Slab") + .blockstate((ctx, prov) -> prov.slabBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.RUBBER_PLANK.get()), prov.blockTexture(GTBlocks.RUBBER_PLANK.get()))) + .tag(BlockTags.SLABS) + .item() + .tag(ItemTags.SLABS) + .onRegister(compassNode(GTCompassSections.GENERATIONS)) + .build() + .register(); + + public static final BlockEntry RUBBER_FENCE = REGISTRATE + .block("rubber_fence", FenceBlock::new) + .initialProperties(() -> Blocks.SPRUCE_FENCE) + .lang("Rubber Fence") + .blockstate((ctx, prov) -> prov.fenceBlock(ctx.getEntry(), prov.blockTexture(RUBBER_PLANK.get()))) + .tag(BlockTags.WOODEN_FENCES) + .item() + .tag(ItemTags.WOODEN_FENCES) + .build() + .register(); + + public static final BlockEntry RUBBER_SIGN = REGISTRATE + .block("rubber_sign", (p) -> new StandingSignBlock(p, RUBBER_TYPE)) + .initialProperties(() -> Blocks.SPRUCE_SIGN) + .lang("Rubber Sign") + .tag(BlockTags.STANDING_SIGNS) + .setData(ProviderType.LANG, NonNullBiConsumer.noop()) + .item((b, p) -> new SignItem(p, b, GTBlocks.RUBBER_WALL_SIGN.get())) + .tag(ItemTags.SIGNS) + .build() + .register(); + + public static final BlockEntry RUBBER_WALL_SIGN = REGISTRATE + .block("rubber_wall_sign", (p) -> new WallSignBlock(p, RUBBER_TYPE)) + .initialProperties(() -> Blocks.SPRUCE_WALL_SIGN) + .lang("Rubber Wall Sign") + .setData(ProviderType.LANG, NonNullBiConsumer.noop()) + .tag(BlockTags.WALL_SIGNS) + .loot((table, block) -> table.dropOther(block, RUBBER_SIGN.get().asItem())) + .register(); + + public static final BlockEntry RUBBER_PRESSURE_PLATE = REGISTRATE + .block("rubber_pressure_plate", (p) -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, p)) + .initialProperties(() -> Blocks.SPRUCE_PRESSURE_PLATE) + .lang("Rubber Pressure Plate") + .tag(BlockTags.WOODEN_PRESSURE_PLATES) + .blockstate((ctx, prov) -> prov.pressurePlateBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.RUBBER_PLANK.get()))) + .item() + .tag(ItemTags.WOODEN_PRESSURE_PLATES) + .build() + .register(); + public static final BlockEntry RUBBER_TRAPDOOR = REGISTRATE + .block("rubber_trapdoor", TrapDoorBlock::new) + .initialProperties(() -> Blocks.SPRUCE_TRAPDOOR) + .lang("Rubber Trapdoor") + .tag(BlockTags.WOODEN_TRAPDOORS) + .item() + .tag(ItemTags.WOODEN_TRAPDOORS) + .build() + .register(); + public static final BlockEntry RUBBER_STAIRS = REGISTRATE + .block("rubber_stairs", (p) -> new StairBlock(RUBBER_PLANK.getDefaultState(), p)) + .initialProperties(() -> Blocks.SPRUCE_STAIRS) + .lang("Rubber Stairs") + .tag(BlockTags.STAIRS) + .blockstate((ctx, prov) -> prov.stairsBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.RUBBER_PLANK.get()))) + .item() + .tag(ItemTags.STAIRS) + .build() + .register(); + public static final BlockEntry RUBBER_BUTTON = REGISTRATE + .block("rubber_button", WoodButtonBlock::new) + .initialProperties(() -> Blocks.SPRUCE_BUTTON) + .lang("Rubber Button") + .tag(BlockTags.WOODEN_BUTTONS) + .blockstate((ctx, prov) -> prov.buttonBlock(ctx.getEntry(), prov.blockTexture(RUBBER_PLANK.get()))) + .item() + .tag(ItemTags.WOODEN_BUTTONS) + .build() + .register(); + public static final BlockEntry RUBBER_FENCE_GATE = REGISTRATE + .block("rubber_fence_gate", FenceGateBlock::new) + .initialProperties(() -> Blocks.SPRUCE_FENCE_GATE) + .lang("Rubber Fence Gate") + .tag(BlockTags.FENCE_GATES) + .blockstate((ctx, prov) -> prov.fenceGateBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.RUBBER_PLANK.get()))) + .item() + .build() + .register(); + public static final BlockEntry RUBBER_DOOR = REGISTRATE + .block("rubber_door", DoorBlock::new) + .initialProperties(() -> Blocks.SPRUCE_DOOR) + .lang("Rubber Door") + .loot((table, block) -> table.add(block, BlockLoot.createDoorTable(block))) + .blockstate(GTModels::rubberDoorModel) + .tag(BlockTags.WOODEN_DOORS) + .item() + .tag(ItemTags.WOODEN_DOORS) + .build() + .register(); + + public static final WoodType TREATED_WOOD_TYPE = WoodType.register(WoodType.create(GTCEu.id("treated_wood").toString())); public static final BlockEntry TREATED_WOOD_PLANK = REGISTRATE .block("treated_wood_planks", Block::new) @@ -984,6 +1112,214 @@ public static ItemColor leavesItemColor() { .build() .register(); + public static final BlockEntry TREATED_WOOD_SLAB = REGISTRATE + .block("treated_wood_slab", SlabBlock::new) + .initialProperties(() -> Blocks.SPRUCE_SLAB) + .lang("Treated Wood Slab") + .blockstate((ctx, prov) -> prov.slabBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.TREATED_WOOD_PLANK.get()), prov.blockTexture(GTBlocks.TREATED_WOOD_PLANK.get()))) + .tag(BlockTags.SLABS) + .item() + .tag(ItemTags.SLABS) + .onRegister(compassNode(GTCompassSections.GENERATIONS)) + .build() + .register(); + + public static final BlockEntry TREATED_WOOD_FENCE = REGISTRATE + .block("treated_wood_fence", FenceBlock::new) + .initialProperties(() -> Blocks.SPRUCE_FENCE) + .lang("Treated Wood Fence") + .blockstate((ctx, prov) -> prov.fenceBlock(ctx.getEntry(), prov.blockTexture(TREATED_WOOD_PLANK.get()))) + .tag(BlockTags.WOODEN_FENCES) + .item() + .tag(ItemTags.WOODEN_FENCES) + .build() + .register(); + public static final BlockEntry TREATED_WOOD_SIGN = REGISTRATE + .block("treated_wood_sign", (p) -> new StandingSignBlock(p, TREATED_WOOD_TYPE)) + .initialProperties(() -> Blocks.SPRUCE_SIGN) + .lang("Treated Wood Sign") + .tag(BlockTags.STANDING_SIGNS) + .setData(ProviderType.LANG, NonNullBiConsumer.noop()) + .item((b, p) -> new SignItem(p, b, GTBlocks.TREATED_WOOD_WALL_SIGN.get())) + .tag(ItemTags.SIGNS) + .build() + .register(); + public static final BlockEntry TREATED_WOOD_WALL_SIGN = REGISTRATE + .block("treated_wood_wall_sign", (p) -> new WallSignBlock(p, TREATED_WOOD_TYPE)) + .initialProperties(() -> Blocks.SPRUCE_WALL_SIGN) + .lang("Treated Wood Wall Sign") + .setData(ProviderType.LANG, NonNullBiConsumer.noop()) + .tag(BlockTags.WALL_SIGNS) + .loot((table, block) -> table.dropOther(block, TREATED_WOOD_SIGN.get().asItem())) + .register(); + public static final BlockEntry TREATED_WOOD_PRESSURE_PLATE = REGISTRATE + .block("treated_wood_pressure_plate", (p) -> new PressurePlateBlock(PressurePlateBlock.Sensitivity.EVERYTHING, p)) + .initialProperties(() -> Blocks.SPRUCE_PRESSURE_PLATE) + .lang("Treated Wood Pressure Plate") + .tag(BlockTags.WOODEN_PRESSURE_PLATES) + .blockstate((ctx, prov) -> prov.pressurePlateBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.TREATED_WOOD_PLANK.get()))) + .item() + .tag(ItemTags.WOODEN_PRESSURE_PLATES) + .build() + .register(); + public static final BlockEntry TREATED_WOOD_TRAPDOOR = REGISTRATE + .block("treated_wood_trapdoor", TrapDoorBlock::new) + .initialProperties(() -> Blocks.SPRUCE_TRAPDOOR) + .lang("Treated Wood Trapdoor") + .tag(BlockTags.WOODEN_TRAPDOORS) + .item() + .tag(ItemTags.WOODEN_TRAPDOORS) + .build() + .register(); + public static final BlockEntry TREATED_WOOD_STAIRS = REGISTRATE + .block("treated_wood_stairs", (p) -> new StairBlock(TREATED_WOOD_PLANK.getDefaultState(), p)) + .initialProperties(() -> Blocks.SPRUCE_STAIRS) + .lang("Treated Wood Stairs") + .tag(BlockTags.STAIRS) + .blockstate((ctx, prov) -> prov.stairsBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.TREATED_WOOD_PLANK.get()))) + .item() + .tag(ItemTags.STAIRS) + .build() + .register(); + public static final BlockEntry TREATED_WOOD_BUTTON = REGISTRATE + .block("treated_wood_button", WoodButtonBlock::new) + .initialProperties(() -> Blocks.SPRUCE_BUTTON) + .lang("Treated Wood Button") + .tag(BlockTags.WOODEN_BUTTONS) + .blockstate((ctx, prov) -> prov.buttonBlock(ctx.getEntry(), prov.blockTexture(TREATED_WOOD_PLANK.get()))) + .item() + .tag(ItemTags.WOODEN_BUTTONS) + .build() + .register(); + public static final BlockEntryTREATED_WOOD_FENCE_GATE = REGISTRATE + .block("treated_wood_fence_gate", FenceGateBlock::new) + .initialProperties(() -> Blocks.SPRUCE_FENCE_GATE) + .lang("Treated Wood Fence Gate") + .tag(BlockTags.FENCE_GATES) + .blockstate((ctx, prov) -> prov.fenceGateBlock(ctx.getEntry(), prov.blockTexture(GTBlocks.TREATED_WOOD_PLANK.get()))) + .item() + .build() + .register(); + public static final BlockEntry TREATED_WOOD_DOOR = REGISTRATE + .block("treated_wood_door", DoorBlock::new) + .initialProperties(() -> Blocks.SPRUCE_DOOR) + .lang("Treated Wood Door") + .loot((table, block) -> table.add(block, table.createDoorTable(block))) + .blockstate(GTModels::rubberDoorModel) + .tag(BlockTags.WOODEN_DOORS) + .item() + .tag(ItemTags.WOODEN_DOORS) + .build() + .register(); + + // Decoration Stuff + public static final BlockEntry ACID_HAZARD_SIGN_BLOCK = createCasingBlock("acid_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_acidhazard")); + public static final BlockEntry ANTIMATTER_HAZARD_SIGN_BLOCK = createCasingBlock("antimatter_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_antimatterhazard")); + public static final BlockEntry BIO_HAZARD_SIGN_BLOCK = createCasingBlock("bio_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_biohazard")); + public static final BlockEntry BOSS_HAZARD_SIGN_BLOCK = createCasingBlock("boss_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_bosshazard")); + public static final BlockEntry CAUSALITY_HAZARD_SIGN_BLOCK = createCasingBlock("causality_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_causalityhazard")); + public static final BlockEntry EXPLOSION_HAZARD_SIGN_BLOCK = createCasingBlock("explosion_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_explosionhazard")); + public static final BlockEntry FIRE_HAZARD_SIGN_BLOCK = createCasingBlock("fire_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_firehazard")); + public static final BlockEntry FROST_HAZARD_SIGN_BLOCK = createCasingBlock("frost_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_frosthazard")); + public static final BlockEntry GENERIC_HAZARD_SIGN_BLOCK = createCasingBlock("generic_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_generichazard")); + public static final BlockEntry GREGIFICATION_HAZARD_SIGN_BLOCK = createCasingBlock("gregification_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_gregificationhazard")); + public static final BlockEntry HIGH_PRESSURE_HAZARD_SIGN_BLOCK = createCasingBlock("high_pressure_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_highpressurehazard")); + public static final BlockEntry HIGH_VOLTAGE_HAZARD_SIGN_BLOCK = createCasingBlock("high_voltage_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_highvoltagehazard")); + public static final BlockEntry HIGH_TEMPERATURE_HAZARD_SIGN_BLOCK = createCasingBlock("high_temperature_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_hightemperaturehazard")); + public static final BlockEntry LASER_HAZARD_SIGN_BLOCK = createCasingBlock("laser_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_laserhazard")); + public static final BlockEntry MAGIC_HAZARD_SIGN_BLOCK = createCasingBlock("magic_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_magichazard")); + public static final BlockEntry MAGNETIC_HAZARD_SIGN_BLOCK = createCasingBlock("magnetic_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_magneticfieldhazard")); + public static final BlockEntry MOB_INFESTATION_HAZARD_SIGN_BLOCK = createCasingBlock("mob_infestation_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_mobhazard")); + public static final BlockEntry MOB_SPAWNER_HAZARD_SIGN_BLOCK = createCasingBlock("mob_spawner_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_mobspawnhazard")); + public static final BlockEntry NOISE_HAZARD_SIGN_BLOCK = createCasingBlock("noise_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_noisehazard")); + public static final BlockEntry RADIOACTIVE_HAZARD_SIGN_BLOCK = createCasingBlock("radioactive_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_radioactivehazard")); + public static final BlockEntry SPATIAL_STORAGE_HAZARD_SIGN_BLOCK = createCasingBlock("spatial_storage_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_spatialhazard")); + public static final BlockEntry TURRET_HAZARD_SIGN_BLOCK = createCasingBlock("turret_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_turrethazard")); + public static final BlockEntry VOID_HAZARD_SIGN_BLOCK = createCasingBlock("void_hazard_sign_block", GTCEu.id("block/casings/signs/machine_casing_voidhazard")); + public static final BlockEntry YELLOW_STRIPES_BLOCK_A = createCasingBlock("yellow_stripes_block_a", GTCEu.id("block/casings/signs/machine_casing_stripes_a")); + public static final BlockEntry YELLOW_STRIPES_BLOCK_B = createCasingBlock("yellow_stripes_block_b", GTCEu.id("block/casings/signs/machine_casing_stripes_b")); + + public static Table> STONE_BLOCKS; + + public static BlockEntry RED_GRANITE; + public static BlockEntry MARBLE; + public static BlockEntry LIGHT_CONCRETE; + public static BlockEntry DARK_CONCRETE; + + public static void generateStoneBlocks() { + // Stone type blocks + ImmutableTable.Builder> builder = ImmutableTable.builder(); + for (StoneTypes strata : StoneTypes.values()) { + if (!strata.generateBlocks) continue; + for (StoneBlockType type : StoneBlockType.values()) { + String blockId = type.blockId.formatted(strata.getSerializedName()); + if (Registry.BLOCK.containsKey(new ResourceLocation(blockId))) continue; + var entry = REGISTRATE.block(blockId, Block::new) + .initialProperties(() -> Blocks.STONE) + .properties(p -> p.strength(type.hardness, type.resistance).color(strata.mapColor)) + .transform(type == StoneBlockType.STONE ? GTBlocks.unificationBlock(strata.getTagPrefix(), strata.getMaterial()) : builder2 -> builder2) + .tag(BlockTags.MINEABLE_WITH_PICKAXE, CustomTags.NEEDS_WOOD_TOOL) + .loot((tables, block) -> { + if (type == StoneBlockType.STONE) { + tables.add(block, tables.createSingleItemTableWithSilkTouch(block, STONE_BLOCKS.get(StoneBlockType.COBBLE, strata).get())); + } else { + tables.add(block, tables.createSingleItemTable(block)); + } + }) + .item() + .build(); + if (type == StoneBlockType.STONE && strata.isNatural()) { + entry.tag(BlockTags.STONE_ORE_REPLACEABLES, BlockTags.BASE_STONE_OVERWORLD, BlockTags.DRIPSTONE_REPLACEABLE, BlockTags.MOSS_REPLACEABLE) + .blockstate(GTModels.randomRotatedModel(GTCEu.id(ModelProvider.BLOCK_FOLDER + "/stones/" + strata.getSerializedName() + "/" + type.id))); + } else { + entry.blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), prov.models().singleTexture(ctx.getName(), prov.mcLoc(ModelProvider.BLOCK_FOLDER + "/cube_all"), "all", prov.modLoc(ModelProvider.BLOCK_FOLDER + "/stones/" + strata.getSerializedName() + "/" + type.id)))); + } + builder.put(type, strata, entry.register()); + } + } + STONE_BLOCKS = builder.build(); + + RED_GRANITE = STONE_BLOCKS.get(StoneBlockType.STONE, StoneTypes.RED_GRANITE); + MARBLE = STONE_BLOCKS.get(StoneBlockType.STONE, StoneTypes.MARBLE); + LIGHT_CONCRETE = STONE_BLOCKS.get(StoneBlockType.STONE, StoneTypes.CONCRETE_LIGHT); + DARK_CONCRETE = STONE_BLOCKS.get(StoneBlockType.STONE, StoneTypes.CONCRETE_DARK); + } + + public static final BlockEntry FOAM = REGISTRATE + .block("foam", Block::new) + .initialProperties(() -> Blocks.SLIME_BLOCK) + .lang("Foam") + .item() + .build() + .register(); + public static final BlockEntry PETRIFIED_FOAM = REGISTRATE + .block("petrified_foam", Block::new) + .initialProperties(() -> Blocks.STONE) + .lang("Petrified Foam") + .item() + .build() + .register(); + public static final BlockEntry REINFORCED_STONE = REGISTRATE + .block("reinforced_stone", Block::new) + .initialProperties(() -> Blocks.STONE) + .lang("Reinforced Stone") + .item() + .build() + .register(); + + // Lamps + @SuppressWarnings("unchecked") + public static final BlockEntry[] LAMPS = new BlockEntry[DyeColor.values().length]; + static { + DyeColor[] colors = DyeColor.values(); + for (int i = 0; i < colors.length; i++) { + var dyeColor = colors[i]; + LAMPS[i] = REGISTRATE.block("%s_lamp".formatted(dyeColor.getName()), Block::new) + .initialProperties(() -> Blocks.GLOWSTONE) + .simpleItem() + .register(); + } + } public static > NonNullFunction unificationBlock(@NotNull TagPrefix tagPrefix, @NotNull Material mat) { return builder -> { @@ -1022,6 +1358,9 @@ public static void init() { generateLaserPipeBlocks(); // Laser Pipe Blocks generateOpticalPipeBlocks(); // Optical Pipe Blocks + // Decor Blocks + generateStoneBlocks(); + // Remove Builder Tables MATERIAL_BLOCKS_BUILDER = null; SURFACE_ROCK_BLOCKS_BUILDER = null; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java index 3e19f43255..5276310a38 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java @@ -55,6 +55,11 @@ public class GTCovers { new SimpleCoverRenderer(GTCEu.id("block/cover/overlay_infinite_water")) ); + public final static CoverDefinition SHUTTER = register( + "shutter", ShutterCover::new, + new SimpleCoverRenderer(GTCEu.id("block/cover/overlay_shutter")) + ); + public final static CoverDefinition[] CONVEYORS = registerTiered( "conveyor", ConveyorCover::new, tier -> ConveyorCoverRenderer.INSTANCE, ALL_TIERS diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java index 077da37de2..c3b3719291 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java @@ -451,8 +451,8 @@ public static ICustomDescriptionId cellName() { .color(() -> GTItems::cellColor) .onRegister(compassNodeExist(GTCompassSections.ITEMS, "empty_cell")) .onRegister(modelPredicate(GTCEu.id("fluid_cell"), (itemStack) -> FluidTransferHelper.getFluidContained(itemStack) == null ? 0f : 1f)) - .onRegister(attach(cellName(), ThermalFluidStats.create((int)FluidHelper.getBucket() * 128, GTMaterials.TungstenSteel.getProperty(PropertyKey.FLUID_PIPE).getMaxFluidTemperature(), true, false, false, false, true), new ItemFluidContainer())) - .onRegister(materialInfo(new ItemMaterialInfo(new MaterialStack(GTMaterials.TungstenSteel, GTValues.M * 6)))).register(); + .onRegister(attach(cellName(), ThermalFluidStats.create((int)FluidHelper.getBucket() * 128, GTMaterials.Titanium.getProperty(PropertyKey.FLUID_PIPE).getMaxFluidTemperature(), true, false, false, false, true), new ItemFluidContainer())) + .onRegister(materialInfo(new ItemMaterialInfo(new MaterialStack(GTMaterials.Titanium, GTValues.M * 6)))).register(); public static ItemEntry FLUID_CELL_LARGE_TUNGSTEN_STEEL = REGISTRATE.item("tungstensteel_fluid_cell", ComponentItem::create) .lang("Tungstensteel Cell") .model(cellModel()) @@ -1446,6 +1446,7 @@ public static ICustomDescriptionId cellName() { public static ItemEntry COVER_SHUTTER = REGISTRATE.item("shutter_module_cover", ComponentItem::create) .lang("Shutter Module") .onRegister(compassNode(GTCompassSections.COVERS, GTCompassNodes.COVER)) + .onRegister(attach(new CoverPlaceBehavior(GTCovers.SHUTTER))) .register(); public static ItemEntry COVER_INFINITE_WATER = REGISTRATE.item("infinite_water_cover", ComponentItem::create) @@ -1632,8 +1633,9 @@ public static ICustomDescriptionId cellName() { public static final ItemEntry[] DYE_ONLY_ITEMS = new ItemEntry[DyeColor.values().length]; static { - for (int i = 0; i < DyeColor.values().length; i++) { - var dyeColor = DyeColor.values()[i]; + DyeColor[] colors = DyeColor.values(); + for (int i = 0; i < colors.length; i++) { + var dyeColor = colors[i]; DYE_ONLY_ITEMS[i] = REGISTRATE.item("chemical_%s_dye".formatted(dyeColor.getName()), Item::new) .lang("Chemical %s Dye".formatted(toEnglishName(dyeColor.getName()))) .tag(TagUtil.createItemTag("dyes/" + dyeColor.getName())) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java index 9c1e6a0a1e..d68f257143 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -2,6 +2,7 @@ import appeng.api.networking.pathing.ChannelMode; import appeng.core.AEConfig; +import com.google.common.math.IntMath; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; @@ -422,7 +423,7 @@ public class GTMachines { .renderer(() -> new WorkableTieredHullMachineRenderer(tier,GTCEu.id("block/machines/item_collector"))) .tooltips( Component.translatable("gtceu.machine.item_collector.tooltip"), - Component.translatable("gtceu.machine.item_collector.gui.collect_range", (int) Math.pow(2, tier + 2)), + Component.translatable("gtceu.machine.item_collector.gui.collect_range", IntMath.pow(2, tier + 2), IntMath.pow(2, tier + 2)), Component.translatable("gtceu.universal.tooltip.voltage_in", GTValues.V[tier], GTValues.VNF[tier]), Component.translatable("gtceu.universal.tooltip.energy_storage_capacity", GTValues.V[tier] * 64L) ) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTModels.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTModels.java index be378a703e..bf9ff27a6a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTModels.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTModels.java @@ -10,11 +10,24 @@ import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; import com.gregtechceu.gtceu.core.MixinHelpers; import com.gregtechceu.gtceu.data.pack.GTDynamicResourcePack; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.providers.RegistrateBlockstateProvider; +import com.tterrag.registrate.providers.RegistrateItemModelProvider; +import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import net.minecraft.client.Minecraft; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.GsonHelper; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.DoorBlock; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.client.model.generators.ModelProvider; +import net.minecraftforge.registries.ForgeRegistries; import java.io.BufferedReader; import java.io.IOException; @@ -25,6 +38,88 @@ * @implNote GTModels */ public class GTModels { + public static void createModelBlockState(DataGenContext ctx, RegistrateBlockstateProvider prov, ResourceLocation modelLocation) { + prov.simpleBlock(ctx.getEntry(), prov.models().getExistingFile(modelLocation)); + } + + public static void createCrossBlockState(DataGenContext ctx, RegistrateBlockstateProvider prov) { + prov.simpleBlock(ctx.getEntry(), prov.models().cross(ForgeRegistries.BLOCKS.getKey(ctx.getEntry()).getPath(), prov.blockTexture(ctx.getEntry()))); + } + + public static void cellModel(DataGenContext ctx, RegistrateItemModelProvider prov) { + // empty model + prov.getBuilder("item/" + prov.name(ctx::getEntry) + "_empty").parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", prov.modLoc("item/%s/base".formatted(prov.name(ctx)))); + + // filled model + prov.getBuilder("item/" + prov.name(ctx::getEntry) + "_filled").parent(new ModelFile.UncheckedModelFile("item/generated")) + .texture("layer0", prov.modLoc("item/%s/base".formatted(prov.name(ctx)))) + .texture("layer1", prov.modLoc("item/%s/overlay".formatted(prov.name(ctx)))); + + // root model + prov.generated(ctx::getEntry, prov.modLoc("item/%s/base".formatted(prov.name(ctx)))) + .override().predicate(GTCEu.id("fluid_cell"), 0) + .model(new ModelFile.UncheckedModelFile(prov.modLoc("item/%s_empty".formatted(prov.name(ctx))))) + .end() + .override().predicate(GTCEu.id("fluid_cell"), 1) + .model(new ModelFile.UncheckedModelFile(prov.modLoc("item/%s_filled".formatted(prov.name(ctx))))) + .end(); + } + + public static NonNullBiConsumer, RegistrateItemModelProvider> overrideModel(ResourceLocation predicate, int modelNumber) { + if (modelNumber <= 0) return NonNullBiConsumer.noop(); + return (ctx, prov) -> { + var rootModel = prov.generated(ctx::getEntry, prov.modLoc("item/%s/1".formatted(prov.name(ctx)))); + for (int i = 0; i < modelNumber; i++) { + var subModelBuilder = prov.getBuilder("item/" + prov.name(ctx::getEntry) + "/" + i).parent(new ModelFile.UncheckedModelFile("item/generated")); + subModelBuilder.texture("layer0", prov.modLoc("item/%s/%d".formatted(prov.name(ctx), i + 1))); + + rootModel = rootModel.override().predicate(predicate, i / 100f).model(new ModelFile.UncheckedModelFile(prov.modLoc("item/%s/%d".formatted(prov.name(ctx), i)))).end(); + } + }; + } + + public static void createTextureModel(DataGenContext ctx, RegistrateItemModelProvider prov, ResourceLocation texture) { + prov.generated(ctx, texture); + } + + public static void rubberTreeSaplingModel(DataGenContext context, RegistrateItemModelProvider provider) { + provider.generated(context, provider.modLoc("block/" + provider.name(context))); + } + public static void rubberDoorModel(DataGenContext ctx, RegistrateBlockstateProvider prov) { + prov.doorBlock(ctx.getEntry(), GTCEu.id("block/rubber_door_bottom"), GTCEu.id("block/rubber_door_top")); + } + + public static void longDistanceItemPipeModel(DataGenContext ctx, RegistrateBlockstateProvider prov) { + prov.simpleBlock(ctx.getEntry(), prov.models().cubeAll("long_distance_item_pipeline", prov.modLoc("block/pipe/ld_item_pipe/block"))); + } + + public static void longDistanceFluidPipeModel(DataGenContext ctx, RegistrateBlockstateProvider prov) { + prov.simpleBlock(ctx.getEntry(), prov.models().cubeAll("long_distance_fluid_pipeline", prov.modLoc("block/pipe/ld_fluid_pipe/block"))); + } + + public static NonNullBiConsumer, RegistrateBlockstateProvider> randomRotatedModel(ResourceLocation texturePath) { + return (ctx, prov) -> { + Block block = ctx.getEntry(); + ModelFile cubeAll = prov.models().cubeAll(ctx.getName(), texturePath); + ModelFile cubeMirroredAll = prov.models().singleTexture(ctx.getName() + "_mirrored", prov.mcLoc(ModelProvider.BLOCK_FOLDER + "/cube_mirrored_all"), "all", texturePath); + ConfiguredModel[] models = ConfiguredModel.builder() + .modelFile(cubeAll) + .rotationY(0) + .nextModel() + .modelFile(cubeAll) + .rotationY(180) + .nextModel() + .modelFile(cubeMirroredAll) + .rotationY(0) + .nextModel() + .modelFile(cubeMirroredAll) + .rotationY(180) + .build(); + prov.simpleBlock(block, models); + }; + } + /** * register fluid models for materials */ diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTOres.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTOres.java index 2b35756909..c37b38cbec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTOres.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTOres.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.data.worldgen.*; +import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.IndicatorGenerators; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerators; import com.gregtechceu.gtceu.api.data.worldgen.generator.indicators.SurfaceIndicatorGenerator; @@ -49,6 +50,7 @@ public class GTOres { private static int largestIndicatorOffset = 0; private static final Map toReRegister = new HashMap<>(); + public static final Map toReRegisterBedrock = new HashMap<>(); static { VeinGenerators.registerAddonGenerators(); @@ -885,6 +887,7 @@ private static Supplier ore(TagPrefix oreTag, Material material public static void init() { toReRegister.forEach(GTRegistries.ORE_VEINS::registerOrOverride); + toReRegisterBedrock.forEach(GTRegistries.BEDROCK_ORE_DEFINITIONS::registerOrOverride); } public static void updateLargestVeinSize() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java index decb53aab8..6fea7fd65d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java @@ -14,11 +14,15 @@ import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import lombok.val; +import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.Util; import net.minecraft.util.Tuple; import org.jetbrains.annotations.NotNull; + +import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; import java.util.Optional; import java.util.function.BiFunction; @@ -34,20 +38,29 @@ public class GTRecipeModifiers { /** * Use it if machines are {@link IOverclockMachine}. */ - public final static Function> ELECTRIC_OVERCLOCK = Util.memoize(overclockingLogic -> (machine, recipe) -> { - if (machine instanceof ITieredMachine tieredMachine && RecipeHelper.getRecipeEUtTier(recipe) > tieredMachine.getTier()) { - return null; + public static final Function ELECTRIC_OVERCLOCK = Util.memoize(ElectricOverclockModifier::new); + public static final RecipeModifier PARALLEL_HATCH = (machine, recipe) -> GTRecipeModifiers.hatchParallel(machine, recipe, false).getA(); + + @MethodsReturnNonnullByDefault + @ParametersAreNonnullByDefault + public static class ElectricOverclockModifier implements RecipeModifier { + private final OverclockingLogic overclockingLogic; + + + public ElectricOverclockModifier(OverclockingLogic overclockingLogic) { + this.overclockingLogic = overclockingLogic; } - if (machine instanceof IOverclockMachine overclockMachine) { - return RecipeHelper.applyOverclock(overclockingLogic, recipe, overclockMachine.getOverclockVoltage()); + @Override + public GTRecipe apply(MetaMachine machine, GTRecipe recipe) { + if (machine instanceof ITieredMachine tieredMachine && RecipeHelper.getRecipeEUtTier(recipe) > tieredMachine.getTier()) { + return null; + } + if (machine instanceof IOverclockMachine overclockMachine) { + return RecipeHelper.applyOverclock(overclockingLogic, recipe, overclockMachine.getOverclockVoltage()); + } + return recipe; } - return recipe; - }); - - public static final BiFunction>, BiFunction> PARALLEL_HATCH = Util.memoize((overclockingLogic, function) -> ((machine, recipe) -> { - var paralleledRecipe = GTRecipeModifiers.hatchParallel(machine, recipe, false); - return function.apply(overclockingLogic).apply(machine, paralleledRecipe.getA()); - })); + } /** * Fast parallel, the parallel amount is always the 2 times the divisor of maxParallel。 @@ -82,6 +95,7 @@ public static Tuple accurateParallel(MetaMachine machine, @No if (maxParallel == 1) { return new Tuple<>(recipe, 1); } +// if(!(machine instanceof ITieredMachine))return new Tuple<>(recipe, 1); if (machine instanceof IRecipeCapabilityHolder holder) { var parallel = tryParallel(holder, recipe, 1, maxParallel, modifyDuration); return parallel == null ? new Tuple<>(recipe, 1) : parallel; @@ -93,9 +107,9 @@ private static Tuple tryParallel(IRecipeCapabilityHolder hold if (min > max) return null; int mid = (min + max) / 2; - GTRecipe copied = original.copy(ContentModifier.multiplier(mid), modifyDuration); - if (!copied.matchRecipe(holder).isSuccess() || !copied.matchTickRecipe(holder).isSuccess()) { + if (!copied.matchRecipe(holder).isSuccess() || !copied.matchTickRecipe(holder).isSuccess() || + !(holder instanceof ITieredMachine && RecipeHelper.getRecipeEUtTier(copied) <= ((ITieredMachine)holder).getTier())) { // tried too many return tryParallel(holder, original, min, mid - 1, modifyDuration); } else { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java index dd8a658419..1244e9d1f4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java @@ -564,6 +564,7 @@ public class GTRecipeTypes { .setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, LEFT_TO_RIGHT) .setSound(GTSoundEntries.ASSEMBLER) .setHasResearchSlot(true) + .setMaxTooltips(4) .onRecipeBuild(ResearchManager::createDefaultResearchRecipe); public static final GTRecipeType LARGE_CHEMICAL_RECIPES = register("large_chemical_reactor", MULTIBLOCK).setMaxIOSize(3, 3, 5, 4).setEUIO(IO.IN) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCyMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCyMMachines.java index ff1857795a..c8795d4fb9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCyMMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCyMMachines.java @@ -72,7 +72,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.macerator"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(MACERATOR_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_SECURE_MACERATION) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXX", "XXXXX","XXXXX", "XXXXX") @@ -99,7 +99,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_2.tooltip", Component.translatable("gtceu.ore_washer"), Component.translatable("gtceu.chemical_bath"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(CHEMICAL_BATH_RECIPES, ORE_WASHER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_WATERTIGHT) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXX", "XXXXX", "XXXXX") @@ -128,7 +128,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_2.tooltip", Component.translatable("gtceu.centrifuge"), Component.translatable("gtceu.thermal_centrifuge"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(CENTRIFUGE_RECIPES, THERMAL_CENTRIFUGE_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_VIBRATION_SAFE) .pattern(definition -> FactoryBlockPattern.start() .aisle("#XXX#","XXXXX","#XXX#") @@ -156,7 +156,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.mixer"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(MIXER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_REACTION_SAFE) .pattern(definition -> FactoryBlockPattern.start() .aisle("#XXX#","#XXX#","#XXX#","#XXX#","#XXX#","##F##") @@ -186,7 +186,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.electrolyzer"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(ELECTROLYZER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_NONCONDUCTING) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXX","XXXXX","XXXXX") @@ -211,7 +211,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_2.tooltip", Component.translatable("gtceu.electromagnetic_separator"), Component.translatable("gtceu.polarizer"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(ELECTROMAGNETIC_SEPARATOR_RECIPES, POLARIZER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_NONCONDUCTING) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXX","XXXXX","XXXXX") @@ -236,7 +236,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.packer"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.PACKER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_TUNGSTENSTEEL_ROBUST) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXX","XXX","XXX") @@ -263,7 +263,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.assembler"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(ASSEMBLER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_LARGE_SCALE_ASSEMBLING) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXXXXXX","XXXXXXXXX","XXXXXXXXX") @@ -290,7 +290,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.circuit_assembler"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(CIRCUIT_ASSEMBLER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_LARGE_SCALE_ASSEMBLING) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXXXX","XXXXXXX","XXXXXXX") @@ -321,7 +321,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.arc_furnace"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(ARC_FURNACE_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_HIGH_TEMPERATURE_SMELTING) .pattern(definition -> FactoryBlockPattern.start() .aisle("#XXX#","#XXX#","#XXX#","#XXX#") @@ -350,7 +350,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.laser_engraver"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(LASER_ENGRAVER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_LASER_SAFE_ENGRAVING) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXX","XXGXX","XXGXX","XXXXX") @@ -379,7 +379,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.sifter"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(SIFTER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_VIBRATION_SAFE) .pattern(definition -> FactoryBlockPattern.start() .aisle("#X#X#","#X#X#","#XXX#","XXXXX","#XXX#") @@ -459,7 +459,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.autoclave"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(AUTOCLAVE_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_WATERTIGHT) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXX", "XXX", "XXX") @@ -486,7 +486,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_4.tooltip", Component.translatable("gtceu.bender"), Component.translatable("gtceu.compressor"), Component.translatable("gtceu.forge_hammer"), Component.translatable("gtceu.forming_press"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(BENDER_RECIPES, COMPRESSOR_RECIPES, FORGE_HAMMER_RECIPES, FORMING_PRESS_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_STRESS_PROOF) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXXXX", "XXXXXXX", "XXXXXXX") @@ -512,7 +512,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_3.tooltip", Component.translatable("gtceu.brewery"), Component.translatable("gtceu.fermenter"), Component.translatable("gtceu.fluid_heater"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(BREWING_RECIPES, FERMENTING_RECIPES, FLUID_HEATER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_CORROSION_PROOF) .pattern(definition -> FactoryBlockPattern.start() .aisle("#XXX#", "#XXX#", "#XXX#", "#XXX#", "#####") @@ -542,7 +542,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_2.tooltip", Component.translatable("gtceu.cutter"), Component.translatable("gtceu.lathe"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(CUTTER_RECIPES, LATHE_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_SHOCK_PROOF) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXXXX","XXXXXXX","XXXXXXX","##XXXXX") @@ -570,7 +570,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_2.tooltip", Component.translatable("gtceu.distillation_tower"), Component.translatable("gtceu.distillery"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(DISTILLATION_RECIPES, DISTILLERY_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_WATERTIGHT) .pattern(definition -> { TraceabilityPredicate casingPredicate = blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(40); @@ -608,7 +608,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_2.tooltip", Component.translatable("gtceu.extractor"), Component.translatable("gtceu.canner"))) .rotationState(RotationState.NON_Y_AXIS) .recipeTypes(EXTRACTOR_RECIPES, CANNER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_WATERTIGHT) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXX","XXXXX","XXXXX") @@ -633,7 +633,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.extruder"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(EXTRUDER_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_STRESS_PROOF) .pattern(definition -> FactoryBlockPattern.start() .aisle("##XXX", "##XXX", "##XXX") @@ -662,7 +662,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.fluid_solidifier"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(FLUID_SOLIDFICATION_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_WATERTIGHT) .pattern(definition -> FactoryBlockPattern.start() .aisle("#XXX#","#XXX#","#XXX#","#XXX#") @@ -690,7 +690,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.wiremill"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(WIREMILL_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_STRESS_PROOF) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXX", "XXXXX", "XXX##") @@ -715,7 +715,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.electric_blast_furnace"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(BLAST_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, (oc) -> GTRecipeModifiers::ebfOverclock)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers::ebfOverclock) .appearanceBlock(CASING_HIGH_TEMPERATURE_SMELTING) .pattern(definition -> { TraceabilityPredicate casing = blocks(CASING_HIGH_TEMPERATURE_SMELTING.get()).setMinGlobalLimited(360); @@ -798,7 +798,7 @@ public static void init() {} .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", Component.translatable("gtceu.vacuum_freezer"))) .rotationState(RotationState.NON_Y_AXIS) .recipeType(VACUUM_RECIPES) - .recipeModifier(GTRecipeModifiers.PARALLEL_HATCH.apply(OverclockingLogic.PERFECT_OVERCLOCK, GTRecipeModifiers.ELECTRIC_OVERCLOCK)) + .recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.ELECTRIC_OVERCLOCK.apply(OverclockingLogic.NON_PERFECT_OVERCLOCK)) .appearanceBlock(CASING_ALUMINIUM_FROSTPROOF) .pattern(definition -> FactoryBlockPattern.start() .aisle("XXXXXXX#KKK", "XXXXXXX#KVK", "XXXXXXX#KVK", "XXXXXXX#KVK", "XXXXXXX#KKK", "XXXXXXX####", "XXXXXXX####") diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java index e15efc98f3..665510a7d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java @@ -51,6 +51,7 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -126,11 +127,11 @@ public ItemCollectorMachine(IMachineBlockEntity holder, int tier, Object... igno super(holder, tier); this.inventorySize = INVENTORY_SIZES[Mth.clamp(getTier(), 0, INVENTORY_SIZES.length - 1)]; this.energyPerTick = (long) BASE_EU_CONSUMPTION * (1L << (tier - 1)); - this.output = createoutputItemHandler(); + this.output = createOutputItemHandler(); this.chargerInventory = createChargerItemHandler(); this.filterInventory = createFilterItemHandler(); - maxRange = (int) Math.pow(2,tier+2); + maxRange = (int) Math.pow(2, tier + 2); range = maxRange; setOutputFacingItems(getFrontFacing()); } @@ -156,29 +157,29 @@ public ManagedFieldHolder getFieldHolder() { return MANAGED_FIELD_HOLDER; } - protected NotifiableItemStackHandler createoutputItemHandler() { + protected NotifiableItemStackHandler createOutputItemHandler() { return new NotifiableItemStackHandler(this, inventorySize, IO.BOTH, IO.OUT); } - - @Override public void onLoad() { super.onLoad(); if (isRemote()) return; - if (getLevel() instanceof ServerLevel serverLevel) - serverLevel.getServer().tell(new TickTask(0, this::updateAutoOutputSubscription)); + if (getLevel() instanceof ServerLevel serverLevel) { - exportItemSubs = output.addChangedListener(this::updateAutoOutputSubscription); + serverLevel.getServer().tell(new TickTask(0, () -> { + this.updateAutoOutputSubscription(); + this.updateCollectionSubscription(); + })); + } + exportItemSubs = output.addChangedListener(this::updateAutoOutputSubscription); energySubs = energyContainer.addChangedListener(() -> { this.updateBatterySubscription(); this.updateCollectionSubscription(); - }); chargerInventory.setOnContentsChanged(this::updateBatterySubscription); - } @Override @@ -225,36 +226,35 @@ public void update() { if (aabb == null || rangeDirty) { rangeDirty = false; BlockPos pos1,pos2; - pos1 = getPos().offset(-range,0,-range); - pos2 = getPos().offset(range,2,range); - this.aabb = AABB.of(BoundingBox.fromCorners(pos1,pos2)); + pos1 = getPos().offset(-range, 0, -range); + pos2 = getPos().offset(range, 2, range); + this.aabb = AABB.of(BoundingBox.fromCorners(pos1,pos2)); } moveItemsInRange(); updateCollectionSubscription(); } } - public void moveItemsInRange(){ + public void moveItemsInRange() { ItemFilter filter = null; if(!filterInventory.getStackInSlot(0).isEmpty()) filter = ItemFilter.loadFilter(filterInventory.getStackInSlot(0)); BlockPos centerPos = self().getPos().above(); List itemEntities = getLevel().getEntitiesOfClass(ItemEntity.class, aabb); - for(ItemEntity itemEntity: itemEntities){ + for(ItemEntity itemEntity : itemEntities) { if(!itemEntity.isAlive()) continue; if(filter != null && !filter.test(itemEntity.getItem())) continue; double distX = (centerPos.getX() + 0.5) - itemEntity.position().x; double distZ = (centerPos.getZ() + 0.5) - itemEntity.position().z; - double dist = Math.sqrt(Math.pow(distX,2) + Math.pow(distZ,2)); - if(dist>=.7f){ - if(itemEntity.pickupDelay==32767) continue; //INFINITE_PICKUP_DELAY = 32767 + double dist = Math.sqrt(Math.pow(distX, 2) + Math.pow(distZ, 2)); + if(dist >= 0.7f) { + if(itemEntity.pickupDelay == 32767) continue; //INFINITE_PICKUP_DELAY = 32767 double dirX = distX/dist; double dirZ = distZ/dist; - itemEntity.kjs$setMotionX(dirX*MOTION_MULTIPLIER*tier); - itemEntity.kjs$setMotionZ(dirZ*MOTION_MULTIPLIER*tier); + Vec3 delta = itemEntity.getDeltaMovement(); + itemEntity.setDeltaMovement(dirX * MOTION_MULTIPLIER * tier, delta.y, dirZ * MOTION_MULTIPLIER * tier); itemEntity.setPickUpDelay(1); - } else { ItemStack stack = itemEntity.getItem(); if(!canFillOutput(stack)) continue; @@ -262,24 +262,26 @@ public void moveItemsInRange(){ ItemStack remainder = fillOutput(stack); if(remainder.isEmpty()) itemEntity.kill(); - else if(stack.getCount()>remainder.getCount()) + else if (stack.getCount() > remainder.getCount()) itemEntity.setItem(remainder); } } } private boolean canFillOutput(ItemStack stack) { - for (int i = 0; i < output.getSlots(); i++) + for (int i = 0; i < output.getSlots(); i++) { if (output.insertItemInternal(i, stack, true).getCount() < stack.getCount()) return true; + } return false; } private ItemStack fillOutput(ItemStack stack) { - for (int i = 0; i < output.getSlots(); i++) + for (int i = 0; i < output.getSlots(); i++) { if (output.insertItemInternal(i, stack, true).getCount() < stack.getCount()) return output.insertItemInternal(i, stack, false); + } return ItemStack.EMPTY; } @@ -305,10 +307,14 @@ public void setAutoOutputItems(boolean allow) { } @Override - public boolean isAllowInputFromOutputSideItems() { return false;} + public boolean isAllowInputFromOutputSideItems() { + return false; + } @Override - public void setAllowInputFromOutputSideItems(boolean allow) {} + public void setAllowInputFromOutputSideItems(boolean allow) { + + } @Override public void setOutputFacingItems(@Nullable Direction outputFacing) { @@ -329,14 +335,14 @@ protected void updateAutoOutputSubscription() { var outputFacing = getOutputFacingItems(); if ((isAutoOutputItems() && !output.isEmpty()) && outputFacing != null && ItemTransferHelper.getItemTransfer(getLevel(), getPos().relative(outputFacing), outputFacing.getOpposite()) != null) - autoOutputSubs = subscribeServerTick(autoOutputSubs, this::checkAutoOutput); + autoOutputSubs = subscribeServerTick(autoOutputSubs, this::autoOutput); else if (autoOutputSubs != null) { autoOutputSubs.unsubscribe(); autoOutputSubs = null; } } - protected void checkAutoOutput() { + protected void autoOutput() { if (getOffsetTimer() % 5 == 0) { if (isAutoOutputItems() && getOutputFacingItems() != null) output.exportToNearby(getOutputFacingItems()); @@ -405,9 +411,8 @@ public void setWorkingEnabled(boolean workingEnabled) { template.setSelfPosition(new Position( (size.width - energyGroup.getSize().width - 4 - template.getSize().width) / 2 + 2 + energyGroup.getSize().width + 2, - (size.height - template.getSize().height) / 2+15)); - - + (size.height - template.getSize().height) / 2+15 + )); group.addWidget(energyGroup); group.addWidget(template); @@ -437,9 +442,6 @@ protected static EditableUI createBatterySlot( }); } - - - protected static EditableUI createTemplate(int inventorySize) { return new EditableUI<>("functional_container", WidgetGroup.class, () -> { int rowSize = (int) Math.sqrt(inventorySize); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java index d3b6485ada..25a48c2cfb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java @@ -25,6 +25,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -49,37 +50,17 @@ */ public class WorldAcceleratorMachine extends TieredEnergyMachine implements IControllable { - private static final Map> blacklistedClasses = new Object2ObjectOpenHashMap<>(); private static final Object2BooleanFunction> blacklistCache = new Object2BooleanOpenHashMap<>(); - private static boolean gatheredClasses = false; //Hard-coded blacklist for blockentities private static final List blockEntityClassNamesBlackList = new ArrayList<>(); - protected static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(WorldAcceleratorMachine.class, TieredEnergyMachine.MANAGED_FIELD_HOLDER); - - private TickableSubscription subscription; - - private static final long BEAmperage = 6; - private static final long RTAmperage = 3; - @Getter - @Persisted - @DescSynced - private boolean isWorkingEnabled = true; - @DescSynced - @Persisted - @Getter - private boolean isRandomTickMode = true; - - @DescSynced - @Persisted - @Getter - @RequireRerender - private boolean active = false; - + protected static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(WorldAcceleratorMachine.class, TieredEnergyMachine.MANAGED_FIELD_HOLDER); + private static final long blockEntityAmperage = 6; + private static final long randomTickAmperage = 3; // Variables for Random Tick mode optimization // limit = ((tier - min) / (max - min)) * 2^tier private static final int[] SUCCESS_LIMITS = { 1, 8, 27, 64, 125, 216, 343, 512 }; @@ -87,6 +68,16 @@ public class WorldAcceleratorMachine extends TieredEnergyMachine implements ICon private final int speed; private final int successLimit; private final int randRange; + @Getter + @Persisted @DescSynced + private boolean isWorkingEnabled = true; + @Getter + @Persisted @DescSynced + private boolean isRandomTickMode = true; + @Getter + @Persisted @DescSynced @RequireRerender + private boolean active = false; + private TickableSubscription tickSubs; public WorldAcceleratorMachine(IMachineBlockEntity holder, int tier, Object... args) { super(holder, tier, defaultTankSizeFunction, args); @@ -108,21 +99,20 @@ public WorldAcceleratorMachine(IMachineBlockEntity holder, int tier, Object... a } public void updateSubscription() { - if (drainEnergy(true) && isWorkingEnabled) { - subscription = subscribeServerTick(subscription, this::update); + if (isWorkingEnabled && drainEnergy(true)) { + tickSubs = subscribeServerTick(tickSubs, this::update); active = true; - } else if (subscription != null) { - subscription.unsubscribe(); - subscription = null; + } else if (tickSubs != null) { + tickSubs.unsubscribe(); + tickSubs = null; active = false; } } public void update() { - drainEnergy(false); - //handle random tick mode - if(isRandomTickMode){ + //handle random tick mode + if(isRandomTickMode) { BlockPos cornerPos = new BlockPos( getPos().getX() - getTier(), getPos().getY() - getTier(), @@ -135,59 +125,61 @@ public void update() { GTValues.RNG.nextInt(randRange), GTValues.RNG.nextInt(randRange)); if(randomPos.getY() > getLevel().getMaxBuildHeight() || randomPos.getY() < getLevel().getMinBuildHeight() || !getLevel().isLoaded(randomPos) || randomPos.equals(getPos())) continue; - if(getLevel().getBlockState(randomPos).isRandomlyTicking()) - getLevel().getBlockState(randomPos).randomTick(this.getLevel().getServer().getLevel(this.getLevel().dimension()), randomPos,GTValues.RNG); + if(getLevel().getBlockState(randomPos).isRandomlyTicking()) { + getLevel().getBlockState(randomPos).randomTick((ServerLevel) this.getLevel(), randomPos,GTValues.RNG); + } i++; } - return; - } - // else handle block entity mode - for (Direction dir : GTUtil.DIRECTIONS){ - BlockEntity blockEntity = this.getLevel().getBlockEntity(this.getPos().relative(dir)); - if(blockEntity != null && canAccelerate(blockEntity)) - tickBlockEntity(blockEntity); + } else { + // else handle block entity mode + for (Direction dir : GTUtil.DIRECTIONS) { + BlockEntity blockEntity = this.getLevel().getBlockEntity(this.getPos().relative(dir)); + if(blockEntity != null && canAccelerate(blockEntity)) { + tickBlockEntity(blockEntity); + } + } } updateSubscription(); - } public boolean drainEnergy(boolean simulate) { - long toDrain = (isRandomTickMode?RTAmperage:BEAmperage)*GTValues.V[tier]; + long toDrain = (isRandomTickMode ? randomTickAmperage : blockEntityAmperage) * GTValues.V[tier]; long resultEnergy = energyContainer.getEnergyStored() - toDrain; if (resultEnergy >= 0L && resultEnergy <= energyContainer.getEnergyCapacity()) { - energyContainer.removeEnergy(toDrain); - if(!simulate) + if(!simulate) { energyContainer.removeEnergy(toDrain); + } return true; } return false; } - private void tickBlockEntity(@NotNull T blockEntity){ - BlockPos pos = blockEntity.getBlockPos(); - BlockEntityTicker blockEntityTicker = this.getLevel().getBlockState(pos).getTicker(this.getLevel(),(BlockEntityType) blockEntity.getType()); - if(blockEntityTicker==null) return; - for (int i = 0; i < speed-1; i++) - blockEntityTicker.tick(blockEntity.getLevel(), blockEntity.getBlockPos(), blockEntity.getBlockState(), blockEntity); + private void tickBlockEntity(@NotNull T blockEntity) { + BlockPos pos = blockEntity.getBlockPos(); + //noinspection unchecked + BlockEntityTicker blockEntityTicker = this.getLevel().getBlockState(pos).getTicker(this.getLevel(), (BlockEntityType) blockEntity.getType()); + if(blockEntityTicker == null) return; + for (int i = 0; i < speed-1; i++) { + blockEntityTicker.tick(blockEntity.getLevel(), blockEntity.getBlockPos(), blockEntity.getBlockState(), blockEntity); + } } - private boolean canAccelerate(BlockEntity blockEntity){ + private boolean canAccelerate(BlockEntity blockEntity) { if(blockEntity instanceof PipeBlockEntity || blockEntity instanceof IMachineBlockEntity) return false; generateWorldAcceleratorBlacklist(); - final Class blockEntityClass = blockEntity.getClass(); - if (blacklistCache.containsKey(blockEntityClass)) + if (blacklistCache.containsKey(blockEntityClass)) { return blacklistCache.getBoolean(blockEntityClass); + } - - for (Class clazz : blacklistedClasses.values()) + for (Class clazz : blacklistedClasses.values()) { if (clazz.isAssignableFrom(blockEntityClass)) { // Is a subclass, so it cannot be accelerated blacklistCache.put(blockEntityClass, false); return false; } - + } blacklistCache.put(blockEntityClass, true); return true; @@ -196,19 +188,20 @@ private boolean canAccelerate(BlockEntity blockEntity){ @Override public void onLoad() { super.onLoad(); - if(!isRemote()) + if(!isRemote()) { energyContainer.addChangedListener(this::updateSubscription); - + } } @Override public void onUnload() { super.onUnload(); - if(subscription!=null) - unsubscribe(subscription); + if(tickSubs != null) { + tickSubs.unsubscribe(); + tickSubs = null; + } } - public void setWorkingEnabled(boolean workingEnabled) { isWorkingEnabled = workingEnabled; updateSubscription(); @@ -239,29 +232,29 @@ protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand h protected @NotNull InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, BlockHitResult hitResult) { if (!isRemote()) { isRandomTickMode = !isRandomTickMode; - playerIn.sendSystemMessage(Component.translatable(isRandomTickMode?"gtceu.machine.world_accelerator.mode_entity":"gtceu.machine.world_accelerator.mode_tile")); + playerIn.sendSystemMessage(Component.translatable(isRandomTickMode ? "gtceu.machine.world_accelerator.mode_entity" : "gtceu.machine.world_accelerator.mode_tile")); scheduleRenderUpdate(); } return InteractionResult.CONSUME; } - - private static void generateWorldAcceleratorBlacklist(){ + private static void generateWorldAcceleratorBlacklist() { if (!gatheredClasses) { - for (String name : ConfigHolder.INSTANCE.machines.worldAcceleratorBlacklist) - if (!blacklistedClasses.containsKey(name)) + for (String name : ConfigHolder.INSTANCE.machines.worldAcceleratorBlacklist) { + if (!blacklistedClasses.containsKey(name)) { try { blacklistedClasses.put(name, Class.forName(name)); } catch (ClassNotFoundException ignored) { GTCEu.LOGGER.warn("Could not find class {} for World Accelerator Blacklist!", name); } + } + } - - for(String className: blockEntityClassNamesBlackList) + for(String className: blockEntityClassNamesBlackList) { try { blacklistedClasses.put(className, Class.forName(className)); } catch (ClassNotFoundException ignored) {} - + } gatheredClasses = true; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java index 0719dd121b..425bfcc523 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; @@ -10,15 +11,19 @@ import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.machine.trait.BedrockOreMinerLogic; -import com.gregtechceu.gtceu.common.machine.trait.FluidDrillLogic; +import com.gregtechceu.gtceu.utils.FormattingUtil; import lombok.Getter; +import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.Style; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; +import java.util.Map; /** * @author Screret @@ -42,18 +47,47 @@ protected RecipeLogic createRecipeLogic(Object... args) { return new BedrockOreMinerLogic(this); } + @Override + public BedrockOreMinerLogic getRecipeLogic() { + return (BedrockOreMinerLogic) super.getRecipeLogic(); + } + public int getEnergyTier() { return Math.min(this.tier + 1 , Math.max(this.tier, getOverclockTier())); } @Override public void addDisplayText(List textList) { - super.addDisplayText(textList); if (isFormed()) { int energyContainer = getEnergyTier(); long maxVoltage = GTValues.V[energyContainer]; String voltageName = GTValues.VNF[energyContainer]; textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); + + if (getRecipeLogic().getVeinMaterials() != null) { + // Ore names + textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list").withStyle(ChatFormatting.GREEN)); + List> drilledOres = getRecipeLogic().getVeinMaterials(); + for (var entry : drilledOres) { + Component fluidInfo = entry.getValue().getLocalizedName().withStyle(ChatFormatting.GREEN); + textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", fluidInfo).withStyle(ChatFormatting.GRAY)); + } + + // Ore amount + Component amountInfo = Component.literal(FormattingUtil.formatNumbers( + getRecipeLogic().getOreToProduce() * 20L / BedrockOreMinerLogic.MAX_PROGRESS) + + "/s").withStyle(ChatFormatting.BLUE); + textList.add(Component.translatable("gtceu.multiblock.ore_rig.ore_amount", amountInfo).withStyle(ChatFormatting.GRAY)); + } else { + Component noOre = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area").withStyle(ChatFormatting.RED); + textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list").withStyle(ChatFormatting.GREEN)); + textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", noOre).withStyle(ChatFormatting.GRAY)); + } + } else { + Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip").withStyle(ChatFormatting.GRAY); + textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); } } @@ -71,9 +105,9 @@ public static int getRigMultiplier(int tier) { if (tier == GTValues.MV) return 1; if (tier == GTValues.HV) - return 16; + return 4; if (tier == GTValues.EV) - return 64; + return 16; return 1; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java index d9ec5f6e4a..6682c8057f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java @@ -163,6 +163,33 @@ public static GTRecipe recipeModifier(MetaMachine machine, @NotNull GTRecipe rec return null; } + @Override + public boolean alwaysTryModifyRecipe() { + return true; + } + + @Override + public boolean onWorking() { + GTRecipe recipe = recipeLogic.getLastRecipe(); + if (recipe.data.contains("eu_to_start")) { + long heatDiff = recipe.data.getLong("eu_to_start") - this.heat; + // if the remaining energy needed is more than stored, do not run + if (heatDiff > 0) { + recipeLogic.setWaiting(Component.translatable("gtceu.recipe_logic.insufficient_fuel")); + + // if the remaining energy needed is more than stored, do not run + if (this.energyContainer.getEnergyStored() < heatDiff) + return super.onWorking(); + // remove the energy needed + this.energyContainer.removeEnergy(heatDiff); + // increase the stored heat + this.heat += heatDiff; + this.updatePreHeatSubscription(); + } + } + return super.onWorking(); + } + public void updateHeat() { // Drain heat when the reactor is not active, is paused via soft mallet, or does not have enough energy and has fully wiped recipe progress // Don't drain heat when there is not enough energy and there is still some recipe progress, as that makes it doubly hard to complete the recipe diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index 5eded9c37a..991863342e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -207,7 +207,7 @@ private void consumeEnergy() { energyToConsume += maintenance.getNumMaintenanceProblems() * energyToConsume / 10; } - if (this.hasNotEnoughEnergy && energyContainer.getInputPerSec() > 19L * energyToConsume) { + if (this.hasNotEnoughEnergy && energyContainer.getEnergyStored() > 19L * energyToConsume) { this.hasNotEnoughEnergy = false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java index 936a3bca07..d4b6c472ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java @@ -189,7 +189,9 @@ public void setupRecipe(GTRecipe recipe) { // Do RecipeLogic#setupRecipe but without any i/o if (handleFuelRecipe()) { - machine.beforeWorking(); + if (!machine.beforeWorking(recipe)) { + return; + } recipe.preWorking(this.machine); // do not consume inputs here, consume them on completion diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java index ebf29848a0..16108261d0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java @@ -122,14 +122,15 @@ public static GTRecipe recipeModifier(MetaMachine machine, @NotNull GTRecipe rec } @Override - public void onWorking() { - super.onWorking(); + public boolean onWorking() { + boolean value = super.onWorking(); // check lubricant val totalContinuousRunningTime = recipeLogic.getTotalContinuousRunningTime(); if ((totalContinuousRunningTime == 1 || totalContinuousRunningTime % 72 == 0)) { // insufficient lubricant if (!getLubricantRecipe().handleRecipeIO(IO.IN, this)) { recipeLogic.interruptRecipe(); + return false; } } // check boost fluid @@ -137,6 +138,7 @@ public void onWorking() { var boosterRecipe = getBoostRecipe(); this.isOxygenBoosted = boosterRecipe.matchRecipe(this).isSuccess() && boosterRecipe.handleRecipeIO(IO.IN, this); } + return value; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java index ae37a8eec6..2e46caf5f7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java @@ -84,13 +84,14 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate @Override public Widget createUIWidget() { int rowSize = (int) Math.sqrt(getInventorySize()); + int xOffset = 18 * rowSize / 2; WidgetGroup group = new WidgetGroup(0, 0, 18 * rowSize, 18 * rowSize); for (int y = 0; y < rowSize; y++) { for (int x = 0; x < rowSize; x++) { int index = y * rowSize + x; group.addWidget(new SlotWidget(importItems, index, - rowSize * 9 + x * 18 - 27, y * 18, true, true) + rowSize * 9 + x * 18 - xOffset, y * 18, true, true) .setBackgroundTexture(GuiTextures.SLOT)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index b049b50301..aa1151cf4d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -2,12 +2,14 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; +import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.lowdragmc.lowdraglib.gui.widget.*; import com.lowdragmc.lowdraglib.side.fluid.FluidHelper; +import com.lowdragmc.lowdraglib.side.fluid.FluidStack; import com.lowdragmc.lowdraglib.side.fluid.FluidTransferHelper; import com.lowdragmc.lowdraglib.syncdata.ISubscription; import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; @@ -15,6 +17,7 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.Block; @@ -137,7 +140,6 @@ public void setWorkingEnabled(boolean workingEnabled) { ////////////////////////////////////// @Override public Widget createUIWidget() { - if (slots == 1) { return createSingleSlotGUI(); } else { @@ -147,16 +149,74 @@ public Widget createUIWidget() { protected Widget createSingleSlotGUI() { var group = new WidgetGroup(0, 0, 89, 63); + group.addWidget(new ImageWidget(4, 4, 81, 55, GuiTextures.DISPLAY)); + TankWidget tankWidget; + + // Add input/output-specific widgets + if (this.io == IO.OUT) { + // if this is an output hatch, assign tankWidget to the phantom widget displaying the locked fluid... + group.addWidget(tankWidget = new PhantomFluidWidget(this.tank.getLockedFluid(), 67, 40, 18, 18) + .setIFluidStackUpdater(f -> { + if (this.tank.getFluidInTank(0).getAmount() != 0) { + return; + } + if (f.isEmpty()) { + this.tank.setLocked(false); + } else { + this.tank.setLocked(true); + FluidStack newFluid = f.copy(); + newFluid.setAmount(1); + this.tank.getLockedFluid().setFluid(newFluid); + } + }).setShowAmount(true).setDrawHoverTips(false).setBackground(GuiTextures.FLUID_SLOT)); + + group.addWidget(new ToggleButtonWidget(7, 40, 18, 18, + GuiTextures.BUTTON_LOCK, this.tank::isLocked, this.tank::setLocked) + .setTooltipText("gtceu.gui.fluid_lock.tooltip") + .setShouldUseBaseBackground()) + // ...and add the actual tank widget separately. + .addWidget(new TankWidget(tank.getStorages()[0], 67, 22, 18, 18, true, io.support(IO.IN)) + .setShowAmount(true).setDrawHoverTips(false).setBackground(GuiTextures.FLUID_SLOT)); + } else { + group.addWidget(tankWidget = new TankWidget(tank.getStorages()[0], 67, 22, 18, 18, true, io.support(IO.IN)) + .setShowAmount(true).setDrawHoverTips(false).setBackground(GuiTextures.FLUID_SLOT)); + } - group.addWidget(new ImageWidget(4, 4, 81, 55, GuiTextures.DISPLAY)) - .addWidget(new LabelWidget(8, 8, "gtceu.gui.fluid_amount")) - .addWidget(new LabelWidget(8, 18, () -> String.valueOf(tank.getFluidInTank(0).getAmount())).setTextColor(-1).setDropShadow(true)) - .addWidget(new TankWidget(tank.getStorages()[0], 67, 22, true, io.support(IO.IN)).setBackground(GuiTextures.FLUID_SLOT)); + group.addWidget(new LabelWidget(8, 8, "gtceu.gui.fluid_amount")) + .addWidget(new LabelWidget(8, 18, () -> getFluidAmountText(tankWidget))) + .addWidget(new LabelWidget(8, 28, () -> getFluidNameText(tankWidget).getString())); group.setBackground(GuiTextures.BACKGROUND_INVERSE); return group; } + private Component getFluidNameText(TankWidget tankWidget) { + Component translation; + if (!tank.getFluidInTank(tankWidget.getTank()).isEmpty()) { + translation = tank.getFluidInTank(tankWidget.getTank()).getDisplayName(); + } else { + translation = this.tank.getLockedFluid().getFluid().getDisplayName(); + } + return translation; + } + + private String getFluidAmountText(TankWidget tankWidget) { + String fluidAmount = ""; + if (!tank.getFluidInTank(tankWidget.getTank()).isEmpty()) { + fluidAmount = getFormattedFluidAmount(tank.getFluidInTank(tankWidget.getTank())); + } else { + // Display Zero to show information about the locked fluid + if (!this.tank.getLockedFluid().getFluid().isEmpty()) { + fluidAmount = "0"; + } + } + return fluidAmount; + } + + public String getFormattedFluidAmount(FluidStack fluidStack) { + return String.format("%,d", fluidStack.isEmpty() ? 0 : fluidStack.getAmount()); + } + protected Widget createMultiSlotGUI() { int rowSize = (int) Math.sqrt(slots); int colSize = rowSize; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/KineticPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/KineticPartMachine.java index 98720ac072..a177f68116 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/KineticPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/KineticPartMachine.java @@ -2,6 +2,8 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; +import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.common.machine.kinetic.IKineticMachine; import com.gregtechceu.gtceu.common.machine.trait.NotifiableStressTrait; @@ -62,6 +64,32 @@ public void onRotated(Direction oldFacing, Direction newFacing) { } } + @Override + public boolean onWaiting(IWorkableMultiController controller) { + getKineticHolder().stopWorking(); + return super.onWaiting(controller); + } + + @Override + public boolean onPaused(IWorkableMultiController controller) { + getKineticHolder().stopWorking(); + return super.onPaused(controller); + } + + @Override + public void removedFromController(IMultiController controller) { + super.removedFromController(controller); + getKineticHolder().stopWorking(); + } + + @Override + public void setWorkingEnabled(boolean workingEnabled) { + if (!workingEnabled) { + getKineticHolder().stopWorking(); + } + super.setWorkingEnabled(workingEnabled); + } + ////////////////////////////////////// //********* GUI *********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java index 93d16c2899..4c7bc571c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java @@ -16,6 +16,7 @@ import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; import com.lowdragmc.lowdraglib.gui.widget.Widget; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; +import com.lowdragmc.lowdraglib.misc.ItemStackTransfer; import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; @@ -118,7 +119,12 @@ public ManagedFieldHolder getFieldHolder() { private class ObjectHolderHandler extends NotifiableItemStackHandler { public ObjectHolderHandler(MetaMachine metaTileEntity) { - super(metaTileEntity, 2, IO.IN, IO.BOTH); + super(metaTileEntity, 2, IO.IN, IO.BOTH, size -> new ItemStackTransfer(size) { + @Override + public int getSlotLimit(int slot) { + return 1; + } + }); } // only allow a single item, no stack size diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java index 492258a094..a96aae70b2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java @@ -51,14 +51,13 @@ public boolean isRecipeAvailable(@NotNull GTRecipe recipe, @NotNull Collection fluidStack.getFluid() == GTMaterials.Water.getFluid()); + return super.createTank(initialCapacity, slots).setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Water.getFluidTag())); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 57e644d1d9..9805bf3dec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -141,7 +141,7 @@ private void updateRotorSpeed() { } @Override - public void onWorking(IWorkableMultiController controller) { + public boolean onWorking(IWorkableMultiController controller) { if (getRotorSpeed() < getMaxRotorHolderSpeed()) { setRotorSpeed(getRotorSpeed() + SPEED_INCREMENT); updateRotorSubscription(); @@ -156,6 +156,7 @@ public void onWorking(IWorkableMultiController controller) { } damageRotor(1 + numMaintenanceProblems); } + return true; } public int getTierDifference() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java index 9a140ec9a6..73763be437 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java @@ -175,11 +175,13 @@ protected int getCoolDownRate() { } @Override - public void onWorking() { + public boolean onWorking() { + boolean value = super.onWorking(); if (currentTemperature < getMaxTemperature()) { currentTemperature = Math.max(1, currentTemperature); updateSteamSubscription(); } + return value; } @Nullable diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java index f032a03194..0b28a81b01 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java @@ -41,6 +41,9 @@ public LongDistanceEndpointMachine(IMachineBlockEntity holder, LongDistancePipeT } public void updateNetwork() { + if (this.getLevel().isClientSide) { + return; + } LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); if (network != null) { // manually remove this endpoint from the network @@ -72,6 +75,12 @@ public void setFrontFacing(Direction frontFacing) { } } + @Override + public void onLoad() { + super.onLoad(); + this.updateNetwork(); + } + @Override public void onUnload() { super.onUnload(); @@ -89,9 +98,10 @@ public void onUnload() { @Override public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { - if (!placed || getLevel() == null || getLevel().isClientSide) return; + if (!placed || getLevel().isClientSide) return; List networks = findNetworks(); + this.updateNetwork(); LongDistanceNetwork network = LongDistanceNetwork.get(getLevel(), getPos()); if (network == null) { // shouldn't happen @@ -114,6 +124,12 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { } } + @Override + public void notifyBlockUpdate() { + super.notifyBlockUpdate(); + this.updateNetwork(); + } + private List findNetworks() { List networks = new ArrayList<>(); LongDistanceNetwork network; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java index 4e0b080d7a..349ae415bc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java @@ -65,6 +65,7 @@ public class QuantumTankMachine extends TieredMachine implements IAutoOutputFlui protected boolean allowInputFromOutputSideFluids; @Getter private final long maxStoredFluids; + @Getter @Persisted @DropSaved protected final NotifiableFluidTank cache; @Nullable @@ -75,15 +76,12 @@ public class QuantumTankMachine extends TieredMachine implements IAutoOutputFlui protected FluidStack stored = FluidStack.empty(); @Persisted @Getter @Setter private boolean isVoiding; - @Persisted @DescSynced @Getter - protected final FluidStorage lockedFluid; public QuantumTankMachine(IMachineBlockEntity holder, int tier, long maxStoredFluids, Object... args) { super(holder, tier); this.outputFacingFluids = getFrontFacing().getOpposite(); this.maxStoredFluids = maxStoredFluids; this.cache = createCacheFluidHandler(args); - this.lockedFluid = new FluidStorage(FluidHelper.getBucket()); } ////////////////////////////////////// @@ -120,7 +118,7 @@ private long handleVoiding(long filled, FluidStack resource) { return filled; } - }.setFilter(fluidStack -> !isLocked() || lockedFluid.getFluid().isFluidEqual(fluidStack)); + }; } @Override @@ -289,16 +287,18 @@ protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand } public boolean isLocked() { - return !lockedFluid.getFluid().isEmpty(); + return cache.isLocked(); } protected void setLocked(boolean locked) { if (!stored.isEmpty() && locked) { var copied = stored.copy(); - copied.setAmount(lockedFluid.getCapacity()); - lockedFluid.setFluid(copied); + copied.setAmount(cache.getLockedFluid().getCapacity()); + cache.getLockedFluid().setFluid(copied); + cache.setLocked(true); } else if (!locked) { - lockedFluid.setFluid(FluidStack.empty()); + cache.getLockedFluid().setFluid(FluidStack.empty()); + cache.setLocked(false); } } @@ -314,7 +314,7 @@ public Widget createUIWidget() { ).setTextColor(-1).setDropShadow(true)) .addWidget(new TankWidget(cache.getStorages()[0], 68, 23, true, true) .setBackground(GuiTextures.FLUID_SLOT)) - .addWidget(new PhantomFluidWidget(lockedFluid, 68, 41, 18, 18) + .addWidget(new PhantomFluidWidget(cache.getLockedFluid(), 68, 41, 18, 18) .setShowAmount(false) .setBackground(ColorPattern.T_GRAY.rectTexture())) .addWidget(new ToggleButtonWidget(4, 41, 18, 18, diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java index 4b5ff252f4..313bc18bd8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BedrockOreMinerLogic.java @@ -71,12 +71,15 @@ public void findAndHandleRecipe() { @Nullable private GTRecipe getOreMinerRecipe() { if (getMachine().getLevel() instanceof ServerLevel serverLevel && veinMaterials != null) { - var data = BedrockOreVeinSavedData.getOrCreate(serverLevel); - Material material = veinMaterials.get(GTUtil.getRandomItem(veinMaterials, veinMaterials.size())).getValue(); - ItemStack stack = ChemicalHelper.get(TagPrefix.get(ConfigHolder.INSTANCE.machines.bedrockOreDropTagPrefix), material, getOreToProduce(data.getOreVeinWorldEntry(getChunkX(), getChunkZ()))); - if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.crushed, material, getOreToProduce(data.getOreVeinWorldEntry(getChunkX(), getChunkZ()))); // backup 1: crushed; if raw ore doesn't exist - if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.gem, material, getOreToProduce(data.getOreVeinWorldEntry(getChunkX(), getChunkZ()))); // backup 2: gem; if crushed ore doesn't exist - if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.ore, material, getOreToProduce(data.getOreVeinWorldEntry(getChunkX(), getChunkZ()))); // backup 3: just fallback to normal ore... + Material material = veinMaterials.get(GTUtil.getRandomItem(serverLevel.random, veinMaterials, veinMaterials.size())).getValue(); + ItemStack stack = ChemicalHelper.get(TagPrefix.get(ConfigHolder.INSTANCE.machines.bedrockOreDropTagPrefix), material, getOreToProduce()); + if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.crushed, material, getOreToProduce()); // backup 1: crushed; if raw ore doesn't exist + if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.gem, material, getOreToProduce()); // backup 2: gem; if crushed ore doesn't exist + if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.ore, material, getOreToProduce()); // backup 3: normal ore; if gem doesn't exist. + if (stack.isEmpty()) stack = ChemicalHelper.get(TagPrefix.dust, material, getOreToProduce()); // backup 4: fallback to dust + if (stack.isEmpty()) { + return null; + } var recipe = GTRecipeBuilder.ofRaw() .duration(MAX_PROGRESS) .EUt(GTValues.VA[getMachine().getEnergyTier()]) @@ -99,7 +102,7 @@ private int getOreToProduce(OreVeinWorldEntry entry) { int produced = Math.max(depletedYield, regularYield * remainingOperations / BedrockOreVeinSavedData.MAXIMUM_VEIN_OPERATIONS); produced *= BedrockOreMinerMachine.getRigMultiplier(getMachine().getTier()); - // Overclocks produce 50% more fluid + // Overclocks produce 50% more ore if (isOverclocked()) { produced = produced * 3 / 2; } @@ -108,6 +111,14 @@ private int getOreToProduce(OreVeinWorldEntry entry) { return 0; } + public int getOreToProduce() { + if (getMachine().getLevel() instanceof ServerLevel serverLevel && veinMaterials != null) { + var data = BedrockOreVeinSavedData.getOrCreate(serverLevel); + return getOreToProduce(data.getOreVeinWorldEntry(getChunkX(), getChunkZ())); + } + return 0; + } + @Override public void onRecipeFinish() { machine.afterWorking(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java index 244f124a35..7fc38464d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java @@ -71,11 +71,15 @@ public void serverTick() { } // increase progress if (progress++ < getMaxProgress()) { - machine.onWorking(); + if (!machine.onWorking()) { + this.interruptRecipe(); + } return; } progress = 0; - machine.beforeWorking(); + if (!machine.beforeWorking(null)) { + return; + } adjustCleanAmount(false); setStatus(Status.WORKING); } else { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/NotifiableStressTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/NotifiableStressTrait.java index fb2abcc427..9905c424d7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/NotifiableStressTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/NotifiableStressTrait.java @@ -83,6 +83,11 @@ public List getContents() { return List.of(available); } + @Override + public double getTotalContentAmount() { + return available; + } + @Override public void preWorking(IRecipeCapabilityHolder holder, IO io, GTRecipe recipe) { if (machine instanceof IKineticMachine kineticMachine) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java index e4c9b10fbc..9751437118 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java @@ -132,7 +132,7 @@ public MinerLogic(@NotNull IRecipeLogicMachine machine, int fortune, int speed, this.isDone = false; this.pickaxeTool = GTItems.TOOL_ITEMS.get(GTMaterials.Neutronium, GTToolType.PICKAXE).get().get(); this.pickaxeTool.enchant(Enchantments.BLOCK_FORTUNE, fortune); - this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), HashMap::new); + this.capabilitiesProxy = Tables.newCustomTable(new EnumMap<>(IO.class), IdentityHashMap::new); this.inputItemHandler = new ItemRecipeHandler(IO.IN, machine.getRecipeType().getMaxInputs(ItemRecipeCapability.CAP)); this.outputItemHandler = new ItemRecipeHandler(IO.OUT, machine.getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP)); this.inputEnergyHandler = new IgnoreEnergyRecipeHandler(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/ResearchCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/ResearchCondition.java index 551fae1400..f91fcd5722 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/ResearchCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/ResearchCondition.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.recipe.RecipeCondition; import com.gregtechceu.gtceu.api.recipe.ResearchData; import lombok.AllArgsConstructor; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; @@ -43,6 +44,17 @@ public RecipeCondition deserialize(@NotNull JsonObject config) { return this; } + public void toNetwork(FriendlyByteBuf buf) { + super.toNetwork(buf); + this.data.toNetwork(buf); + } + + public RecipeCondition fromNetwork(FriendlyByteBuf buf) { + super.fromNetwork(buf); + this.data = ResearchData.fromNetwork(buf); + return this; + } + @Override public boolean test(@NotNull GTRecipe recipe, @NotNull RecipeLogic recipeLogic) { return true; diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 618155b0e2..dfb721c6a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -192,7 +192,6 @@ public static class OreVeinConfigs { "Default: 3" }) public int oreVeinGridSize = 3; - @Configurable @Configurable.Range(min = 0, max = 32 * 16) @Configurable.Comment({ @@ -200,23 +199,18 @@ public static class OreVeinConfigs { "Default: 12" }) public int oreVeinRandomOffset = 12; - @Configurable @Configurable.Comment({"Prevents regular vanilla ores from being generated outside GregTech ore veins", "Default: true"}) public boolean removeVanillaOreGen = true; - @Configurable @Configurable.Comment({"Prevents vanilla's large ore veins from being generated", "Default: true"}) public boolean removeVanillaLargeOreVeins = true; - - @Configurable - @Configurable.Comment({"Multiplier to bedrock ore generation amount", "Default: 1.0f"}) - public float bedrockOreMultiplier = 1.0f; + @Configurable.Comment({"Distance between bedrock ore veins in chunks, if enabled.", "Default: 16"}) + public int bedrockOreDistance = 16; @Configurable @Configurable.Comment({"Make bedrock ore/fluid veins infinite?", "Default: false"}) public boolean infiniteBedrockOresFluids = false; - @Configurable @Configurable.Comment({ "Sets the maximum number of chunks that may be cached for ore vein generation.", @@ -225,7 +219,6 @@ public static class OreVeinConfigs { "Default: 512 (requires restarting the server / re-opening the world)" }) public int oreGenerationChunkCacheSize = 512; - @Configurable @Configurable.Comment({ "Sets the maximum number of chunks for which ore indicators may be cached.", @@ -241,7 +234,6 @@ public static class MachineConfigs { @Configurable.Comment({"Whether insufficient energy supply should reset Machine recipe progress to zero.", "If true, progress will reset.", "If false, progress will decrease to zero with 2x speed", "Default: false"}) public boolean recipeProgressLowEnergy = false; - @Configurable @Configurable.Comment({"Whether to require a Wrench, Wirecutter, or other GregTech tools to break machines, casings, wires, and more.", "Default: false"}) public boolean requireGTToolsForBlocks = false; diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/kjs/RecipeEventJSMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/kjs/RecipeEventJSMixin.java index f1b8c578f1..c40899d1d1 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/kjs/RecipeEventJSMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/kjs/RecipeEventJSMixin.java @@ -62,6 +62,7 @@ public void injectPost(RecipeManager recipeManager, Map resourceList, ResourceManager resourceManager, ProfilerFiller profiler) { + if (GTRegistries.BEDROCK_ORE_DEFINITIONS.isFrozen()) { + GTRegistries.BEDROCK_ORE_DEFINITIONS.unfreeze(); + } + GTRegistries.BEDROCK_ORE_DEFINITIONS.registry().clear(); + + AddonFinder.getAddons().forEach(IGTAddon::registerFluidVeins); + ModLoader.get().postEvent(new GTCEuAPI.RegisterEvent<>(GTRegistries.BEDROCK_ORE_DEFINITIONS, BedrockOreDefinition.class)); + if (GTCEu.isKubeJSLoaded()) { + RunKJSEventInSeparateClassBecauseForgeIsDumb.fireKJSEvent(); + } + RegistryOps ops = RegistryOps.create(JsonOps.INSTANCE, GTRegistries.builtinRegistry()); + for(Map.Entry entry : resourceList.entrySet()) { + ResourceLocation location = entry.getKey(); + + try { + BedrockOreDefinition bedrockOre = fromJson(location, GsonHelper.convertToJsonObject(entry.getValue(), "top element"), ops); + if (bedrockOre == null) { + LOGGER.info("Skipping loading bedrock ore vein {} as it's serializer returned null", location); + } + GTRegistries.BEDROCK_ORE_DEFINITIONS.registerOrOverride(location, bedrockOre); + } catch (IllegalArgumentException | JsonParseException jsonParseException) { + LOGGER.error("Parsing error loading bedrock ore vein {}", location, jsonParseException); + } + } + + if (!GTRegistries.BEDROCK_ORE_DEFINITIONS.isFrozen()) { + GTRegistries.BEDROCK_ORE_DEFINITIONS.freeze(); + } + } + + public static BedrockOreDefinition fromJson(ResourceLocation id, JsonObject json, RegistryOps ops) { + return BedrockOreDefinition.FULL_CODEC.parse(ops, json).getOrThrow(false, LOGGER::error); + } + + /** + * Holy shit this is dumb, thanks forge for trying to classload things that are never called! + */ + public static final class RunKJSEventInSeparateClassBecauseForgeIsDumb { + public static void fireKJSEvent() { + GTCEuServerEvents.BEDROCK_ORE_VEIN_MODIFICATION.post(ScriptType.SERVER, new GTBedrockOreVeinEventJS()); + } + } +} + diff --git a/src/main/java/com/gregtechceu/gtceu/data/loader/FluidVeinLoader.java b/src/main/java/com/gregtechceu/gtceu/data/loader/FluidVeinLoader.java index fbfe23c408..4c327b4998 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/loader/FluidVeinLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/loader/FluidVeinLoader.java @@ -39,11 +39,14 @@ public class FluidVeinLoader extends SimpleJsonResourceReloadListener { public FluidVeinLoader() { super(GSON_INSTANCE, FOLDER); + INSTANCE = this; } @Override protected void apply(Map resourceList, ResourceManager resourceManager, ProfilerFiller profiler) { - GTRegistries.BEDROCK_FLUID_DEFINITIONS.unfreeze(); + if (GTRegistries.BEDROCK_FLUID_DEFINITIONS.isFrozen()) { + GTRegistries.BEDROCK_FLUID_DEFINITIONS.unfreeze(); + } GTRegistries.BEDROCK_FLUID_DEFINITIONS.registry().clear(); GTBedrockFluids.init(); @@ -60,24 +63,20 @@ protected void apply(Map resourceList, ResourceMa BedrockFluidDefinition fluid = fromJson(location, GsonHelper.convertToJsonObject(entry.getValue(), "top element"), ops); if (fluid == null) { LOGGER.info("Skipping loading fluid vein {} as it's serializer returned null", location); - } /*else if(fluid.getVeinGenerator() instanceof NoopVeinGenerator) { - LOGGER.info("Removing fluid vein {} as it's generator was marked as no-operation", location); - GTRegistries.BEDROCK_FLUID_DEFINITIONS.remove(location); - }*/else if (GTRegistries.BEDROCK_FLUID_DEFINITIONS.containKey(location)) { - GTRegistries.BEDROCK_FLUID_DEFINITIONS.replace(location, fluid); - } else { - GTRegistries.BEDROCK_FLUID_DEFINITIONS.register(location, fluid); } + GTRegistries.BEDROCK_FLUID_DEFINITIONS.registerOrOverride(location, fluid); } catch (IllegalArgumentException | JsonParseException jsonParseException) { LOGGER.error("Parsing error loading ore vein {}", location, jsonParseException); } } - GTRegistries.BEDROCK_FLUID_DEFINITIONS.freeze(); + if (!GTRegistries.BEDROCK_FLUID_DEFINITIONS.isFrozen()) { + GTRegistries.BEDROCK_FLUID_DEFINITIONS.freeze(); + } } public static BedrockFluidDefinition fromJson(ResourceLocation id, JsonObject json, RegistryOps ops) { - return BedrockFluidDefinition.FULL_CODEC.decode(ops, json).map(Pair::getFirst).getOrThrow(false, LOGGER::error); + return BedrockFluidDefinition.FULL_CODEC.parse(ops, json).getOrThrow(false, LOGGER::error); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/data/loader/OreDataLoader.java b/src/main/java/com/gregtechceu/gtceu/data/loader/OreDataLoader.java index 02805989e0..d1e0d9e4e3 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/loader/OreDataLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/loader/OreDataLoader.java @@ -39,11 +39,15 @@ public class OreDataLoader extends SimpleJsonResourceReloadListener { public OreDataLoader() { super(GSON_INSTANCE, FOLDER); + INSTANCE = this; } @Override protected void apply(Map resourceList, ResourceManager resourceManager, ProfilerFiller profiler) { - GTRegistries.ORE_VEINS.unfreeze(); + // Check condition in cause of reload failing which makes the registry not freeze. + if (GTRegistries.ORE_VEINS.isFrozen()) { + GTRegistries.ORE_VEINS.unfreeze(); + } GTRegistries.ORE_VEINS.registry().clear(); GTOres.init(); @@ -76,7 +80,9 @@ protected void apply(Map resourceList, ResourceMa buildVeinGenerator(); GTOres.updateLargestVeinSize(); - GTRegistries.ORE_VEINS.freeze(); + if (!GTRegistries.ORE_VEINS.isFrozen()) { + GTRegistries.ORE_VEINS.freeze(); + } } public static void buildVeinGenerator() { @@ -92,7 +98,7 @@ public static void buildVeinGenerator() { } public static GTOreDefinition fromJson(ResourceLocation id, JsonObject json, RegistryOps ops) { - return GTOreDefinition.FULL_CODEC.decode(ops, json).map(Pair::getFirst).getOrThrow(false, LOGGER::error); + return GTOreDefinition.FULL_CODEC.parse(ops, json).getOrThrow(false, LOGGER::error); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/data/loader/forge/FluidVeinLoaderImpl.java b/src/main/java/com/gregtechceu/gtceu/data/loader/forge/FluidVeinLoaderImpl.java deleted file mode 100644 index 087a906244..0000000000 --- a/src/main/java/com/gregtechceu/gtceu/data/loader/forge/FluidVeinLoaderImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.gregtechceu.gtceu.data.loader.forge; - -import com.gregtechceu.gtceu.data.loader.FluidVeinLoader; - -public class FluidVeinLoaderImpl extends FluidVeinLoader { - - public FluidVeinLoaderImpl() { - super(); - FluidVeinLoader.INSTANCE = this; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/data/loader/forge/OreDataLoaderImpl.java b/src/main/java/com/gregtechceu/gtceu/data/loader/forge/OreDataLoaderImpl.java deleted file mode 100644 index 5d26d5e40b..0000000000 --- a/src/main/java/com/gregtechceu/gtceu/data/loader/forge/OreDataLoaderImpl.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.gregtechceu.gtceu.data.loader.forge; - -import com.gregtechceu.gtceu.data.loader.OreDataLoader; - -public class OreDataLoaderImpl extends OreDataLoader { - public OreDataLoaderImpl() { - super(); - OreDataLoader.INSTANCE = this; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/CustomTags.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/CustomTags.java index 6a0b24eb77..471cde09bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/CustomTags.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/CustomTags.java @@ -60,8 +60,7 @@ public class CustomTags { // Platform-dependent tags - public static final TagKey TAG_WOODEN_CHESTS = TagUtil.createItemTag("chests/wooden"); - + public static final TagKey RUBBER_LOGS_ITEM = TagUtil.createModItemTag("logs/rubber"); public static final TagKey NEEDS_WOOD_TOOL = TagUtil.createBlockTag("needs_wood_tool"); public static final TagKey NEEDS_GOLD_TOOL = TagUtil.createBlockTag("needs_gold_tool"); public static final TagKey NEEDS_NETHERITE_TOOL = TagUtil.createBlockTag("needs_netherite_tool"); @@ -87,6 +86,8 @@ public class CustomTags { public static final TagKey CREATE_SEATS = TagUtil.optionalTag(Registry.BLOCK, new ResourceLocation(GTValues.MODID_CREATE, "seats")); public static final TagKey ORE_BLOCKS = TagUtil.createBlockTag("ores"); + public static final TagKey RUBBER_LOGS_BLOCK = TagUtil.createModBlockTag("logs/rubber"); + public static final TagKey WOODEN_CHESTS = TagUtil.createItemTag("chests/wooden"); public static final TagKey IS_SWAMP = TagUtil.createTag(BuiltinRegistries.BIOME, "is_swamp", false); public static final TagKey IS_SANDY = TagUtil.createModTag(BuiltinRegistries.BIOME, "is_sandy"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/WoodTypeEntry.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/WoodTypeEntry.java new file mode 100644 index 0000000000..855a79c671 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/WoodTypeEntry.java @@ -0,0 +1,511 @@ +package com.gregtechceu.gtceu.data.recipe; + +import com.google.common.base.Preconditions; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.stack.UnificationEntry; +import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraftforge.common.Tags; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Entry for a wood type and all of its associated items + */ +public final class WoodTypeEntry { + + @NotNull + public final String modid; + @NotNull + public final String woodName; + @Nullable + public final Item log; + @Nullable + public final Item strippedLog; + @Nullable + public final Item wood; + @Nullable + public final Item strippedWood; + /** + * if log -> charcoal recipes should be removed + */ + public final boolean removeCharcoalRecipe; + /** + * if log -> charcoal recipes should be added + */ + public final boolean addCharcoalRecipe; + @NotNull + public final Item planks; + @Nullable + public final String planksRecipeName; + @Nullable + public final Item door; + @Nullable + public final String doorRecipeName; + @Nullable + public final Item trapdoor; + @Nullable + public final String trapdoorRecipeName; + @Nullable + public final Item slab; + @Nullable + public final String slabRecipeName; + public final boolean addSlabCraftingRecipe; + public final Item fence; + @Nullable + public final String fenceRecipeName; + @Nullable + public final Item fenceGate; + @Nullable + public final String fenceGateRecipeName; + @Nullable + public final Item stairs; + @Nullable + public final String stairsRecipeName; + public final boolean addStairsCraftingRecipe; + @Nullable + public final Item boat; + @Nullable + public final String boatRecipeName; + public final Material material; + + public final boolean addLogOreDict; + public final boolean addPlanksOreDict; + public final boolean addDoorsOreDict; + public final boolean addSlabsOreDict; + public final boolean addFencesOreDict; + public final boolean addFenceGatesOreDict; + public final boolean addStairsOreDict; + public final boolean addPlanksUnificationInfo; + public final boolean addDoorsUnificationInfo; + public final boolean addSlabsUnificationInfo; + public final boolean addFencesUnificationInfo; + public final boolean addFenceGatesUnificationInfo; + public final boolean addStairsUnificationInfo; + public final boolean addBoatsUnificationInfo; + + /** + * @see WoodTypeEntry.Builder + */ + private WoodTypeEntry(@NotNull String modid, @NotNull String woodName, + @Nullable Item log, @Nullable Item strippedLog, + @Nullable Item wood, @Nullable Item strippedWood, + boolean removeCharcoalRecipe, boolean addCharcoalRecipe, + @NotNull Item planks, @Nullable String planksRecipeName, + @Nullable Item door, @Nullable String doorRecipeName, + @Nullable Item trapdoor, @Nullable String trapdoorRecipeName, + @Nullable Item slab, @Nullable String slabRecipeName, boolean addSlabCraftingRecipe, + @Nullable Item fence, @Nullable String fenceRecipeName, + @Nullable Item fenceGate, @Nullable String fenceGateRecipeName, + @Nullable Item stairs, @Nullable String stairsRecipeName, boolean addStairsCraftingRecipe, + @NotNull Item boat, @Nullable String boatRecipeName, + @Nullable Material material, + boolean addLogOreDict, boolean addPlanksOreDict, boolean addDoorsOreDict, boolean addSlabsOreDict, + boolean addFencesOreDict, boolean addFenceGatesOreDict, boolean addStairsOreDict, + boolean addPlanksUnificationInfo, boolean addDoorsUnificationInfo, + boolean addSlabsUnificationInfo, boolean addFencesUnificationInfo, + boolean addFenceGatesUnificationInfo, boolean addStairsUnificationInfo, + boolean addBoatsUnificationInfo) { + this.modid = modid; + this.woodName = woodName; + this.log = log; + this.strippedLog = strippedLog; + this.wood = wood; + this.strippedWood = strippedWood; + this.removeCharcoalRecipe = removeCharcoalRecipe; + this.addCharcoalRecipe = addCharcoalRecipe; + this.planks = planks; + this.planksRecipeName = planksRecipeName; + this.door = door; + this.doorRecipeName = doorRecipeName; + this.trapdoor = trapdoor; + this.trapdoorRecipeName = trapdoorRecipeName; + this.slab = slab; + this.slabRecipeName = slabRecipeName; + this.addSlabCraftingRecipe = addSlabCraftingRecipe; + this.fence = fence; + this.fenceRecipeName = fenceRecipeName; + this.fenceGate = fenceGate; + this.fenceGateRecipeName = fenceGateRecipeName; + this.stairs = stairs; + this.stairsRecipeName = stairsRecipeName; + this.addStairsCraftingRecipe = addStairsCraftingRecipe; + this.boat = boat; + this.boatRecipeName = boatRecipeName; + this.material = material != null ? material : GTMaterials.Wood; + + this.addLogOreDict = addLogOreDict; + this.addPlanksOreDict = addPlanksOreDict; + this.addDoorsOreDict = addDoorsOreDict; + this.addSlabsOreDict = addSlabsOreDict; + this.addFencesOreDict = addFencesOreDict; + this.addFenceGatesOreDict = addFenceGatesOreDict; + this.addStairsOreDict = addStairsOreDict; + this.addPlanksUnificationInfo = addPlanksUnificationInfo; + this.addDoorsUnificationInfo = addDoorsUnificationInfo; + this.addSlabsUnificationInfo = addSlabsUnificationInfo; + this.addFencesUnificationInfo = addFencesUnificationInfo; + this.addFenceGatesUnificationInfo = addFenceGatesUnificationInfo; + this.addStairsUnificationInfo = addStairsUnificationInfo; + this.addBoatsUnificationInfo = addBoatsUnificationInfo; + } + + @NotNull + public TagKey getStick() { + if (this.material == GTMaterials.Wood) { + return Tags.Items.RODS_WOODEN; + } else { + //noinspection DataFlowIssue is valid. + return ChemicalHelper.getTag(TagPrefix.rod, this.material); + } + } + + public static class Builder { + + private final String modid; + private final String woodName; + + private Item log = null; + private Item strippedLog = null; + private Item wood = null; + private Item strippedWood = null; + private boolean removeCharcoalRecipe; + private boolean addCharcoalRecipe; + private Item planks = null; + private String planksRecipeName; + private Item door = null; + private String doorRecipeName; + private Item trapdoor = null; + private String trapdoorRecipeName; + private Item slab = null; + private String slabRecipeName; + private boolean addSlabsCraftingRecipe; + private Item fence = null; + private String fenceRecipeName; + private Item fenceGate = null; + private String fenceGateRecipeName; + private Item stairs = null; + private String stairsRecipeName; + private boolean addStairsCraftingRecipe; + private Item boat = null; + private String boatRecipeName; + @Nullable + private Material material = null; + + private boolean addLogOreDict; + private boolean addPlanksOreDict; + private boolean addDoorsOreDict; + private boolean addSlabsOreDict; + private boolean addFencesOreDict; + private boolean addFenceGatesOreDict; + private boolean addStairsOreDict; + + private boolean addPlanksUnificationInfo; + private boolean addDoorsUnificationInfo; + private boolean addSlabsUnificationInfo; + private boolean addFencesUnificationInfo; + private boolean addFenceGatesUnificationInfo; + private boolean addStairsUnificationInfo; + private boolean addBoatsUnificationInfo; + + /** + * @param modid the modid adding recipes for the wood + * @param woodName the name of the wood + */ + public Builder(@NotNull String modid, @NotNull String woodName) { + Preconditions.checkArgument(!modid.isEmpty(), "Modid cannot be empty."); + Preconditions.checkArgument(!woodName.isEmpty(), "Wood name cannot be empty."); + this.modid = modid; + this.woodName = woodName; + } + + /** + * Add an entry for logs + * + * @param log the log to add + * @return this + */ + public Builder log(@NotNull Item log) { + this.log = log; + return this; + } + + /** + * Add an entry for stripped logs + * + * @param strippedLog the stripped log to add + * @return this + */ + public Builder strippedLog(@NotNull Item strippedLog) { + this.strippedLog = strippedLog; + return this; + } + + /** + * Add an entry for wood (the 6-sided log block) + * + * @param wood the wood to add + * @return this + */ + public Builder wood(@NotNull Item wood) { + this.wood = wood; + return this; + } + + /** + * Add an entry for logs + * + * @param strippedWood the stripped wood to add + * @return this + */ + public Builder strippedWood(@NotNull Item strippedWood) { + this.strippedWood = strippedWood; + return this; + } + + /** + * Remove log -> charcoal recipe if the config is enabled + * + * @return this + */ + public Builder removeCharcoalRecipe() { + this.removeCharcoalRecipe = true; + return this; + } + + /** + * Add log -> charcoal recipe if the config is disabled + * + * @return this + */ + public Builder addCharcoalRecipe() { + this.addCharcoalRecipe = true; + return this; + } + + /** + * Add an entry for planks + * + * @param planks the planks to add + * @param planksRecipeName the recipe for crafting the planks + * @return this + */ + public Builder planks(@NotNull Item planks, @Nullable String planksRecipeName) { + this.planks = planks; + this.planksRecipeName = planksRecipeName; + return this; + } + + /** + * Add an entry for a door + * + * @param door the door to add + * @param doorRecipeName the recipe name for crafting the door + * @return this + */ + public Builder door(@NotNull Item door, @Nullable String doorRecipeName) { + this.door = door; + this.doorRecipeName = doorRecipeName; + return this; + } + + /** + * Add an entry for a trapdoor + * + * @param trapdoor the trapdoor to add + * @param trapdoorRecipeName the recipe name for crafting the trapdoor + * @return this + */ + public Builder trapdoor(@NotNull Item trapdoor, @Nullable String trapdoorRecipeName) { + this.trapdoor = trapdoor; + this.trapdoorRecipeName = trapdoorRecipeName; + return this; + } + + /** + * Add an entry for a slab + * + * @param slab the slab to add + * @return this + */ + public Builder slab(@NotNull Item slab, @Nullable String slabRecipeName) { + this.slab = slab; + this.slabRecipeName = slabRecipeName; + return this; + } + + /** + * Add crafting recipe for slab + * + * @return this + */ + public Builder addSlabRecipe() { + this.addSlabsCraftingRecipe = true; + return this; + } + + /** + * Add an entry for a fence + * + * @param fence the fence to add + * @param fenceRecipeName the recipe name for crafting the fence + * @return this + */ + public Builder fence(@NotNull Item fence, @Nullable String fenceRecipeName) { + this.fence = fence; + this.fenceRecipeName = fenceRecipeName; + return this; + } + + /** + * Add an entry for a fence gate + * + * @param fenceGate the fence gate to add + * @param fenceGateRecipeName the recipe name for crafting the fence gate + * @return this + */ + public Builder fenceGate(@NotNull Item fenceGate, @Nullable String fenceGateRecipeName) { + this.fenceGate = fenceGate; + this.fenceGateRecipeName = fenceGateRecipeName; + return this; + } + + /** + * Add an entry for stairs + * + * @param stairs the stairs to add + * @param stairsRecipeName the recipe name for crafting the stairs + * @return this + */ + public Builder stairs(@NotNull Item stairs, @Nullable String stairsRecipeName) { + this.stairs = stairs; + this.stairsRecipeName = stairsRecipeName; + return this; + } + + /** + * Add crafting recipe for stairs + * + * @return this + */ + public Builder addStairsRecipe() { + this.addStairsCraftingRecipe = true; + return this; + } + + /** + * Add an entry for a boat + * + * @param boat the boat to add + * @param boatRecipeName the recipe name for crafting the boat + * @return this + */ + public Builder boat(@NotNull Item boat, @Nullable String boatRecipeName) { + this.boat = boat; + this.boatRecipeName = boatRecipeName; + return this; + } + + /** + * Specify material for wood entry. If not provided, {@link GTMaterials#Wood} will be used + * + * @param material material for wood entry + * @return this + */ + public Builder material(@NotNull Material material) { + this.material = material; + return this; + } + + /** + * Register all possible ore dictionary for wood entry. + * + * @return this + */ + public Builder registerAllTags() { + return registerTag(true, true, true, true, true, true, true); + } + + /** + * Register all possible unification info for wood entry. + * + * @return this + */ + public Builder registerAllUnificationInfo() { + return registerUnificationInfo(true, true, true, true, true, true, true); + } + + /** + * Register ore dictionary for wood entry. + * + * @param log whether to add ore dictionary for logs + * @param planks whether to add ore dictionary for planks + * @param door whether to add ore dictionary for doors + * @param slab whether to add ore dictionary for slab + * @param fence whether to add ore dictionary for fences + * @param fenceGate whether to add ore dictionary for fence gates + * @param stairs whether to add ore dictionary for stairs + * @return this + */ + public Builder registerTag(boolean log, boolean planks, boolean door, boolean slab, boolean fence, + boolean fenceGate, boolean stairs) { + this.addLogOreDict = log; + this.addPlanksOreDict = planks; + this.addDoorsOreDict = door; + this.addSlabsOreDict = slab; + this.addFencesOreDict = fence; + this.addFenceGatesOreDict = fenceGate; + this.addStairsOreDict = stairs; + return this; + } + + /** + * Register unification info for wood entry. + * + * @param planks whether to add unification info for planks + * @param door whether to add unification info for doors + * @param slab whether to add unification info for slab + * @param fence whether to add unification info for fences + * @param fenceGate whether to add unification info for fence gates + * @param stairs whether to add unification info for stairs + * @param boat whether to add unification info for boats + * @return this + */ + public Builder registerUnificationInfo(boolean planks, boolean door, boolean slab, boolean fence, + boolean fenceGate, boolean stairs, boolean boat) { + this.addPlanksUnificationInfo = planks; + this.addDoorsUnificationInfo = door; + this.addSlabsUnificationInfo = slab; + this.addFencesUnificationInfo = fence; + this.addFenceGatesUnificationInfo = fenceGate; + this.addStairsUnificationInfo = stairs; + this.addBoatsUnificationInfo = boat; + return this; + } + + /** + * @return a new wood type entry, if valid + */ + @NotNull + public WoodTypeEntry build() { + Preconditions.checkArgument(planks != null, "Planks cannot be empty."); + return new WoodTypeEntry(modid, woodName, log, strippedLog, wood, strippedWood, + removeCharcoalRecipe, addCharcoalRecipe, + planks, planksRecipeName, + door, doorRecipeName, + trapdoor, trapdoorRecipeName, + slab, slabRecipeName, addSlabsCraftingRecipe, + fence, fenceRecipeName, fenceGate, fenceGateRecipeName, + stairs, stairsRecipeName, addStairsCraftingRecipe, + boat, boatRecipeName, + material, + addLogOreDict, addPlanksOreDict, addDoorsOreDict, addSlabsOreDict, + addFencesOreDict, addFenceGatesOreDict, addStairsOreDict, addPlanksUnificationInfo, + addDoorsUnificationInfo, addSlabsUnificationInfo, addFencesUnificationInfo, + addFenceGatesUnificationInfo, addStairsUnificationInfo, addBoatsUnificationInfo); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java index 98e4055796..9fea3f8b33 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java @@ -228,6 +228,14 @@ public GTRecipeBuilder inputItems(Ingredient... inputs) { return input(ItemRecipeCapability.CAP, inputs); } + public GTRecipeBuilder inputItems(ItemStack input) { + if (input.isEmpty()) { + GTCEu.LOGGER.error("gt recipe {} input items is empty", id); + throw new IllegalArgumentException(id + ": input items is empty"); + } + return input(ItemRecipeCapability.CAP, SizedIngredient.create(input)); + } + public GTRecipeBuilder inputItems(ItemStack... inputs) { for (ItemStack itemStack : inputs) { if (itemStack.isEmpty()) { @@ -303,6 +311,14 @@ public GTRecipeBuilder itemOutput(UnificationEntry unificationEntry, int count) return outputItems(unificationEntry.tagPrefix, unificationEntry.material, count); } + public GTRecipeBuilder outputItems(ItemStack output) { + if (output.isEmpty()) { + GTCEu.LOGGER.error("gt recipe {} output items is empty", id); + throw new IllegalArgumentException(id + ": output items is empty"); + } + return output(ItemRecipeCapability.CAP, SizedIngredient.create(output)); + } + public GTRecipeBuilder outputItems(ItemStack... outputs) { for (ItemStack itemStack : outputs) { if (itemStack.isEmpty()) { @@ -385,6 +401,19 @@ public GTRecipeBuilder notConsumable(TagPrefix orePrefix, Material material) { return this; } + public GTRecipeBuilder notConsumableFluid(FluidStack fluid) { + chancedInput(fluid, 0, 0); + return this; + } + + public GTRecipeBuilder notConsumableFluid(FluidIngredient ingredient) { + float lastChance = this.chance; + this.chance = 0; + inputFluids(ingredient); + this.chance = lastChance; + return this; + } + public GTRecipeBuilder circuitMeta(int configuration) { return notConsumable(IntCircuitIngredient.circuitInput(configuration)); } @@ -441,6 +470,10 @@ public GTRecipeBuilder chancedOutput(TagPrefix tag, Material mat, int count, int return chancedOutput(ChemicalHelper.get(tag, mat, count), chance, tierChanceBoost); } + public GTRecipeBuilder inputFluids(FluidStack input) { + return input(FluidRecipeCapability.CAP, FluidIngredient.of(TagUtil.createFluidTag(Registry.FLUID.getKey(input.getFluid()).getPath()), input.getAmount())); + } + public GTRecipeBuilder inputFluids(FluidStack... inputs) { return input(FluidRecipeCapability.CAP, Arrays.stream(inputs).map(fluid -> { if (!Platform.isForge() && fluid.getFluid() == Fluids.WATER) { // Special case for fabric, because there all fluids have to be tagged as water to function as water when placed. @@ -455,6 +488,10 @@ public GTRecipeBuilder inputFluids(FluidIngredient... inputs) { return input(FluidRecipeCapability.CAP, inputs); } + public GTRecipeBuilder outputFluids(FluidStack output) { + return output(FluidRecipeCapability.CAP, FluidIngredient.of(output)); + } + public GTRecipeBuilder outputFluids(FluidStack... outputs) { return output(FluidRecipeCapability.CAP, Arrays.stream(outputs).map(FluidIngredient::of).toArray(FluidIngredient[]::new)); } @@ -599,7 +636,7 @@ public GTRecipeBuilder rpm(float rpm) { private boolean applyResearchProperty(ResearchData.ResearchEntry researchEntry) { if (!ConfigHolder.INSTANCE.machines.enableResearch) return false; if (researchEntry == null) { - GTCEu.LOGGER.error("Assembly Line Research Entry cannot be empty.", new IllegalArgumentException()); + GTCEu.LOGGER.error("Research Entry cannot be empty.", new IllegalArgumentException()); return false; } @@ -756,7 +793,7 @@ public void save(Consumer consumer) { } public GTRecipe buildRawRecipe() { - return new GTRecipe(recipeType, new ResourceLocation(id.getNamespace(), recipeType.registryName.getPath() + "/" + id.getPath()), input, output, tickInput, tickOutput, conditions, data, duration, isFuel); + return new GTRecipe(recipeType, new ResourceLocation(id.getNamespace(), recipeType.registryName.getPath() + "/" + id.getPath()), input, output, tickInput, tickOutput, conditions, List.of(), data, duration, isFuel); } ////////////////////////////////////// @@ -784,14 +821,13 @@ public int getSolderMultiplier() { * @param EUt the EUt of the recipe * @param CWUt how much computation per tick this recipe needs if in Research Station */ - @Accessors(fluent = false) public record ResearchRecipeEntry( - @NotNull @Getter String researchId, - @NotNull @Getter ItemStack researchStack, - @NotNull @Getter ItemStack dataStack, - @Getter int duration, - @Getter int EUt, - @Getter int CWUt) { + @NotNull String researchId, + @NotNull ItemStack researchStack, + @NotNull ItemStack dataStack, + int duration, + int EUt, + int CWUt) { } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java index 19ec4ca429..1179852e64 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java @@ -36,7 +36,6 @@ public static void init(Consumer provider) { disableManualCompression(provider); hardToolArmorRecipes(provider); harderRods(provider); - nerfWoodCrafting(provider); harderBrickRecipes(provider); steelSteamMultiblocks(provider); if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes) hardWoodRecipes(provider); @@ -44,8 +43,6 @@ public static void init(Consumer provider) { if (ConfigHolder.INSTANCE.recipes.hardGlassRecipes) hardGlassRecipes(provider); if (ConfigHolder.INSTANCE.recipes.nerfPaperCrafting) nerfPaperCrafting(provider); if (ConfigHolder.INSTANCE.recipes.hardAdvancedIronRecipes) hardAdvancedIronRecipes(provider); - if (ConfigHolder.INSTANCE.recipes.hardDyeRecipes) hardDyeRecipes(provider); - if (ConfigHolder.INSTANCE.recipes.harderCharcoalRecipe) harderCharcoalRecipes(provider); if (ConfigHolder.INSTANCE.recipes.flintAndSteelRequireSteel) flintAndSteelRequireSteel(provider); if (ConfigHolder.INSTANCE.recipes.removeVanillaBlockRecipes) removeVanillaBlockRecipes(provider); } @@ -55,14 +52,14 @@ private static void steelSteamMultiblocks(Consumer provider) { VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_oven", GTMachines.STEAM_OVEN.asStack(), "CGC", "FMF", "CGC", 'F', GTBlocks.FIREBOX_STEEL.asStack(), 'C', GTBlocks.CASING_STEEL_SOLID.asStack(), 'M', GTMachines.STEAM_FURNACE.right().asStack(), 'G', new UnificationEntry(TagPrefix.gear, GTMaterials.Invar)); VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_grinder", GTMachines.STEAM_GRINDER.asStack(), "CGC", "CFC", "CGC", 'G', new UnificationEntry(TagPrefix.gear, GTMaterials.Potin), 'F', GTMachines.STEAM_MACERATOR.right().asStack(), 'C', GTBlocks.CASING_STEEL_SOLID.asStack()); VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_hatch", GTMachines.STEAM_HATCH.asStack(), "BPB", "BTB", "BPB", 'B', new UnificationEntry(TagPrefix.plate, GTMaterials.Steel), 'P', new UnificationEntry(TagPrefix.pipeNormalFluid, GTMaterials.Steel), 'T', GTMachines.STEEL_DRUM.asStack()); - VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_input_bus", GTMachines.STEAM_IMPORT_BUS.asStack(), "C", "H", 'H', GTBlocks.STEEL_HULL.asStack(), 'C', CustomTags.TAG_WOODEN_CHESTS); - VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_output_bus", GTMachines.STEAM_EXPORT_BUS.asStack(), "H", "C", 'H', GTBlocks.STEEL_HULL.asStack(), 'C', CustomTags.TAG_WOODEN_CHESTS); + VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_input_bus", GTMachines.STEAM_IMPORT_BUS.asStack(), "C", "H", 'H', GTBlocks.STEEL_HULL.asStack(), 'C', CustomTags.WOODEN_CHESTS); + VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_output_bus", GTMachines.STEAM_EXPORT_BUS.asStack(), "H", "C", 'H', GTBlocks.STEEL_HULL.asStack(), 'C', CustomTags.WOODEN_CHESTS); } else { VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_oven", GTMachines.STEAM_OVEN.asStack(), "CGC", "FMF", "CGC", 'F', GTBlocks.FIREBOX_BRONZE.asStack(), 'C', GTBlocks.CASING_BRONZE_BRICKS.asStack(), 'M', GTMachines.STEAM_FURNACE.left().asStack(), 'G', new UnificationEntry(TagPrefix.gear, GTMaterials.Invar)); VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_grinder", GTMachines.STEAM_GRINDER.asStack(), "CGC", "CFC", "CGC", 'G', new UnificationEntry(TagPrefix.gear, GTMaterials.Potin), 'F', GTMachines.STEAM_MACERATOR.left().asStack(), 'C', GTBlocks.CASING_BRONZE_BRICKS.asStack()); VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_hatch", GTMachines.STEAM_HATCH.asStack(), "BPB", "BTB", "BPB", 'B', new UnificationEntry(TagPrefix.plate, GTMaterials.Bronze), 'P', new UnificationEntry(TagPrefix.pipeNormalFluid, GTMaterials.Bronze), 'T', GTMachines.BRONZE_DRUM.asStack()); - VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_input_bus", GTMachines.STEAM_IMPORT_BUS.asStack(), "C", "H", 'H', GTBlocks.BRONZE_HULL.asStack(), 'C', CustomTags.TAG_WOODEN_CHESTS); - VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_output_bus", GTMachines.STEAM_EXPORT_BUS.asStack(), "H", "C", 'H', GTBlocks.BRONZE_HULL.asStack(), 'C', CustomTags.TAG_WOODEN_CHESTS); + VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_input_bus", GTMachines.STEAM_IMPORT_BUS.asStack(), "C", "H", 'H', GTBlocks.BRONZE_HULL.asStack(), 'C', CustomTags.WOODEN_CHESTS); + VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_output_bus", GTMachines.STEAM_EXPORT_BUS.asStack(), "H", "C", 'H', GTBlocks.BRONZE_HULL.asStack(), 'C', CustomTags.WOODEN_CHESTS); } } @@ -102,262 +99,8 @@ private static void harderBrickRecipes(Consumer provider) { } } - private static void nerfWoodCrafting(Consumer provider) { - boolean nerfed = ConfigHolder.INSTANCE.recipes.nerfWoodCrafting; - if (nerfed) { - VanillaRecipeHelper.addShapedRecipe(provider, "stick_saw", new ItemStack(Items.STICK, 4), "s", "P", "P", 'P', ItemTags.PLANKS); - VanillaRecipeHelper.addShapedRecipe(provider, "stick_normal", new ItemStack(Items.STICK, 2), "P", "P", 'P', ItemTags.PLANKS); - VanillaRecipeHelper.addShapedRecipe(provider, "treated_wood_stick_saw", ChemicalHelper.get(rod, TreatedWood, 4), "s", "P", "P", 'P', GTBlocks.TREATED_WOOD_PLANK.asStack()); - VanillaRecipeHelper.addShapedRecipe(provider, "treated_wood_stick_normal", ChemicalHelper.get(rod, TreatedWood, 2), "P", "P", 'P', GTBlocks.TREATED_WOOD_PLANK.asStack()); - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_planks", new ItemStack(Items.OAK_PLANKS, 2), "L", 'L', Items.OAK_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_planks", new ItemStack(Items.SPRUCE_PLANKS, 2), "L", 'L', Items.SPRUCE_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "birch_planks", new ItemStack(Items.BIRCH_PLANKS, 2), "L", 'L', Items.BIRCH_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_planks", new ItemStack(Items.JUNGLE_PLANKS, 2), "L", 'L', Items.JUNGLE_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_planks", new ItemStack(Items.ACACIA_PLANKS, 2), "L", 'L', Items.ACACIA_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_planks", new ItemStack(Items.DARK_OAK_PLANKS, 2), "L", 'L', Items.DARK_OAK_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_planks", new ItemStack(Items.MANGROVE_PLANKS, 2), "L", 'L', Items.MANGROVE_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "crimson_planks", new ItemStack(Items.CRIMSON_PLANKS, 2), "L", 'L', Items.CRIMSON_STEM.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "warped_planks", new ItemStack(Items.WARPED_PLANKS, 2), "L", 'L', Items.WARPED_STEM.getDefaultInstance()); - } else { - VanillaRecipeHelper.addShapedRecipe(provider, "treated_wood_stick_normal", ChemicalHelper.get(rod, TreatedWood, 4), "L", "L", 'L', GTBlocks.TREATED_WOOD_PLANK.asStack()); - } - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_planks_saw", new ItemStack(Items.OAK_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.OAK_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_planks_saw", new ItemStack(Items.SPRUCE_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.SPRUCE_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "birch_planks_saw", new ItemStack(Items.BIRCH_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.BIRCH_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_planks_saw", new ItemStack(Items.JUNGLE_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.JUNGLE_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_planks_saw", new ItemStack(Items.ACACIA_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.ACACIA_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_planks_saw", new ItemStack(Items.DARK_OAK_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.DARK_OAK_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_planks_saw", new ItemStack(Items.MANGROVE_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.MANGROVE_LOG.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "crimson_planks_saw", new ItemStack(Items.CRIMSON_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.CRIMSON_STEM.getDefaultInstance()); - VanillaRecipeHelper.addShapedRecipe(provider, "warped_planks_saw", new ItemStack(Items.WARPED_PLANKS, nerfed ? 4 : 6), "s", "L", 'L', Items.WARPED_STEM.getDefaultInstance()); - } - private static void hardWoodRecipes(Consumer provider) { VanillaRecipeHelper.addShapedRecipe(provider, "ladder", new ItemStack(Blocks.LADDER, 2), "SrS", "SRS", "ShS", 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'R', new UnificationEntry(TagPrefix.bolt, GTMaterials.Wood)); - - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_door", new ItemStack(Items.OAK_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.OAK_PLANKS), - 'T', new ItemStack(Blocks.OAK_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("oak_door") - .inputItems(new ItemStack(Blocks.OAK_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.OAK_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.OAK_DOOR)) - .duration(400).EUt(4).save(provider); - - - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_door", new ItemStack(Items.SPRUCE_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.SPRUCE_PLANKS), - 'T', new ItemStack(Blocks.SPRUCE_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("spruce_door") - .inputItems(new ItemStack(Blocks.SPRUCE_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.SPRUCE_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.SPRUCE_DOOR)) - .duration(400).EUt(4).save(provider); - - - VanillaRecipeHelper.addShapedRecipe(provider, "birch_door", new ItemStack(Items.BIRCH_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.BIRCH_PLANKS), - 'T', new ItemStack(Blocks.BIRCH_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("birch_door") - .inputItems(new ItemStack(Blocks.BIRCH_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.BIRCH_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.BIRCH_DOOR)) - .duration(400).EUt(4).save(provider); - - - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_door", new ItemStack(Items.JUNGLE_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.JUNGLE_PLANKS), - 'T', new ItemStack(Blocks.JUNGLE_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("jungle_door") - .inputItems(new ItemStack(Blocks.JUNGLE_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.JUNGLE_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.JUNGLE_DOOR)) - .duration(400).EUt(4).save(provider); - - - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_door", new ItemStack(Items.ACACIA_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.ACACIA_PLANKS), - 'T', new ItemStack(Blocks.ACACIA_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("acacia_door") - .inputItems(new ItemStack(Blocks.ACACIA_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.ACACIA_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.ACACIA_DOOR)) - .duration(400).EUt(4).save(provider); - - - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_door", new ItemStack(Items.DARK_OAK_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.DARK_OAK_PLANKS), - 'T', new ItemStack(Blocks.DARK_OAK_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("dark_oak_door") - .inputItems(new ItemStack(Blocks.DARK_OAK_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.DARK_OAK_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.DARK_OAK_DOOR)) - .duration(400).EUt(4).save(provider); - - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_door", new ItemStack(Items.MANGROVE_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.MANGROVE_PLANKS), - 'T', new ItemStack(Blocks.MANGROVE_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("mangrove_door") - .inputItems(new ItemStack(Blocks.MANGROVE_PLANKS, 4)) - .inputItems(new ItemStack(Blocks.MANGROVE_TRAPDOOR)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.MANGROVE_DOOR)) - .duration(400).EUt(4).save(provider); - - VanillaRecipeHelper.addShapedRecipe(provider, "crimson_door", new ItemStack(Items.CRIMSON_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.CRIMSON_PLANKS), - 'T', new ItemStack(Blocks.CRIMSON_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("crimson_door") - .inputItems(new ItemStack(Blocks.CRIMSON_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.CRIMSON_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.CRIMSON_DOOR)) - .duration(400).EUt(4).save(provider); - - VanillaRecipeHelper.addShapedRecipe(provider, "warped_door", new ItemStack(Items.WARPED_DOOR), "PTd", "PRS", "PPs", - 'P', new ItemStack(Blocks.WARPED_PLANKS), - 'T', new ItemStack(Blocks.WARPED_TRAPDOOR), - 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), - 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron) - ); - - GTRecipeTypes.ASSEMBLER_RECIPES.recipeBuilder("warped_door") - .inputItems(new ItemStack(Blocks.WARPED_TRAPDOOR)) - .inputItems(new ItemStack(Blocks.WARPED_PLANKS, 4)) - .inputFluids(GTMaterials.Iron.getFluid(GTValues.L / 9)) - .outputItems(new ItemStack(Items.WARPED_DOOR)) - .duration(400).EUt(4).save(provider); - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_trapdoor", new ItemStack(Blocks.OAK_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.OAK_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_trapdoor", new ItemStack(Blocks.SPRUCE_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.SPRUCE_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "birch_trapdoor", new ItemStack(Blocks.BIRCH_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.BIRCH_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_trapdoor", new ItemStack(Blocks.JUNGLE_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.JUNGLE_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_trapdoor", new ItemStack(Blocks.ACACIA_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.ACACIA_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_trapdoor", new ItemStack(Blocks.DARK_OAK_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.DARK_OAK_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_trapdoor", new ItemStack(Blocks.MANGROVE_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.MANGROVE_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "crimson_trapdoor", new ItemStack(Blocks.CRIMSON_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.CRIMSON_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "warped_trapdoor", new ItemStack(Blocks.WARPED_TRAPDOOR), "SRS", "RRR", "SRS", - 'S', new ItemStack(Blocks.WARPED_SLAB), - 'R', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood) - ); - - VanillaRecipeHelper.addShapedRecipe(provider, "bowl", new ItemStack(Items.BOWL), "k", "X", 'X', ItemTags.PLANKS); - - VanillaRecipeHelper.addShapedRecipe(provider, "chest", new ItemStack(Blocks.CHEST), "LPL", "PFP", "LPL", - 'L', ItemTags.LOGS, - 'P', ItemTags.PLANKS, - 'F', new ItemStack(Items.FLINT)); - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_boat", new ItemStack(Items.OAK_BOAT), "PHP", "PkP", "SSS", 'P', new ItemStack(Blocks.OAK_PLANKS), 'S', new ItemStack(Blocks.OAK_SLAB), 'H', new ItemStack(Items.WOODEN_SHOVEL)); - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_boat", new ItemStack(Items.SPRUCE_BOAT), "PHP", "PkP", "SSS", 'P', new ItemStack(Blocks.SPRUCE_PLANKS), 'S', new ItemStack(Blocks.SPRUCE_SLAB), 'H', new ItemStack(Items.WOODEN_SHOVEL)); - VanillaRecipeHelper.addShapedRecipe(provider, "birch_boat", new ItemStack(Items.BIRCH_BOAT), "PHP", "PkP", "SSS", 'P', new ItemStack(Blocks.BIRCH_PLANKS), 'S', new ItemStack(Blocks.BIRCH_SLAB), 'H', new ItemStack(Items.WOODEN_SHOVEL)); - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_boat", new ItemStack(Items.JUNGLE_BOAT), "PHP", "PkP", "SSS", 'P', new ItemStack(Blocks.JUNGLE_PLANKS), 'S', new ItemStack(Blocks.JUNGLE_SLAB), 'H', new ItemStack(Items.WOODEN_SHOVEL)); - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_boat", new ItemStack(Items.ACACIA_BOAT), "PHP", "PkP", "SSS", 'P', new ItemStack(Blocks.ACACIA_PLANKS), 'S', new ItemStack(Blocks.ACACIA_SLAB), 'H', new ItemStack(Items.WOODEN_SHOVEL)); - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_boat", new ItemStack(Items.DARK_OAK_BOAT), "PHP", "PkP", "SSS", 'P', new ItemStack(Blocks.DARK_OAK_PLANKS), 'S', new ItemStack(Blocks.DARK_OAK_SLAB), 'H', new ItemStack(Items.WOODEN_SHOVEL)); - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_boat", new ItemStack(Items.MANGROVE_BOAT), "PHP", "PkP", "SSS", 'P', new ItemStack(Blocks.MANGROVE_PLANKS), 'S', new ItemStack(Blocks.MANGROVE_SLAB), 'H', new ItemStack(Items.WOODEN_SHOVEL)); - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_fence", new ItemStack(Blocks.OAK_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.OAK_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_fence", new ItemStack(Blocks.SPRUCE_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.SPRUCE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "birch_fence", new ItemStack(Blocks.BIRCH_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.BIRCH_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_fence", new ItemStack(Blocks.JUNGLE_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.JUNGLE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_fence", new ItemStack(Blocks.ACACIA_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.ACACIA_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_fence", new ItemStack(Blocks.DARK_OAK_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.DARK_OAK_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_fence", new ItemStack(Blocks.MANGROVE_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.MANGROVE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "crimson_fence", new ItemStack(Blocks.CRIMSON_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.CRIMSON_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - VanillaRecipeHelper.addShapedRecipe(provider, "warped_fence", new ItemStack(Blocks.WARPED_FENCE), "PSP", "PSP", "PSP", 'P', new ItemStack(Blocks.WARPED_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood)); - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_fence_gate", new ItemStack(Blocks.OAK_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.OAK_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_fence_gate", new ItemStack(Blocks.SPRUCE_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.SPRUCE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "birch_fence_gate", new ItemStack(Blocks.BIRCH_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.BIRCH_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_fence_gate", new ItemStack(Blocks.JUNGLE_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.JUNGLE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_fence_gate", new ItemStack(Blocks.ACACIA_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.ACACIA_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_fence_gate", new ItemStack(Blocks.DARK_OAK_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.DARK_OAK_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_fence_gate", new ItemStack(Blocks.MANGROVE_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.MANGROVE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "crimson_fence_gate", new ItemStack(Blocks.CRIMSON_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.CRIMSON_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - VanillaRecipeHelper.addShapedRecipe(provider, "warped_fence_gate", new ItemStack(Blocks.WARPED_FENCE_GATE), "F F", "SPS", "SPS", 'P', new ItemStack(Blocks.WARPED_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'F', new ItemStack(Items.FLINT)); - - VanillaRecipeHelper.addShapedRecipe(provider, "oak_fence_gate_screws", new ItemStack(Blocks.OAK_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.OAK_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "spruce_fence_gate_screws", new ItemStack(Blocks.SPRUCE_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.SPRUCE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "birch_fence_gate_screws", new ItemStack(Blocks.BIRCH_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.BIRCH_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "jungle_fence_gate_screws", new ItemStack(Blocks.JUNGLE_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.JUNGLE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "acacia_fence_gate_screws", new ItemStack(Blocks.ACACIA_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.ACACIA_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "dark_oak_fence_gate_screws", new ItemStack(Blocks.DARK_OAK_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.DARK_OAK_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "mangrove_fence_gate_screws", new ItemStack(Blocks.MANGROVE_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.MANGROVE_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "crimson_fence_gate_screws", new ItemStack(Blocks.CRIMSON_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.CRIMSON_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); - VanillaRecipeHelper.addShapedRecipe(provider, "warped_fence_gate_screws", new ItemStack(Blocks.WARPED_FENCE_GATE, 2), "IdI", "SPS", "SPS", 'P', new ItemStack(Blocks.WARPED_PLANKS), 'S', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'I', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron)); } private static void hardIronRecipes(Consumer provider) { @@ -368,7 +111,7 @@ private static void hardIronRecipes(Consumer provider) { VanillaRecipeHelper.addShapedRecipe(provider, "hopper", new ItemStack(Blocks.HOPPER), "XCX", "XGX", "wXh", 'X', new UnificationEntry(TagPrefix.plate, GTMaterials.Iron), - 'C', CustomTags.TAG_WOODEN_CHESTS, + 'C', CustomTags.WOODEN_CHESTS, 'G', new UnificationEntry(TagPrefix.gearSmall, GTMaterials.Iron) ); @@ -1159,8 +902,7 @@ private static void hardMiscRecipes(Consumer provider) { 'T', new UnificationEntry(TagPrefix.rod, GTMaterials.Wood), 'C', ItemTags.WOOL_CARPETS); - - VanillaRecipeHelper.addShapedRecipe(provider, "chest_minecart", new ItemStack(Items.CHEST_MINECART), "hIw", " M ", " d ", 'I', CustomTags.TAG_WOODEN_CHESTS, 'M', new ItemStack(Items.MINECART)); + VanillaRecipeHelper.addShapedRecipe(provider, "chest_minecart", new ItemStack(Items.CHEST_MINECART), "hIw", " M ", " d ", 'I', CustomTags.WOODEN_CHESTS, 'M', new ItemStack(Items.MINECART)); VanillaRecipeHelper.addShapedRecipe(provider, "furnace_minecart", new ItemStack(Items.FURNACE_MINECART), "hIw", " M ", " d ", 'I', new ItemStack(Blocks.FURNACE), 'M', new ItemStack(Items.MINECART)); VanillaRecipeHelper.addShapedRecipe(provider, "tnt_minecart", new ItemStack(Items.TNT_MINECART), "hIw", " M ", " d ", 'I', new ItemStack(Blocks.TNT), 'M', new ItemStack(Items.MINECART)); VanillaRecipeHelper.addShapedRecipe(provider, "hopper_minecart", new ItemStack(Items.HOPPER_MINECART), "hIw", " M ", " d ", 'I', new ItemStack(Blocks.HOPPER), 'M', new ItemStack(Items.MINECART)); @@ -1187,7 +929,7 @@ private static void hardMiscRecipes(Consumer provider) { 'C', new ItemStack(Blocks.CHEST)); ASSEMBLER_RECIPES.recipeBuilder("ender_chest") - .inputItems(CustomTags.TAG_WOODEN_CHESTS) + .inputItems(CustomTags.WOODEN_CHESTS) .inputItems(TagPrefix.plateDense, GTMaterials.Obsidian, 6) .inputItems(TagPrefix.plate, GTMaterials.EnderEye) .outputItems(Blocks.ENDER_CHEST.asItem()) @@ -1266,12 +1008,6 @@ private static void hardAdvancedIronRecipes(Consumer provider) { ); } - private static void hardDyeRecipes(Consumer provider) { - } - - private static void harderCharcoalRecipes(Consumer provider) { - } - private static void flintAndSteelRequireSteel(Consumer provider) { VanillaRecipeHelper.addShapedRecipe(provider, "flint_and_steel", new ItemStack(Items.FLINT_AND_STEEL), "G", "F", "S", 'G', new UnificationEntry(TagPrefix.gearSmall, GTMaterials.Steel), diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeRemoval.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeRemoval.java index e63fde711e..b1d2085b3d 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeRemoval.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeRemoval.java @@ -3,10 +3,9 @@ import com.gregtechceu.gtceu.api.data.chemical.material.MarkerMaterial; import com.gregtechceu.gtceu.api.data.chemical.material.MarkerMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.data.recipe.misc.WoodMachineRecipes; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Blocks; import java.util.Locale; import java.util.function.Consumer; @@ -15,9 +14,9 @@ public class RecipeRemoval { public static void init(Consumer registry) { generalRemovals(registry); + WoodMachineRecipes.hardWoodRecipes(registry); if (ConfigHolder.INSTANCE.recipes.disableManualCompression) disableManualCompression(registry); if (ConfigHolder.INSTANCE.recipes.harderBrickRecipes) harderBrickRecipes(registry); - if (ConfigHolder.INSTANCE.recipes.nerfWoodCrafting) nerfWoodCrafting(registry); if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes) hardWoodRecipes(registry); if (ConfigHolder.INSTANCE.recipes.hardIronRecipes) hardIronRecipes(registry); if (ConfigHolder.INSTANCE.recipes.hardRedstoneRecipes) hardRedstoneRecipes(registry); @@ -27,7 +26,6 @@ public static void init(Consumer registry) { if (ConfigHolder.INSTANCE.recipes.nerfPaperCrafting) nerfPaperCrafting(registry); if (ConfigHolder.INSTANCE.recipes.hardAdvancedIronRecipes) hardAdvancedIronRecipes(registry); if (ConfigHolder.INSTANCE.recipes.hardDyeRecipes) hardDyeRecipes(registry); - if (ConfigHolder.INSTANCE.recipes.harderCharcoalRecipe) harderCharcoalRecipes(registry); if (ConfigHolder.INSTANCE.recipes.flintAndSteelRequireSteel) flintAndSteelRequireSteel(registry); if (ConfigHolder.INSTANCE.recipes.removeVanillaBlockRecipes) removeVanillaBlockRecipes(registry); } @@ -102,66 +100,8 @@ private static void harderBrickRecipes(Consumer registry) { registry.accept(new ResourceLocation("minecraft:nether_brick")); } - private static void nerfWoodCrafting(Consumer registry) { - registry.accept(new ResourceLocation("minecraft:stick")); - registry.accept(new ResourceLocation("minecraft:oak_planks")); - registry.accept(new ResourceLocation("minecraft:spruce_planks")); - registry.accept(new ResourceLocation("minecraft:birch_planks")); - registry.accept(new ResourceLocation("minecraft:jungle_planks")); - registry.accept(new ResourceLocation("minecraft:acacia_planks")); - registry.accept(new ResourceLocation("minecraft:dark_oak_planks")); - registry.accept(new ResourceLocation("minecraft:mangrove_planks")); - registry.accept(new ResourceLocation("minecraft:crimson_planks")); - registry.accept(new ResourceLocation("minecraft:warped_planks")); - } - private static void hardWoodRecipes(Consumer registry) { registry.accept(new ResourceLocation("minecraft:ladder")); - registry.accept(new ResourceLocation("minecraft:oak_door")); - registry.accept(new ResourceLocation("minecraft:spruce_door")); - registry.accept(new ResourceLocation("minecraft:birch_door")); - registry.accept(new ResourceLocation("minecraft:jungle_door")); - registry.accept(new ResourceLocation("minecraft:acacia_door")); - registry.accept(new ResourceLocation("minecraft:dark_oak_door")); - registry.accept(new ResourceLocation("minecraft:crimson_door")); - registry.accept(new ResourceLocation("minecraft:warped_door")); - registry.accept(new ResourceLocation("minecraft:mangrove_door")); - registry.accept(new ResourceLocation("minecraft:oak_trapdoor")); - registry.accept(new ResourceLocation("minecraft:birch_trapdoor")); - registry.accept(new ResourceLocation("minecraft:spruce_trapdoor")); - registry.accept(new ResourceLocation("minecraft:jungle_trapdoor")); - registry.accept(new ResourceLocation("minecraft:acacia_trapdoor")); - registry.accept(new ResourceLocation("minecraft:dark_oak_trapdoor")); - registry.accept(new ResourceLocation("minecraft:crimson_trapdoor")); - registry.accept(new ResourceLocation("minecraft:warped_trapdoor")); - registry.accept(new ResourceLocation("minecraft:mangrove_trapdoor")); - registry.accept(new ResourceLocation("minecraft:bowl")); - registry.accept(new ResourceLocation("minecraft:chest")); - registry.accept(new ResourceLocation("minecraft:oak_boat")); - registry.accept(new ResourceLocation("minecraft:spruce_boat")); - registry.accept(new ResourceLocation("minecraft:birch_boat")); - registry.accept(new ResourceLocation("minecraft:jungle_boat")); - registry.accept(new ResourceLocation("minecraft:acacia_boat")); - registry.accept(new ResourceLocation("minecraft:dark_oak_boat")); - registry.accept(new ResourceLocation("minecraft:mangrove_boat")); - registry.accept(new ResourceLocation("minecraft:oak_fence")); - registry.accept(new ResourceLocation("minecraft:spruce_fence")); - registry.accept(new ResourceLocation("minecraft:birch_fence")); - registry.accept(new ResourceLocation("minecraft:jungle_fence")); - registry.accept(new ResourceLocation("minecraft:acacia_fence")); - registry.accept(new ResourceLocation("minecraft:dark_oak_fence")); - registry.accept(new ResourceLocation("minecraft:crimson_fence")); - registry.accept(new ResourceLocation("minecraft:warped_fence")); - registry.accept(new ResourceLocation("minecraft:mangrove_fence")); - registry.accept(new ResourceLocation("minecraft:oak_fence_gate")); - registry.accept(new ResourceLocation("minecraft:spruce_fence_gate")); - registry.accept(new ResourceLocation("minecraft:birch_fence_gate")); - registry.accept(new ResourceLocation("minecraft:jungle_fence_gate")); - registry.accept(new ResourceLocation("minecraft:acacia_fence_gate")); - registry.accept(new ResourceLocation("minecraft:dark_oak_fence_gate")); - registry.accept(new ResourceLocation("minecraft:crimson_fence_gate")); - registry.accept(new ResourceLocation("minecraft:warped_fence_gate")); - registry.accept(new ResourceLocation("minecraft:mangrove_fence_gate")); } private static void hardIronRecipes(Consumer registry) { @@ -313,9 +253,6 @@ private static void hardDyeRecipes(Consumer registry) { registry.accept(new ResourceLocation("minecraft:dark_prismarine")); } - private static void harderCharcoalRecipes(Consumer registry) { - } - private static void flintAndSteelRequireSteel(Consumer registry) { registry.accept(new ResourceLocation("minecraft:flint_and_steel")); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/AssemblerRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/AssemblerRecipeLoader.java index f976ced37c..d059d60c4f 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/AssemblerRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/AssemblerRecipeLoader.java @@ -62,7 +62,7 @@ public static void init(Consumer provider) { .inputItems(rotor, Titanium, 2) .inputItems(pipeNormalFluid, Titanium, 4) .inputItems(CASING_TITANIUM_STABLE.asStack()) - .outputItems(CASING_EXTREME_ENGINE_INTAKE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) + .outputItems(CASING_ENGINE_INTAKE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50).EUt(16).save(provider); ASSEMBLER_RECIPES.recipeBuilder("stable_tungstensteel_casing") diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCyMRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCyMRecipes.java index aaa0a30516..fcd2898e54 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCyMRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCyMRecipes.java @@ -65,9 +65,9 @@ private static void registerMultiblockControllerRecipes(Consumer VanillaRecipeHelper.addShapedRecipe(provider, true, "large_centrifuge", LARGE_CENTRIFUGE.asStack(), "SFS", "CXC", "MKM", 'C', CustomTags.IV_CIRCUITS, 'F', ChemicalHelper.get(pipeHugeFluid, StainlessSteel),'S',ChemicalHelper.get(spring, MolybdenumDisilicide) ,'M', ELECTRIC_MOTOR_IV.asStack(), 'X', CENTRIFUGE[IV].asStack(), 'K', new UnificationEntry(TagPrefix.cableGtSingle, Platinum)); VanillaRecipeHelper.addShapedRecipe(provider, true, "large_assembler", LARGE_ASSEMBLER.asStack(), "RKR", "CXC", "MKM", 'C', CustomTags.IV_CIRCUITS, 'R', ROBOT_ARM_IV.asStack() ,'M', CONVEYOR_MODULE_IV.asStack(), 'X', ASSEMBLER[IV].asStack(), 'K', new UnificationEntry(cableGtSingle, Platinum)); VanillaRecipeHelper.addShapedRecipe(provider, true, "large_circuit_assembler", LARGE_CIRCUIT_ASSEMBLER.asStack(), "RKR", "CXC", "MKM", 'C', CustomTags.IV_CIRCUITS, 'R', ROBOT_ARM_IV.asStack() ,'M', CONVEYOR_MODULE_IV.asStack(), 'X', CIRCUIT_ASSEMBLER[IV].asStack(), 'K', new UnificationEntry(cableGtSingle, Platinum)); - VanillaRecipeHelper.addShapedRecipe(provider, true, "large_electrolyzer", LARGE_ELECTROLYZER.asStack(), "PCP", "WXW", "PKP", 'C', CustomTags.IV_CIRCUITS, 'P', new UnificationEntry(plate, BlackSteel) ,'W', new UnificationEntry(wireGtQuadruple, Osmium), 'X', ELECTROLYZER[IV].asStack(), 'K', new UnificationEntry(cableGtSingle, Platinum)); + VanillaRecipeHelper.addShapedRecipe(provider, true, "large_electrolyzer", LARGE_ELECTROLYZER.asStack(), "PCP", "WXW", "PKP", 'C', CustomTags.IV_CIRCUITS, 'P', new UnificationEntry(plate, BlackSteel) ,'W', new UnificationEntry(cableGtSingle, Platinum), 'X', ELECTROLYZER[IV].asStack(), 'K', new UnificationEntry(cableGtSingle, Platinum)); VanillaRecipeHelper.addShapedRecipe(provider, true, "large_electromagnet", LARGE_ELECTROMAGNET.asStack(), "PWP", "CXC", "PKP", 'C', CustomTags.IV_CIRCUITS, 'P', new UnificationEntry(plate, BlueSteel) ,'W', new UnificationEntry(wireGtQuadruple, Osmium), 'X', ELECTROMAGNETIC_SEPARATOR[IV].asStack(), 'K', new UnificationEntry(cableGtSingle, Platinum)); - VanillaRecipeHelper.addShapedRecipe(provider, true, "blast_alloy_smelter", BLAST_ALLOY_SMELTER.asStack(), "TCT", "WXW", "TCT", 'C', CustomTags.EV_CIRCUITS, 'T', new UnificationEntry(plate, TantalumCarbide) ,'W', new UnificationEntry(wireGtQuadruple, Osmium), 'X', ALLOY_SMELTER[EV].asStack()); + VanillaRecipeHelper.addShapedRecipe(provider, true, "blast_alloy_smelter", BLAST_ALLOY_SMELTER.asStack(), "TCT", "WXW", "TCT", 'C', CustomTags.EV_CIRCUITS, 'T', new UnificationEntry(plate, TantalumCarbide) ,'W', new UnificationEntry(cableGtSingle, Aluminium), 'X', ALLOY_SMELTER[EV].asStack()); VanillaRecipeHelper.addShapedRecipe(provider, true, "mega_blast_furnace", MEGA_BLAST_FURNACE.asStack(),"PCP", "FSF", "DWD", 'C', ZPM_CIRCUITS,'S', ELECTRIC_BLAST_FURNACE.asStack(), 'F', FIELD_GENERATOR_ZPM.asStack(), 'P', new UnificationEntry(spring, Naquadah), 'D', new UnificationEntry(plateDense, NaquadahAlloy), 'W', new UnificationEntry(wireGtQuadruple, RutheniumTriniumAmericiumNeutronate)); VanillaRecipeHelper.addShapedRecipe(provider, true, "mega_vacuum_freezer", MEGA_VACUUM_FREEZER.asStack(), "PCP", "FSF", "DWD", 'C', ZPM_CIRCUITS, 'S', VACUUM_FREEZER.asStack(), 'F', FIELD_GENERATOR_ZPM.asStack(), 'P', new UnificationEntry(pipeNormalFluid, NiobiumTitanium), 'D', new UnificationEntry(plateDense, RhodiumPlatedPalladium), 'W', new UnificationEntry(wireGtQuadruple, RutheniumTriniumAmericiumNeutronate)); VanillaRecipeHelper.addShapedRecipe(provider, true, "large_autoclave", LARGE_AUTOCLAVE.asStack(), "PCP", "PAP", "BKB", 'C', CustomTags.IV_CIRCUITS, 'A', AUTOCLAVE[IV].asStack(), 'P', new UnificationEntry(plateDouble, HSLASteel), 'B', ELECTRIC_PUMP_IV.asStack(), 'K', new UnificationEntry(cableGtSingle, Platinum)); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java index 1a6f073b93..d46f221245 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java @@ -589,8 +589,8 @@ private static void registerAssemblerRecipes(Consumer provider) ASSEMBLER_RECIPES.recipeBuilder("hull_uv").duration(50).EUt(16).inputItems(GTBlocks.MACHINE_CASING_UV.asStack()).inputItems(cableGtSingle, YttriumBariumCuprate, 2).inputFluids(Polybenzimidazole.getFluid(L * 2)).outputItems(GTMachines.HULL[8]).save(provider); ASSEMBLER_RECIPES.recipeBuilder("hull_uhv").duration(50).EUt(16).inputItems(GTBlocks.MACHINE_CASING_UHV.asStack()).inputItems(cableGtSingle, Europium, 2).inputFluids(Polybenzimidazole.getFluid(L * 2)).outputItems(GTMachines.HULL[9]).save(provider); - ASSEMBLER_RECIPES.recipeBuilder("hopper_iron").EUt(2).inputItems(CustomTags.TAG_WOODEN_CHESTS).inputItems(plate, Iron, 5).outputItems(new ItemStack(Blocks.HOPPER)).duration(800).save(provider); - ASSEMBLER_RECIPES.recipeBuilder("hopper_wrought_iron").EUt(2).inputItems(CustomTags.TAG_WOODEN_CHESTS).inputItems(plate, WroughtIron, 5).outputItems(new ItemStack(Blocks.HOPPER)).duration(800).save(provider); + ASSEMBLER_RECIPES.recipeBuilder("hopper_iron").EUt(2).inputItems(CustomTags.WOODEN_CHESTS).inputItems(plate, Iron, 5).outputItems(new ItemStack(Blocks.HOPPER)).duration(800).save(provider); + ASSEMBLER_RECIPES.recipeBuilder("hopper_wrought_iron").EUt(2).inputItems(CustomTags.WOODEN_CHESTS).inputItems(plate, WroughtIron, 5).outputItems(new ItemStack(Blocks.HOPPER)).duration(800).save(provider); ASSEMBLER_RECIPES.recipeBuilder("wooden_crate").EUt(16).inputItems(ItemTags.PLANKS, 4).inputItems(screw, Iron, 4).outputItems(WOODEN_CRATE).duration(100).circuitMeta(5).save(provider); ASSEMBLER_RECIPES.recipeBuilder("bronze_crate").EUt(16).inputItems(rodLong, Bronze, 4).inputItems(plate, Bronze, 4).outputItems(BRONZE_CRATE).duration(200).circuitMeta(1).save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java index 5a4b70a167..594762b1b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java @@ -23,6 +23,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraftforge.common.Tags; import org.apache.commons.lang3.ArrayUtils; import java.util.Arrays; @@ -86,46 +87,56 @@ public static void init(Consumer provider) { VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_assembly_control", GTBlocks.CASING_ASSEMBLY_CONTROL.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "CPC", "SFE", "CMC", 'C', CustomTags.EV_CIRCUITS, 'P', GTItems.HIGH_POWER_INTEGRATED_CIRCUIT, 'S', GTItems.SENSOR_IV.asStack(), 'F', new UnificationEntry(TagPrefix.frameGt, GTMaterials.TungstenSteel), 'E', GTItems.EMITTER_IV.asStack(), 'M', GTItems.ELECTRIC_MOTOR_IV); VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_assembly_line", GTBlocks.CASING_ASSEMBLY_LINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PGP", "AFA", "PGP", 'P', new UnificationEntry(TagPrefix.plate, GTMaterials.Steel), 'G', new UnificationEntry(TagPrefix.gear, GTMaterials.Ruridit), 'A', GTItems.ROBOT_ARM_IV.asStack(), 'F', ChemicalHelper.get(TagPrefix.frameGt, GTMaterials.TungstenSteel)); - // TODO Hazard sign blocks - /* - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_yellow_stripes", MetaBlocks.WARNING_SIGN.getItemVariant(YELLOW_STRIPES), "Y ", " M ", " B", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_small_yellow_stripes", MetaBlocks.WARNING_SIGN.getItemVariant(SMALL_YELLOW_STRIPES), " Y", " M ", "B ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_radioactive_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(RADIOACTIVE_HAZARD), " YB", " M ", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_bio_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(BIO_HAZARD), " Y ", " MB", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_explosion_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(EXPLOSION_HAZARD), " Y ", " M ", " B", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_fire_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(FIRE_HAZARD), " Y ", " M ", " B ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_acid_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(ACID_HAZARD), " Y ", " M ", "B ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_magic_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(MAGIC_HAZARD), " Y ", "BM ", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_frost_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(FROST_HAZARD), "BY ", " M ", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_noise_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(NOISE_HAZARD), " ", " M ", "BY ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_generic_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(GENERIC_HAZARD), " ", "BM ", " Y ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_high_voltage_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(HIGH_VOLTAGE_HAZARD), "B ", " M ", " Y ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_magnetic_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(MAGNETIC_HAZARD), " B ", " M ", " Y ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_antimatter_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(ANTIMATTER_HAZARD), " B", " M ", " Y ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_high_temperature_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(HIGH_TEMPERATURE_HAZARD), " ", " MB", " Y ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_void_hazard", MetaBlocks.WARNING_SIGN.getItemVariant(VOID_HAZARD), " ", " M ", " YB", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_mob_spawner_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(MOB_SPAWNER_HAZARD), "B ", "YM ", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_spatial_storage_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(SPATIAL_STORAGE_HAZARD), " B ", "YM ", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_laser_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(LASER_HAZARD), " B", "YM ", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_mob_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(MOB_HAZARD), " ", "YMB", " ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_boss_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(BOSS_HAZARD), " ", "YM ", " B", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_gregification_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(GREGIFICATION_HAZARD), " ", "YM ", " B ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_causality_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(CAUSALITY_HAZARD), " ", "YM ", "B ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_automated_defenses_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(AUTOMATED_DEFENSES_HAZARD), " ", " MY", " B", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_high_pressure_hazard", MetaBlocks.WARNING_SIGN_1.getItemVariant(HIGH_PRESSURE_HAZARD), " ", " MY", " B ", 'M', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), 'Y', "dyeYellow", 'B', "dyeBlack"); - - VanillaRecipeHelper.addShapelessRecipe("yellow_stripes_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(YELLOW_STRIPES)); - VanillaRecipeHelper.addShapelessRecipe("small_yellow_stripes_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(SMALL_YELLOW_STRIPES)); - VanillaRecipeHelper.addShapelessRecipe("radioactive_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(RADIOACTIVE_HAZARD)); - VanillaRecipeHelper.addShapelessRecipe("bio_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(BIO_HAZARD)); - VanillaRecipeHelper.addShapelessRecipe("explosion_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(EXPLOSION_HAZARD)); - VanillaRecipeHelper.addShapelessRecipe("fire_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(FIRE_HAZARD)); - VanillaRecipeHelper.addShapelessRecipe("acid_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(ACID_HAZARD)); - VanillaRecipeHelper.addShapelessRecipe("magic_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(MAGIC_HAZARD)); - VanillaRecipeHelper.addShapelessRecipe("frost_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(FROST_HAZARD)); - VanillaRecipeHelper.addShapelessRecipe("noise_hazard_to_steel_solid_casing", MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID), MetaBlocks.WARNING_SIGN.getItemVariant(NOISE_HAZARD)); - */ + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_yellow_stripes", GTBlocks.YELLOW_STRIPES_BLOCK_A.asStack(), "Y ", " M ", " B", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_small_yellow_stripes", GTBlocks.YELLOW_STRIPES_BLOCK_B.asStack(), " Y", " M ", "B ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_radioactive_hazard", GTBlocks.RADIOACTIVE_HAZARD_SIGN_BLOCK.asStack(), " YB", " M ", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_bio_hazard", GTBlocks.BIO_HAZARD_SIGN_BLOCK.asStack(), " Y ", " MB", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_explosion_hazard", GTBlocks.EXPLOSION_HAZARD_SIGN_BLOCK.asStack(), " Y ", " M ", " B", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_fire_hazard", GTBlocks.FIRE_HAZARD_SIGN_BLOCK.asStack(), " Y ", " M ", " B ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_acid_hazard", GTBlocks.ACID_HAZARD_SIGN_BLOCK.asStack(), " Y ", " M ", "B ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_magic_hazard", GTBlocks.MAGIC_HAZARD_SIGN_BLOCK.asStack(), " Y ", "BM ", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_frost_hazard", GTBlocks.FROST_HAZARD_SIGN_BLOCK.asStack(), "BY ", " M ", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_noise_hazard", GTBlocks.NOISE_HAZARD_SIGN_BLOCK.asStack(), " ", " M ", "BY ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_generic_hazard", GTBlocks.GENERIC_HAZARD_SIGN_BLOCK.asStack(), " ", "BM ", " Y ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_high_voltage_hazard", GTBlocks.HIGH_VOLTAGE_HAZARD_SIGN_BLOCK.asStack(), "B ", " M ", " Y ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_magnetic_hazard", GTBlocks.MAGNETIC_HAZARD_SIGN_BLOCK.asStack(), " B ", " M ", " Y ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_antimatter_hazard", GTBlocks.ANTIMATTER_HAZARD_SIGN_BLOCK.asStack(), " B", " M ", " Y ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_high_temperature_hazard", GTBlocks.HIGH_TEMPERATURE_HAZARD_SIGN_BLOCK.asStack(), " ", " MB", " Y ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_sign_void_hazard", GTBlocks.VOID_HAZARD_SIGN_BLOCK.asStack(), " ", " M ", " YB", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_mob_spawner_hazard", GTBlocks.MOB_SPAWNER_HAZARD_SIGN_BLOCK.asStack(), "B ", "YM ", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_spatial_storage_hazard", GTBlocks.SPATIAL_STORAGE_HAZARD_SIGN_BLOCK.asStack(), " B ", "YM ", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_laser_hazard", GTBlocks.LASER_HAZARD_SIGN_BLOCK.asStack(), " B", "YM ", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_mob_hazard", GTBlocks.MOB_INFESTATION_HAZARD_SIGN_BLOCK.asStack(), " ", "YMB", " ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_boss_hazard", GTBlocks.BOSS_HAZARD_SIGN_BLOCK.asStack(), " ", "YM ", " B", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_gregification_hazard", GTBlocks.GREGIFICATION_HAZARD_SIGN_BLOCK.asStack(), " ", "YM ", " B ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_causality_hazard", GTBlocks.CAUSALITY_HAZARD_SIGN_BLOCK.asStack(), " ", "YM ", "B ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_turret_hazard", GTBlocks.TURRET_HAZARD_SIGN_BLOCK.asStack(), " ", " MY", " B", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + VanillaRecipeHelper.addShapedRecipe(provider, true, "warning_high_pressure_hazard", GTBlocks.HIGH_PRESSURE_HAZARD_SIGN_BLOCK.asStack(), " ", " MY", " B ", 'M', GTBlocks.CASING_STEEL_SOLID.asStack(), 'Y', Tags.Items.DYES_YELLOW, 'B', Tags.Items.DYES_BLACK); + + VanillaRecipeHelper.addShapelessRecipe(provider, "yellow_stripes_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.YELLOW_STRIPES_BLOCK_A.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "small_yellow_stripes_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.YELLOW_STRIPES_BLOCK_B.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "radioactive_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.RADIOACTIVE_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "bio_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.BIO_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "explosion_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.EXPLOSION_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "fire_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.FIRE_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "acid_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.ACID_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "magic_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.MAGIC_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "frost_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.FROST_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "noise_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.NOISE_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "generic_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.GENERIC_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "high_voltage_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.HIGH_VOLTAGE_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "magnetic_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.MAGNETIC_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "antimatter_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.ANTIMATTER_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "high_temperature_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.HIGH_TEMPERATURE_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "void_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.VOID_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "mob_spawner_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.MOB_SPAWNER_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "laser_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.LASER_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "mob_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.MOB_INFESTATION_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "boss_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.BOSS_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "gregification_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.GREGIFICATION_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "causality_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.CAUSALITY_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "turret_hazard_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.TURRET_HAZARD_SIGN_BLOCK.asStack()); + VanillaRecipeHelper.addShapelessRecipe(provider, "high_pressure_to_steel_solid_casing", GTBlocks.CASING_STEEL_SOLID.asStack(), GTBlocks.HIGH_PRESSURE_HAZARD_SIGN_BLOCK.asStack()); var multiHatchMaterials = new Material[]{ GTMaterials.Titanium, GTMaterials.TungstenSteel, GTMaterials.NiobiumTitanium, @@ -186,7 +197,7 @@ public static void init(Consumer provider) { // TODO Access Interface //VanillaRecipeHelper.addShapedRecipe(provider, true, "machine_access_interface", GTMachines.MACHINE_HATCH.getStackForm(), "CHS", 'C', CustomTags.IV), 'H', GTMachines.HULL[GTValues.IV].getStackForm(), 'S', MetaItems.SENSOR_IV.getStackForm()); - VanillaRecipeHelper.addShapedRecipe(provider, true, "passthrough_hatch_item", GTMachines.ITEM_PASSTHROUGH_HATCH[HV].asStack(), " C ", "GHG", " S ", 'C', GTItems.CONVEYOR_MODULE_HV.asStack(), 'G', new UnificationEntry(TagPrefix.gearSmall, GTMaterials.Steel), 'H', GTMachines.HULL[HV].asStack(), 'S', CustomTags.TAG_WOODEN_CHESTS); + VanillaRecipeHelper.addShapedRecipe(provider, true, "passthrough_hatch_item", GTMachines.ITEM_PASSTHROUGH_HATCH[HV].asStack(), " C ", "GHG", " S ", 'C', GTItems.CONVEYOR_MODULE_HV.asStack(), 'G', new UnificationEntry(TagPrefix.gearSmall, GTMaterials.Steel), 'H', GTMachines.HULL[HV].asStack(), 'S', CustomTags.WOODEN_CHESTS); VanillaRecipeHelper.addShapedRecipe(provider, true, "passthrough_hatch_fluid", GTMachines.FLUID_PASSTHROUGH_HATCH[HV].asStack(), " C ", "GHG", " S ", 'C', GTItems.ELECTRIC_PUMP_HV.asStack(), 'G', new UnificationEntry(TagPrefix.pipeSmallFluid, GTMaterials.Steel), 'H', GTMachines.HULL[HV].asStack(), 'S', GTBlocks.CASING_TEMPERED_GLASS); // TODO Charcoal pile igniter @@ -219,7 +230,6 @@ public static void init(Consumer provider) { VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_alloy_smelter_steel", GTMachines.STEAM_ALLOY_SMELTER.right().asStack(), "WSW", "WMW", "WPW", 'M', GTMachines.STEAM_ALLOY_SMELTER.left().asStack(), 'S', new UnificationEntry(TagPrefix.plate, GTMaterials.Steel), 'W', new UnificationEntry(TagPrefix.plate, GTMaterials.WroughtIron), 'P', new UnificationEntry(TagPrefix.pipeSmallFluid, GTMaterials.TinAlloy)); VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_rock_breaker_bronze", GTMachines.STEAM_ROCK_CRUSHER.left().asStack(), "PXP", "XMX", "DXD", 'M', GTBlocks.BRONZE_HULL.asStack(), 'X', new UnificationEntry(TagPrefix.pipeSmallFluid, GTMaterials.Bronze), 'P', CustomTags.TAG_PISTONS, 'D', new UnificationEntry(TagPrefix.gem, GTMaterials.Diamond)); VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_rock_breaker_steel", GTMachines.STEAM_ROCK_CRUSHER.right().asStack(), "WSW", "PMP", "WWW", 'M', GTMachines.STEAM_ROCK_CRUSHER.left().asStack(), 'W', new UnificationEntry(TagPrefix.plate, GTMaterials.WroughtIron), 'S', new UnificationEntry(TagPrefix.plate, GTMaterials.Steel), 'P', new UnificationEntry(TagPrefix.pipeSmallFluid, GTMaterials.TinAlloy)); - // TODO steam miner VanillaRecipeHelper.addShapedRecipe(provider, true, "steam_miner", GTMachines.STEAM_MINER.asStack(), "DSD", "SMS", "GSG", 'M', GTBlocks.BRONZE_BRICKS_HULL.asStack(), 'S', new UnificationEntry(TagPrefix.pipeNormalFluid, GTMaterials.Bronze), 'D', new UnificationEntry(TagPrefix.gem, GTMaterials.Diamond), 'G', new UnificationEntry(TagPrefix.gearSmall, GTMaterials.Bronze)); // MULTI BLOCK CONTROLLERS @@ -274,12 +284,11 @@ public static void init(Consumer provider) { VanillaRecipeHelper.addShapedRecipe(provider, true, "pump_deck", GTBlocks.CASING_PUMP_DECK.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "SWS", "dCh", 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron), 'W', GTBlocks.TREATED_WOOD_PLANK.asStack(), 'C', new ItemStack(Items.COBBLESTONE_SLAB)); VanillaRecipeHelper.addShapedRecipe(provider, true, "pump_hatch", GTMachines.PUMP_HATCH.asStack(), "SRd", "PLP", "CRC", 'S', new UnificationEntry(TagPrefix.screw, GTMaterials.Iron), 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Iron), 'P', GTBlocks.TREATED_WOOD_PLANK.asStack(), 'L', new UnificationEntry(TagPrefix.pipeLargeFluid, GTMaterials.Wood), 'C', new ItemStack(Items.COBBLESTONE_SLAB)); - // TODO Multiblock tanks - //VanillaRecipeHelper.addShapedRecipe(provider, true, "wood_multiblock_tank", GTMachines.WOODEN_TANK.getStackForm(), " R ", "rCs", " R ", 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Lead), 'C', MetaBlocks.STEAM_CASING.getItemVariant(WOOD_WALL)); - //VanillaRecipeHelper.addShapedRecipe(provider, true, "steel_multiblock_tank", GTMachines.STEEL_TANK.getStackForm(), " R ", "hCw", " R ", 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Steel), 'C', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID)); - //VanillaRecipeHelper.addShapedRecipe(provider, true, "wood_tank_valve", GTMachines.WOODEN_TANK_VALVE.getStackForm(), " R ", "rCs", " O ", 'O', new UnificationEntry(TagPrefix.rotor, GTMaterials.Lead), 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Lead), 'C', MetaBlocks.STEAM_CASING.getItemVariant(WOOD_WALL)); - //VanillaRecipeHelper.addShapedRecipe(provider, true, "steel_tank_valve", GTMachines.STEEL_TANK_VALVE.getStackForm(), " R ", "hCw", " O ", 'O', new UnificationEntry(TagPrefix.rotor, GTMaterials.Steel), 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Steel), 'C', MetaBlocks.METAL_CASING.getItemVariant(STEEL_SOLID)); - //VanillaRecipeHelper.addShapedRecipe(provider, true, "wood_wall", MetaBlocks.STEAM_CASING.getItemVariant(WOOD_WALL), "W W", "sPh", "W W", 'W', MetaBlocks.PLANKS.getItemVariant(BlockGregPlanks.BlockType.TREATED_PLANK), 'P', new UnificationEntry(TagPrefix.plate, GTMaterials.Lead)); + VanillaRecipeHelper.addShapedRecipe(provider, true, "wood_multiblock_tank", GTMachines.WOODEN_MULTIBLOCK_TANK.asStack(), " R ", "rCs", " R ", 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Lead), 'C', GTBlocks.CASING_WOOD_WALL.asStack()); + VanillaRecipeHelper.addShapedRecipe(provider, true, "steel_multiblock_tank", GTMachines.STEEL_MULTIBLOCK_TANK.asStack(), " R ", "hCw", " R ", 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Steel), 'C', GTBlocks.CASING_STEEL_SOLID.asStack()); + VanillaRecipeHelper.addShapedRecipe(provider, true, "wood_tank_valve", GTMachines.WOODEN_TANK_VALVE.asStack(), " R ", "rCs", " O ", 'O', new UnificationEntry(TagPrefix.rotor, GTMaterials.Lead), 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Lead), 'C', GTBlocks.CASING_WOOD_WALL.asStack()); + VanillaRecipeHelper.addShapedRecipe(provider, true, "steel_tank_valve", GTMachines.STEEL_TANK_VALVE.asStack(), " R ", "hCw", " O ", 'O', new UnificationEntry(TagPrefix.rotor, GTMaterials.Steel), 'R', new UnificationEntry(TagPrefix.ring, GTMaterials.Steel), 'C', GTBlocks.CASING_STEEL_SOLID.asStack()); + VanillaRecipeHelper.addShapedRecipe(provider, true, "wood_wall", GTBlocks.CASING_WOOD_WALL.asStack(), "W W", "sPh", "W W", 'W', GTBlocks.TREATED_WOOD_PLANK.asStack(), 'P', new UnificationEntry(TagPrefix.plate, GTMaterials.Lead)); // MACHINES registerMachineRecipe(provider, GTMachines.ALLOY_SMELTER, "ECE", "CMC", "WCW", 'M', HULL, 'E', CIRCUIT, 'W', CABLE, 'C', COIL_HEATING_DOUBLE); @@ -298,12 +307,12 @@ public static void init(Consumer provider) { registerMachineRecipe(provider, GTMachines.ELECTROLYZER, "IGI", "IMI", "CWC", 'M', HULL, 'C', CIRCUIT, 'W', CABLE, 'I', WIRE_ELECTRIC, 'G', GLASS); registerMachineRecipe(provider, GTMachines.THERMAL_CENTRIFUGE, "CEC", "OMO", "WEW", 'M', HULL, 'E', MOTOR, 'C', CIRCUIT, 'W', CABLE, 'O', COIL_HEATING_DOUBLE); registerMachineRecipe(provider, GTMachines.ORE_WASHER, "RGR", "CEC", "WMW", 'M', HULL, 'R', ROTOR, 'E', MOTOR, 'C', CIRCUIT, 'W', CABLE, 'G', GLASS); - registerMachineRecipe(provider, GTMachines.PACKER, "BCB", "RMV", "WCW", 'M', HULL, 'R', ROBOT_ARM, 'V', CONVEYOR, 'C', CIRCUIT, 'W', CABLE, 'B', CustomTags.TAG_WOODEN_CHESTS); registerMachineRecipe(provider, GTMachines.CHEMICAL_REACTOR, "GRG", "WEW", "CMC", 'M', HULL, 'R', ROTOR, 'E', MOTOR, 'C', CIRCUIT, 'W', CABLE, 'G', PIPE_REACTOR); + registerMachineRecipe(provider, GTMachines.PACKER, "BCB", "RMV", "WCW", 'M', HULL, 'R', ROBOT_ARM, 'V', CONVEYOR, 'C', CIRCUIT, 'W', CABLE, 'B', CustomTags.WOODEN_CHESTS); registerMachineRecipe(provider, GTMachines.BREWERY, "GPG", "WMW", "CBC", 'M', HULL, 'P', PUMP, 'B', STICK_DISTILLATION, 'C', CIRCUIT, 'W', CABLE, 'G', GLASS); registerMachineRecipe(provider, GTMachines.FERMENTER, "WPW", "GMG", "WCW", 'M', HULL, 'P', PUMP, 'C', CIRCUIT, 'W', CABLE, 'G', GLASS); - registerMachineRecipe(provider, GTMachines.FLUID_SOLIDIFIER, "PGP", "WMW", "CBC", 'M', HULL, 'P', PUMP, 'C', CIRCUIT, 'W', CABLE, 'G', GLASS, 'B', CustomTags.TAG_WOODEN_CHESTS); registerMachineRecipe(provider, GTMachines.DISTILLERY, "GBG", "CMC", "WPW", 'M', HULL, 'P', PUMP, 'B', STICK_DISTILLATION, 'C', CIRCUIT, 'W', CABLE, 'G', GLASS); + registerMachineRecipe(provider, GTMachines.FLUID_SOLIDIFIER, "PGP", "WMW", "CBC", 'M', HULL, 'P', PUMP, 'C', CIRCUIT, 'W', CABLE, 'G', GLASS, 'B', CustomTags.WOODEN_CHESTS); registerMachineRecipe(provider, GTMachines.CHEMICAL_BATH, "VGW", "PGV", "CMC", 'M', HULL, 'P', PUMP, 'V', CONVEYOR, 'C', CIRCUIT, 'W', CABLE, 'G', GLASS); registerMachineRecipe(provider, GTMachines.POLARIZER, "ZSZ", "WMW", "ZSZ", 'M', HULL, 'S', STICK_ELECTROMAGNETIC, 'Z', COIL_ELECTRIC, 'W', CABLE); registerMachineRecipe(provider, GTMachines.ELECTROMAGNETIC_SEPARATOR, "VWZ", "WMS", "CWZ", 'M', HULL, 'S', STICK_ELECTROMAGNETIC, 'Z', COIL_ELECTRIC, 'V', CONVEYOR, 'C', CIRCUIT, 'W', CABLE); @@ -327,9 +336,9 @@ public static void init(Consumer provider) { registerMachineRecipe(provider, GTMachines.FISHER, "WTW", "PMP", "TGT", 'M', HULL, 'W', CIRCUIT, 'G', PUMP, 'T', MOTOR, 'P', PISTON); registerMachineRecipe(provider, GTMachines.ITEM_COLLECTOR, "MRM", "RHR", "CWC", 'M', MOTOR, 'R', ROTOR, 'H', HULL, 'C', CIRCUIT, 'W', CABLE); - registerMachineRecipe(provider, GTMachines.BLOCK_BREAKER, "MGM", "CHC", "WSW", 'M', MOTOR, 'H', HULL, 'C', CIRCUIT, 'W', CABLE, 'S', CustomTags.TAG_WOODEN_CHESTS, 'G', GRINDER); if(ConfigHolder.INSTANCE.machines.enableWorldAccelerators) registerMachineRecipe(provider, GTMachines.WORLD_ACCELERATOR, "FSF", "EHE", "FSF", 'F', FIELD_GENERATOR, 'S', SENSOR, 'E', EMITTER, 'H', HULL); + registerMachineRecipe(provider, GTMachines.BLOCK_BREAKER, "MGM", "CHC", "WSW", 'M', MOTOR, 'H', HULL, 'C', CIRCUIT, 'W', CABLE, 'S', CustomTags.WOODEN_CHESTS, 'G', GRINDER); registerMachineRecipe(provider, GTMachines.MINER, "MMM", "WHW", "CSC", 'M', MOTOR, 'W', CABLE, 'H', HULL, 'C', CIRCUIT, 'S', SENSOR); registerMachineRecipe(provider, GTMachines.MUFFLER_HATCH, "HM", "PR", 'H', HULL, 'M', MOTOR, 'P', PIPE_NORMAL, 'R', ROTOR); @@ -347,18 +356,16 @@ public static void init(Consumer provider) { registerMachineRecipe(provider, ArrayUtils.subarray(GTMachines.POWER_TRANSFORMER, GTValues.ULV, GTValues.MV), " CC", "TH ", " CC", 'C', CABLE_HEX, 'T', CABLE_TIER_UP_HEX, 'H', HULL); registerMachineRecipe(provider, ArrayUtils.subarray(GTMachines.POWER_TRANSFORMER, GTValues.MV, GTValues.UHV), "WCC", "TH ", "WCC", 'W', POWER_COMPONENT, 'C', CABLE_HEX, 'T', CABLE_TIER_UP_HEX, 'H', HULL); - registerMachineRecipe(provider, GTMachines.BATTERY_BUFFER_4, "WTW", "WMW", 'M', HULL, 'W', WIRE_QUAD, 'T', CustomTags.TAG_WOODEN_CHESTS); - registerMachineRecipe(provider, GTMachines.BATTERY_BUFFER_8, "WTW", "WMW", 'M', HULL, 'W', WIRE_OCT, 'T', CustomTags.TAG_WOODEN_CHESTS); - registerMachineRecipe(provider, GTMachines.BATTERY_BUFFER_16, "WTW", "WMW", 'M', HULL, 'W', WIRE_HEX, 'T', CustomTags.TAG_WOODEN_CHESTS); - - registerMachineRecipe(provider, GTMachines.CHARGER_4, "WTW", "WMW", "BCB", 'M', HULL, 'W', WIRE_QUAD, 'T', CustomTags.TAG_WOODEN_CHESTS, 'B', CABLE, 'C', CIRCUIT); + registerMachineRecipe(provider, GTMachines.BATTERY_BUFFER_4, "WTW", "WMW", 'M', HULL, 'W', WIRE_QUAD, 'T', CustomTags.WOODEN_CHESTS); + registerMachineRecipe(provider, GTMachines.BATTERY_BUFFER_8, "WTW", "WMW", 'M', HULL, 'W', WIRE_OCT, 'T', CustomTags.WOODEN_CHESTS); + registerMachineRecipe(provider, GTMachines.BATTERY_BUFFER_16, "WTW", "WMW", 'M', HULL, 'W', WIRE_HEX, 'T', CustomTags.WOODEN_CHESTS);; + registerMachineRecipe(provider, GTMachines.CHARGER_4, "WTW", "WMW", "BCB", 'M', HULL, 'W', WIRE_QUAD, 'T', CustomTags.WOODEN_CHESTS, 'B', CABLE, 'C', CIRCUIT); registerMachineRecipe(provider, GTMachines.FLUID_IMPORT_HATCH, " G", " M", 'M', HULL, 'G', GLASS); registerMachineRecipe(provider, GTMachines.FLUID_EXPORT_HATCH, " M", " G", 'M', HULL, 'G', GLASS); - registerMachineRecipe(provider, GTMachines.ITEM_IMPORT_BUS, " C", " M", 'M', HULL, 'C', CustomTags.TAG_WOODEN_CHESTS); - registerMachineRecipe(provider, GTMachines.ITEM_EXPORT_BUS, " M", " C", 'M', HULL, 'C', CustomTags.TAG_WOODEN_CHESTS); - + registerMachineRecipe(provider, GTMachines.ITEM_IMPORT_BUS, " C", " M", 'M', HULL, 'C', CustomTags.WOODEN_CHESTS); + registerMachineRecipe(provider, GTMachines.ITEM_EXPORT_BUS, " M", " C", 'M', HULL, 'C', CustomTags.WOODEN_CHESTS); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java index a852c0bcb2..af818d101c 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java @@ -510,7 +510,7 @@ private static void woodRecipes(Consumer provider) { ASSEMBLER_RECIPES.recipeBuilder("ladder").EUt(1).duration(40).circuitMeta(7).inputItems(new ItemStack(Items.STICK, 7)).outputItems(new ItemStack(Blocks.LADDER, 2)).save(provider); - ASSEMBLER_RECIPES.recipeBuilder("chest_minecart").EUt(4).duration(100).inputItems(new ItemStack(Items.MINECART)).inputItems(CustomTags.TAG_WOODEN_CHESTS).outputItems(new ItemStack(Items.CHEST_MINECART)).save(provider); + ASSEMBLER_RECIPES.recipeBuilder("chest_minecart").EUt(4).duration(100).inputItems(new ItemStack(Items.MINECART)).inputItems(CustomTags.WOODEN_CHESTS).outputItems(new ItemStack(Items.CHEST_MINECART)).save(provider); ASSEMBLER_RECIPES.recipeBuilder("furnace_minecart").EUt(4).duration(100).inputItems(new ItemStack(Items.MINECART)).inputItems(new ItemStack(Blocks.FURNACE)).outputItems(new ItemStack(Items.FURNACE_MINECART)).save(provider); ASSEMBLER_RECIPES.recipeBuilder("tnt_minecart").EUt(4).duration(100).inputItems(new ItemStack(Items.MINECART)).inputItems(new ItemStack(Blocks.TNT)).outputItems(new ItemStack(Items.TNT_MINECART)).save(provider); ASSEMBLER_RECIPES.recipeBuilder("hopper_minecart").EUt(4).duration(100).inputItems(new ItemStack(Items.MINECART)).inputItems(new ItemStack(Blocks.HOPPER)).outputItems(new ItemStack(Items.HOPPER_MINECART)).save(provider); @@ -885,7 +885,7 @@ private static void miscRecipes(Consumer provider) { ASSEMBLER_RECIPES.recipeBuilder("end_rod").duration(100).EUt(4).inputItems(new ItemStack(Items.POPPED_CHORUS_FRUIT)).inputItems(new ItemStack(Items.BLAZE_ROD)).outputItems(new ItemStack(Blocks.END_ROD, 4)).save(provider); - ASSEMBLER_RECIPES.recipeBuilder("purple_shulker_box").duration(100).EUt(VA[ULV]).inputItems(CustomTags.TAG_WOODEN_CHESTS).inputItems(new ItemStack(Items.SHULKER_SHELL, 2)).outputItems(new ItemStack(Blocks.PURPLE_SHULKER_BOX)).save(provider); + ASSEMBLER_RECIPES.recipeBuilder("purple_shulker_box").duration(100).EUt(VA[ULV]).inputItems(CustomTags.WOODEN_CHESTS).inputItems(new ItemStack(Items.SHULKER_SHELL, 2)).outputItems(new ItemStack(Blocks.PURPLE_SHULKER_BOX)).save(provider); ASSEMBLER_RECIPES.recipeBuilder("painting").duration(100).EUt(4).circuitMeta(1).inputItems(ItemTags.WOOL).inputItems(new ItemStack(Items.STICK, 8)).outputItems(new ItemStack(Items.PAINTING)).save(provider); ASSEMBLER_RECIPES.recipeBuilder("item_frame").duration(100).EUt(4).inputItems(new ItemStack(Items.LEATHER)).inputItems(new ItemStack(Items.STICK, 8)).outputItems(new ItemStack(Items.ITEM_FRAME)).save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java index 863f378929..96115f313a 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java @@ -1,102 +1,604 @@ package com.gregtechceu.gtceu.data.recipe.misc; +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.chemical.material.stack.ItemMaterialInfo; +import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialStack; +import com.gregtechceu.gtceu.api.data.chemical.material.stack.UnificationEntry; +import com.gregtechceu.gtceu.common.data.GTBlocks; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; +import com.gregtechceu.gtceu.data.recipe.WoodTypeEntry; +import com.lowdragmc.lowdraglib.side.fluid.forge.FluidHelperImpl; import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraftforge.common.Tags; +import net.minecraftforge.fluids.FluidUtil; +import org.jetbrains.annotations.NotNull; +import java.util.Arrays; +import java.util.List; import java.util.function.Consumer; +import static com.gregtechceu.gtceu.api.GTValues.*; import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; import static com.gregtechceu.gtceu.common.data.GTItems.BIO_CHAFF; import static com.gregtechceu.gtceu.common.data.GTMaterials.*; -import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.PYROLYSE_RECIPES; +import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.*; public class WoodMachineRecipes { public static void init(Consumer provider) { + registerGTWoodRecipes(provider); + registerWoodRecipes(provider); registerPyrolyseOvenRecipes(provider); } - // TODO Log stuff (complicated) - /* - public static void postInit() { - processLogOreDictionary(); + private static List DEFAULT_ENTRIES; + + private static List getDefaultEntries() { + if (DEFAULT_ENTRIES == null) { + final String mcModId = "minecraft"; + return DEFAULT_ENTRIES = Arrays.asList( + new WoodTypeEntry.Builder(mcModId, "oak") + .planks(Items.OAK_PLANKS, "oak_planks") + .log(Items.OAK_LOG).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_OAK_LOG) + .wood(Items.OAK_WOOD) + .strippedWood(Items.STRIPPED_OAK_WOOD) + .door(Items.OAK_DOOR, "oak_door") + .trapdoor(Items.OAK_TRAPDOOR, "oak_trapdoor") + .slab(Items.OAK_SLAB, "oak_slab") + .fence(Items.OAK_FENCE, "oak_fence") + .fenceGate(Items.OAK_FENCE_GATE, "oak_fence_gate") + .stairs(Items.OAK_STAIRS, "oak_stairs") + .boat(Items.OAK_BOAT, "oak_boat") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "spruce") + .planks(Items.SPRUCE_PLANKS, "spruce_planks") + .log(Items.SPRUCE_LOG).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_SPRUCE_LOG) + .wood(Items.SPRUCE_WOOD) + .strippedWood(Items.STRIPPED_SPRUCE_WOOD) + .door(Items.SPRUCE_DOOR, "spruce_door") + .trapdoor(Items.SPRUCE_TRAPDOOR, "spruce_trapdoor") + .slab(Items.SPRUCE_SLAB, "spruce_slab") + .fence(Items.SPRUCE_FENCE, "spruce_fence") + .fenceGate(Items.SPRUCE_FENCE_GATE, "spruce_fence_gate") + .stairs(Items.SPRUCE_STAIRS, "spruce_stairs") + .boat(Items.SPRUCE_BOAT, "spruce_boat") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "birch") + .planks(Items.BIRCH_PLANKS, "birch_planks") + .log(Items.BIRCH_LOG).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_BIRCH_LOG) + .wood(Items.BIRCH_WOOD) + .strippedWood(Items.STRIPPED_BIRCH_WOOD) + .door(Items.BIRCH_DOOR, "birch_door") + .trapdoor(Items.BIRCH_TRAPDOOR, "birch_trapdoor") + .slab(Items.BIRCH_SLAB, "birch_slab") + .fence(Items.BIRCH_FENCE, "birch_fence") + .fenceGate(Items.BIRCH_FENCE_GATE, "birch_fence_gate") + .stairs(Items.BIRCH_STAIRS, "birch_stairs") + .boat(Items.BIRCH_BOAT, "birch_boat") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "jungle") + .planks(Items.JUNGLE_PLANKS, "jungle_planks") + .log(Items.JUNGLE_LOG).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_JUNGLE_LOG) + .wood(Items.JUNGLE_WOOD) + .strippedWood(Items.STRIPPED_JUNGLE_WOOD) + .door(Items.JUNGLE_DOOR, "jungle_door") + .trapdoor(Items.JUNGLE_TRAPDOOR, "jungle_trapdoor") + .slab(Items.JUNGLE_SLAB, "jungle_slab") + .fence(Items.JUNGLE_FENCE, "jungle_fence") + .fenceGate(Items.JUNGLE_FENCE_GATE, "jungle_fence_gate") + .stairs(Items.JUNGLE_STAIRS, "jungle_stairs") + .boat(Items.JUNGLE_BOAT, "jungle_boat") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "acacia") + .planks(Items.ACACIA_PLANKS, "acacia_planks") + .log(Items.ACACIA_LOG).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_ACACIA_LOG) + .wood(Items.ACACIA_WOOD) + .strippedWood(Items.STRIPPED_ACACIA_WOOD) + .door(Items.ACACIA_DOOR, "acacia_door") + .trapdoor(Items.ACACIA_TRAPDOOR, "acacia_trapdoor") + .slab(Items.ACACIA_SLAB, "acacia_slab") + .fence(Items.ACACIA_FENCE, "acacia_fence") + .fenceGate(Items.ACACIA_FENCE_GATE, "acacia_fence_gate") + .stairs(Items.ACACIA_STAIRS, "acacia_stairs") + .boat(Items.ACACIA_BOAT, "acacia_boat") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "dark_oak") + .planks(Items.DARK_OAK_PLANKS, "dark_oak_planks") + .log(Items.DARK_OAK_LOG).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_DARK_OAK_LOG) + .wood(Items.DARK_OAK_WOOD) + .strippedWood(Items.STRIPPED_DARK_OAK_WOOD) + .door(Items.DARK_OAK_DOOR, "dark_oak_door") + .trapdoor(Items.DARK_OAK_TRAPDOOR, "dark_oak_trapdoor") + .slab(Items.DARK_OAK_SLAB, "dark_oak_slab") + .fence(Items.DARK_OAK_FENCE, "dark_oak_fence") + .fenceGate(Items.DARK_OAK_FENCE_GATE, "dark_oak_fence_gate") + .stairs(Items.DARK_OAK_STAIRS, "dark_oak_stairs") + .boat(Items.DARK_OAK_BOAT, "dark_oak_boat") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "mangrove") + .planks(Items.MANGROVE_PLANKS, "mangrove_planks") + .log(Items.MANGROVE_LOG).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_MANGROVE_LOG) + .wood(Items.MANGROVE_WOOD) + .strippedWood(Items.STRIPPED_MANGROVE_WOOD) + .door(Items.MANGROVE_DOOR, "mangrove_door") + .trapdoor(Items.MANGROVE_TRAPDOOR, "mangrove_trapdoor") + .slab(Items.MANGROVE_SLAB, "mangrove_slab") + .fence(Items.MANGROVE_FENCE, "mangrove_fence") + .fenceGate(Items.MANGROVE_FENCE_GATE, "mangrove_fence_gate") + .stairs(Items.MANGROVE_STAIRS, "mangrove_stairs") + .boat(Items.MANGROVE_BOAT, "mangrove_boat") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "crimson") + .planks(Items.CRIMSON_PLANKS, "crimson_planks") + .log(Items.CRIMSON_STEM).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_CRIMSON_STEM) + .wood(Items.CRIMSON_HYPHAE) + .strippedWood(Items.STRIPPED_CRIMSON_HYPHAE) + .door(Items.CRIMSON_DOOR, "crimson_door") + .trapdoor(Items.CRIMSON_TRAPDOOR, "crimson_trapdoor") + .slab(Items.CRIMSON_SLAB, "crimson_slab") + .fence(Items.CRIMSON_FENCE, "crimson_fence") + .fenceGate(Items.CRIMSON_FENCE_GATE, "crimson_fence_gate") + .stairs(Items.CRIMSON_STAIRS, "crimson_stairs") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(mcModId, "warped") + .planks(Items.WARPED_PLANKS, "warped_planks") + .log(Items.WARPED_STEM).removeCharcoalRecipe() + .strippedLog(Items.STRIPPED_WARPED_STEM) + .wood(Items.WARPED_HYPHAE) + .strippedWood(Items.STRIPPED_WARPED_HYPHAE) + .door(Items.WARPED_DOOR, "warped_door") + .trapdoor(Items.WARPED_TRAPDOOR, "warped_trapdoor") + .slab(Items.WARPED_SLAB, "warped_slab") + .fence(Items.WARPED_FENCE, "warped_fence") + .fenceGate(Items.WARPED_FENCE_GATE, "warped_fence_gate") + .stairs(Items.WARPED_STAIRS, "warped_stairs") + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(GTCEu.MOD_ID, "rubber") + .planks(GTBlocks.RUBBER_PLANK.get().asItem(), null) + .log(GTBlocks.RUBBER_LOG.get().asItem()).addCharcoalRecipe() + .strippedLog(GTBlocks.STRIPPED_RUBBER_LOG.get().asItem()) + .wood(GTBlocks.RUBBER_WOOD.get().asItem()) + .strippedWood(GTBlocks.STRIPPED_RUBBER_WOOD.get().asItem()) + .door(GTBlocks.RUBBER_DOOR.get().asItem(), null) + .trapdoor(GTBlocks.RUBBER_TRAPDOOR.get().asItem(), null) + .slab(GTBlocks.RUBBER_SLAB.get().asItem(), null).addSlabRecipe() + .fence(GTBlocks.RUBBER_FENCE.get().asItem(), null) + .fenceGate(GTBlocks.RUBBER_FENCE_GATE.get().asItem(), null) + .stairs(GTBlocks.RUBBER_STAIRS.get().asItem(), null).addStairsRecipe() + //.boat(GTItems.RUBBER_BOAT.get().asItem(), null) // TODO someone forgot boat textures. + .registerAllTags() + .registerAllUnificationInfo() + .build(), + new WoodTypeEntry.Builder(GTCEu.MOD_ID, "treated") + .planks(GTBlocks.TREATED_WOOD_PLANK.get().asItem(), null) + .door(GTBlocks.TREATED_WOOD_DOOR.get().asItem(), null) + .trapdoor(GTBlocks.TREATED_WOOD_TRAPDOOR.get().asItem(), null) + .slab(GTBlocks.TREATED_WOOD_SLAB.get().asItem(), null).addSlabRecipe() + .fence(GTBlocks.TREATED_WOOD_FENCE.get().asItem(), null) + .fenceGate(GTBlocks.TREATED_WOOD_FENCE_GATE.get().asItem(), null) + .stairs(GTBlocks.TREATED_WOOD_STAIRS.get().asItem(), null).addStairsRecipe() + //.boat(GTItems.TREATED_WOOD_BOAT.get().asItem(), null) // TODO someone forgot boat textures. + .material(TreatedWood) + .registerAllTags() + .registerAllUnificationInfo() + .build()); + } + return DEFAULT_ENTRIES; + } + + public static void registerUnificationInfo() { + for (WoodTypeEntry entry : getDefaultEntries()) { + registerWoodUnificationInfo(entry); + } + } + + /** + * Standardized processing for wood types + */ + private static void registerWoodRecipes(Consumer provider) { + if (ConfigHolder.INSTANCE.recipes.nerfWoodCrafting) { + VanillaRecipeHelper.addShapedRecipe(provider, "stick_saw", new ItemStack(Items.STICK, 4), "s", "P", "P", 'P', ItemTags.PLANKS); + VanillaRecipeHelper.addShapedRecipe(provider, "stick_normal", new ItemStack(Items.STICK, 2), "P", "P", 'P', ItemTags.PLANKS); + } + + for (WoodTypeEntry entry : getDefaultEntries()) { + registerWoodTypeRecipe(provider, entry); + } } - private static void processLogOreDictionary() { - List allWoodLogs = OreDictUnifier.getAllWithOreDictionaryName("logWood").stream() - .flatMap(stack -> GTUtility.getAllSubItems(stack).stream()) - .collect(Collectors.toList()); - - for (ItemStack stack : allWoodLogs) { - Pair outputPair = ModHandler.getRecipeoutputItems(null, stack); - ItemStack plankStack = outputPair.getValue(); - int originalOutput = plankStack.getCount(); - if (plankStack.isEmpty()) { - continue; + /** + * Adds all standard unification info and ore dictionary for a wood type + * + * @param entry the entry to register for + */ + public static void registerWoodUnificationInfo(@NotNull WoodTypeEntry entry) { + if (entry.log != null && entry.addLogOreDict) { + ChemicalHelper.registerUnificationItems(log, entry.material, entry.log); + } + + if (entry.addPlanksOreDict) { + ChemicalHelper.registerUnificationItems(planks, entry.material, entry.planks); + } + if (entry.addPlanksUnificationInfo) { + ChemicalHelper.registerMaterialInfo(entry.planks, new ItemMaterialInfo(new MaterialStack(entry.material, M))); + } + + if (entry.door != null) { + if (entry.addDoorsOreDict) { + ChemicalHelper.registerUnificationItems(door, entry.material, entry.door); + } + if (entry.addDoorsUnificationInfo) { + ChemicalHelper.registerMaterialInfo(entry.door, ConfigHolder.INSTANCE.recipes.hardWoodRecipes ? + new ItemMaterialInfo(new MaterialStack(entry.material, M * 2), + new MaterialStack(GTMaterials.Iron, M / 9)) : // screw + new ItemMaterialInfo(new MaterialStack(entry.material, M * 2))); + } + } + + if (entry.slab != null) { + if (entry.addSlabsOreDict) { + ChemicalHelper.registerUnificationItems(slab, entry.material, entry.slab); + } + if (entry.addSlabsUnificationInfo) { + ChemicalHelper.registerMaterialInfo(entry.slab, new ItemMaterialInfo(new MaterialStack(entry.material, M / 2))); } - IRecipe outputRecipe = outputPair.getKey(); + } - //wood nerf - if (ConfigHolder.INSTANCE.recipes.nerfWoodCrafting) { - //remove the old recipe - ModHandler.removeRecipeByName(outputRecipe.getRegistryName()); + if (entry.fence != null) { + if (entry.addFencesOreDict) { + ChemicalHelper.registerUnificationItems(fence, entry.material, entry.fence); + } + if (entry.addFencesUnificationInfo) { + ChemicalHelper.registerMaterialInfo(entry.fence, new ItemMaterialInfo(new MaterialStack(entry.material, M))); + } + } + + if (entry.fenceGate != null) { + if (entry.addFenceGatesOreDict) { + ChemicalHelper.registerUnificationItems(fenceGate, entry.material, entry.fenceGate); + } + if (entry.addFenceGatesUnificationInfo) { + ChemicalHelper.registerMaterialInfo(entry.fenceGate, + new ItemMaterialInfo(new MaterialStack(entry.material, M * 3))); + } + } + + if (entry.stairs != null) { + if (entry.addStairsOreDict) { + ChemicalHelper.registerUnificationItems(stairs, entry.material, entry.stairs); + } + if (entry.addStairsUnificationInfo) { + ChemicalHelper.registerMaterialInfo(entry.stairs, + new ItemMaterialInfo(new MaterialStack(entry.material, (3 * M) / 2))); + } + } + + if (entry.boat != null && entry.addBoatsUnificationInfo) { + ChemicalHelper.registerMaterialInfo(entry.boat, new ItemMaterialInfo(new MaterialStack(entry.material, M * 5))); + } + } + + /** + * Adds all standard recipes for a wood type + * + * @param entry the entry to register for + */ + public static void registerWoodTypeRecipe(Consumer provider, @NotNull WoodTypeEntry entry) { + final String name = entry.woodName; - // new wood recipes - //noinspection ConstantConditions - ModHandler.addShapelessRecipe(outputRecipe.getRegistryName().toString(), - GTUtility.copyAmount(Math.max(1, originalOutput / 2), plankStack), stack); + //noinspection ConstantValue can be null if someone does an oopsie and doesn't set it. + if (entry.planks == null) { + throw new IllegalStateException("Could not find planks form of WoodTypeEntry '" + name + "'."); + } - ModHandler.addShapedRecipe(outputRecipe.getRegistryName().getPath() + "_saw", - GTUtility.copyAmount(originalOutput, plankStack), "s", "L", 'L', stack); + // log-associated recipes + if (entry.log != null) { + // nerf regular log -> plank crafting, if enabled + boolean hasPlanksRecipe = entry.planksRecipeName != null; + if (ConfigHolder.INSTANCE.recipes.nerfWoodCrafting) { + VanillaRecipeHelper.addShapelessRecipe(provider, hasPlanksRecipe ? entry.planksRecipeName : name + "_planks", + new ItemStack(entry.planks, 2), entry.log); } else { - //noinspection ConstantConditions - ModHandler.addShapedRecipe(outputRecipe.getRegistryName().getPath() + "_saw", - GTUtility.copyAmount((int) (originalOutput * 1.5), plankStack), "s", "L", 'L', stack); + if (!hasPlanksRecipe) { + VanillaRecipeHelper.addShapelessRecipe(provider, name + "_planks", new ItemStack(entry.planks, 4), entry.log); + } } + // log -> plank saw crafting + VanillaRecipeHelper.addShapedRecipe(provider, name + "_planks_saw", + new ItemStack(entry.planks, ConfigHolder.INSTANCE.recipes.nerfWoodCrafting ? 4 : 6), + "s", "L", 'L', entry.log); + + // log -> plank cutting + CUTTER_RECIPES.recipeBuilder(name + "_planks") + .inputItems(entry.log) + .outputItems(new ItemStack(entry.planks, 6)) + .outputItems(dust, Wood, 2) + .duration(200) + .EUt(VA[ULV]) + .save(provider); + } + + // door + if (entry.door != null) { + final boolean hasDoorRecipe = entry.doorRecipeName != null; + if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes) { + String recipeName = hasDoorRecipe ? entry.doorRecipeName : name + "_door"; + if (entry.trapdoor != null) { + VanillaRecipeHelper.addShapedRecipe(provider, recipeName, new ItemStack(entry.door), + "PTd", "PRS", "PPs", + 'P', entry.planks, + 'T', entry.trapdoor, + 'R', new UnificationEntry(ring, Iron), + 'S', new UnificationEntry(screw, Iron)); + + // plank -> door assembling + ASSEMBLER_RECIPES.recipeBuilder(name + "_door") + .inputItems(entry.trapdoor) + .inputItems(new ItemStack(entry.planks, 4)) + .inputFluids(Iron.getFluid(GTValues.L / 9)) + .outputItems(entry.door) + .duration(400).EUt(4).save(provider); + } else { + VanillaRecipeHelper.addShapedRecipe(provider, recipeName, new ItemStack(entry.door), + "PTd", "PRS", "PPs", + 'P', entry.planks, + 'T', ItemTags.WOODEN_TRAPDOORS, + 'R', new UnificationEntry(ring, Iron), + 'S', new UnificationEntry(screw, Iron)); + + // plank -> door assembling + ASSEMBLER_RECIPES.recipeBuilder(name + "_door") + .inputItems(ItemTags.WOODEN_TRAPDOORS) + .inputItems(new ItemStack(entry.planks, 4)) + .inputFluids(Iron.getFluid(GTValues.L / 9)) + .outputItems(entry.door) + .duration(400).EUt(4).save(provider); + } + } else { + if (!hasDoorRecipe) { + VanillaRecipeHelper.addShapedRecipe(provider, name + "_door", new ItemStack(entry.door, 3), + "PP", "PP", "PP", + 'P', entry.planks); + } + + ASSEMBLER_RECIPES.recipeBuilder(name + "_door") + .inputItems(new ItemStack(entry.planks, 6)) + .outputItems(new ItemStack(entry.door, 3)) + .circuitMeta(6) + .duration(600).EUt(4) + .save(provider); + } + } - CUTTER_RECIPES.recipeBuilder().inputItems(stack) - .inputFluids(Lubricant.getFluid(1)) - .outputItems(GTUtility.copyAmount((int) (originalOutput * 1.5), plankStack), OreDictUnifier.get(dust, Wood, 2)) - .duration(200).EUt(VA[ULV]) - .save(provider; + // stairs + if (entry.stairs != null) { + final boolean hasStairRecipe = entry.stairsRecipeName != null; + if (entry.addStairsCraftingRecipe) { + VanillaRecipeHelper.addShapedRecipe(provider, hasStairRecipe ? entry.stairsRecipeName : name + "_stairs", + new ItemStack(entry.stairs, 4), + "P ", "PP ", "PPP", + 'P', entry.planks); + } - ItemStack doorStack = ModHandler.getRecipeoutputItems(DummyWorld.INSTANCE, - plankStack, plankStack, ItemStack.EMPTY, - plankStack, plankStack, ItemStack.EMPTY, - plankStack, plankStack, ItemStack.EMPTY).getRight(); + // plank -> stairs assembling + ASSEMBLER_RECIPES.recipeBuilder(name + "_stairs") + .inputItems(new ItemStack(entry.planks, 6)) + .outputItems(new ItemStack(entry.stairs, 4)) + .circuitMeta(7) + .EUt(1).duration(100).save(provider); + } - if (!doorStack.isEmpty()) { - ASSEMBLER_RECIPES.recipeBuilder() - .inputItems(GTUtility.copyAmount(6, plankStack)) - .outputItems(doorStack) - .duration(600).EUt(4).circuitMeta(6) - .save(provider; + // slab + if (entry.slab != null) { + if (entry.addSlabCraftingRecipe && !ConfigHolder.INSTANCE.recipes.hardWoodRecipes) { + VanillaRecipeHelper.addShapedRecipe(provider, name + "_slab", new ItemStack(entry.slab, 6), + "PPP", 'P', entry.planks); } - ItemStack slabStack = ModHandler.getRecipeoutputItems(DummyWorld.INSTANCE, plankStack, plankStack, plankStack).getRight(); + // plank -> slab crafting + VanillaRecipeHelper.addShapedRecipe(provider, name + "_slab_saw", new ItemStack(entry.slab, 2), + "sS", 'S', entry.planks); + + // plank -> slab cutting + CUTTER_RECIPES.recipeBuilder(name + "_slab") + .inputItems(entry.planks) + .outputItems(new ItemStack(entry.slab, 2)) + .duration(200).EUt(VA[ULV]) + .save(provider); + } + + // fence + if (entry.fence != null) { + final boolean hasFenceRecipe = entry.fenceRecipeName != null; + if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes) { + + VanillaRecipeHelper.addShapedRecipe(provider, hasFenceRecipe ? entry.fenceRecipeName : name + "_fence", new ItemStack(entry.fence), + "PSP", "PSP", "PSP", + 'P', entry.planks, + 'S', entry.getStick()); + } else { + if (!hasFenceRecipe) { + VanillaRecipeHelper.addShapedRecipe(provider, name + "_fence", new ItemStack(entry.fence, 3), + "PSP", "PSP", + 'P', entry.planks, + 'S', entry.getStick()); + } + } - if (!slabStack.isEmpty()) { - CUTTER_RECIPES.recipeBuilder() - .inputItems(GTUtility.copyAmount(1, plankStack)) - .outputItems(GTUtility.copyAmount(2, slabStack)) - .duration(200).EUt(VA[ULV]) - .save(provider; + // plank -> fence assembling + ASSEMBLER_RECIPES.recipeBuilder(name + "_fence") + .inputItems(entry.planks) + .outputItems(entry.fence) + .circuitMeta(1) + .duration(100).EUt(4) + .save(provider); + } - ModHandler.addShapedRecipe(slabStack.getDisplayName() + "_saw", GTUtility.copyAmount(2, slabStack), "sS", 'S', GTUtility.copyAmount(1, plankStack)); + // fence gate + if (entry.fenceGate != null) { + final boolean hasFenceGateRecipe = entry.fenceGateRecipeName != null; + if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes) { + + VanillaRecipeHelper.addShapedRecipe(provider, hasFenceGateRecipe ? entry.fenceGateRecipeName : name + "_fence_gate", + new ItemStack(entry.fenceGate), + "F F", "SPS", "SPS", + 'P', entry.planks, + 'S', entry.getStick(), + 'F', Items.FLINT); + + VanillaRecipeHelper.addShapedRecipe(provider, name + "_fence_gate_screws", new ItemStack(entry.fenceGate, 2), + "IdI", "SPS", "SPS", + 'P', entry.planks, + 'S', entry.getStick(), + 'I', new UnificationEntry(screw, Iron)); + } else { + if (!hasFenceGateRecipe) { + VanillaRecipeHelper.addShapedRecipe(provider, name + "_fence_gate", new ItemStack(entry.fenceGate), + "SPS", "SPS", + 'P', entry.planks, + 'S', entry.getStick()); + } } - if (ConfigHolder.INSTANCE.recipes.harderCharcoalRecipe) { - ItemStack outputStack = FurnaceRecipes.instance().getSmeltingResult(stack); - if (outputStack.getItem() == Items.COAL && outputStack.getItemDamage() == 1) { - ModHandler.removeFurnaceSmelting(stack); + // plank -> fence gate assembling + ASSEMBLER_RECIPES.recipeBuilder(name + "_fence_gate") + .inputItems(new ItemStack(entry.planks, 2)) + .inputItems(Tags.Items.RODS_WOODEN, 2) + .outputItems(entry.fenceGate) + .circuitMeta(2) + .duration(100).EUt(4).save(provider); + } + + // boat + if (entry.boat != null) { + final boolean hasBoatRecipe = entry.boatRecipeName != null; + if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes) { + if (entry.slab != null) { + + VanillaRecipeHelper.addShapedRecipe(provider, hasBoatRecipe ? entry.boatRecipeName : name + "_boat", new ItemStack(entry.boat), + "PHP", "PkP", "SSS", + 'P', entry.planks, + 'S', entry.slab, + 'H', Tags.Items.TOOLS_SHOVELS); + } + } else { + if (!hasBoatRecipe) { + VanillaRecipeHelper.addShapedRecipe(provider, name + "_boat", new ItemStack(entry.boat), + "P P", "PPP", + 'P', entry.planks); } } + + // plank -> boat assembling + ASSEMBLER_RECIPES.recipeBuilder(name + "_boat") + .inputItems(new ItemStack(entry.planks, 5)) + .outputItems(entry.boat) + .circuitMeta(15) + .duration(100).EUt(4).save(provider); } } + + /** + * Standard recipes for GT woods */ + private static void registerGTWoodRecipes(Consumer provider) { + VanillaRecipeHelper.addShapedRecipe(provider, "treated_wood_planks", + GTBlocks.TREATED_WOOD_PLANK.asStack(8), + "PPP", "PBP", "PPP", + 'P', ItemTags.PLANKS, + 'B', FluidUtil.getFilledBucket(FluidHelperImpl.toFluidStack(Creosote.getFluid(1000)))); + + VanillaRecipeHelper.addShapedRecipe(provider, "treated_wood_stick", + ChemicalHelper.get(rod, TreatedWood, ConfigHolder.INSTANCE.recipes.nerfWoodCrafting ? 2 : 4), + "L", "L", + 'L', GTBlocks.TREATED_WOOD_PLANK.get().asItem()); + if (ConfigHolder.INSTANCE.recipes.nerfWoodCrafting) { + VanillaRecipeHelper.addShapedRecipe(provider, "treated_wood_stick_saw", ChemicalHelper.get(rod, TreatedWood, 4), + "s", "L", "L", + 'L', GTBlocks.TREATED_WOOD_PLANK.get().asItem()); + } + } + + public static void hardWoodRecipes(Consumer registry) { + if (ConfigHolder.INSTANCE.recipes.nerfWoodCrafting) { + registry.accept(new ResourceLocation("minecraft:stick")); + } + for (WoodTypeEntry entry : getDefaultEntries()) { + hardWoodTypeRecipes(registry, entry); + } + } + + private static void hardWoodTypeRecipes(Consumer registry, @NotNull WoodTypeEntry entry) { + if (ConfigHolder.INSTANCE.recipes.nerfWoodCrafting) { + if (entry.planksRecipeName != null) { + registry.accept(new ResourceLocation(entry.modid, entry.planksRecipeName)); + } + } + + if (ConfigHolder.INSTANCE.recipes.harderCharcoalRecipe) { + if (entry.removeCharcoalRecipe) { + registry.accept(new ResourceLocation("charcoal")); + } + } + + if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes) { + if (entry.door != null) { + // hard plank -> door crafting + if (entry.doorRecipeName != null) { + registry.accept(new ResourceLocation(entry.modid, entry.doorRecipeName)); + } + } + if (entry.slab != null) { + if (ConfigHolder.INSTANCE.recipes.hardWoodRecipes && entry.slabRecipeName != null) { + registry.accept(new ResourceLocation(entry.modid, entry.slabRecipeName)); + } + if (entry.boat != null) { + // hard plank -> boat crafting + if (entry.boatRecipeName != null) { + registry.accept(new ResourceLocation(entry.modid, entry.boatRecipeName)); + } + } + } + if (entry.fence != null) { + // hard plank -> fence crafting + if (entry.fenceRecipeName != null) { + registry.accept(new ResourceLocation(entry.modid, entry.fenceRecipeName)); + } + } + if (entry.fenceGate != null) { + // hard plank -> fence gate crafting + if (entry.fenceGateRecipeName != null) { + registry.accept(new ResourceLocation(entry.modid, entry.fenceGateRecipeName)); + } + } + } + } private static void registerPyrolyseOvenRecipes(Consumer provider) { // Logs ================================================ @@ -105,7 +607,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide PYROLYSE_RECIPES.recipeBuilder("log_to_charcoal_byproducts").circuitMeta(4) .inputItems(ItemTags.LOGS_THAT_BURN, 16) .inputFluids(Nitrogen.getFluid(1000)) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(CharcoalByproducts.getFluid(4000)) .duration(320).EUt(96) .save(provider); @@ -113,7 +615,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide // Wood Tar PYROLYSE_RECIPES.recipeBuilder("log_to_wood_tar").circuitMeta(9) .inputItems(ItemTags.LOGS_THAT_BURN, 16) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(WoodTar.getFluid(1500)) .duration(640).EUt(64) .save(provider); @@ -121,7 +623,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide PYROLYSE_RECIPES.recipeBuilder("log_to_wood_tar_nitrogen").circuitMeta(10) .inputItems(ItemTags.LOGS_THAT_BURN, 16) .inputFluids(Nitrogen.getFluid(1000)) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(WoodTar.getFluid(1500)) .duration(320).EUt(96) .save(provider); @@ -129,7 +631,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide // Wood Gas PYROLYSE_RECIPES.recipeBuilder("log_to_wood_gas").circuitMeta(5) .inputItems(ItemTags.LOGS_THAT_BURN, 16) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(WoodGas.getFluid(1500)) .duration(640).EUt(64) .save(provider); @@ -137,7 +639,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide PYROLYSE_RECIPES.recipeBuilder("log_to_wood_gas_nitrogen").circuitMeta(6) .inputItems(ItemTags.LOGS_THAT_BURN, 16) .inputFluids(Nitrogen.getFluid(1000)) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(WoodGas.getFluid(1500)) .duration(320).EUt(96) .save(provider); @@ -145,7 +647,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide // Wood Vinegar PYROLYSE_RECIPES.recipeBuilder("log_to_wood_vinegar").circuitMeta(7) .inputItems(ItemTags.LOGS_THAT_BURN, 16) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(WoodVinegar.getFluid(3000)) .duration(640).EUt(64) .save(provider); @@ -153,7 +655,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide PYROLYSE_RECIPES.recipeBuilder("log_to_wood_vinegar_nitrogen").circuitMeta(8) .inputItems(ItemTags.LOGS_THAT_BURN, 16) .inputFluids(Nitrogen.getFluid(1000)) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(WoodVinegar.getFluid(3000)) .duration(320).EUt(96) .save(provider); @@ -161,7 +663,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide // Creosote PYROLYSE_RECIPES.recipeBuilder("log_to_creosote").circuitMeta(1) .inputItems(ItemTags.LOGS_THAT_BURN, 16) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(Creosote.getFluid(4000)) .duration(640).EUt(64) .save(provider); @@ -169,7 +671,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide PYROLYSE_RECIPES.recipeBuilder("log_to_creosote_nitrogen").circuitMeta(2) .inputItems(ItemTags.LOGS_THAT_BURN, 16) .inputFluids(Nitrogen.getFluid(1000)) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(Creosote.getFluid(4000)) .duration(320).EUt(96) .save(provider); @@ -250,7 +752,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide PYROLYSE_RECIPES.recipeBuilder("log_to_coal_gas").circuitMeta(20) .inputItems(ItemTags.LOGS_THAT_BURN, 16) .inputFluids(Steam.getFluid(1000)) - .outputItems(new ItemStack(Items.CHARCOAL, 20)) + .outputItems(Items.CHARCOAL, 20) .outputFluids(CoalGas.getFluid(2000)) .duration(640).EUt(64) .save(provider); @@ -274,14 +776,14 @@ private static void registerPyrolyseOvenRecipes(Consumer provide // COAL TAR ============================================ PYROLYSE_RECIPES.recipeBuilder("charcoal_to_coal_tar").circuitMeta(8) - .inputItems(new ItemStack(Items.CHARCOAL, 32)) + .inputItems(Items.CHARCOAL, 32) .chancedOutput(dust, Ash, 5000, 0) .outputFluids(CoalTar.getFluid(1000)) .duration(640).EUt(64) .save(provider); PYROLYSE_RECIPES.recipeBuilder("coal_to_coal_tar").circuitMeta(8) - .inputItems(new ItemStack(Items.COAL, 12)) + .inputItems(Items.COAL, 12) .chancedOutput(dust, DarkAsh, 5000, 0) .outputFluids(CoalTar.getFluid(3000)) .duration(320).EUt(96) diff --git a/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java b/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java index c1d918a04e..417604aa41 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java @@ -4,11 +4,13 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.data.tag.TagUtil; +import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.tterrag.registrate.providers.RegistrateTagsProvider; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagBuilder; +import net.minecraft.tags.BlockTags; import net.minecraft.tags.TagKey; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -19,6 +21,13 @@ public static void init(RegistrateTagsProvider provider) { create(provider, CustomTags.CONCRETE_BLOCK, Blocks.WHITE_CONCRETE, Blocks.ORANGE_CONCRETE, Blocks.MAGENTA_CONCRETE, Blocks.LIGHT_BLUE_CONCRETE, Blocks.YELLOW_CONCRETE, Blocks.LIME_CONCRETE, Blocks.PINK_CONCRETE, Blocks.GRAY_CONCRETE, Blocks.LIGHT_GRAY_CONCRETE, Blocks.CYAN_CONCRETE, Blocks.PURPLE_CONCRETE, Blocks.BLUE_CONCRETE, Blocks.BROWN_CONCRETE, Blocks.GREEN_CONCRETE, Blocks.RED_CONCRETE, Blocks.BLACK_CONCRETE); create(provider, CustomTags.CONCRETE_POWDER_BLOCK, Blocks.WHITE_CONCRETE_POWDER, Blocks.ORANGE_CONCRETE_POWDER, Blocks.MAGENTA_CONCRETE_POWDER, Blocks.LIGHT_BLUE_CONCRETE_POWDER, Blocks.YELLOW_CONCRETE_POWDER, Blocks.LIME_CONCRETE_POWDER, Blocks.PINK_CONCRETE_POWDER, Blocks.GRAY_CONCRETE_POWDER, Blocks.LIGHT_GRAY_CONCRETE_POWDER, Blocks.CYAN_CONCRETE_POWDER, Blocks.PURPLE_CONCRETE_POWDER, Blocks.BLUE_CONCRETE_POWDER, Blocks.BROWN_CONCRETE_POWDER, Blocks.GREEN_CONCRETE_POWDER, Blocks.RED_CONCRETE_POWDER, Blocks.BLACK_CONCRETE_POWDER); create(provider, CustomTags.ENDSTONE_ORE_REPLACEABLES, Blocks.END_STONE); + +// create(provider, BlockTags.REPLACEABLE, +// GTMaterials.Oil.getFluid().defaultFluidState().createLegacyBlock().getBlock(), +// GTMaterials.OilLight.getFluid().defaultFluidState().createLegacyBlock().getBlock(), +// GTMaterials.OilHeavy.getFluid().defaultFluidState().createLegacyBlock().getBlock(), +// GTMaterials.RawOil.getFluid().defaultFluidState().createLegacyBlock().getBlock(), +// GTMaterials.NaturalGas.getFluid().defaultFluidState().createLegacyBlock().getBlock()); } private static void create(RegistrateTagsProvider provider, String tagName, ResourceLocation... rls) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/tags/ItemTagLoader.java b/src/main/java/com/gregtechceu/gtceu/data/tags/ItemTagLoader.java index b4248053cc..98fce56785 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/tags/ItemTagLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/tags/ItemTagLoader.java @@ -7,15 +7,18 @@ import com.gregtechceu.gtceu.api.data.tag.TagUtil; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.tterrag.registrate.providers.RegistrateTagsProvider; import com.tterrag.registrate.util.entry.RegistryEntry; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagBuilder; +import net.minecraft.tags.TagEntry; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; +import net.minecraftforge.common.Tags; import java.util.Objects; @@ -33,8 +36,12 @@ public static void init(RegistrateTagsProvider provider) { create(provider, lens, Color.Green, GTItems.MATERIAL_ITEMS.get(lens, Emerald).getId()); create(provider, lens, Color.Blue, GTItems.MATERIAL_ITEMS.get(lens, Sapphire).getId()); - create(provider, "pistons", rl("piston"), rl("sticky_piston")); + create(provider, CustomTags.TAG_PISTONS, Items.PISTON, Items.STICKY_PISTON); + // add treated wood stick to vanilla sticks tag + //noinspection DataFlowIssue ChemicalHelper#getTag can't return null with treated wood rod + provider.tag(Tags.Items.RODS_WOODEN) + .add(TagEntry.element(GTItems.MATERIAL_ITEMS.get(TagPrefix.rod, TreatedWood).getId())); // TODO add to planks mc tag? //for (Material material : new Material[]{GTMaterials.Wood, GTMaterials.TreatedWood}) { // for (ItemLike woodPlateStack : ChemicalHelper.getItems(new UnificationEntry(TagPrefix.plate, material))) { @@ -64,8 +71,8 @@ private static void create(RegistrateTagsProvider provider, TagKey t public static void create(RegistrateTagsProvider provider, TagKey tagKey, Item... rls) { var builder = provider.tag(tagKey); - for (Item block : rls) { - builder.addOptional(Registry.ITEM.getKey(block)); + for (Item item : rls) { + builder.add(Registry.ITEM.getResourceKey(item).get()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java index 127653c31b..e542afafce 100644 --- a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java @@ -13,8 +13,9 @@ import com.gregtechceu.gtceu.common.ServerCommands; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTItems; -import com.gregtechceu.gtceu.data.loader.forge.FluidVeinLoaderImpl; -import com.gregtechceu.gtceu.data.loader.forge.OreDataLoaderImpl; +import com.gregtechceu.gtceu.data.loader.BedrockOreLoader; +import com.gregtechceu.gtceu.data.loader.FluidVeinLoader; +import com.gregtechceu.gtceu.data.loader.OreDataLoader; import com.gregtechceu.gtceu.utils.TaskHandler; import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.entry.ItemEntry; @@ -93,8 +94,9 @@ public static void registerCommand(RegisterCommandsEvent event) { @SubscribeEvent public static void registerReloadListeners(AddReloadListenerEvent event) { - event.addListener(new OreDataLoaderImpl()); - event.addListener(new FluidVeinLoaderImpl()); + event.addListener(new OreDataLoader()); + event.addListener(new FluidVeinLoader()); + event.addListener(new BedrockOreLoader()); } @SubscribeEvent diff --git a/src/main/java/com/gregtechceu/gtceu/integration/GTRecipeWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/GTRecipeWidget.java index 69a19f892c..04e529dce1 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/GTRecipeWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/GTRecipeWidget.java @@ -1,53 +1,43 @@ package com.gregtechceu.gtceu.integration; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; -import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.WidgetUtils; import com.gregtechceu.gtceu.api.gui.widget.PredicatedButtonWidget; -import com.gregtechceu.gtceu.api.recipe.*; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.OverclockingLogic; +import com.gregtechceu.gtceu.api.recipe.RecipeCondition; +import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.recipe.content.Content; -import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; -import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; -import com.gregtechceu.gtceu.core.mixins.IngredientAccessor; -import com.gregtechceu.gtceu.core.mixins.IntersectionIngredientAccessor; -import com.gregtechceu.gtceu.core.mixins.TagValueAccessor; import com.gregtechceu.gtceu.utils.FormattingUtil; -import com.gregtechceu.gtceu.utils.ResearchManager; import com.lowdragmc.lowdraglib.LDLib; import com.lowdragmc.lowdraglib.gui.compass.CompassManager; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.texture.TextTexture; -import com.lowdragmc.lowdraglib.gui.widget.*; -import com.lowdragmc.lowdraglib.side.fluid.FluidStack; -import com.lowdragmc.lowdraglib.utils.TagOrCycleFluidTransfer; -import com.lowdragmc.lowdraglib.utils.TagOrCycleItemStackTransfer; -import com.mojang.datafixers.util.Either; -import com.mojang.datafixers.util.Pair; +import com.lowdragmc.lowdraglib.gui.widget.ButtonWidget; +import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; +import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget; +import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import it.unimi.dsi.fastutil.longs.LongIntPair; +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import lombok.Getter; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.tags.TagKey; import net.minecraft.util.Mth; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.level.material.Fluid; -import net.minecraftforge.common.crafting.IntersectionIngredient; import org.apache.commons.lang3.mutable.MutableInt; import org.jetbrains.annotations.NotNull; import org.lwjgl.glfw.GLFW; import java.util.*; import java.util.function.Function; -import java.util.stream.Collectors; import static com.gregtechceu.gtceu.api.GTValues.*; @@ -85,156 +75,17 @@ private static int getXOffset(GTRecipe recipe) { return 0; } + @SuppressWarnings("UnstableApiUsage") private void setRecipeWidget() { setClientSideWidget(); - List inputStackContents = new ArrayList<>(); - inputStackContents.addAll(recipe.getInputContents(ItemRecipeCapability.CAP)); - inputStackContents.addAll(recipe.getTickInputContents(ItemRecipeCapability.CAP)); - List, Integer>>, List>> inputStacks = inputStackContents.stream().map(content -> content.content) - .map(ItemRecipeCapability.CAP::of) - .map(GTRecipeWidget::mapItem) - .collect(Collectors.toList()); - while (inputStacks.size() < recipe.recipeType.getMaxInputs(ItemRecipeCapability.CAP)) inputStacks.add(null); - List outputStackContents = new ArrayList<>(); - outputStackContents.addAll(recipe.getOutputContents(ItemRecipeCapability.CAP)); - outputStackContents.addAll(recipe.getTickOutputContents(ItemRecipeCapability.CAP)); - List, Integer>>, List>> outputStacks = outputStackContents.stream().map(content -> content.content) - .map(ItemRecipeCapability.CAP::of) - .map(GTRecipeWidget::mapItem) - .collect(Collectors.toList()); - while (outputStacks.size() < recipe.recipeType.getMaxOutputs(ItemRecipeCapability.CAP)) outputStacks.add(null); + var storages = Tables.newCustomTable(new EnumMap<>(IO.class), LinkedHashMap, Object>::new); + var contents = Tables.newCustomTable(new EnumMap<>(IO.class), LinkedHashMap, List>::new); + collectStorage(storages, contents, recipe); + WidgetGroup group = recipe.recipeType.getRecipeUI().createUITemplate(ProgressWidget.JEIProgress, storages, recipe.data.copy(), recipe.conditions); + addSlots(contents, group, recipe); - List, Integer>>, List>> scannerPossibilities = null; - if (recipe.recipeType.isScanner()) { - scannerPossibilities = new ArrayList<>(); - // Scanner Output replacing, used for cycling research outputs - Pair researchData = null; - for (Content stack : recipe.getOutputContents(ItemRecipeCapability.CAP)) { - researchData = ResearchManager.readResearchId(ItemRecipeCapability.CAP.of(stack.content).getItems()[0]); - if (researchData != null) break; - } - if (researchData != null) { - Collection possibleRecipes = researchData.getFirst().getDataStickEntry(researchData.getSecond()); - if (possibleRecipes != null) { - for (GTRecipe r : possibleRecipes) { - ItemStack researchItem = ItemRecipeCapability.CAP.of(r.getOutputContents(ItemRecipeCapability.CAP).get(0).content).getItems()[0]; - researchItem = researchItem.copy(); - researchItem.setCount(1); - boolean didMatch = false; - for (Either, Integer>>, List> stacks : scannerPossibilities) { - for (ItemStack stack : stacks.map( - tag -> tag - .stream() - .flatMap(key -> Registry.ITEM.getTag(key.getFirst()).stream()) - .flatMap(holders -> holders.stream().map(holder -> new ItemStack(holder.get()))) - .collect(Collectors.toList()), - Function.identity())) { - if (ItemStack.isSame(stack, researchItem)) { - didMatch = true; - break; - } - } - } - if (!didMatch) scannerPossibilities.add(Either.right(List.of(researchItem))); - } - } - scannerPossibilities.add(outputStacks.get(0)); - } - } - - if (scannerPossibilities != null && !scannerPossibilities.isEmpty()) { - outputStacks = scannerPossibilities; - } - while (outputStacks.size() < recipe.recipeType.getMaxOutputs(ItemRecipeCapability.CAP)) outputStacks.add(null); - - List inputFluidContents = new ArrayList<>(); - inputFluidContents.addAll(recipe.getInputContents(FluidRecipeCapability.CAP)); - inputFluidContents.addAll(recipe.getTickInputContents(FluidRecipeCapability.CAP)); - List, Long>>, List>> inputFluids = inputFluidContents.stream().map(content -> content.content) - .map(FluidRecipeCapability.CAP::of) - .map(GTRecipeWidget::mapFluid) - .collect(Collectors.toList()); - while (inputFluids.size() < recipe.recipeType.getMaxInputs(FluidRecipeCapability.CAP)) inputFluids.add(null); - - List outputFluidContents = new ArrayList<>(); - outputFluidContents.addAll(recipe.getOutputContents(FluidRecipeCapability.CAP)); - outputFluidContents.addAll(recipe.getTickOutputContents(FluidRecipeCapability.CAP)); - List, Long>>, List>> outputFluids = outputFluidContents.stream().map(content -> content.content) - .map(FluidRecipeCapability.CAP::of) - .map(GTRecipeWidget::mapFluid) - .collect(Collectors.toList()); - while (outputFluids.size() < recipe.recipeType.getMaxOutputs(FluidRecipeCapability.CAP)) outputFluids.add(null); - - WidgetGroup group = recipe.recipeType.getRecipeUI().createUITemplate(ProgressWidget.JEIProgress, - new TagOrCycleItemStackTransfer(inputStacks), - new TagOrCycleItemStackTransfer(outputStacks), - new TagOrCycleFluidTransfer(inputFluids), - new TagOrCycleFluidTransfer(outputFluids), - recipe.data.copy(), - recipe.conditions - ); - // bind item in overlay - WidgetUtils.widgetByIdForEach(group, "^%s_[0-9]+$".formatted(ItemRecipeCapability.CAP.slotName(IO.IN)), SlotWidget.class, slot -> { - var index = WidgetUtils.widgetIdIndex(slot); - if (index >= 0 && index < inputStackContents.size()) { - var content = inputStackContents.get(index); - slot.setXEIChance(content.chance); - slot.setOverlay(content.createOverlay(index >= recipe.getInputContents(ItemRecipeCapability.CAP).size())); - slot.setOnAddedTooltips((w, tooltips) -> { - setConsumedChance(content, tooltips); - if (index >= recipe.getInputContents(ItemRecipeCapability.CAP).size()) { - tooltips.add(Component.translatable("gtceu.gui.content.per_tick")); - } - }); - } - }); - // bind item out overlay - WidgetUtils.widgetByIdForEach(group, "^%s_[0-9]+$".formatted(ItemRecipeCapability.CAP.slotName(IO.OUT)), SlotWidget.class, slot -> { - var index = WidgetUtils.widgetIdIndex(slot); - if (index >= 0 && index < outputStackContents.size()) { - var content = outputStackContents.get(index); - slot.setXEIChance(content.chance); - slot.setOverlay(content.createOverlay(index >= recipe.getOutputContents(ItemRecipeCapability.CAP).size())); - slot.setOnAddedTooltips((w, tooltips) -> { - setConsumedChance(content, tooltips); - if (index >= recipe.getOutputContents(ItemRecipeCapability.CAP).size()) { - tooltips.add(Component.translatable("gtceu.gui.content.per_tick")); - } - }); - } - }); - // bind fluid in overlay - WidgetUtils.widgetByIdForEach(group, "^%s_[0-9]+$".formatted(FluidRecipeCapability.CAP.slotName(IO.IN)), TankWidget.class, tank -> { - var index = WidgetUtils.widgetIdIndex(tank); - if (index >= 0 && index < inputFluidContents.size()) { - var content = inputFluidContents.get(index); - tank.setXEIChance(content.chance); - tank.setOverlay(content.createOverlay(index >= recipe.getInputContents(FluidRecipeCapability.CAP).size())); - tank.setOnAddedTooltips((w, tooltips) -> { - setConsumedChance(content, tooltips); - if (index >= recipe.getInputContents(FluidRecipeCapability.CAP).size()) { - tooltips.add(Component.translatable("gtceu.gui.content.per_tick")); - } - }); - } - }); - // bind fluid out overlay - WidgetUtils.widgetByIdForEach(group, "^%s_[0-9]+$".formatted(FluidRecipeCapability.CAP.slotName(IO.OUT)), TankWidget.class, tank -> { - var index = WidgetUtils.widgetIdIndex(tank); - if (index >= 0 && index < outputFluidContents.size()) { - var content = outputFluidContents.get(index); - tank.setXEIChance(content.chance); - tank.setOverlay(content.createOverlay(index >= recipe.getOutputContents(FluidRecipeCapability.CAP).size())); - tank.setOnAddedTooltips((w, tooltips) -> { - setConsumedChance(content, tooltips); - if (index >= recipe.getOutputContents(FluidRecipeCapability.CAP).size()) { - tooltips.add(Component.translatable("gtceu.gui.content.per_tick")); - } - }); - } - }); var size = group.getSize(); addWidget(group); var EUt = RecipeHelper.getInputEUt(recipe); @@ -395,7 +246,7 @@ private void setRecipeTextWidget(OverclockingLogic logic) { updateScreen(); } - private void setConsumedChance(Content content, List tooltips) { + public static void setConsumedChance(Content content, List tooltips) { var chance = content.chance; if (chance < 1) { tooltips.add(chance == 0 ? @@ -419,117 +270,71 @@ private void setTierToMin() { setTier(getMinTier()); } - // Maps ingredients to Either <(Tag with count), ItemStack>s - @SuppressWarnings("deprecation") - private static Either, Integer>>, List> mapItem(Ingredient ingredient) { - if (ingredient instanceof SizedIngredient sizedIngredient) { - final int amount = sizedIngredient.getAmount(); - if (sizedIngredient.getInner() instanceof IntersectionIngredient intersection) { - List children = ((IntersectionIngredientAccessor)intersection).getChildren(); - if (children.isEmpty()) { - return Either.right(null); - } - var childEither = mapItem(children.get(0)); - return Either.right(childEither.map(tags -> { - List tagItems = tags.stream() - .map(pair -> Pair.of(Registry.ITEM.getTag(pair.getFirst()).stream(), pair.getSecond())) - .flatMap(pair -> pair.getFirst().flatMap(tag -> tag.stream().map(holder -> new ItemStack(holder.value(), pair.getSecond())))) - .collect(Collectors.toList()); - ListIterator iterator = tagItems.listIterator(); - while (iterator.hasNext()) { - var item = iterator.next(); - for (int i = 1; i < children.size(); ++i) { - if (!children.get(i).test(item)) { - iterator.remove(); - break; - } - } - ItemStack copy = item.copy(); - copy.setCount(amount); - iterator.set(copy); - } - return tagItems; - }, items -> { - items = new ArrayList<>(items); - ListIterator iterator = items.listIterator(); - while (iterator.hasNext()) { - var item = iterator.next(); - for (int i = 1; i < children.size(); ++i) { - if (!children.get(i).test(item)) { - iterator.remove(); - break; - } - } - ItemStack copy = item.copy(); - copy.setCount(amount); - iterator.set(copy); - } - return items; - })); - } else if (((IngredientAccessor)sizedIngredient.getInner()).getValues().length > 0 && ((IngredientAccessor)sizedIngredient.getInner()).getValues()[0] instanceof Ingredient.TagValue tagValue) { - return Either.left(List.of(Pair.of(((TagValueAccessor)tagValue).getTag(), amount))); - } - } else if (ingredient instanceof IntersectionIngredient intersection) { - // Map intersection ingredients to the items inside, as recipe viewers don't support them. - List children = ((IntersectionIngredientAccessor)intersection).getChildren(); - if (children.isEmpty()) { - return Either.right(null); + public void collectStorage(Table, Object> extraTable, Table, List> extraContents, GTRecipe recipe) { + Map, List> inputCapabilities = new Object2ObjectLinkedOpenHashMap<>(); + for (var entry : recipe.inputs.entrySet()) { + RecipeCapability cap = entry.getKey(); + List contents = entry.getValue(); + + extraContents.put(IO.IN, cap, contents); + inputCapabilities.put(cap, cap.createXEIContainerContents(contents, recipe, IO.IN)); + } + for (var entry : recipe.tickInputs.entrySet()) { + RecipeCapability cap = entry.getKey(); + List contents = entry.getValue(); + + extraContents.put(IO.IN, cap, contents); + inputCapabilities.put(cap, cap.createXEIContainerContents(contents, recipe, IO.IN)); + } + for (var entry : inputCapabilities.entrySet()) { + while (entry.getValue().size() < recipe.recipeType.getMaxInputs(entry.getKey())) entry.getValue().add(null); + var container = entry.getKey().createXEIContainer(entry.getValue()); + if (container != null) { + extraTable.put(IO.IN, entry.getKey(), container); } - var childEither = mapItem(children.get(0)); - return Either.right(childEither.map(tags -> { - List tagItems = tags.stream() - .map(pair -> Pair.of(Registry.ITEM.getTag(pair.getFirst()).stream(), pair.getSecond())) - .flatMap(pair -> pair.getFirst().flatMap(tag -> tag.stream().map(holder -> new ItemStack(holder.value(), pair.getSecond())))) - .collect(Collectors.toList()); - ListIterator iterator = tagItems.listIterator(); - while (iterator.hasNext()) { - var item = iterator.next(); - for (int i = 1; i < children.size(); ++i) { - if (!children.get(i).test(item)) { - iterator.remove(); - break; - } - } - } - return tagItems; - }, items -> { - items = new ArrayList<>(items); - ListIterator iterator = items.listIterator(); - while (iterator.hasNext()) { - var item = iterator.next(); - for (int i = 1; i < children.size(); ++i) { - if (!children.get(i).test(item)) { - iterator.remove(); - break; - } - } - } - return items; - })); - } else if (((IngredientAccessor)ingredient).getValues().length > 0 && ((IngredientAccessor)ingredient).getValues()[0] instanceof Ingredient.TagValue tagValue) { - return Either.left(List.of(Pair.of(((TagValueAccessor)tagValue).getTag(), 1))); } - return Either.right(Arrays.stream(ingredient.getItems()).toList()); - } - // Maps fluids to Either <(tag with count), ItemStack>s - private static Either, Long>>, List> mapFluid(FluidIngredient ingredient) { - long amount = ingredient.getAmount(); - CompoundTag tag = ingredient.getNbt(); + Map, List> outputCapabilities = new Object2ObjectLinkedOpenHashMap<>(); + for (var entry : recipe.outputs.entrySet()) { + RecipeCapability cap = entry.getKey(); + List contents = entry.getValue(); - List, Long>> tags = new ArrayList<>(); - List fluids = new ArrayList<>(); - for (FluidIngredient.Value value : ingredient.values) { - if (value instanceof FluidIngredient.TagValue tagValue) { - tags.add(Pair.of(tagValue.getTag(), amount)); - } else { - fluids.addAll(value.getFluids().stream().map(fluid -> FluidStack.create(fluid, amount, tag)).toList()); + extraContents.put(IO.OUT, cap, contents); + outputCapabilities.put(cap, cap.createXEIContainerContents(contents, recipe, IO.OUT)); + } + for (var entry : recipe.tickOutputs.entrySet()) { + RecipeCapability cap = entry.getKey(); + List contents = entry.getValue(); + + extraContents.put(IO.OUT, cap, contents); + outputCapabilities.put(cap, cap.createXEIContainerContents(contents, recipe, IO.OUT)); + } + for (var entry : outputCapabilities.entrySet()) { + while (entry.getValue().size() < recipe.recipeType.getMaxOutputs(entry.getKey())) entry.getValue().add(null); + var container = entry.getKey().createXEIContainer(entry.getValue()); + if (container != null) { + extraTable.put(IO.OUT, entry.getKey(), container); } } - if (!tags.isEmpty()) { - return Either.left(tags); - }else { - return Either.right(fluids); + } + + public void addSlots(Table, List> contentTable, WidgetGroup group, GTRecipe recipe) { + for (var capabilityEntry : contentTable.rowMap().entrySet()) { + IO io = capabilityEntry.getKey(); + for (var contentsEntry : capabilityEntry.getValue().entrySet()) { + RecipeCapability cap = contentsEntry.getKey(); + int nonTickCount = (io == IO.IN ? recipe.getInputContents(cap) : recipe.getOutputContents(cap)).size(); + List contents = contentsEntry.getValue(); + // bind fluid out overlay + WidgetUtils.widgetByIdForEach(group, "^%s_[0-9]+$".formatted(cap.slotName(io)), cap.getWidgetClass(), widget -> { + var index = WidgetUtils.widgetIdIndex(widget); + if (index >= 0 && index < contents.size()) { + var content = contents.get(index); + cap.applyWidgetInfo(widget, index, true, io, null, recipe.getType(), recipe, content, null); + widget.setOverlay(content.createOverlay(index >= nonTickCount)); + } + }); + } } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java index f8326acc7f..0e8d6eadde 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java @@ -145,7 +145,7 @@ public void onContentsChanged() { @Override public List handleRecipeInner(IO io, GTRecipe recipe, List left, @Nullable String slotName, boolean simulate) { - return handleIngredient(io, left, simulate, this.handlerIO, new ItemStackTransfer(NonNullList.of(ItemStack.EMPTY, Arrays.stream(inventory).map(item -> item.getStackInSlot(0)).toArray(ItemStack[]::new))) { + return handleIngredient(io, recipe, left, simulate, this.handlerIO, new ItemStackTransfer(NonNullList.of(ItemStack.EMPTY, Arrays.stream(inventory).map(item -> item.getStackInSlot(0)).toArray(ItemStack[]::new))) { @NotNull @Override public ItemStack extractItem(int slot, int amount, boolean simulate, boolean notifyChanges) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java index 52d80df394..b3307ae8ba 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java @@ -150,7 +150,7 @@ public void setStackInSlot(int slot, @NotNull ItemStack stack) { @Override public List handleRecipeInner(IO io, GTRecipe recipe, List left, @Nullable String slotName, boolean simulate) { - return handleIngredient(io, left, simulate, this.handlerIO, new ItemStackTransfer(16) { + return handleIngredient(io, recipe, left, simulate, this.handlerIO, new ItemStackTransfer(16) { @NotNull @Override public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate, boolean notifyChanges) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuServerEvents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuServerEvents.java index 9ca4bc8f7c..4fd8b8d4d3 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuServerEvents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuServerEvents.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.integration.kjs; +import com.gregtechceu.gtceu.integration.kjs.events.GTBedrockOreVeinEventJS; import com.gregtechceu.gtceu.integration.kjs.events.GTFluidVeinEventJS; import com.gregtechceu.gtceu.integration.kjs.events.GTOreVeinEventJS; import dev.latvian.mods.kubejs.event.EventGroup; @@ -9,5 +10,6 @@ public interface GTCEuServerEvents { EventGroup GROUP = EventGroup.of("GTCEuServerEvents"); EventHandler ORE_VEIN_MODIFICATION = GROUP.server("oreVeins", () -> GTOreVeinEventJS.class); + EventHandler BEDROCK_ORE_VEIN_MODIFICATION = GROUP.server("bedrockOreVeins", () -> GTBedrockOreVeinEventJS.class); EventHandler FLUID_VEIN_MODIFICATION = GROUP.server("fluidVeins", () -> GTFluidVeinEventJS.class); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java index df008665bb..59f75430b2 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/block/CoilBlockBuilder.java @@ -13,12 +13,17 @@ import lombok.experimental.Accessors; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Supplier; @Accessors(chain = true, fluent = true) public class CoilBlockBuilder extends BlockBuilder { @Setter public transient int temperature = 0, level = 0, energyDiscount = 1, tier = 0; - public transient Material material = GTMaterials.Air; + @NotNull + public transient Supplier<@Nullable Material> material = () -> null; @Setter public transient ResourceLocation texture = new ResourceLocation("missingno"); @@ -26,7 +31,7 @@ public CoilBlockBuilder(ResourceLocation i) { super(i); } - public CoilBlockBuilder coilMaterial(Material material) { + public CoilBlockBuilder coilMaterial(@NotNull Supplier<@Nullable Material> material) { this.material = material; return this; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/CustomMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/CustomMultiblockBuilder.java index 87d49db289..43cfbddee6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/CustomMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/CustomMultiblockBuilder.java @@ -20,6 +20,7 @@ import com.gregtechceu.gtceu.api.pattern.MultiblockShapeInfo; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitiveFancyUIWorkableMachine; @@ -29,6 +30,9 @@ import com.tterrag.registrate.builders.ItemBuilder; import com.tterrag.registrate.util.nullness.NonNullConsumer; import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; +import dev.latvian.mods.kubejs.script.ScriptType; +import dev.latvian.mods.kubejs.util.UtilsJS; +import dev.latvian.mods.rhino.BaseFunction; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; @@ -89,12 +93,16 @@ public static MachineBuilder createMultiblock(Strin if (tiers.length > 0) { if (args.length > 0 && args[0] instanceof BiFunction machineFunction) { builders = tieredMultis(name, (BiFunction) machineFunction, tiers); + } else if (args.length > 0 && args[0] instanceof BaseFunction machineFunction) { + builders = tieredMultis(name, UtilsJS.makeFunctionProxy(ScriptType.STARTUP, BiFunction.class, machineFunction), tiers); } else { builders = tieredMultis(name, TieredWorkableElectricMultiblockMachine::new, tiers); } } else { if (args.length > 0 && args[0] instanceof Function machineFunction) { return new CustomMultiblockBuilder(name, (Function)machineFunction); + } else if (args.length > 0 && args[0] instanceof BaseFunction machineFunction) { + return new CustomMultiblockBuilder(name, UtilsJS.makeFunctionProxy(ScriptType.STARTUP, Function.class, machineFunction)); } else { return new CustomMultiblockBuilder(name, WorkableElectricMultiblockMachine::new); } @@ -337,7 +345,7 @@ public CustomMultiblockBuilder tooltipBuilder(BiConsumer recipeModifier) { + public CustomMultiblockBuilder recipeModifier(RecipeModifier recipeModifier) { for (var builder : builders) { if (builder == null) continue; builder.recipeModifier(recipeModifier); @@ -345,6 +353,15 @@ public CustomMultiblockBuilder recipeModifier(BiFunction recipeModifier, boolean alwaysTryModifyRecipe) { + public CustomMultiblockBuilder recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { recipeModifier(recipeModifier); alwaysTryModifyRecipe(alwaysTryModifyRecipe); return this; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MachineFunctionPresets.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MachineFunctionPresets.java index 7685034e25..3f923ca51a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MachineFunctionPresets.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MachineFunctionPresets.java @@ -13,7 +13,9 @@ import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.lowdragmc.lowdraglib.client.renderer.IRenderer; @@ -244,7 +246,7 @@ public MachineBuilder tooltipBuilder(BiConsumer> t } @Override - public MachineBuilder recipeModifier(BiFunction recipeModifier) { + public MachineBuilder recipeModifier(RecipeModifier recipeModifier) { for (var builder : builders) { if (builder == null) continue; builder.recipeModifier(recipeModifier); @@ -252,6 +254,15 @@ public MachineBuilder recipeModifier(BiFunction recipeModifiers(RecipeModifier... recipeModifiers) { + for (var builder : builders) { + if (builder == null) continue; + builder.recipeModifiers(recipeModifiers); + } + return this; + } + @Override public MachineBuilder alwaysTryModifyRecipe(boolean alwaysTryModifyRecipe) { for (var builder : builders) { @@ -383,7 +394,7 @@ public MachineBuilder allTiers(TieredBuilderConsumer consumer) { return this; } - public MachineBuilder recipeModifier(BiFunction recipeModifier, boolean alwaysTryModifyRecipe) { + public MachineBuilder recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { recipeModifier(recipeModifier); alwaysTryModifyRecipe(alwaysTryModifyRecipe); return this; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/built/KJSTagPrefix.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/built/KJSTagPrefix.java index e60d60872c..18a4b083d9 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/built/KJSTagPrefix.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/built/KJSTagPrefix.java @@ -37,7 +37,12 @@ public static KJSTagPrefix oreTagPrefix(String name) { @Override public KJSTagPrefix defaultTagPath(String path) { - this.tags.add(TagType.withDefaultFormatter(path)); + return this.defaultTagPath(path, false); + } + + @Override + public KJSTagPrefix defaultTagPath(String path, boolean isVanilla) { + this.tags.add(TagType.withDefaultFormatter(path, isVanilla)); return this; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTBedrockOreVeinEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTBedrockOreVeinEventJS.java new file mode 100644 index 0000000000..6c1f42f27a --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTBedrockOreVeinEventJS.java @@ -0,0 +1,30 @@ +package com.gregtechceu.gtceu.integration.kjs.events; + +import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.BedrockFluidDefinition; +import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import dev.latvian.mods.kubejs.event.EventJS; +import net.minecraft.resources.ResourceLocation; + +import java.util.function.Consumer; + +public class GTBedrockOreVeinEventJS extends EventJS { + + public GTBedrockOreVeinEventJS() { + + } + + public void add(ResourceLocation id, Consumer consumer) { + BedrockOreDefinition.Builder builder = BedrockOreDefinition.builder(id); + consumer.accept(builder); + builder.register(); + } + + public void remove(ResourceLocation id) { + GTRegistries.BEDROCK_ORE_DEFINITIONS.remove(id); + } + + public void modify(ResourceLocation id, Consumer consumer) { + consumer.accept(GTRegistries.BEDROCK_ORE_DEFINITIONS.get(id)); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTFluidVeinEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTFluidVeinEventJS.java index 3945e103f8..4d45746832 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTFluidVeinEventJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTFluidVeinEventJS.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.BedrockFluidDefinition; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.integration.kjs.builders.FluidVeinBuilderJS; import dev.latvian.mods.kubejs.event.EventJS; import net.minecraft.resources.ResourceLocation; @@ -14,10 +13,10 @@ public GTFluidVeinEventJS() { } - public void add(ResourceLocation id, Consumer consumer) { - FluidVeinBuilderJS builder = new FluidVeinBuilderJS(id); + public void add(ResourceLocation id, Consumer consumer) { + BedrockFluidDefinition.Builder builder = BedrockFluidDefinition.builder(id); consumer.accept(builder); - builder.build(); + builder.register(); } public void remove(ResourceLocation id) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java index 27f7987c55..bde6700cce 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java @@ -8,20 +8,25 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.stack.UnificationEntry; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.api.item.component.IDataItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; import com.gregtechceu.gtceu.api.recipe.RecipeCondition; +import com.gregtechceu.gtceu.api.recipe.ResearchData; +import com.gregtechceu.gtceu.api.recipe.ResearchRecipeBuilder; import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.IntCircuitIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.NBTIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.recipe.*; +import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; import com.gregtechceu.gtceu.integration.kjs.recipe.components.CapabilityMap; import com.gregtechceu.gtceu.integration.kjs.recipe.components.GTRecipeComponents; +import com.gregtechceu.gtceu.utils.ResearchManager; import com.lowdragmc.lowdraglib.LDLib; +import com.lowdragmc.lowdraglib.side.fluid.FluidStack; import dev.latvian.mods.kubejs.fluid.FluidStackJS; import dev.latvian.mods.kubejs.fluid.InputFluid; import dev.latvian.mods.kubejs.item.InputItem; @@ -42,10 +47,17 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.Recipe; import org.apache.commons.lang3.ArrayUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.function.Consumer; import java.util.function.Supplier; +import java.util.function.UnaryOperator; public interface GTRecipeSchema { @@ -58,8 +70,15 @@ class GTRecipeJS extends RecipeJS { public float chance = 1; @Setter public float tierChanceBoost = 0; + @Setter + public boolean isFuel = false; @Getter private ResourceLocation idWithoutType; + @Setter + public Consumer onSave; + @Getter + private final Collection researchRecipeEntries = new ArrayList<>(); + private boolean generatingRecipes = true; @HideFromJS @Override @@ -299,6 +318,11 @@ public GTRecipeJS notConsumable(TagPrefix orePrefix, Material material) { return this; } + public GTRecipeJS notConsumableFluid(GTRecipeComponents.FluidIngredientJS fluid) { + chancedFluidInput(fluid, 0, 0); + return this; + } + public GTRecipeJS circuit(int configuration) { return notConsumable(InputItem.of(IntCircuitIngredient.circuitInput(configuration), 1)); } @@ -440,6 +464,10 @@ public GTRecipeJS fusionStartEU(long eu) { return addData("eu_to_start", eu); } + public GTRecipeJS researchScan(boolean isScan) { + return addData("scan_for_research", isScan); + } + public GTRecipeJS durationIsTotalCWU(boolean durationIsTotalCWU) { return addData("duration_is_total_cwu", durationIsTotalCWU); } @@ -504,10 +532,97 @@ public GTRecipeJS rpm(float rpm) { return rpm(rpm, false); } + private boolean applyResearchProperty(ResearchData.ResearchEntry researchEntry) { + if (!ConfigHolder.INSTANCE.machines.enableResearch) return false; + if (researchEntry == null) { + GTCEu.LOGGER.error("Assembly Line Research Entry cannot be empty.", new IllegalArgumentException()); + return false; + } + + if (!generatingRecipes) { + GTCEu.LOGGER.error("Cannot generate recipes when using researchWithoutRecipe()", new IllegalArgumentException()); + return false; + } + + if (getValue(CONDITIONS) == null) setValue(CONDITIONS, new RecipeCondition[0]); + ResearchCondition condition = Arrays.stream(this.getValue(CONDITIONS)).filter(ResearchCondition.class::isInstance).findAny().map(ResearchCondition.class::cast).orElse(null); + if (condition != null) { + condition.data.add(researchEntry); + } else { + condition = new ResearchCondition(); + condition.data.add(researchEntry); + this.addCondition(condition); + } + return true; + } + + /** + * Does not generate a research recipe. + * + * @param researchId the researchId for the recipe + * @return this + */ + public GTRecipeJS researchWithoutRecipe(@NotNull String researchId) { + return researchWithoutRecipe(researchId, ResearchManager.getDefaultScannerItem()); + } + + /** + * Does not generate a research recipe. + * + * @param researchId the researchId for the recipe + * @param dataStack the stack to hold the data. Must have the {@link IDataItem} behavior. + * @return this + */ + public GTRecipeJS researchWithoutRecipe(@NotNull String researchId, @NotNull ItemStack dataStack) { + applyResearchProperty(new ResearchData.ResearchEntry(researchId, dataStack)); + this.generatingRecipes = false; + return this; + } + + /** + * Generates a research recipe for the Scanner. + */ + public GTRecipeJS scannerResearch(UnaryOperator research) { + GTRecipeBuilder.ResearchRecipeEntry entry = research.apply(new ResearchRecipeBuilder.ScannerRecipeBuilder()).build(); + if (applyResearchProperty(new ResearchData.ResearchEntry(entry.researchId(), entry.dataStack()))) { + this.researchRecipeEntries.add(entry); + } + return this; + } + + /** + * Generates a research recipe for the Scanner. All values are defaults other than the research stack. + * + * @param researchStack the stack to use for research + * @return this + */ + public GTRecipeJS scannerResearch(@NotNull ItemStack researchStack) { + return scannerResearch(b -> b.researchStack(researchStack)); + } + + /** + * Generates a research recipe for the Research Station. + */ + public GTRecipeJS stationResearch(UnaryOperator research) { + GTRecipeBuilder.ResearchRecipeEntry entry = research.apply(new ResearchRecipeBuilder.StationRecipeBuilder()).build(); + if (applyResearchProperty(new ResearchData.ResearchEntry(entry.researchId(), entry.dataStack()))) { + this.researchRecipeEntries.add(entry); + } + return this; + } + /* * KubeJS overrides */ + @Override + public @Nullable Recipe createRecipe() { + if (onSave != null) { + onSave.accept(this); + } + return super.createRecipe(); + } + public InputItem readInputItem(Object from) { if (from instanceof SizedIngredient ingr) { return InputItem.of(ingr.getInner(), ingr.getAmount()); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java index 0e635a451d..d19d74d388 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java @@ -235,9 +235,6 @@ public FluidIngredientJS read(RecipeJS recipe, Object from) { KJSRecipeKeyEvent event = new KJSRecipeKeyEvent(); AddonFinder.getAddons().forEach(addon -> addon.registerRecipeKeys(event)); VALID_CAPS.putAll(event.getRegisteredKeys()); - Set> addedCaps = event.getRegisteredKeys().keySet(); - Set> registeredCaps = GTRegistries.RECIPE_CAPABILITIES.values(); - registeredCaps.removeAll(addedCaps); } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/GTStringUtils.java b/src/main/java/com/gregtechceu/gtceu/utils/GTStringUtils.java index 004be7bfdb..09a99b5ab3 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/GTStringUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/GTStringUtils.java @@ -1,5 +1,7 @@ package com.gregtechceu.gtceu.utils; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; @@ -16,6 +18,7 @@ public class GTStringUtils { */ @NotNull public static String itemStackToString(@NotNull ItemStack stack) { - return stack.getCount() + "x" + stack.getItem().getDescriptionId(stack); + ResourceLocation itemId = Registry.ITEM.getKey(stack.getItem()); + return stack.getCount() + "x_" + itemId.getNamespace() + "_" + itemId.getPath(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/IngredientEquality.java b/src/main/java/com/gregtechceu/gtceu/utils/IngredientEquality.java index b6ca915a7c..bb5eac2afc 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/IngredientEquality.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/IngredientEquality.java @@ -10,6 +10,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraftforge.common.crafting.IntersectionIngredient; +import net.minecraftforge.common.crafting.PartialNBTIngredient; import net.minecraftforge.common.crafting.StrictNBTIngredient; import java.util.*; @@ -53,6 +54,19 @@ public int compare(Ingredient first, Ingredient second) { } return 1; } + if (first instanceof PartialNBTIngredient partial1) { + if (second instanceof PartialNBTIngredient partial2) { + if (partial1.getItems().length != partial2.getItems().length) + return 1; + for (ItemStack stack : partial1.getItems()) { + if (!partial2.test(stack)) { + return 1; + } + } + return 0; + } + return 1; + } if (first instanceof IntersectionIngredient intersection1) { if (second instanceof IntersectionIngredient intersection2) { diff --git a/src/main/resources/assets/gtceu/lang/ru_ru.json b/src/main/resources/assets/gtceu/lang/ru_ru.json index 0bf3007028..b514ca2f71 100644 --- a/src/main/resources/assets/gtceu/lang/ru_ru.json +++ b/src/main/resources/assets/gtceu/lang/ru_ru.json @@ -6787,5 +6787,15 @@ "gtceu.top.energy_stored": " / %d EU", "gtceu.top.progress_computation": " / %s CWU", "item.gtceu.portable_scanner": "Портативный сканер", - "gtceu.multiblock.uv_fusion_reactor.description": "Термоядерный реактор модель 3 - это большая многоблочная структура использующаяся для термоядерного синтеза двух элементов в один. Может использовать UV+ энергетические разъемы. За каждый энергетический разъём, внутренний буфер увеличивается на 40млн. EU, максимум энергии для старта 640млн. EU." + "gtceu.multiblock.uv_fusion_reactor.description": "Термоядерный реактор модель 3 - это большая многоблочная структура использующаяся для термоядерного синтеза двух элементов в один. Может использовать UV+ энергетические разъемы. За каждый энергетический разъём, внутренний буфер увеличивается на 40млн. EU, максимум энергии для старта 640млн. EU.", + "config.gtceu.option.bedrockOreDistance": "bedrockOreDistance", + "gtceu.multiblock.ore_rig.drilled_ore_entry": " - %s", + "gtceu.multiblock.ore_rig.drilled_ores_list": "Руды:", + "gtceu.multiblock.ore_rig.ore_amount": "Скорость доб.: %s", + "tagprefix.door": "Дверь (%s)", + "tagprefix.fence": "Забор (%s)", + "tagprefix.fence_gate": "Калитка (%s)", + "tagprefix.log": "Дерево (%s)", + "tagprefix.slab": "Плита (%s)", + "tagprefix.stairs": "Ступеньки (%s)" } diff --git a/src/main/resources/assets/gtceu/models/block/rubber_door.json b/src/main/resources/assets/gtceu/models/block/rubber_door.json new file mode 100644 index 0000000000..5807e15326 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/block/rubber_door.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door", + "textures": { + "bottom": "gtceu:block/rubber_door_bottom", + "top": "gtceu:block/rubber_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/block/rubber_fence.json b/src/main/resources/assets/gtceu/models/block/rubber_fence.json new file mode 100644 index 0000000000..c9839cb9ab --- /dev/null +++ b/src/main/resources/assets/gtceu/models/block/rubber_fence.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/block/rubber_fence_inventory.json b/src/main/resources/assets/gtceu/models/block/rubber_fence_inventory.json new file mode 100644 index 0000000000..dba2589176 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/block/rubber_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_inventory", + "textures": { + "texture": "gtceu:block/rubber_planks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/block/treated_wood_door.json b/src/main/resources/assets/gtceu/models/block/treated_wood_door.json new file mode 100644 index 0000000000..27ab12c7ed --- /dev/null +++ b/src/main/resources/assets/gtceu/models/block/treated_wood_door.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door", + "textures": { + "bottom": "gtceu:block/treated_wood_door_bottom", + "top": "gtceu:block/treated_wood_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/block/treated_wood_fence.json b/src/main/resources/assets/gtceu/models/block/treated_wood_fence.json new file mode 100644 index 0000000000..56549e2ad8 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/block/treated_wood_fence.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence", + "textures": { + "texture": "gtceu:block/treated_wood_fence" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/sounds/hum.ogg b/src/main/resources/assets/gtceu/sounds/arc.ogg similarity index 100% rename from src/main/resources/assets/gtceu/sounds/hum.ogg rename to src/main/resources/assets/gtceu/sounds/arc.ogg diff --git a/src/main/resources/assets/gtceu/sounds/boiling.ogg b/src/main/resources/assets/gtceu/sounds/boiler.ogg similarity index 100% rename from src/main/resources/assets/gtceu/sounds/boiling.ogg rename to src/main/resources/assets/gtceu/sounds/boiler.ogg diff --git a/src/main/resources/assets/gtceu/textures/block/black_lamp.png b/src/main/resources/assets/gtceu/textures/block/black_lamp.png new file mode 100644 index 0000000000..51e7987dc4 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/black_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/blue_lamp.png b/src/main/resources/assets/gtceu/textures/block/blue_lamp.png new file mode 100644 index 0000000000..1c09e8a06e Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/blue_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/brown_lamp.png b/src/main/resources/assets/gtceu/textures/block/brown_lamp.png new file mode 100644 index 0000000000..69903b777c Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/brown_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/casings/signs/machine_casing_containment_field.png b/src/main/resources/assets/gtceu/textures/block/casings/signs/machine_casing_containment_field.png deleted file mode 100644 index bd0fed8f1e..0000000000 Binary files a/src/main/resources/assets/gtceu/textures/block/casings/signs/machine_casing_containment_field.png and /dev/null differ diff --git a/src/main/resources/assets/gtceu/textures/block/casings/signs/machine_casing_radiationproof.png b/src/main/resources/assets/gtceu/textures/block/casings/signs/machine_casing_radiationproof.png deleted file mode 100644 index 528c87c9ea..0000000000 Binary files a/src/main/resources/assets/gtceu/textures/block/casings/signs/machine_casing_radiationproof.png and /dev/null differ diff --git a/src/main/resources/assets/gtceu/textures/block/cover/OVERLAY_SCREEN.png b/src/main/resources/assets/gtceu/textures/block/cover/OVERLAY_SCREEN.png deleted file mode 100644 index 76f66b3eee..0000000000 Binary files a/src/main/resources/assets/gtceu/textures/block/cover/OVERLAY_SCREEN.png and /dev/null differ diff --git a/src/main/resources/assets/gtceu/textures/block/cyan_lamp.png b/src/main/resources/assets/gtceu/textures/block/cyan_lamp.png new file mode 100644 index 0000000000..27d3c27fe9 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/cyan_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/foam.png b/src/main/resources/assets/gtceu/textures/block/foam.png new file mode 100644 index 0000000000..92ae319a3b Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/foam.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/gray_lamp.png b/src/main/resources/assets/gtceu/textures/block/gray_lamp.png new file mode 100644 index 0000000000..5458428819 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/gray_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/green_lamp.png b/src/main/resources/assets/gtceu/textures/block/green_lamp.png new file mode 100644 index 0000000000..d881c14bc5 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/green_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/light_blue_lamp.png b/src/main/resources/assets/gtceu/textures/block/light_blue_lamp.png new file mode 100644 index 0000000000..c5ab05ba8f Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/light_blue_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/light_gray_lamp.png b/src/main/resources/assets/gtceu/textures/block/light_gray_lamp.png new file mode 100644 index 0000000000..c17cd72d93 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/light_gray_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/lime_lamp.png b/src/main/resources/assets/gtceu/textures/block/lime_lamp.png new file mode 100644 index 0000000000..b4b6b810a9 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/lime_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/machines/world_accelerator/OVERLAY_ACCELERATOR_ACTIVE_GLOW.png b/src/main/resources/assets/gtceu/textures/block/machines/world_accelerator/OVERLAY_ACCELERATOR_ACTIVE_GLOW.png deleted file mode 100644 index d643018fe1..0000000000 Binary files a/src/main/resources/assets/gtceu/textures/block/machines/world_accelerator/OVERLAY_ACCELERATOR_ACTIVE_GLOW.png and /dev/null differ diff --git a/src/main/resources/assets/gtceu/textures/block/magenta_lamp.png b/src/main/resources/assets/gtceu/textures/block/magenta_lamp.png new file mode 100644 index 0000000000..12eb2a50d5 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/magenta_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/marble.png b/src/main/resources/assets/gtceu/textures/block/marble.png new file mode 100644 index 0000000000..5c0eeb5add Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/marble.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/orange_lamp.png b/src/main/resources/assets/gtceu/textures/block/orange_lamp.png new file mode 100644 index 0000000000..ab8fcbfcdb Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/orange_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/petrified_foam.png b/src/main/resources/assets/gtceu/textures/block/petrified_foam.png new file mode 100644 index 0000000000..51958e22cc Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/petrified_foam.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/pink_lamp.png b/src/main/resources/assets/gtceu/textures/block/pink_lamp.png new file mode 100644 index 0000000000..58826f66a2 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/pink_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/purple_lamp.png b/src/main/resources/assets/gtceu/textures/block/purple_lamp.png new file mode 100644 index 0000000000..3d1a182de9 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/purple_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/red_lamp.png b/src/main/resources/assets/gtceu/textures/block/red_lamp.png new file mode 100644 index 0000000000..e28d4c3ca4 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/red_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/reinforced_stone.png b/src/main/resources/assets/gtceu/textures/block/reinforced_stone.png new file mode 100644 index 0000000000..1a8a9f9135 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/reinforced_stone.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/rubber_door_bottom.png b/src/main/resources/assets/gtceu/textures/block/rubber_door_bottom.png new file mode 100644 index 0000000000..789d51a7c1 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/rubber_door_bottom.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/rubber_door_top.png b/src/main/resources/assets/gtceu/textures/block/rubber_door_top.png new file mode 100644 index 0000000000..b31d6c5510 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/rubber_door_top.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/rubber_hanging_sign.png b/src/main/resources/assets/gtceu/textures/block/rubber_hanging_sign.png new file mode 100644 index 0000000000..02e77aabd0 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/rubber_hanging_sign.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/rubber_sign.png b/src/main/resources/assets/gtceu/textures/block/rubber_sign.png new file mode 100644 index 0000000000..189063160b Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/rubber_sign.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/rubber_trapdoor.png b/src/main/resources/assets/gtceu/textures/block/rubber_trapdoor.png new file mode 100644 index 0000000000..a0bcb3b250 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/rubber_trapdoor.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/rubber_wall_hanging_sign.png b/src/main/resources/assets/gtceu/textures/block/rubber_wall_hanging_sign.png new file mode 100644 index 0000000000..02e77aabd0 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/rubber_wall_hanging_sign.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/rubber_wall_sign.png b/src/main/resources/assets/gtceu/textures/block/rubber_wall_sign.png new file mode 100644 index 0000000000..189063160b Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/rubber_wall_sign.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_cracked.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_cracked.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_cracked.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_cracked.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_small.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_square.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_square.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_bricks_square.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/bricks_square.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_chiseled.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/chiseled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_chiseled.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/chiseled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_cobble.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/cobble.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_cobble.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/cobble.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_cobble_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/cobble_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_cobble_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/cobble_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_polished.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/polished.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_polished.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/polished.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_template.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/smooth.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_template.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/smooth.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_smooth.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/stone.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_smooth.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/stone.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_tiled.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/tiled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_tiled.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/tiled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_tiled_small.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/tiled_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_tiled_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/tiled_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_windmill_a.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/windmill_a.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_windmill_a.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/windmill_a.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_windmill_b.png b/src/main/resources/assets/gtceu/textures/block/stones/basalt/windmill_b.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/basalt/basalt_windmill_b.png rename to src/main/resources/assets/gtceu/textures/block/stones/basalt/windmill_b.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_cracked.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_cracked.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_cracked.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_cracked.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_small.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_square.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_square.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_bricks_square.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/bricks_square.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_chiseled.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/chiseled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_chiseled.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/chiseled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_cobble.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/cobble.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_cobble.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/cobble.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_cobble_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/cobble_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_cobble_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/cobble_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_polished.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/polished.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_polished.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/polished.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_template.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/smooth.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_template.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/smooth.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_smooth.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/stone.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_smooth.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/stone.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_tiled.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/tiled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_tiled.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/tiled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_tiled_small.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/tiled_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_tiled_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/tiled_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_windmill_a.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/windmill_a.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_windmill_a.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/windmill_a.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_windmill_b.png b/src/main/resources/assets/gtceu/textures/block/stones/black_granite/windmill_b.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/black_granite/black_granite_windmill_b.png rename to src/main/resources/assets/gtceu/textures/block/stones/black_granite/windmill_b.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_cracked.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_cracked.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_cracked.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_cracked.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_small.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_square.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_square.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_bricks_square.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/bricks_square.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_chiseled.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/chiseled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_chiseled.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/chiseled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_cobble.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/cobble.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_cobble.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/cobble.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_cobble_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/cobble_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_cobble_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/cobble_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_polished.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/polished.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_polished.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/polished.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_smooth.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/smooth.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_smooth.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/smooth.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/stone.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/stone.png new file mode 100644 index 0000000000..befe598098 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/stone.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_tiled.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/tiled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_tiled.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/tiled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_tiled_small.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/tiled_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_tiled_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/tiled_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_windmill_a.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/windmill_a.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_windmill_a.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/windmill_a.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_windmill_b.png b/src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/windmill_b.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_dark/concrete_dark_windmill_b.png rename to src/main/resources/assets/gtceu/textures/block/stones/dark_concrete/windmill_b.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_cracked.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_cracked.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_cracked.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_cracked.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_small.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_square.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_square.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_bricks_square.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/bricks_square.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_chiseled.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/chiseled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_chiseled.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/chiseled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_cobble.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/cobble.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_cobble.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/cobble.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_cobble_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/cobble_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_cobble_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/cobble_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_polished.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/polished.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_polished.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/polished.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_smooth.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/smooth.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_smooth.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/smooth.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/stone.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/stone.png new file mode 100644 index 0000000000..1a42c48143 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/stone.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_tiled.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/tiled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_tiled.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/tiled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_tiled_small.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/tiled_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_tiled_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/tiled_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_windmill_a.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/windmill_a.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_windmill_a.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/windmill_a.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_windmill_b.png b/src/main/resources/assets/gtceu/textures/block/stones/light_concrete/windmill_b.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/concrete_light/concrete_light_windmill_b.png rename to src/main/resources/assets/gtceu/textures/block/stones/light_concrete/windmill_b.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/bricks.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/bricks.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_cracked.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_cracked.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_cracked.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_cracked.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_small.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_square.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_square.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_square.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/bricks_square.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_chiseled.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/chiseled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_chiseled.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/chiseled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_cobble.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/cobble.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_cobble.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/cobble.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_cobble_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/cobble_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_cobble_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/cobble_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_small_OG.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_small_OG.png deleted file mode 100644 index da73db9f64..0000000000 Binary files a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_bricks_small_OG.png and /dev/null differ diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_polished.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/polished.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_polished.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/polished.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_smooth.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/smooth.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_smooth.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/smooth.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/stone.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/stone.png new file mode 100644 index 0000000000..1a4ab1d6f0 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/stones/marble/stone.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_tiled.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/tiled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_tiled.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/tiled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_tiled_small.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/tiled_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_tiled_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/tiled_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_windmill_a.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/windmill_a.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_windmill_a.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/windmill_a.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/marble/marble_windmill_b.png b/src/main/resources/assets/gtceu/textures/block/stones/marble/windmill_b.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/marble/marble_windmill_b.png rename to src/main/resources/assets/gtceu/textures/block/stones/marble/windmill_b.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_cracked.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_cracked.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_cracked.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_cracked.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_small.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_square.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_square.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_bricks_square.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/bricks_square.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_chiseled.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/chiseled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_chiseled.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/chiseled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_cobble.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/cobble.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_cobble.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/cobble.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_cobble_mossy.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/cobble_mossy.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_cobble_mossy.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/cobble_mossy.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_polished.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/polished.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_polished.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/polished.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_smooth.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/smooth.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_smooth.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/smooth.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/stone.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/stone.png new file mode 100644 index 0000000000..e5168229be Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/stone.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_tiled.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/tiled.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_tiled.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/tiled.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_tiled_small.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/tiled_small.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_tiled_small.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/tiled_small.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_windmill_a.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/windmill_a.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_windmill_a.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/windmill_a.png diff --git a/src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_windmill_b.png b/src/main/resources/assets/gtceu/textures/block/stones/red_granite/windmill_b.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/stones/red_granite/red_granite_windmill_b.png rename to src/main/resources/assets/gtceu/textures/block/stones/red_granite/windmill_b.png diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/PlacedFeatureMixin.java b/src/main/resources/assets/gtceu/textures/block/storage/rubber_planks.png similarity index 100% rename from src/main/java/com/gregtechceu/gtceu/core/mixins/PlacedFeatureMixin.java rename to src/main/resources/assets/gtceu/textures/block/storage/rubber_planks.png diff --git a/src/main/resources/assets/gtceu/textures/block/stripped_rubber_log.png b/src/main/resources/assets/gtceu/textures/block/stripped_rubber_log.png new file mode 100644 index 0000000000..a4c0d2afb7 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/stripped_rubber_log.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/stripped_rubber_log_top.png b/src/main/resources/assets/gtceu/textures/block/stripped_rubber_log_top.png new file mode 100644 index 0000000000..0ea962d5fa Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/stripped_rubber_log_top.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/stripped_rubber_wood.png b/src/main/resources/assets/gtceu/textures/block/stripped_rubber_wood.png new file mode 100644 index 0000000000..a4c0d2afb7 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/stripped_rubber_wood.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/treated_wood_door.png b/src/main/resources/assets/gtceu/textures/block/treated_wood_door.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/resources/assets/gtceu/textures/block/treated_wood_hanging_sign.png b/src/main/resources/assets/gtceu/textures/block/treated_wood_hanging_sign.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/resources/assets/gtceu/textures/block/treated_wood_sign.png b/src/main/resources/assets/gtceu/textures/block/treated_wood_sign.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/resources/assets/gtceu/textures/block/treated_wood_top.png b/src/main/resources/assets/gtceu/textures/block/treated_wood_top.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/resources/assets/gtceu/textures/block/treated_wood_trapdoor.png b/src/main/resources/assets/gtceu/textures/block/treated_wood_trapdoor.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/resources/assets/gtceu/textures/block/treated_wood_wall_hanging_sign.png b/src/main/resources/assets/gtceu/textures/block/treated_wood_wall_hanging_sign.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/resources/assets/gtceu/textures/block/treated_wood_wall_sign.png b/src/main/resources/assets/gtceu/textures/block/treated_wood_wall_sign.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/resources/assets/gtceu/textures/block/white_lamp.png b/src/main/resources/assets/gtceu/textures/block/white_lamp.png new file mode 100644 index 0000000000..28a3e0bdd0 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/white_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/yellow_lamp.png b/src/main/resources/assets/gtceu/textures/block/yellow_lamp.png new file mode 100644 index 0000000000..93b4a8b7fe Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/block/yellow_lamp.png differ diff --git a/src/main/resources/assets/gtceu/textures/block/yellow_lamp.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/yellow_lamp.png.mcmeta new file mode 100644 index 0000000000..6ce7a0d606 --- /dev/null +++ b/src/main/resources/assets/gtceu/textures/block/yellow_lamp.png.mcmeta @@ -0,0 +1,5 @@ +{ + "ldlib": { + "connection": "gtceu:block/yellow_lamp_ctm" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/textures/entity/signs/hanging/rubber.png b/src/main/resources/assets/gtceu/textures/entity/signs/hanging/rubber.png new file mode 100644 index 0000000000..02e77aabd0 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/entity/signs/hanging/rubber.png differ diff --git a/src/main/resources/assets/gtceu/textures/entity/signs/rubber.png b/src/main/resources/assets/gtceu/textures/entity/signs/rubber.png new file mode 100644 index 0000000000..189063160b Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/entity/signs/rubber.png differ diff --git a/src/main/resources/assets/gtceu/textures/gui/rubber.png b/src/main/resources/assets/gtceu/textures/gui/rubber.png new file mode 100644 index 0000000000..7cc979de2a Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/gui/rubber.png differ diff --git a/src/main/resources/assets/gtceu/textures/hanging_signs/rubber.png b/src/main/resources/assets/gtceu/textures/hanging_signs/rubber.png new file mode 100644 index 0000000000..7cc979de2a Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/hanging_signs/rubber.png differ diff --git a/src/main/resources/assets/gtceu/textures/item/rubber_door.png b/src/main/resources/assets/gtceu/textures/item/rubber_door.png new file mode 100644 index 0000000000..17b378a786 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/item/rubber_door.png differ diff --git a/src/main/resources/assets/gtceu/textures/item/rubber_hanging_sign.png b/src/main/resources/assets/gtceu/textures/item/rubber_hanging_sign.png new file mode 100644 index 0000000000..e78db0c62d Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/item/rubber_hanging_sign.png differ diff --git a/src/main/resources/assets/gtceu/textures/item/rubber_sign.png b/src/main/resources/assets/gtceu/textures/item/rubber_sign.png new file mode 100644 index 0000000000..2357ce13f1 Binary files /dev/null and b/src/main/resources/assets/gtceu/textures/item/rubber_sign.png differ diff --git a/src/main/resources/gtceu.accesswidener b/src/main/resources/gtceu.accesswidener new file mode 100644 index 0000000000..ebd7e09361 --- /dev/null +++ b/src/main/resources/gtceu.accesswidener @@ -0,0 +1,40 @@ +accessWidener v2 named + +accessible field net/minecraft/world/level/levelgen/placement/HeightRangePlacement height Lnet/minecraft/world/level/levelgen/heightproviders/HeightProvider; +accessible field net/minecraft/world/level/levelgen/heightproviders/UniformHeight minInclusive Lnet/minecraft/world/level/levelgen/VerticalAnchor; +accessible field net/minecraft/world/level/levelgen/heightproviders/UniformHeight maxInclusive Lnet/minecraft/world/level/levelgen/VerticalAnchor; + +accessible method net/minecraft/data/loot/BlockLootSubProvider createSingleItemTable (Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/level/storage/loot/providers/number/NumberProvider;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +accessible method net/minecraft/data/loot/BlockLootSubProvider applyExplosionDecay (Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/level/storage/loot/functions/FunctionUserBuilder;)Lnet/minecraft/world/level/storage/loot/functions/FunctionUserBuilder; +accessible method net/minecraft/data/loot/BlockLootSubProvider createSilkTouchDispatchTable (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer$Builder;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +accessible method net/minecraft/data/loot/BlockLootSubProvider createLeavesDrops (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;[F)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +accessible field net/minecraft/data/loot/BlockLootSubProvider HAS_NO_SILK_TOUCH Lnet/minecraft/world/level/storage/loot/predicates/LootItemCondition$Builder; +accessible method net/minecraft/world/level/storage/loot/entries/LootItem (Lnet/minecraft/world/item/Item;II[Lnet/minecraft/world/level/storage/loot/predicates/LootItemCondition;[Lnet/minecraft/world/level/storage/loot/functions/LootItemFunction;)V + +accessible method net/minecraft/data/models/BlockModelGenerators createFacingDispatch ()Lnet/minecraft/data/models/blockstates/PropertyDispatch; +accessible method net/minecraft/data/models/BlockModelGenerators createSimpleBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/data/models/blockstates/MultiVariantGenerator; + +extendable method net/minecraft/server/packs/resources/SimplePreparableReloadListener reload (Lnet/minecraft/server/packs/resources/PreparableReloadListener$PreparationBarrier;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;Lnet/minecraft/util/profiling/ProfilerFiller;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture; +accessible method net/minecraft/data/models/model/TextureSlot create (Ljava/lang/String;)Lnet/minecraft/data/models/model/TextureSlot; +accessible method net/minecraft/data/models/model/TexturedModel createDefault (Ljava/util/function/Function;Lnet/minecraft/data/models/model/ModelTemplate;)Lnet/minecraft/data/models/model/TexturedModel$Provider; + +accessible field net/minecraft/world/item/HoeItem TILLABLES Ljava/util/Map; +accessible field net/minecraft/world/item/ShovelItem FLATTENABLES Ljava/util/Map; +accessible field net/minecraft/world/item/AxeItem STRIPPABLES Ljava/util/Map; + + + + +accessible method net/minecraft/world/level/block/state/properties/BlockSetType register (Lnet/minecraft/world/level/block/state/properties/BlockSetType;)Lnet/minecraft/world/level/block/state/properties/BlockSetType; + +accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; +accessible field net/minecraft/world/item/Item BASE_ATTACK_DAMAGE_UUID Ljava/util/UUID; +accessible field net/minecraft/world/item/Item BASE_ATTACK_SPEED_UUID Ljava/util/UUID; +accessible method net/minecraft/world/entity/LivingEntity breakItem (Lnet/minecraft/world/item/ItemStack;)V +accessible method net/minecraft/world/item/context/UseOnContext getHitResult ()Lnet/minecraft/world/phys/BlockHitResult; + +accessible field net/minecraft/world/item/crafting/ShapedRecipe result Lnet/minecraft/world/item/ItemStack; + +accessible method net/minecraft/world/level/block/Block popExperience (Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;I)V + +accessible field net/minecraft/world/entity/item/ItemEntity pickupDelay I