From 533a315c3ffd6ae72531e81e01a5c985718422c2 Mon Sep 17 00:00:00 2001 From: stfwi Date: Thu, 11 Jul 2019 21:13:04 +0200 Subject: [PATCH 1/8] 1.14: Config implemented. Recipes completed (standalone recipes). Lang file newline escape fixes. Hard IE dependent blocks are implicitly opted out if IE is not installed. --- 1.12/gradle.properties | 2 +- 1.12/readme.md | 5 +++++ .../main/resources/assets/engineersdecor/lang/en_us.lang | 6 +++--- .../main/resources/assets/engineersdecor/lang/zh_cn.lang | 6 +++--- 1.14/gradle.properties | 2 +- 1.14/meta/update.json | 3 ++- 1.14/readme.md | 6 ++++++ meta/lib/liblang.1.12.js | 1 + meta/update.json | 3 ++- readme.md | 5 ++++- 10 files changed, 28 insertions(+), 11 deletions(-) diff --git a/1.12/gradle.properties b/1.12/gradle.properties index aff41d6..f1f2d83 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.9 +version_engineersdecor=1.0.10-b1 diff --git a/1.12/readme.md b/1.12/readme.md index 6fef5a9..bbe0fa3 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,11 @@ Mod sources for Minecraft version 1.12.2. ---- ## Version history + ~ v1.0.10-b1 [I] Features WIP + [A] Treated wood side table added. + [F] Fixed recipe collision of Metal Rung Ladder (issue #37, + thx ProsperCraft for reporting). + ------------------------------------------------------------------- - v1.0.9 [R] Release based on v1.0.9-b3. Release-to-release changes: * Slabs for clinker, concrete, slag bricks. diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index aca7830..46ad420 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -81,7 +81,7 @@ tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or h tile.engineersdecor.thick_steel_pole_head.name=Straight Thick Steel Pole Head/Foot tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16). tile.engineersdecor.steel_double_t_support.name=Steel Double T Support -tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. +tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support beam fragment. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.treated_wood_table.name=Treated Wood Table tile.engineersdecor.treated_wood_table.help=§6Robust four-legged wood table.§r Indoor and outdoor use. @@ -155,7 +155,7 @@ tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulat tile.engineersdecor.sign_decor.name=Sign Plate (Engineer's decor) tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. tile.engineersdecor.sign_hotwire.name=Sign "Caution Hot Wire" -tile.engineersdecor.sign_hotwire.help=§6Electrical hazard warning. Don't forget to place around HV, or you'll have a mark in the next audit. +tile.engineersdecor.sign_hotwire.help=§6Electrical hazard warning. Don't forget to place around HV, or you will have a nonconformity in the next audit. tile.engineersdecor.sign_mindstep.name=Sign "Mind The Step" tile.engineersdecor.sign_mindstep.help=§6Placable on walls (horizontally). tile.engineersdecor.sign_danger.name=Sign "Caution Really Dangerous There" @@ -163,7 +163,7 @@ tile.engineersdecor.sign_danger.help=§6General danger warning. tile.engineersdecor.sign_defense.name=Sign "Caution Defense System Ahead" tile.engineersdecor.sign_defense.help=§6Warning sign for turrets, Tesla Coils, and traps. tile.engineersdecor.sign_factoryarea.name=Sign "Factory Area" -tile.engineersdecor.sign_factoryarea.help=§6Marker sign for buildings or areas where the really big machines are. +tile.engineersdecor.sign_factoryarea.help=§6Marker sign for buildings or areas where the really big machines are located. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.halfslab_rebar_concrete.name=Rebar Concrete Slice tile.engineersdecor.halfslab_rebar_concrete.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices. diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/zh_cn.lang b/1.12/src/main/resources/assets/engineersdecor/lang/zh_cn.lang index 43890fd..f5b0145 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/zh_cn.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/zh_cn.lang @@ -79,7 +79,7 @@ tile.engineersdecor.thin_steel_pole_head.name=Straight Thin Steel Pole head/foot tile.engineersdecor.thick_steel_pole_head.name=Straight Thick Steel Pole Head/Foot #tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16). tile.engineersdecor.steel_double_t_support.name=Steel Double T Support -#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment. +#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support beam fragment. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.treated_wood_table.name=经过处理的木桌 tile.engineersdecor.treated_wood_table.help=§6坚固的四足木桌. @@ -153,7 +153,7 @@ tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace tile.engineersdecor.sign_decor.name=Sign Plate (Engineer's decor) #tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. tile.engineersdecor.sign_hotwire.name=Sign "Caution Hot Wire" -#tile.engineersdecor.sign_hotwire.help=§6Electrical hazard warning. Don't forget to place around HV, or you'll have a mark in the next audit. +#tile.engineersdecor.sign_hotwire.help=§6Electrical hazard warning. Don't forget to place around HV, or you will have a nonconformity in the next audit. tile.engineersdecor.sign_mindstep.name=Sign "Mind The Step" #tile.engineersdecor.sign_mindstep.help=§6Placable on walls (horizontally). tile.engineersdecor.sign_danger.name=Sign "Caution Really Dangerous There" @@ -161,7 +161,7 @@ tile.engineersdecor.sign_danger.name=Sign "Caution Really Dangerous There" tile.engineersdecor.sign_defense.name=Sign "Caution Defense System Ahead" #tile.engineersdecor.sign_defense.help=§6Warning sign for turrets, Tesla Coils, and traps. tile.engineersdecor.sign_factoryarea.name=Sign "Factory Area" -#tile.engineersdecor.sign_factoryarea.help=§6Marker sign for buildings or areas where the really big machines are. +#tile.engineersdecor.sign_factoryarea.help=§6Marker sign for buildings or areas where the really big machines are located. #----------------------------------------------------------------------------------------------------------- tile.engineersdecor.halfslab_rebar_concrete.name=Rebar Concrete Slice #tile.engineersdecor.halfslab_rebar_concrete.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices. diff --git a/1.14/gradle.properties b/1.14/gradle.properties index e67bc88..e10419a 100644 --- a/1.14/gradle.properties +++ b/1.14/gradle.properties @@ -5,7 +5,7 @@ version_minecraft=1.14.3 version_forge_minecraft=1.14.3-27.0.25 version_fml_mappings=20190621-1.14.2 version_jei=6.0.0.7 -version_engineersdecor=1.0.9-b4 +version_engineersdecor=1.0.9-b5 # # jar signing data loaded from signing.properties in the project root. # diff --git a/1.14/meta/update.json b/1.14/meta/update.json index 6d15301..48aafa1 100644 --- a/1.14/meta/update.json +++ b/1.14/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.14.3": { + "1.0.9-b5": "[A] Added missing recipes for slabs, stained clinker, half-slabs, valves.\n[M] Standalone recipes adapted.\n[F] Lang files: Fixed double newline escape.\n[A] Implicit opt-out of hard IE dependent blocks ported (e.g. Concrete Wall).\n[M] Basic mod config features, opt-outs and tweaks ported.", "1.0.9-b4": "[E] Experimental: Config skel ported (!not all options have effect yet).\n[E] Experimental: JEI integration for opt-outs and crafting table ported (also addresses issue #38).", "1.0.9-b3": "[F] Additional item drop fixes when blocks are destroyed (issue #39).", "1.0.9-b2": "[U] Updated to Forge 1.14.3-27.0.25/20190621-1.14.2.\n[F] Fixed recipe collision of Metal Rung Ladder (issue #37, thx ProsperCraft for reporting).\n[F] Fixed opening crafting table, furni, dropper server crash issue #35 (thx ProsperCraft also here).\n[F] Fixed missing pole/support item drops (issue #36, ProsperCraft).", @@ -14,6 +15,6 @@ }, "promos": { "1.14.3-recommended": "", - "1.14.3-latest": "1.0.9-b4" + "1.14.3-latest": "1.0.9-b5" } } \ No newline at end of file diff --git a/1.14/readme.md b/1.14/readme.md index 9a5756b..9ef89ca 100644 --- a/1.14/readme.md +++ b/1.14/readme.md @@ -10,6 +10,12 @@ Mod sources for Minecraft version 1.14.3. ---- ## Version history + - v1.0.9-b5 [A] Added missing recipes for slabs, stained clinker, half-slabs, valves. + [M] Standalone recipes adapted. + [F] Lang files: Fixed double newline escape. + [A] Implicit opt-out of hard IE dependent blocks ported (e.g. Concrete Wall). + [M] Basic mod config features, opt-outs and tweaks ported. + - v1.0.9-b4 [E] Experimental: Config skel ported (!not all options have effect yet). [E] Experimental: JEI integration for opt-outs and crafting table ported (also addresses issue #38). diff --git a/meta/lib/liblang.1.12.js b/meta/lib/liblang.1.12.js index 7c3e658..a4d7440 100644 --- a/meta/lib/liblang.1.12.js +++ b/meta/lib/liblang.1.12.js @@ -52,6 +52,7 @@ if(kv.length!=2) throw new Error("Invalid line in '"+file_path+"': '"+lines[i]+"'"); const key = kv[0].trim(); const text = kv[1].trim(); + text = text.replace("\\\\n", "\n").replace("\\n", "\n"); if(key.length == 0) { throw new Error("Empty key in '"+file_path+"' line '" + lines[i] + "'"); } else if(key.search("tile."+modid+".")==0) { diff --git a/meta/update.json b/meta/update.json index 16d3de6..97c32ca 100644 --- a/meta/update.json +++ b/meta/update.json @@ -62,6 +62,7 @@ "1.0.0-a1": "[A] Initial port to 1.13.2 with Forge beta." }, "1.14.3": { + "1.0.9-b5": "[A] Added missing recipes for slabs, stained clinker, half-slabs, valves.\n[M] Standalone recipes adapted.\n[F] Lang files: Fixed double newline escape.\n[A] Implicit opt-out of hard IE dependent blocks ported (e.g. Concrete Wall).\n[M] Basic mod config features, opt-outs and tweaks ported.", "1.0.9-b4": "[E] Experimental: Config skel ported (!not all options have effect yet).\n[E] Experimental: JEI integration for opt-outs and crafting table ported (also addresses issue #38).", "1.0.9-b3": "[F] Additional item drop fixes when blocks are destroyed (issue #39).", "1.0.9-b2": "[U] Updated to Forge 1.14.3-27.0.25/20190621-1.14.2.\n[F] Fixed recipe collision of Metal Rung Ladder (issue #37, thx ProsperCraft for reporting).\n[F] Fixed opening crafting table, furni, dropper server crash issue #35 (thx ProsperCraft also here).\n[F] Fixed missing pole/support item drops (issue #36, ProsperCraft).", @@ -79,6 +80,6 @@ "1.13.2-recommended": "", "1.13.2-latest": "1.0.7-b5", "1.14.3-recommended": "", - "1.14.3-latest": "1.0.9-b4" + "1.14.3-latest": "1.0.9-b5" } } \ No newline at end of file diff --git a/readme.md b/readme.md index 67e048a..308bc57 100644 --- a/readme.md +++ b/readme.md @@ -144,7 +144,10 @@ More to come slowly but steadily. ### Mod pack integration, forking, back ports, bug reports, testing - Packs: If your mod pack ***is open source as well and has no installer***, - you don't need to ask and simply integrate this mod. + you don't need to ask and simply integrate this mod. The mod has an extensive + configuration allowing you to choose exactly which features you want, and + additional tweaks like furni power consumption, smelting speed etc, allow + to adapt the mod to the context it is used in. - Bug reports: Yes, please let me know. Drop a mail or better open an issue for the repository. From 2686ce784efef8c2cc86e4c077c0663e705ee53c Mon Sep 17 00:00:00 2001 From: stfwi Date: Sat, 20 Jul 2019 12:03:23 +0200 Subject: [PATCH 2/8] Updated to Forge 1.14.3-27.0.60/20190719-1.14.3. Disabled fluid handlers (issue #42). Fixed forge blockstate model locations (issue #43). --- 1.14/gradle.properties | 6 +++--- 1.14/meta/update.json | 4 +++- 1.14/readme.md | 10 ++++++++++ meta/update.json | 4 +++- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/1.14/gradle.properties b/1.14/gradle.properties index e10419a..d35e3a1 100644 --- a/1.14/gradle.properties +++ b/1.14/gradle.properties @@ -2,10 +2,10 @@ org.gradle.daemon=false org.gradle.jvmargs=-Xmx8G version_minecraft=1.14.3 -version_forge_minecraft=1.14.3-27.0.25 -version_fml_mappings=20190621-1.14.2 +version_forge_minecraft=1.14.3-27.0.60 +version_fml_mappings=20190719-1.14.3 version_jei=6.0.0.7 -version_engineersdecor=1.0.9-b5 +version_engineersdecor=1.0.9-b7 # # jar signing data loaded from signing.properties in the project root. # diff --git a/1.14/meta/update.json b/1.14/meta/update.json index 48aafa1..246fba4 100644 --- a/1.14/meta/update.json +++ b/1.14/meta/update.json @@ -1,6 +1,8 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.14.3": { + "1.0.9-b7": "[U] Updated to Forge 1.14.3-27.0.60/20190719-1.14.3.\n[F] Disabled all early implemented fuild handling of valves and the Fluid Accumulator to prevent world loading hang-ups (issue #42, thx TheOhmegha for reporting). Will be re-enabled after fluid handling released in Forge.\n[F] Fixed blockstate model locations for signs and crafting table (issue #43, thx ProsperCraft for the beta test).", + "1.0.9-b6": "[U] Updated to Forge 1.14.3-27.0.50/20190621-1.14.2.", "1.0.9-b5": "[A] Added missing recipes for slabs, stained clinker, half-slabs, valves.\n[M] Standalone recipes adapted.\n[F] Lang files: Fixed double newline escape.\n[A] Implicit opt-out of hard IE dependent blocks ported (e.g. Concrete Wall).\n[M] Basic mod config features, opt-outs and tweaks ported.", "1.0.9-b4": "[E] Experimental: Config skel ported (!not all options have effect yet).\n[E] Experimental: JEI integration for opt-outs and crafting table ported (also addresses issue #38).", "1.0.9-b3": "[F] Additional item drop fixes when blocks are destroyed (issue #39).", @@ -15,6 +17,6 @@ }, "promos": { "1.14.3-recommended": "", - "1.14.3-latest": "1.0.9-b5" + "1.14.3-latest": "1.0.9-b7" } } \ No newline at end of file diff --git a/1.14/readme.md b/1.14/readme.md index 9ef89ca..c748db6 100644 --- a/1.14/readme.md +++ b/1.14/readme.md @@ -10,6 +10,16 @@ Mod sources for Minecraft version 1.14.3. ---- ## Version history + - v1.0.9-b7 [U] Updated to Forge 1.14.3-27.0.60/20190719-1.14.3. + [F] Disabled all early implemented fuild handling of valves + and the Fluid Accumulator to prevent world loading + hang-ups (issue #42, thx TheOhmegha for reporting). + Will be re-enabled after fluid handling released in Forge. + [F] Fixed blockstate model locations for signs and crafting + table (issue #43, thx ProsperCraft for the beta test). + + - v1.0.9-b6 [U] Updated to Forge 1.14.3-27.0.50/20190621-1.14.2. + - v1.0.9-b5 [A] Added missing recipes for slabs, stained clinker, half-slabs, valves. [M] Standalone recipes adapted. [F] Lang files: Fixed double newline escape. diff --git a/meta/update.json b/meta/update.json index 97c32ca..9767d4e 100644 --- a/meta/update.json +++ b/meta/update.json @@ -62,6 +62,8 @@ "1.0.0-a1": "[A] Initial port to 1.13.2 with Forge beta." }, "1.14.3": { + "1.0.9-b7": "[U] Updated to Forge 1.14.3-27.0.60/20190719-1.14.3.\n[F] Disabled all early implemented fuild handling of valves and the Fluid Accumulator to prevent world loading hang-ups (issue #42, thx TheOhmegha for reporting). Will be re-enabled after fluid handling released in Forge.\n[F] Fixed blockstate model locations for signs and crafting table (issue #43, thx ProsperCraft for the beta test).", + "1.0.9-b6": "[U] Updated to Forge 1.14.3-27.0.50/20190621-1.14.2.", "1.0.9-b5": "[A] Added missing recipes for slabs, stained clinker, half-slabs, valves.\n[M] Standalone recipes adapted.\n[F] Lang files: Fixed double newline escape.\n[A] Implicit opt-out of hard IE dependent blocks ported (e.g. Concrete Wall).\n[M] Basic mod config features, opt-outs and tweaks ported.", "1.0.9-b4": "[E] Experimental: Config skel ported (!not all options have effect yet).\n[E] Experimental: JEI integration for opt-outs and crafting table ported (also addresses issue #38).", "1.0.9-b3": "[F] Additional item drop fixes when blocks are destroyed (issue #39).", @@ -80,6 +82,6 @@ "1.13.2-recommended": "", "1.13.2-latest": "1.0.7-b5", "1.14.3-recommended": "", - "1.14.3-latest": "1.0.9-b5" + "1.14.3-latest": "1.0.9-b7" } } \ No newline at end of file From 8ecf02d3e8a288e6bb36165b54bc5d217816266d Mon Sep 17 00:00:00 2001 From: stfwi Date: Sat, 20 Jul 2019 14:52:32 +0200 Subject: [PATCH 3/8] 1.12: Added Exit sign (issue #34). Added treated wood side table recipe. --- 1.12/meta/update.json | 3 +- 1.12/readme.md | 4 +- .../wile/engineersdecor/blocks/ModBlocks.java | 192 ++++++++++-------- .../engineersdecor/blockstates/sign_exit.json | 9 + .../assets/engineersdecor/lang/en_us.lang | 2 + .../assets/engineersdecor/lang/ru_ru.lang | 2 + .../assets/engineersdecor/lang/zh_cn.lang | 2 + .../models/block/sign/sign_exit_model.json | 45 ++++ .../treated_wood_side_table_recipe.json | 29 +++ .../recipes/sign/sign_exit_recipe.json | 16 ++ .../sign/sign_hotwire_recipe_backcycle.json | 4 +- ...ted_wood_side_table_recipe_standalone.json | 30 +++ .../blocks/sign/sign_exit_texture.png | Bin 0 -> 934 bytes meta/update.json | 3 +- 14 files changed, 249 insertions(+), 92 deletions(-) create mode 100644 1.12/src/main/resources/assets/engineersdecor/blockstates/sign_exit.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/models/block/sign/sign_exit_model.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/furniture/treated_wood_side_table_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/sign/sign_exit_recipe.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/standalone/treated_wood_side_table_recipe_standalone.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/textures/blocks/sign/sign_exit_texture.png diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 3e70560..0581559 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.10-b1": "[A] Treated wood side table added.\n[F] Fixed recipe collision of Metal Rung Ladder (issue #37, thx ProsperCraft for reporting).\n[A] Added Exit Sign (texture design by J. Carver).", "1.0.9": "[R] Release based on v1.0.9-b3. Release-to-release changes: * Slabs for clinker, concrete, slag bricks. * Slab slices for sheet metals, treated wood, and concretes. * Language updates. * Block hardness adaptions. * 1st/3rd person item model fixes. * Furnace initialisation issue fixed.", "1.0.9-b3": "[A] Added missing recipes for slabs.\n[A] Added slab slices for IE sheet metals, treated wood, and concretes (stackable \"quater-slabs\").\n[M] Updated 1st/3rd person item model rotations/translations.\n[M] Hardness of valves and furni slightly increased.", "1.0.9-b2": "[A] Added slabs for Clinker Brick, Slag Brick, Rebar Concrete, and Stained Clinker. Texture variations like the base blocks. Allow fast pick-up (see tooltip help or config).\n[F] Fixed lab/electrical furnace initialisation issue (first item inserted was smelted directly).", @@ -48,6 +49,6 @@ }, "promos": { "1.12.2-recommended": "1.0.9", - "1.12.2-latest": "1.0.9" + "1.12.2-latest": "1.0.10-b1" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index bbe0fa3..9c9bfec 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,10 +10,10 @@ Mod sources for Minecraft version 1.12.2. ---- ## Version history - ~ v1.0.10-b1 [I] Features WIP - [A] Treated wood side table added. + - v1.0.10-b1 [A] Treated wood side table added. [F] Fixed recipe collision of Metal Rung Ladder (issue #37, thx ProsperCraft for reporting). + [A] Added Exit Sign (texture design by J. Carver). ------------------------------------------------------------------- - v1.0.9 [R] Release based on v1.0.9-b3. Release-to-release changes: diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index 3865179..de5d527 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -73,6 +73,86 @@ public class ModBlocks public static final BlockDecorGlassBlock PANZERGLASS_BLOCK = new BlockDecorGlassBlock("panzerglass_block", 0, Material.GLASS, 1f, 2000f, SoundType.GLASS); public static final BlockDecorSlab PANZERGLASS_SLAB = new BlockDecorSlab("panzerglass_slab", BlockDecor.CFG_TRANSLUCENT, Material.GLASS, 1f, 2000f, SoundType.GLASS); + //-------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorCraftingTable TREATED_WOOD_CRAFTING_TABLE = new BlockDecorCraftingTable( + "treated_wood_crafting_table", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Material.WOOD, 1.0f, 15f, SoundType.WOOD, + ModAuxiliaries.getPixeledAABB(1,0,1, 15,15.9,15) + ); + + public static final BlockDecorFurnace SMALL_LAB_FURNACE = new BlockDecorFurnace( + "small_lab_furnace", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT| + BlockDecor.CFG_ELECTRICAL, + Material.IRON, 0.5f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16) + ); + + public static final BlockDecorFurnaceElectrical SMALL_ELECTRICAL_FURNACE = new BlockDecorFurnaceElectrical( + "small_electrical_furnace", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_ELECTRICAL, + Material.IRON, 0.5f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + ); + + public static final BlockDecorDropper FACTORY_DROPPER = new BlockDecorDropper( + "factory_dropper", + BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED, + Material.IRON, 1f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,15) + ); + + public static final BlockDecorWasteIncinerator SMALL_WASTE_INCINERATOR = new BlockDecorWasteIncinerator( + "small_waste_incinerator", + BlockDecor.CFG_DEFAULT|BlockDecor.CFG_ELECTRICAL, + Material.IRON, 1f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + ); + + public static final BlockDecorMineralSmelter SMALL_MINERAL_SMELTER = new BlockDecorMineralSmelter( + "small_mineral_smelter", + BlockDecor.CFG_LOOK_PLACEMENT, + Material.IRON, 1f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(1.1,0,1.1, 14.9,16,14.9) + ); + + //-------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = new BlockDecorPipeValve( + "straight_pipe_valve", + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT, + Material.IRON, 0.7f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + ); + + public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = new BlockDecorPipeValve( + "straight_pipe_valve_redstone", + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED, + Material.IRON, 0.7f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + ); + + public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = new BlockDecorPipeValve( + "straight_pipe_valve_redstone_analog", + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG, + Material.IRON, 0.7f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + ); + + public static final BlockDecorPassiveFluidAccumulator PASSIVE_FLUID_ACCUMULATOR = new BlockDecorPassiveFluidAccumulator( + "passive_fluid_accumulator", + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| + BlockDecor.CFG_CUTOUT, + Material.IRON, 0.7f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + ); + + //-------------------------------------------------------------------------------------------------------------------- public static final BlockDecorStraightPole TREATED_WOOD_POLE = new BlockDecorStraightPole( "treated_wood_pole", @@ -123,6 +203,15 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(5,5,0, 11,11,16) ); + public static final BlockDecorHorizontalSupport STEEL_DOUBLE_T_SUPPORT = new BlockDecorHorizontalSupport( + "steel_double_t_support", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + Material.IRON, 2.0f, 15f, SoundType.METAL, + ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16) + ); + + //-------------------------------------------------------------------------------------------------------------------- + public static final BlockDecor TREATED_WOOD_TABLE = new BlockDecor( "treated_wood_table", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, @@ -144,11 +233,11 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(2,0,2, 14,15.9,14) ); - public static final BlockDecorCraftingTable TREATED_WOOD_CRAFTING_TABLE = new BlockDecorCraftingTable( - "treated_wood_crafting_table", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Material.WOOD, 1.0f, 15f, SoundType.WOOD, - ModAuxiliaries.getPixeledAABB(1,0,1, 15,15.9,15) + public static final BlockDecorDirected TREATED_WOOD_WINDOWSILL = new BlockDecorDirected( + "treated_wood_windowsill", + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_FACING_PLACEMENT, + Material.WOOD, 1.0f, 10f, SoundType.WOOD, + ModAuxiliaries.getPixeledAABB(0.5,15,10.5, 15.5,16,16) ); public static final BlockDecorDirected INSET_LIGHT_IRON = new BlockDecorDirected( @@ -158,12 +247,7 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(5.2,5.2,15.7, 10.8,10.8,16.0) ); - public static final BlockDecorDirected TREATED_WOOD_WINDOWSILL = new BlockDecorDirected( - "treated_wood_windowsill", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_FACING_PLACEMENT, - Material.WOOD, 1.0f, 10f, SoundType.WOOD, - ModAuxiliaries.getPixeledAABB(0.5,15,10.5, 15.5,16,16) - ); + //-------------------------------------------------------------------------------------------------------------------- public static final BlockDecorWindow TREATED_WOOD_WINDOW = new BlockDecorWindow( "treated_wood_window", @@ -179,20 +263,7 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(0,0,7.5, 16,16,8.5) ); - public static final BlockDecorFurnace SMALL_LAB_FURNACE = new BlockDecorFurnace( - "small_lab_furnace", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT| - BlockDecor.CFG_ELECTRICAL, - Material.IRON, 0.5f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16) - ); - - public static final BlockDecorFurnaceElectrical SMALL_ELECTRICAL_FURNACE = new BlockDecorFurnaceElectrical( - "small_electrical_furnace", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_ELECTRICAL, - Material.IRON, 0.5f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) - ); + //-------------------------------------------------------------------------------------------------------------------- public static final BlockDecorDirected SIGN_MODLOGO = new BlockDecorDirected( "sign_decor", @@ -201,66 +272,6 @@ public class ModBlocks ModAuxiliaries.getPixeledAABB(0,0,15.6, 16,16,16) ); - public static final BlockDecorHorizontalSupport STEEL_DOUBLE_T_SUPPORT = new BlockDecorHorizontalSupport( - "steel_double_t_support", - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, - Material.IRON, 2.0f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16) - ); - - public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = new BlockDecorPipeValve( - "straight_pipe_valve", - BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| - BlockDecor.CFG_CUTOUT, - Material.IRON, 0.7f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) - ); - - public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = new BlockDecorPipeValve( - "straight_pipe_valve_redstone", - BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED, - Material.IRON, 0.7f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) - ); - - public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = new BlockDecorPipeValve( - "straight_pipe_valve_redstone_analog", - BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| - BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG, - Material.IRON, 0.7f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) - ); - - public static final BlockDecorPassiveFluidAccumulator PASSIVE_FLUID_ACCUMULATOR = new BlockDecorPassiveFluidAccumulator( - "passive_fluid_accumulator", - BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK| - BlockDecor.CFG_CUTOUT, - Material.IRON, 0.7f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) - ); - - public static final BlockDecorWasteIncinerator SMALL_WASTE_INCINERATOR = new BlockDecorWasteIncinerator( - "small_waste_incinerator", - BlockDecor.CFG_DEFAULT|BlockDecor.CFG_ELECTRICAL, - Material.IRON, 1f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) - ); - - public static final BlockDecorDropper FACTORY_DROPPER = new BlockDecorDropper( - "factory_dropper", - BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED, - Material.IRON, 1f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,15) - ); - - public static final BlockDecorMineralSmelter SMALL_MINERAL_SMELTER = new BlockDecorMineralSmelter( - "small_mineral_smelter", - BlockDecor.CFG_LOOK_PLACEMENT, - Material.IRON, 1f, 15f, SoundType.METAL, - ModAuxiliaries.getPixeledAABB(1.1,0,1.1, 14.9,16,14.9) - ); - public static final BlockDecorDirected SIGN_HOTWIRE = new BlockDecorDirected( "sign_hotwire", BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(1<Q0&g=qONQa6vRal7yf{&2&q2{7uJxr6fBl1EhZS0wp8k96U784>7>()O&}R# zXWlt3-ZXh_MoT5`auyHX;hyu|d(Qd3d)c}EP9I8G*@y)rNtl6z69x(r0vcduf$G8n zC*)OsCA9L@KrtVv;D5FifE$|Aa_P2p_xXNI$A>-7BcW;}C=#ftLIkQNLKqBCGl3@r zNHx3KRHzvUf-rNQl#*+mbGhMj?ys^=<}a;ICJsN7TE>lU?$57ICQE@j=SfOu4{oiq zrdyT~U?`1r-*2_?n2XHr%~<(LvHP1^7Z3kF`}OOOMvnGx+n1fqZ|L7uslIb8m7S1Q zErWFrREX2NrP^?~1!e&_nLB$tJ2XC*kM2}80N{lGu?U_>Pv-Fck)t(U%%i;Z$nMtL z@6P-&8c_p}D7z@jZ^Fp)mw$ib%*S6o@%B^4Uz;dS4O}?$VDjFU`ZbXgD9l92s+IYt ziY*`<%YNVU*vqr!KPToc*86qeKHanZtJgOjdVX;Q2%t)Ztb2g48=#u*-mpErZtHvJ zJ_qnz%eKvTY|NxT+265uaS05Bkkm-Ju%+5PcwP1-t+p^~WM=%K#Qg_GPncPAeN$UQ zOQb}AnScoN+QTmy8(HGnlx+Pj|I?}b`LWr_4?6bD2c-{(zW@-}VlMGQEi&_$2vQV- zy<4uEfzDNH3F$hq@9|@=B;xfCBwAi=+xh0%PXQP-G6xol9fegSFT|)yf*+^HM(1+b zt^pk`)a6mz)MB^rEB*tx#RnF%d`m;t!v z`QeFpM4;x0m|573vZ)zCBj|e-zmU2}0@74%<=L_VumTX;--A7i@x6I~^Z)<=07*qo IM6N<$f*cXYbN~PV literal 0 HcmV?d00001 diff --git a/meta/update.json b/meta/update.json index 9767d4e..8551d7d 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.10-b1": "[A] Treated wood side table added.\n[F] Fixed recipe collision of Metal Rung Ladder (issue #37, thx ProsperCraft for reporting).\n[A] Added Exit Sign (texture design by J. Carver).", "1.0.9": "[R] Release based on v1.0.9-b3. Release-to-release changes: * Slabs for clinker, concrete, slag bricks. * Slab slices for sheet metals, treated wood, and concretes. * Language updates. * Block hardness adaptions. * 1st/3rd person item model fixes. * Furnace initialisation issue fixed.", "1.0.9-b3": "[A] Added missing recipes for slabs.\n[A] Added slab slices for IE sheet metals, treated wood, and concretes (stackable \"quater-slabs\").\n[M] Updated 1st/3rd person item model rotations/translations.\n[M] Hardness of valves and furni slightly increased.", "1.0.9-b2": "[A] Added slabs for Clinker Brick, Slag Brick, Rebar Concrete, and Stained Clinker. Texture variations like the base blocks. Allow fast pick-up (see tooltip help or config).\n[F] Fixed lab/electrical furnace initialisation issue (first item inserted was smelted directly).", @@ -78,7 +79,7 @@ }, "promos": { "1.12.2-recommended": "1.0.9", - "1.12.2-latest": "1.0.9", + "1.12.2-latest": "1.0.10-b1", "1.13.2-recommended": "", "1.13.2-latest": "1.0.7-b5", "1.14.3-recommended": "", From 2b203abe0eb7656d13a110fce32ae3f9acaac877 Mon Sep 17 00:00:00 2001 From: stfwi Date: Sat, 20 Jul 2019 19:52:54 +0200 Subject: [PATCH 4/8] 1.14: UPDATE TO 1.14.4. Initial source structure released. --- 1.14/build.gradle | 11 + 1.14/gradle.properties | 4 +- 1.14/readme.md | 2 + .../api/fluid/IFluidPipe.java | 18 + .../java/wile/engineersdecor/ModContent.java | 662 +++++++++ .../engineersdecor/ModEngineersDecor.java | 152 ++ .../engineersdecor/blocks/BlockDecor.java | 133 ++ .../blocks/BlockDecorChair.java | 190 +++ .../blocks/BlockDecorCraftingTable.java | 1237 +++++++++++++++++ .../blocks/BlockDecorDirected.java | 104 ++ .../blocks/BlockDecorDirectedHorizontal.java | 112 ++ .../blocks/BlockDecorDropper.java | 902 ++++++++++++ .../engineersdecor/blocks/BlockDecorFull.java | 18 + .../blocks/BlockDecorFurnace.java | 991 +++++++++++++ .../blocks/BlockDecorFurnaceElectrical.java | 777 +++++++++++ .../blocks/BlockDecorGlassBlock.java | 69 + .../blocks/BlockDecorHalfSlab.java | 195 +++ .../blocks/BlockDecorHorizontalSupport.java | 134 ++ .../blocks/BlockDecorLadder.java | 105 ++ .../blocks/BlockDecorMineralSmelter.java | 656 +++++++++ .../BlockDecorPassiveFluidAccumulator.java | 274 ++++ .../blocks/BlockDecorPipeValve.java | 342 +++++ .../engineersdecor/blocks/BlockDecorSlab.java | 174 +++ .../blocks/BlockDecorStairs.java | 63 + .../blocks/BlockDecorStraightPole.java | 41 + .../engineersdecor/blocks/BlockDecorWall.java | 115 ++ .../blocks/BlockDecorWasteIncinerator.java | 718 ++++++++++ .../blocks/BlockDecorWindow.java | 32 + .../engineersdecor/blocks/IDecorBlock.java | 25 + .../wile/engineersdecor/detail/ExtItems.java | 21 + .../engineersdecor/detail/ModAuxiliaries.java | 196 +++ .../wile/engineersdecor/detail/ModConfig.java | 501 +++++++ .../engineersdecor/detail/Networking.java | 245 ++++ .../detail/RecipeCondModSpecific.java | 70 + .../engineersdecor/eapi/jei/JEIPlugin.java | 63 + 1.14/src/main/resources/META-INF/mods.toml | 31 + .../blockstates/clinker_brick_block.json | 14 + .../blockstates/clinker_brick_slab.json | 40 + .../clinker_brick_stained_block.json | 14 + .../clinker_brick_stained_slab.json | 40 + .../clinker_brick_stained_stairs.json | 44 + .../blockstates/clinker_brick_stairs.json | 44 + .../blockstates/clinker_brick_wall.json | 9 + .../blockstates/concrete_wall.json | 9 + .../blockstates/factory_dropper.json | 10 + .../blockstates/halfslab_clinker_brick.json | 49 + .../blockstates/halfslab_concrete.json | 49 + .../blockstates/halfslab_rebar_concrete.json | 49 + .../halfslab_sheetmetal_aluminum.json | 49 + .../halfslab_sheetmetal_copper.json | 49 + .../blockstates/halfslab_sheetmetal_gold.json | 49 + .../blockstates/halfslab_sheetmetal_iron.json | 49 + .../halfslab_sheetmetal_steel.json | 49 + .../blockstates/halfslab_treated_wood.json | 49 + .../blockstates/iron_inset_light.json | 14 + .../blockstates/metal_rung_ladder.json | 8 + .../blockstates/metal_rung_steps.json | 8 + .../blockstates/panzerglass_block.json | 10 + .../blockstates/panzerglass_slab.json | 40 + .../passive_fluid_accumulator.json | 10 + .../blockstates/rebar_concrete.json | 14 + .../blockstates/rebar_concrete_slab.json | 40 + .../blockstates/rebar_concrete_stairs.json | 44 + .../blockstates/rebar_concrete_tile.json | 14 + .../blockstates/rebar_concrete_tile_slab.json | 40 + .../rebar_concrete_tile_stairs.json | 44 + .../blockstates/rebar_concrete_wall.json | 9 + .../blockstates/sign_danger.json | 7 + .../blockstates/sign_decor.json | 7 + .../blockstates/sign_defense.json | 7 + .../blockstates/sign_factoryarea.json | 7 + .../blockstates/sign_hotwire.json | 7 + .../blockstates/sign_mindstep.json | 7 + .../blockstates/slag_brick_block.json | 14 + .../blockstates/slag_brick_slab.json | 40 + .../blockstates/slag_brick_stairs.json | 44 + .../blockstates/slag_brick_wall.json | 9 + .../blockstates/small_electrical_furnace.json | 16 + .../blockstates/small_lab_furnace.json | 16 + .../blockstates/small_mineral_smelter.json | 20 + .../blockstates/small_waste_incinerator.json | 6 + .../blockstates/steel_double_t_support.json | 19 + .../blockstates/steel_framed_window.json | 9 + .../blockstates/straight_pipe_valve.json | 8 + .../straight_pipe_valve_redstone.json | 14 + .../straight_pipe_valve_redstone_analog.json | 14 + .../blockstates/thick_steel_pole.json | 14 + .../blockstates/thick_steel_pole_head.json | 15 + .../blockstates/thin_steel_pole.json | 14 + .../blockstates/thin_steel_pole_head.json | 15 + .../treated_wood_crafting_table.json | 7 + .../blockstates/treated_wood_ladder.json | 8 + .../blockstates/treated_wood_pole.json | 14 + .../blockstates/treated_wood_pole_head.json | 15 + .../treated_wood_pole_support.json | 15 + .../blockstates/treated_wood_stool.json | 5 + .../blockstates/treated_wood_table.json | 5 + .../blockstates/treated_wood_window.json | 9 + .../blockstates/treated_wood_windowsill.json | 7 + .../assets/engineersdecor/lang/en_us.json | 178 +++ .../assets/engineersdecor/lang/ru_ru.json | 169 +++ .../assets/engineersdecor/lang/zh_cn.json | 127 ++ .../block/brick/clinker_brick_model0.json | 1 + .../block/brick/clinker_brick_model1.json | 1 + .../block/brick/clinker_brick_model2.json | 1 + .../block/brick/clinker_brick_model3.json | 1 + .../block/brick/clinker_brick_model4.json | 1 + .../block/brick/clinker_brick_model5.json | 1 + .../block/brick/clinker_brick_model6.json | 1 + .../block/brick/clinker_brick_model7.json | 1 + .../brick/clinker_brick_stained_model0.json | 1 + .../brick/clinker_brick_stained_model1.json | 1 + .../brick/clinker_brick_stained_model2.json | 1 + .../brick/clinker_brick_stained_model3.json | 1 + .../brick/clinker_brick_stained_model4.json | 1 + .../brick/clinker_brick_stained_model5.json | 1 + .../brick/clinker_brick_stained_model6.json | 1 + .../brick/clinker_brick_stained_model7.json | 1 + .../brick/clinker_brick_stained_stairs.json | 8 + .../clinker_brick_stained_stairs_inner.json | 8 + .../clinker_brick_stained_stairs_outer.json | 8 + .../block/brick/clinker_brick_stairs.json | 8 + .../brick/clinker_brick_stairs_inner.json | 8 + .../brick/clinker_brick_stairs_outer.json | 8 + .../brick/clinker_brick_wall_default.json | 7 + .../brick/clinker_brick_wall_inventory.json | 8 + .../block/brick/clinker_brick_wall_post.json | 8 + .../block/brick/clinker_brick_wall_side.json | 8 + .../models/block/brick/slag_brick_model0.json | 1 + .../models/block/brick/slag_brick_model1.json | 1 + .../models/block/brick/slag_brick_model2.json | 1 + .../models/block/brick/slag_brick_model3.json | 1 + .../models/block/brick/slag_brick_model4.json | 1 + .../models/block/brick/slag_brick_model5.json | 1 + .../models/block/brick/slag_brick_model6.json | 1 + .../models/block/brick/slag_brick_model7.json | 1 + .../models/block/brick/slag_brick_stairs.json | 8 + .../block/brick/slag_brick_stairs_inner.json | 8 + .../block/brick/slag_brick_stairs_outer.json | 8 + .../block/brick/slag_brick_wall_default.json | 7 + .../brick/slag_brick_wall_inventory.json | 8 + .../block/brick/slag_brick_wall_post.json | 8 + .../block/brick/slag_brick_wall_side.json | 8 + .../block/concrete/concrete_wall_default.json | 7 + .../concrete/concrete_wall_inventory.json | 7 + .../block/concrete/concrete_wall_post.json | 7 + .../block/concrete/concrete_wall_side.json | 7 + .../block/concrete/rebar_concrete_model0.json | 1 + .../block/concrete/rebar_concrete_model1.json | 1 + .../block/concrete/rebar_concrete_model2.json | 1 + .../block/concrete/rebar_concrete_model3.json | 1 + .../block/concrete/rebar_concrete_model4.json | 1 + .../block/concrete/rebar_concrete_model5.json | 1 + .../block/concrete/rebar_concrete_model6.json | 1 + .../block/concrete/rebar_concrete_model7.json | 1 + .../block/concrete/rebar_concrete_stairs.json | 8 + .../concrete/rebar_concrete_stairs_inner.json | 8 + .../concrete/rebar_concrete_stairs_outer.json | 8 + .../concrete/rebar_concrete_tile_model0.json | 1 + .../concrete/rebar_concrete_tile_model1.json | 1 + .../concrete/rebar_concrete_tile_model2.json | 1 + .../concrete/rebar_concrete_tile_model3.json | 1 + .../concrete/rebar_concrete_tile_model4.json | 1 + .../concrete/rebar_concrete_tile_model5.json | 1 + .../concrete/rebar_concrete_tile_model6.json | 1 + .../concrete/rebar_concrete_tile_model7.json | 1 + .../concrete/rebar_concrete_tile_stairs.json | 8 + .../rebar_concrete_tile_stairs_inner.json | 8 + .../rebar_concrete_tile_stairs_outer.json | 8 + .../concrete/rebar_concrete_wall_default.json | 7 + .../rebar_concrete_wall_inventory.json | 7 + .../concrete/rebar_concrete_wall_post.json | 7 + .../concrete/rebar_concrete_wall_side.json | 7 + .../treated_wood_crafting_table_model.json | 121 ++ .../block/device/factory_dropper_model.json | 114 ++ .../device/factory_dropper_model_open.json | 108 ++ .../small_electrical_furnace_model.json | 107 ++ .../small_electrical_furnace_model_lit.json | 7 + .../furnace/small_lab_furnace_model.json | 198 +++ .../furnace/small_lab_furnace_model_lit.json | 4 + .../furnace/small_mineral_smelter_model.json | 106 ++ .../small_mineral_smelter_model_s1.json | 6 + .../small_mineral_smelter_model_s2.json | 6 + .../small_mineral_smelter_model_s3.json | 6 + .../small_waste_incinerator_model.json | 35 + .../small_waste_incinerator_model_lit.json | 6 + .../framed_window_glasspane_submodel.json | 39 + .../furniture/steel_framed_window_model.json | 116 ++ .../steel_framed_window_submodel.json | 67 + .../furniture/treated_wood_stool_model.json | 151 ++ .../furniture/treated_wood_table_model.json | 189 +++ .../furniture/treated_wood_window_model.json | 276 ++++ .../treated_wood_window_submodel.json | 54 + .../treated_wood_windowsill_model.json | 88 ++ .../glass/panzerglass_block_inventory.json | 4 + .../block/glass/panzerglass_block_model.json | 1 + .../steel_double_t_support_model.json | 81 ++ ...steel_double_t_support_xconnect_model.json | 63 + ...e_t_support_xconnect_thick_pole_model.json | 62 + ...le_t_support_xconnect_thin_pole_model.json | 62 + .../block/ladder/metal_rung_ladder_model.json | 170 +++ .../block/ladder/metal_rung_steps_model.json | 170 +++ .../ladder/treated_wood_ladder_model.json | 98 ++ .../models/block/light/inset_light_model.json | 137 ++ .../pipe/passive_fluid_accumulator_model.json | 55 + .../block/pipe/straight_pipe_valve_model.json | 88 ++ ...ight_pipe_valve_redstone_analog_model.json | 6 + .../straight_pipe_valve_redstone_model.json | 6 + ...ight_pipe_valve_rs_connector_submodel.json | 54 + .../block/pole/straight_pole_head_model.json | 129 ++ .../block/pole/straight_pole_model.json | 69 + .../pole/straight_pole_support_model.json | 153 ++ .../straight_thick_metal_pole_head_model.json | 128 ++ .../pole/straight_thick_metal_pole_model.json | 79 ++ .../straight_thin_metal_pole_head_model.json | 135 ++ .../pole/straight_thin_metal_pole_model.json | 79 ++ .../models/block/sign/sign_danger_model.json | 4 + .../models/block/sign/sign_decor_model.json | 45 + .../models/block/sign/sign_defense_model.json | 4 + .../block/sign/sign_factoryarea_model.json | 4 + .../models/block/sign/sign_hotwire_model.json | 4 + .../block/sign/sign_mindstep_model.json | 4 + .../block/sign/sign_rect14x14_model.json | 45 + .../block/sign/sign_triangular_model.json | 201 +++ .../generic/halfslab_inventory_model.json | 1 + .../block/slab/generic/halfslab_s0_model.json | 55 + .../block/slab/generic/halfslab_s1_model.json | 22 + .../block/slab/generic/halfslab_s2_model.json | 22 + .../block/slab/generic/halfslab_s3_model.json | 55 + .../block/slab/generic/halfslab_s4_model.json | 22 + .../block/slab/generic/halfslab_s5_model.json | 22 + .../block/slab/generic/halfslab_s6_model.json | 22 + .../block/slab/generic/halfslab_s7_model.json | 22 + .../block/slab/generic/halfslab_s8_model.json | 22 + .../block/slab/generic/halfslab_s9_model.json | 22 + .../block/slab/generic/halfslab_sa_model.json | 22 + .../block/slab/generic/halfslab_sb_model.json | 22 + .../block/slab/generic/halfslab_sc_model.json | 22 + .../block/slab/generic/halfslab_sd_model.json | 22 + .../block/slab/generic/halfslab_se_model.json | 22 + .../slab/generic/slab_inventory_model.json | 8 + .../block/slab/generic/slab_s0_model.json | 8 + .../block/slab/generic/slab_s1_model.json | 8 + .../block/slab/generic/slab_s2_model.json | 8 + .../clinker_brick_slab_s0v0_model.json | 1 + .../clinker_brick_slab_s0v1_model.json | 1 + .../clinker_brick_slab_s0v2_model.json | 1 + .../clinker_brick_slab_s0v3_model.json | 1 + .../clinker_brick_slab_s1v0_model.json | 1 + .../clinker_brick_slab_s1v1_model.json | 1 + .../clinker_brick_slab_s1v2_model.json | 1 + .../clinker_brick_slab_s1v3_model.json | 1 + .../clinker_brick_slab_s2v0_model.json | 1 + .../clinker_brick_slab_s2v1_model.json | 1 + .../clinker_brick_slab_s2v2_model.json | 1 + .../clinker_brick_slab_s2v3_model.json | 1 + ...clinker_brick_stained_slab_s0v0_model.json | 1 + ...clinker_brick_stained_slab_s0v1_model.json | 1 + ...clinker_brick_stained_slab_s0v2_model.json | 1 + ...clinker_brick_stained_slab_s0v3_model.json | 1 + ...clinker_brick_stained_slab_s1v0_model.json | 1 + ...clinker_brick_stained_slab_s1v1_model.json | 1 + ...clinker_brick_stained_slab_s1v2_model.json | 1 + ...clinker_brick_stained_slab_s1v3_model.json | 1 + ...clinker_brick_stained_slab_s2v0_model.json | 1 + ...clinker_brick_stained_slab_s2v1_model.json | 1 + ...clinker_brick_stained_slab_s2v2_model.json | 1 + ...clinker_brick_stained_slab_s2v3_model.json | 1 + .../specific/halfslab_concrete_s0_model.json | 1 + .../specific/halfslab_concrete_s1_model.json | 1 + .../specific/halfslab_concrete_s2_model.json | 1 + .../specific/halfslab_concrete_s3_model.json | 1 + .../specific/halfslab_concrete_s4_model.json | 1 + .../specific/halfslab_concrete_s5_model.json | 1 + .../specific/halfslab_concrete_s6_model.json | 1 + .../specific/halfslab_concrete_s7_model.json | 1 + .../specific/halfslab_concrete_s8_model.json | 1 + .../specific/halfslab_concrete_s9_model.json | 1 + .../specific/halfslab_concrete_sa_model.json | 1 + .../specific/halfslab_concrete_sb_model.json | 1 + .../specific/halfslab_concrete_sc_model.json | 1 + .../specific/halfslab_concrete_sd_model.json | 1 + .../specific/halfslab_concrete_se_model.json | 1 + .../halfslab_rebar_concrete_s0_model.json | 1 + .../halfslab_rebar_concrete_s1_model.json | 1 + .../halfslab_rebar_concrete_s2_model.json | 1 + .../halfslab_rebar_concrete_s3_model.json | 1 + .../halfslab_rebar_concrete_s4_model.json | 1 + .../halfslab_rebar_concrete_s5_model.json | 1 + .../halfslab_rebar_concrete_s6_model.json | 1 + .../halfslab_rebar_concrete_s7_model.json | 1 + .../halfslab_rebar_concrete_s8_model.json | 1 + .../halfslab_rebar_concrete_s9_model.json | 1 + .../halfslab_rebar_concrete_sa_model.json | 1 + .../halfslab_rebar_concrete_sb_model.json | 1 + .../halfslab_rebar_concrete_sc_model.json | 1 + .../halfslab_rebar_concrete_sd_model.json | 1 + .../halfslab_rebar_concrete_se_model.json | 1 + ...halfslab_sheetmetal_aluminum_s0_model.json | 1 + ...halfslab_sheetmetal_aluminum_s1_model.json | 1 + ...halfslab_sheetmetal_aluminum_s2_model.json | 1 + ...halfslab_sheetmetal_aluminum_s3_model.json | 1 + ...halfslab_sheetmetal_aluminum_s4_model.json | 1 + ...halfslab_sheetmetal_aluminum_s5_model.json | 1 + ...halfslab_sheetmetal_aluminum_s6_model.json | 1 + ...halfslab_sheetmetal_aluminum_s7_model.json | 1 + ...halfslab_sheetmetal_aluminum_s8_model.json | 1 + ...halfslab_sheetmetal_aluminum_s9_model.json | 1 + ...halfslab_sheetmetal_aluminum_sa_model.json | 1 + ...halfslab_sheetmetal_aluminum_sb_model.json | 1 + ...halfslab_sheetmetal_aluminum_sc_model.json | 1 + ...halfslab_sheetmetal_aluminum_sd_model.json | 1 + ...halfslab_sheetmetal_aluminum_se_model.json | 1 + .../halfslab_sheetmetal_copper_s0_model.json | 1 + .../halfslab_sheetmetal_copper_s1_model.json | 1 + .../halfslab_sheetmetal_copper_s2_model.json | 1 + .../halfslab_sheetmetal_copper_s3_model.json | 1 + .../halfslab_sheetmetal_copper_s4_model.json | 1 + .../halfslab_sheetmetal_copper_s5_model.json | 1 + .../halfslab_sheetmetal_copper_s6_model.json | 1 + .../halfslab_sheetmetal_copper_s7_model.json | 1 + .../halfslab_sheetmetal_copper_s8_model.json | 1 + .../halfslab_sheetmetal_copper_s9_model.json | 1 + .../halfslab_sheetmetal_copper_sa_model.json | 1 + .../halfslab_sheetmetal_copper_sb_model.json | 1 + .../halfslab_sheetmetal_copper_sc_model.json | 1 + .../halfslab_sheetmetal_copper_sd_model.json | 1 + .../halfslab_sheetmetal_copper_se_model.json | 1 + .../halfslab_sheetmetal_gold_s0_model.json | 1 + .../halfslab_sheetmetal_gold_s1_model.json | 1 + .../halfslab_sheetmetal_gold_s2_model.json | 1 + .../halfslab_sheetmetal_gold_s3_model.json | 1 + .../halfslab_sheetmetal_gold_s4_model.json | 1 + .../halfslab_sheetmetal_gold_s5_model.json | 1 + .../halfslab_sheetmetal_gold_s6_model.json | 1 + .../halfslab_sheetmetal_gold_s7_model.json | 1 + .../halfslab_sheetmetal_gold_s8_model.json | 1 + .../halfslab_sheetmetal_gold_s9_model.json | 1 + .../halfslab_sheetmetal_gold_sa_model.json | 1 + .../halfslab_sheetmetal_gold_sb_model.json | 1 + .../halfslab_sheetmetal_gold_sc_model.json | 1 + .../halfslab_sheetmetal_gold_sd_model.json | 1 + .../halfslab_sheetmetal_gold_se_model.json | 1 + .../halfslab_sheetmetal_iron_s0_model.json | 1 + .../halfslab_sheetmetal_iron_s1_model.json | 1 + .../halfslab_sheetmetal_iron_s2_model.json | 1 + .../halfslab_sheetmetal_iron_s3_model.json | 1 + .../halfslab_sheetmetal_iron_s4_model.json | 1 + .../halfslab_sheetmetal_iron_s5_model.json | 1 + .../halfslab_sheetmetal_iron_s6_model.json | 1 + .../halfslab_sheetmetal_iron_s7_model.json | 1 + .../halfslab_sheetmetal_iron_s8_model.json | 1 + .../halfslab_sheetmetal_iron_s9_model.json | 1 + .../halfslab_sheetmetal_iron_sa_model.json | 1 + .../halfslab_sheetmetal_iron_sb_model.json | 1 + .../halfslab_sheetmetal_iron_sc_model.json | 1 + .../halfslab_sheetmetal_iron_sd_model.json | 1 + .../halfslab_sheetmetal_iron_se_model.json | 1 + .../halfslab_sheetmetal_steel_s0_model.json | 1 + .../halfslab_sheetmetal_steel_s1_model.json | 1 + .../halfslab_sheetmetal_steel_s2_model.json | 1 + .../halfslab_sheetmetal_steel_s3_model.json | 1 + .../halfslab_sheetmetal_steel_s4_model.json | 1 + .../halfslab_sheetmetal_steel_s5_model.json | 1 + .../halfslab_sheetmetal_steel_s6_model.json | 1 + .../halfslab_sheetmetal_steel_s7_model.json | 1 + .../halfslab_sheetmetal_steel_s8_model.json | 1 + .../halfslab_sheetmetal_steel_s9_model.json | 1 + .../halfslab_sheetmetal_steel_sa_model.json | 1 + .../halfslab_sheetmetal_steel_sb_model.json | 1 + .../halfslab_sheetmetal_steel_sc_model.json | 1 + .../halfslab_sheetmetal_steel_sd_model.json | 1 + .../halfslab_sheetmetal_steel_se_model.json | 1 + .../halfslab_treated_wood_s0_model.json | 1 + .../halfslab_treated_wood_s1_model.json | 1 + .../halfslab_treated_wood_s2_model.json | 1 + .../halfslab_treated_wood_s3_model.json | 1 + .../halfslab_treated_wood_s4_model.json | 1 + .../halfslab_treated_wood_s5_model.json | 1 + .../halfslab_treated_wood_s6_model.json | 1 + .../halfslab_treated_wood_s7_model.json | 1 + .../halfslab_treated_wood_s8_model.json | 1 + .../halfslab_treated_wood_s9_model.json | 1 + .../halfslab_treated_wood_sa_model.json | 1 + .../halfslab_treated_wood_sb_model.json | 1 + .../halfslab_treated_wood_sc_model.json | 1 + .../halfslab_treated_wood_sd_model.json | 1 + .../halfslab_treated_wood_se_model.json | 1 + .../specific/panzerglass_slab_s0v0_model.json | 1 + .../specific/panzerglass_slab_s0v1_model.json | 1 + .../specific/panzerglass_slab_s0v2_model.json | 1 + .../specific/panzerglass_slab_s0v3_model.json | 1 + .../specific/panzerglass_slab_s1v0_model.json | 1 + .../specific/panzerglass_slab_s1v1_model.json | 1 + .../specific/panzerglass_slab_s1v2_model.json | 1 + .../specific/panzerglass_slab_s1v3_model.json | 1 + .../specific/panzerglass_slab_s2v0_model.json | 1 + .../specific/panzerglass_slab_s2v1_model.json | 1 + .../specific/panzerglass_slab_s2v2_model.json | 1 + .../specific/panzerglass_slab_s2v3_model.json | 1 + .../rebar_concrete_slab_s0v0_model.json | 1 + .../rebar_concrete_slab_s0v1_model.json | 1 + .../rebar_concrete_slab_s0v2_model.json | 1 + .../rebar_concrete_slab_s0v3_model.json | 1 + .../rebar_concrete_slab_s1v0_model.json | 1 + .../rebar_concrete_slab_s1v1_model.json | 1 + .../rebar_concrete_slab_s1v2_model.json | 1 + .../rebar_concrete_slab_s1v3_model.json | 1 + .../rebar_concrete_slab_s2v0_model.json | 1 + .../rebar_concrete_slab_s2v1_model.json | 1 + .../rebar_concrete_slab_s2v2_model.json | 1 + .../rebar_concrete_slab_s2v3_model.json | 1 + .../rebar_concrete_tile_slab_s0v0_model.json | 1 + .../rebar_concrete_tile_slab_s0v1_model.json | 1 + .../rebar_concrete_tile_slab_s0v2_model.json | 1 + .../rebar_concrete_tile_slab_s0v3_model.json | 1 + .../rebar_concrete_tile_slab_s1v0_model.json | 1 + .../rebar_concrete_tile_slab_s1v1_model.json | 1 + .../rebar_concrete_tile_slab_s1v2_model.json | 1 + .../rebar_concrete_tile_slab_s1v3_model.json | 1 + .../rebar_concrete_tile_slab_s2v0_model.json | 1 + .../rebar_concrete_tile_slab_s2v1_model.json | 1 + .../rebar_concrete_tile_slab_s2v2_model.json | 1 + .../rebar_concrete_tile_slab_s2v3_model.json | 1 + .../specific/slag_brick_slab_s0v0_model.json | 1 + .../specific/slag_brick_slab_s0v1_model.json | 1 + .../specific/slag_brick_slab_s0v2_model.json | 1 + .../specific/slag_brick_slab_s0v3_model.json | 1 + .../specific/slag_brick_slab_s1v0_model.json | 1 + .../specific/slag_brick_slab_s1v1_model.json | 1 + .../specific/slag_brick_slab_s1v2_model.json | 1 + .../specific/slag_brick_slab_s1v3_model.json | 1 + .../specific/slag_brick_slab_s2v0_model.json | 1 + .../specific/slag_brick_slab_s2v1_model.json | 1 + .../specific/slag_brick_slab_s2v2_model.json | 1 + .../specific/slag_brick_slab_s2v3_model.json | 1 + .../models/block/wall/brick_wall_default.json | 9 + .../block/wall/brick_wall_inventory.json | 57 + .../models/block/wall/brick_wall_post.json | 22 + .../models/block/wall/brick_wall_side.json | 20 + .../block/wall/concrete_wall_default.json | 9 + .../block/wall/concrete_wall_inventory.json | 173 +++ .../models/block/wall/concrete_wall_post.json | 21 + .../models/block/wall/concrete_wall_side.json | 64 + .../models/item/clinker_brick_block.json | 1 + .../models/item/clinker_brick_slab.json | 1 + .../item/clinker_brick_stained_block.json | 1 + .../item/clinker_brick_stained_slab.json | 1 + .../item/clinker_brick_stained_stairs.json | 1 + .../models/item/clinker_brick_stairs.json | 1 + .../models/item/clinker_brick_wall.json | 1 + .../models/item/concrete_wall.json | 1 + .../models/item/factory_dropper.json | 1 + .../models/item/halfslab_clinker_brick.json | 1 + .../models/item/halfslab_concrete.json | 1 + .../models/item/halfslab_rebar_concrete.json | 1 + .../item/halfslab_sheetmetal_aluminum.json | 1 + .../item/halfslab_sheetmetal_copper.json | 1 + .../models/item/halfslab_sheetmetal_gold.json | 1 + .../models/item/halfslab_sheetmetal_iron.json | 1 + .../item/halfslab_sheetmetal_steel.json | 1 + .../models/item/halfslab_treated_wood.json | 1 + .../models/item/iron_inset_light.json | 1 + .../models/item/metal_rung_ladder.json | 1 + .../models/item/metal_rung_steps.json | 1 + .../models/item/panzerglass_block.json | 1 + .../models/item/panzerglass_slab.json | 1 + .../item/passive_fluid_accumulator.json | 1 + .../models/item/rebar_concrete.json | 1 + .../models/item/rebar_concrete_slab.json | 1 + .../models/item/rebar_concrete_stairs.json | 1 + .../models/item/rebar_concrete_tile.json | 1 + .../models/item/rebar_concrete_tile_slab.json | 1 + .../item/rebar_concrete_tile_stairs.json | 1 + .../models/item/rebar_concrete_wall.json | 1 + .../models/item/sign_danger.json | 1 + .../models/item/sign_decor.json | 1 + .../models/item/sign_defense.json | 1 + .../models/item/sign_factoryarea.json | 1 + .../models/item/sign_hotwire.json | 1 + .../models/item/sign_mindstep.json | 1 + .../models/item/slag_brick_block.json | 1 + .../models/item/slag_brick_slab.json | 1 + .../models/item/slag_brick_stairs.json | 1 + .../models/item/slag_brick_wall.json | 1 + .../models/item/small_electrical_furnace.json | 1 + .../models/item/small_lab_furnace.json | 4 + .../models/item/small_mineral_smelter.json | 1 + .../models/item/small_waste_incinerator.json | 1 + .../models/item/steel_double_t_support.json | 1 + .../models/item/steel_framed_window.json | 1 + .../models/item/straight_pipe_valve.json | 1 + .../item/straight_pipe_valve_redstone.json | 1 + .../straight_pipe_valve_redstone_analog.json | 1 + .../models/item/thick_steel_pole.json | 1 + .../models/item/thick_steel_pole_head.json | 1 + .../models/item/thin_steel_pole.json | 1 + .../models/item/thin_steel_pole_head.json | 1 + .../item/treated_wood_crafting_table.json | 1 + .../models/item/treated_wood_ladder.json | 1 + .../models/item/treated_wood_pole.json | 1 + .../models/item/treated_wood_pole_head.json | 1 + .../item/treated_wood_pole_support.json | 1 + .../models/item/treated_wood_stool.json | 1 + .../models/item/treated_wood_table.json | 1 + .../models/item/treated_wood_window.json | 1 + .../models/item/treated_wood_windowsill.json | 1 + .../clinker_brick/clinker_brick_pole_side.png | Bin 0 -> 443 bytes .../clinker_brick_stained_texture0.png | Bin 0 -> 757 bytes .../clinker_brick_stained_texture1.png | Bin 0 -> 731 bytes .../clinker_brick_stained_texture2.png | Bin 0 -> 750 bytes .../clinker_brick_stained_texture3.png | Bin 0 -> 738 bytes .../clinker_brick_stained_texture4.png | Bin 0 -> 751 bytes .../clinker_brick_stained_texture5.png | Bin 0 -> 739 bytes .../clinker_brick_stained_texture6.png | Bin 0 -> 750 bytes .../clinker_brick_stained_texture7.png | Bin 0 -> 753 bytes .../clinker_brick/clinker_brick_texture0.png | Bin 0 -> 748 bytes .../clinker_brick/clinker_brick_texture1.png | Bin 0 -> 736 bytes .../clinker_brick/clinker_brick_texture2.png | Bin 0 -> 731 bytes .../clinker_brick/clinker_brick_texture3.png | Bin 0 -> 728 bytes .../clinker_brick/clinker_brick_texture4.png | Bin 0 -> 746 bytes .../clinker_brick/clinker_brick_texture5.png | Bin 0 -> 724 bytes .../clinker_brick/clinker_brick_texture6.png | Bin 0 -> 740 bytes .../clinker_brick/clinker_brick_texture7.png | Bin 0 -> 739 bytes .../block/clinker_brick/clinker_brick_top.png | Bin 0 -> 521 bytes .../clinker_brick/clinker_brick_wall0.png | Bin 0 -> 530 bytes .../clinker_brick/clinker_brick_wall1.png | Bin 0 -> 660 bytes .../clinker_brick/clinker_brick_wall2.png | Bin 0 -> 672 bytes .../clinker_brick/clinker_brick_wall3.png | Bin 0 -> 609 bytes .../clinker_brick/clinker_brick_wall4.png | Bin 0 -> 636 bytes .../clinker_brick/clinker_brick_wall5.png | Bin 0 -> 603 bytes .../clinker_brick/clinker_brick_wall6.png | Bin 0 -> 648 bytes .../clinker_brick/clinker_brick_wall7.png | Bin 0 -> 630 bytes .../concrete/rebar_concrete_texture0.png | Bin 0 -> 607 bytes .../concrete/rebar_concrete_texture1.png | Bin 0 -> 623 bytes .../concrete/rebar_concrete_texture2.png | Bin 0 -> 639 bytes .../concrete/rebar_concrete_texture3.png | Bin 0 -> 618 bytes .../concrete/rebar_concrete_texture4.png | Bin 0 -> 612 bytes .../concrete/rebar_concrete_texture5.png | Bin 0 -> 619 bytes .../concrete/rebar_concrete_texture6.png | Bin 0 -> 611 bytes .../concrete/rebar_concrete_texture7.png | Bin 0 -> 615 bytes .../concrete/rebar_concrete_tile_texture0.png | Bin 0 -> 510 bytes .../concrete/rebar_concrete_tile_texture1.png | Bin 0 -> 521 bytes .../concrete/rebar_concrete_tile_texture2.png | Bin 0 -> 532 bytes .../concrete/rebar_concrete_tile_texture3.png | Bin 0 -> 529 bytes .../concrete/rebar_concrete_tile_texture4.png | Bin 0 -> 515 bytes .../concrete/rebar_concrete_tile_texture5.png | Bin 0 -> 534 bytes .../concrete/rebar_concrete_tile_texture6.png | Bin 0 -> 518 bytes .../concrete/rebar_concrete_tile_texture7.png | Bin 0 -> 534 bytes .../treated_wood_crafting_table_front.png | Bin 0 -> 521 bytes .../treated_wood_crafting_table_side.png | Bin 0 -> 489 bytes .../treated_wood_crafting_table_top.png | Bin 0 -> 604 bytes .../treated_wood_crafting_table_tray.png | Bin 0 -> 532 bytes .../block/device/factory_dropper_bottom.png | Bin 0 -> 556 bytes .../block/device/factory_dropper_shutter.png | Bin 0 -> 410 bytes .../block/device/factory_dropper_side.png | Bin 0 -> 622 bytes .../block/device/factory_dropper_top.png | Bin 0 -> 527 bytes .../furnace/small_electrical_furnace_back.png | Bin 0 -> 533 bytes .../small_electrical_furnace_back_lit.png | Bin 0 -> 893 bytes ...all_electrical_furnace_back_lit.png.mcmeta | 1 + .../small_electrical_furnace_bottom.png | Bin 0 -> 472 bytes .../small_electrical_furnace_front.png | Bin 0 -> 531 bytes .../small_electrical_furnace_front_lit.png | Bin 0 -> 876 bytes ...ll_electrical_furnace_front_lit.png.mcmeta | 1 + .../furnace/small_electrical_furnace_left.png | Bin 0 -> 522 bytes .../small_electrical_furnace_radiator.png | Bin 0 -> 448 bytes .../small_electrical_furnace_right.png | Bin 0 -> 517 bytes .../furnace/small_electrical_furnace_top.png | Bin 0 -> 484 bytes .../block/furnace/small_lab_furnace_back.png | Bin 0 -> 550 bytes .../furnace/small_lab_furnace_bottom.png | Bin 0 -> 489 bytes .../block/furnace/small_lab_furnace_front.png | Bin 0 -> 518 bytes .../small_lab_furnace_front_gloom_off.png | Bin 0 -> 184 bytes .../small_lab_furnace_front_gloom_on.png | Bin 0 -> 693 bytes ...mall_lab_furnace_front_gloom_on.png.mcmeta | 1 + .../furnace/small_lab_furnace_handles.png | Bin 0 -> 399 bytes .../block/furnace/small_lab_furnace_left.png | Bin 0 -> 533 bytes .../block/furnace/small_lab_furnace_right.png | Bin 0 -> 539 bytes .../block/furnace/small_lab_furnace_top.png | Bin 0 -> 503 bytes .../furnace/small_mineral_smelter_bottom.png | Bin 0 -> 543 bytes .../small_mineral_smelter_front_s0.png | Bin 0 -> 618 bytes .../small_mineral_smelter_front_s1.png | Bin 0 -> 728 bytes .../small_mineral_smelter_front_s1.png.mcmeta | 1 + .../small_mineral_smelter_front_s2.png | Bin 0 -> 940 bytes .../small_mineral_smelter_front_s2.png.mcmeta | 1 + .../small_mineral_smelter_front_s3.png | Bin 0 -> 957 bytes .../small_mineral_smelter_front_s3.png.mcmeta | 1 + .../furnace/small_mineral_smelter_side.png | Bin 0 -> 606 bytes .../furnace/small_mineral_smelter_top.png | Bin 0 -> 562 bytes .../small_waste_incinerator_bottom.png | Bin 0 -> 587 bytes .../furnace/small_waste_incinerator_side.png | Bin 0 -> 845 bytes .../small_waste_incinerator_side.png.mcmeta | 1 + .../furnace/small_waste_incinerator_top.png | Bin 0 -> 581 bytes .../glass/panzerglass_block_texture0.png | Bin 0 -> 591 bytes .../glass/panzerglass_block_texture1.png | Bin 0 -> 614 bytes .../glass/panzerglass_block_texture2.png | Bin 0 -> 616 bytes .../glass/panzerglass_block_texture3.png | Bin 0 -> 585 bytes .../panzerglass_block_texture_inventory.png | Bin 0 -> 658 bytes .../block/glass/window_glass_texture.png | Bin 0 -> 560 bytes .../steel_double_t_support_end_texture.png | Bin 0 -> 350 bytes .../steel_double_t_support_side_texture.png | Bin 0 -> 270 bytes .../steel_double_t_support_top_texture.png | Bin 0 -> 376 bytes .../ie_stone_decoration_concrete.png | Bin 0 -> 1104 bytes .../textures/block/iestyle/steel_texture.png | Bin 0 -> 527 bytes ...tone_decoration_concrete_by_blusunrize.png | Bin 0 -> 1104 bytes .../textures/block/iestyle/treated_wood.png | Bin 0 -> 535 bytes .../treated_wood_framed_nailed_texture.png | Bin 0 -> 584 bytes .../iestyle/treated_wood_framed_texture.png | Bin 0 -> 563 bytes .../iestyle/treated_wood_pole_texture.png | Bin 0 -> 596 bytes .../iestyle/treated_wood_rough_texture.png | Bin 0 -> 471 bytes .../light/lamp_glass_warm_square_texture.png | Bin 0 -> 506 bytes ...passive_fluid_accumulator_back_texture.png | Bin 0 -> 639 bytes ...assive_fluid_accumulator_front_texture.png | Bin 0 -> 680 bytes ...passive_fluid_accumulator_side_texture.png | Bin 0 -> 618 bytes .../pipe/straight_pipe_valve_end_texture.png | Bin 0 -> 456 bytes ...ipe_valve_side_redstone_analog_texture.png | Bin 0 -> 624 bytes ...ht_pipe_valve_side_redstone_cn_texture.png | Bin 0 -> 324 bytes ...aight_pipe_valve_side_redstone_texture.png | Bin 0 -> 615 bytes .../pipe/straight_pipe_valve_side_texture.png | Bin 0 -> 544 bytes .../pole/thick_steel_pole_side_texture.png | Bin 0 -> 402 bytes .../pole/thick_steel_pole_top_texture.png | Bin 0 -> 348 bytes .../pole/thin_steel_pole_side_texture.png | Bin 0 -> 342 bytes .../pole/thin_steel_pole_top_texture.png | Bin 0 -> 373 bytes .../pole/treated_wood_pole_side_texture.png | Bin 0 -> 444 bytes ...reated_wood_pole_support_edges_texture.png | Bin 0 -> 368 bytes .../treated_wood_pole_support_top_texture.png | Bin 0 -> 454 bytes .../pole/treated_wood_pole_top_texture.png | Bin 0 -> 452 bytes .../block/sign/engineersdecor-logo.png | Bin 0 -> 5496 bytes .../block/sign/sign_danger_texture.png | Bin 0 -> 1303 bytes .../block/sign/sign_defense_texture.png | Bin 0 -> 1550 bytes .../block/sign/sign_factoryarea_texture.png | Bin 0 -> 1581 bytes .../block/sign/sign_hotwire_texture.png | Bin 0 -> 1164 bytes .../block/sign/sign_mindstep_texture.png | Bin 0 -> 1786 bytes .../block/slag_brick/slag_brick_pole_side.png | Bin 0 -> 450 bytes .../block/slag_brick/slag_brick_texture0.png | Bin 0 -> 734 bytes .../block/slag_brick/slag_brick_texture1.png | Bin 0 -> 707 bytes .../block/slag_brick/slag_brick_texture2.png | Bin 0 -> 728 bytes .../block/slag_brick/slag_brick_texture3.png | Bin 0 -> 748 bytes .../block/slag_brick/slag_brick_texture4.png | Bin 0 -> 723 bytes .../block/slag_brick/slag_brick_texture5.png | Bin 0 -> 729 bytes .../block/slag_brick/slag_brick_texture6.png | Bin 0 -> 751 bytes .../block/slag_brick/slag_brick_texture7.png | Bin 0 -> 742 bytes .../block/slag_brick/slag_brick_top.png | Bin 0 -> 506 bytes .../block/slag_brick/slag_brick_wall0.png | Bin 0 -> 692 bytes .../block/slag_brick/slag_brick_wall1.png | Bin 0 -> 682 bytes .../block/slag_brick/slag_brick_wall2.png | Bin 0 -> 684 bytes .../block/slag_brick/slag_brick_wall3.png | Bin 0 -> 706 bytes .../block/slag_brick/slag_brick_wall4.png | Bin 0 -> 687 bytes .../block/slag_brick/slag_brick_wall5.png | Bin 0 -> 693 bytes .../block/slag_brick/slag_brick_wall6.png | Bin 0 -> 697 bytes .../block/slag_brick/slag_brick_wall7.png | Bin 0 -> 711 bytes .../textures/gui/factory_dropper_gui.png | Bin 0 -> 20887 bytes .../gui/small_electrical_furnace_gui.png | Bin 0 -> 22957 bytes .../textures/gui/small_lab_furnace_gui.png | Bin 0 -> 23429 bytes .../gui/small_waste_incinerator_gui.png | Bin 0 -> 23196 bytes .../gui/treated_wood_crafting_table.png | Bin 0 -> 27102 bytes .../factory_dropper_recipe_standalone.json | 24 + .../iron_inset_light_recipe_standalone.json | 24 + .../metal_rung_ladder_recipe_standalone.json | 22 + .../metal_rung_steps_recipe_standalone.json | 22 + ...zerglass_block_recipe_standalone.json.json | 24 + ...e_fluid_accumulator_recipe_standalone.json | 24 + .../rebar_concrete_recipe_standalone.json | 23 + .../alternative/sign_hotwire_standalone.json | 24 + .../slag_brick_recipe_standalone.json | 24 + .../small_electrical_furnace_standalone.json | 24 + .../small_lab_furnace_standalone.json | 24 + .../small_mineral_smelter_standalone.json | 26 + .../small_waste_incinerator_standalone.json | 24 + .../steel_framed_window_standalone.json | 23 + ...straight_pipe_valve_recipe_standalone.json | 22 + ...pipe_valve_redstone_recipe_standalone.json | 19 + .../thin_steel_pole_recipe_standalone.json | 22 + ...reated_wood_crafting_table_standalone.json | 22 + .../treated_wood_ladder_standalone.json | 22 + .../treated_wood_pole_standalone.json | 23 + .../treated_wood_stool_standalone.json | 24 + .../treated_wood_table_standalone.json | 24 + .../treated_wood_window_standalone.json | 23 + .../treated_wood_windowsill_standalone.json | 24 + .../dependent/concrete_halfslab_recipe.json | 23 + .../clinker_brick_halfslab_recipe.json | 23 + .../independent/clinker_brick_recipe.json | 23 + .../clinker_brick_slab_recipe.json | 24 + .../clinker_brick_stained_block_recipe.json | 17 + .../clinker_brick_stained_slab_recipe.json | 24 + .../clinker_brick_stained_stairs_recipe.json | 24 + .../clinker_brick_stairs_recipe.json | 24 + ...clinker_brick_stairs_recipe_decompose.json | 23 + .../clinker_brick_wall_recipe.json | 24 + .../clinker_brick_wall_recipe_decompose.json | 23 + .../independent/panzerglass_slab_recipe.json | 24 + .../rebar_concrete_halfslab_recipe.json | 23 + .../rebar_concrete_slab_recipe.json | 24 + .../rebar_concrete_stairs_recipe.json | 22 + ...ebar_concrete_stairs_recipe_decompose.json | 23 + .../rebar_concrete_tile_recipe.json | 21 + .../rebar_concrete_tile_recipe_decompose.json | 21 + .../rebar_concrete_tile_slab_recipe.json | 24 + .../rebar_concrete_tile_stairs_recipe.json | 22 + ...concrete_tile_stairs_recipe_decompose.json | 23 + .../rebar_concrete_wall_recipe.json | 24 + .../rebar_concrete_wall_recipe_decompose.json | 23 + .../independent/sign_danger_recipe.json | 16 + .../independent/sign_defense_recipe.json | 16 + .../independent/sign_factoryarea_recipe.json | 16 + .../sign_hotwire_recipe_wrapback.json | 16 + .../independent/slag_brick_slab_recipe.json | 24 + .../independent/slag_brick_stairs_recipe.json | 24 + .../slag_brick_stairs_recipe_decompose.json | 23 + .../independent/slag_brick_wall_recipe.json | 24 + .../slag_brick_wall_recipe_decompose.json | 23 + .../steel_double_t_support_recipe.json | 24 + ...ght_pipe_valve_redstone_analog_recipe.json | 17 + ..._pipe_valve_redstone_recipe_backcycle.json | 17 + .../thick_steel_pole_head_recipe.json | 18 + .../independent/thick_steel_pole_recipe.json | 22 + .../thick_steel_pole_recipe_backcycle.json | 18 + .../thin_steel_pole_head_recipe.json | 18 + .../thin_steel_pole_recipe_backcycle.json | 18 + .../treated_wood_pole_head_recipe.json | 18 + .../treated_wood_pole_support_recipe.json | 18 + .../treated_wood_pole_wrapover_recipe.json | 18 + .../items/accepted_mineral_smelter_input.json | 63 + .../tags/items/brick_blocks.json | 7 + .../tags/items/brick_ingots.json | 7 + .../data/engineersdecor/tags/items/dirts.json | 7 + .../tags/items/plain_concretes.json | 37 + .../tags/items/plain_glass_blocks.json | 22 + .../tags/items/plain_glass_panes.json | 22 + 1.14/src/main/resources/logo.png | Bin 0 -> 5496 bytes 1.14/src/main/resources/pack.mcmeta | 7 + tasks.js | 4 +- 732 files changed, 18165 insertions(+), 4 deletions(-) create mode 100644 1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java create mode 100644 1.14/src/main/java/wile/engineersdecor/ModContent.java create mode 100644 1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirectedHorizontal.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorGlassBlock.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHalfSlab.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorLadder.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSlab.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorStairs.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWall.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/IDecorBlock.java create mode 100644 1.14/src/main/java/wile/engineersdecor/detail/ExtItems.java create mode 100644 1.14/src/main/java/wile/engineersdecor/detail/ModAuxiliaries.java create mode 100644 1.14/src/main/java/wile/engineersdecor/detail/ModConfig.java create mode 100644 1.14/src/main/java/wile/engineersdecor/detail/Networking.java create mode 100644 1.14/src/main/java/wile/engineersdecor/detail/RecipeCondModSpecific.java create mode 100644 1.14/src/main/java/wile/engineersdecor/eapi/jei/JEIPlugin.java create mode 100644 1.14/src/main/resources/META-INF/mods.toml create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_stained_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_stained_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_stained_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/clinker_brick_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/concrete_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/factory_dropper.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_clinker_brick.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_concrete.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_rebar_concrete.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_sheetmetal_aluminum.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_sheetmetal_copper.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_sheetmetal_gold.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_sheetmetal_iron.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_sheetmetal_steel.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/halfslab_treated_wood.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/iron_inset_light.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/metal_rung_ladder.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/metal_rung_steps.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/panzerglass_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/panzerglass_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/passive_fluid_accumulator.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_tile.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_tile_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_tile_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/rebar_concrete_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/sign_danger.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/sign_decor.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/sign_defense.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/sign_factoryarea.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/sign_hotwire.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/sign_mindstep.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/slag_brick_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/slag_brick_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/slag_brick_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/slag_brick_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/small_electrical_furnace.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/small_lab_furnace.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/small_mineral_smelter.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/small_waste_incinerator.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/steel_double_t_support.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/steel_framed_window.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/straight_pipe_valve_redstone_analog.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/thick_steel_pole_head.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/thin_steel_pole_head.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_crafting_table.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_ladder.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_pole.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_pole_head.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_pole_support.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_stool.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_table.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_window.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/treated_wood_windowsill.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/lang/en_us.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/lang/ru_ru.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/lang/zh_cn.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model0.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model1.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model2.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model3.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model4.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model5.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model6.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_model7.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model0.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model1.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model2.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model3.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model4.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model5.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model6.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_model7.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_stairs_inner.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stained_stairs_outer.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stairs_inner.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_stairs_outer.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_wall_default.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_wall_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_wall_post.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/clinker_brick_wall_side.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model0.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model1.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model2.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model3.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model4.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model5.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model6.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_model7.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_stairs_inner.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_stairs_outer.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_wall_default.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_wall_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_wall_post.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/brick/slag_brick_wall_side.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/concrete_wall_default.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/concrete_wall_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/concrete_wall_post.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/concrete_wall_side.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model0.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model1.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model2.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model3.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model4.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model5.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model6.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_model7.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_stairs_inner.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_stairs_outer.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model0.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model1.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model2.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model3.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model4.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model5.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model6.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_model7.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_stairs_inner.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_tile_stairs_outer.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_wall_default.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_wall_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_wall_post.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/concrete/rebar_concrete_wall_side.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/crafting_table/treated_wood_crafting_table_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/device/factory_dropper_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/device/factory_dropper_model_open.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_electrical_furnace_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_electrical_furnace_model_lit.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_lab_furnace_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_lab_furnace_model_lit.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_mineral_smelter_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_mineral_smelter_model_s1.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_mineral_smelter_model_s2.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_mineral_smelter_model_s3.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_waste_incinerator_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furnace/small_waste_incinerator_model_lit.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/framed_window_glasspane_submodel.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/steel_framed_window_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/steel_framed_window_submodel.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_stool_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_table_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_window_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_window_submodel.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/furniture/treated_wood_windowsill_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/glass/panzerglass_block_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/glass/panzerglass_block_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thick_pole_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/hsupport/steel_double_t_support_xconnect_thin_pole_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/ladder/metal_rung_ladder_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/ladder/metal_rung_steps_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/ladder/treated_wood_ladder_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/light/inset_light_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pipe/passive_fluid_accumulator_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_redstone_analog_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_redstone_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pipe/straight_pipe_valve_rs_connector_submodel.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pole/straight_pole_head_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pole/straight_pole_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pole/straight_pole_support_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_head_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pole/straight_thick_metal_pole_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_head_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/pole/straight_thin_metal_pole_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_danger_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_decor_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_defense_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_factoryarea_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_hotwire_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_mindstep_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_rect14x14_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/sign/sign_triangular_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_inventory_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/halfslab_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/slab_inventory_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/slab_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/slab_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/generic/slab_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s0v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s0v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s0v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s0v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s1v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s1v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s1v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s1v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s2v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s2v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s2v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_slab_s2v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s0v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s0v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s0v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s0v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s1v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s1v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s1v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s1v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s2v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s2v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s2v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/clinker_brick_stained_slab_s2v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_concrete_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_rebar_concrete_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_aluminum_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_copper_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_gold_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_iron_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_sheetmetal_steel_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s4_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s5_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s6_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s7_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s8_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_s9_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_sa_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_sb_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_sc_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_sd_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/halfslab_treated_wood_se_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s0v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s0v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s0v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s0v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s1v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s1v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s1v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s1v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s2v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s2v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s2v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/panzerglass_slab_s2v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s0v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s0v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s0v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s0v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s1v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s1v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s1v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s1v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s2v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s2v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s2v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_slab_s2v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s0v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s0v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s0v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s0v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s1v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s1v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s1v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s1v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s2v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s2v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s2v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/rebar_concrete_tile_slab_s2v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s0v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s0v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s0v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s0v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s1v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s1v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s1v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s1v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s2v0_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s2v1_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s2v2_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/slab/specific/slag_brick_slab_s2v3_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/brick_wall_default.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/brick_wall_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/brick_wall_post.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/brick_wall_side.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_default.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_post.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/wall/concrete_wall_side.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/clinker_brick_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/clinker_brick_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/clinker_brick_stained_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/clinker_brick_stained_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/clinker_brick_stained_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/clinker_brick_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/clinker_brick_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/concrete_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/factory_dropper.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_clinker_brick.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_concrete.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_rebar_concrete.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_sheetmetal_aluminum.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_sheetmetal_copper.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_sheetmetal_gold.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_sheetmetal_iron.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_sheetmetal_steel.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/halfslab_treated_wood.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/iron_inset_light.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/metal_rung_ladder.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/metal_rung_steps.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/panzerglass_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/panzerglass_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/passive_fluid_accumulator.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/rebar_concrete.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/rebar_concrete_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/rebar_concrete_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/rebar_concrete_tile.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/rebar_concrete_tile_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/rebar_concrete_tile_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/rebar_concrete_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/sign_danger.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/sign_decor.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/sign_defense.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/sign_factoryarea.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/sign_hotwire.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/sign_mindstep.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/slag_brick_block.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/slag_brick_slab.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/slag_brick_stairs.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/slag_brick_wall.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/small_electrical_furnace.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/small_lab_furnace.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/small_mineral_smelter.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/small_waste_incinerator.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/steel_double_t_support.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/steel_framed_window.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/straight_pipe_valve.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/straight_pipe_valve_redstone.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/straight_pipe_valve_redstone_analog.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/thick_steel_pole.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/thick_steel_pole_head.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/thin_steel_pole.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/thin_steel_pole_head.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_crafting_table.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_ladder.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_pole.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_pole_head.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_pole_support.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_stool.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_table.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_window.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/treated_wood_windowsill.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_pole_side.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture4.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture5.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture6.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_stained_texture7.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture4.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture5.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture6.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_texture7.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall4.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall5.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall6.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/clinker_brick/clinker_brick_wall7.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture4.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture5.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture6.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_texture7.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture4.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture5.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture6.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/concrete/rebar_concrete_tile_texture7.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/crafting_table/treated_wood_crafting_table_front.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/crafting_table/treated_wood_crafting_table_side.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/crafting_table/treated_wood_crafting_table_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/crafting_table/treated_wood_crafting_table_tray.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/device/factory_dropper_bottom.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/device/factory_dropper_shutter.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/device/factory_dropper_side.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/device/factory_dropper_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_back.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_back_lit.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_back_lit.png.mcmeta create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_bottom.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_front.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_front_lit.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_front_lit.png.mcmeta create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_left.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_radiator.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_right.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_electrical_furnace_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_back.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_bottom.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_front.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_front_gloom_off.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_front_gloom_on.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_front_gloom_on.png.mcmeta create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_handles.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_left.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_right.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_lab_furnace_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_bottom.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_front_s0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_front_s1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_front_s1.png.mcmeta create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_front_s2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_front_s2.png.mcmeta create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_front_s3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_front_s3.png.mcmeta create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_side.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_mineral_smelter_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_waste_incinerator_bottom.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_waste_incinerator_side.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_waste_incinerator_side.png.mcmeta create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/furnace/small_waste_incinerator_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/glass/panzerglass_block_texture0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/glass/panzerglass_block_texture1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/glass/panzerglass_block_texture2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/glass/panzerglass_block_texture3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/glass/panzerglass_block_texture_inventory.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/glass/window_glass_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/hsupport/steel_double_t_support_end_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/hsupport/steel_double_t_support_side_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/hsupport/steel_double_t_support_top_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/ieoriginal/ie_stone_decoration_concrete.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/iestyle/steel_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/iestyle/stone_decoration_concrete_by_blusunrize.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/iestyle/treated_wood.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/iestyle/treated_wood_framed_nailed_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/iestyle/treated_wood_framed_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/iestyle/treated_wood_pole_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/iestyle/treated_wood_rough_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/light/lamp_glass_warm_square_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/passive_fluid_accumulator_back_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/passive_fluid_accumulator_front_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/passive_fluid_accumulator_side_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_end_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_analog_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_cn_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/thick_steel_pole_side_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/thick_steel_pole_top_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/thin_steel_pole_side_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/thin_steel_pole_top_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/treated_wood_pole_side_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/treated_wood_pole_support_edges_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/treated_wood_pole_support_top_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/pole/treated_wood_pole_top_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/sign/engineersdecor-logo.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/sign/sign_danger_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/sign/sign_defense_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/sign/sign_factoryarea_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/sign/sign_hotwire_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/sign/sign_mindstep_texture.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_pole_side.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture4.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture5.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture6.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_texture7.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_top.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall0.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall1.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall2.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall3.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall4.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall5.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall6.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/block/slag_brick/slag_brick_wall7.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/gui/factory_dropper_gui.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/gui/small_electrical_furnace_gui.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/gui/small_lab_furnace_gui.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/gui/small_waste_incinerator_gui.png create mode 100644 1.14/src/main/resources/assets/engineersdecor/textures/gui/treated_wood_crafting_table.png create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/factory_dropper_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/iron_inset_light_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/metal_rung_ladder_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/metal_rung_steps_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/panzerglass_block_recipe_standalone.json.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/passive_fluid_accumulator_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/rebar_concrete_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/sign_hotwire_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/slag_brick_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/small_electrical_furnace_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/small_lab_furnace_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/small_mineral_smelter_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/small_waste_incinerator_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/steel_framed_window_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/straight_pipe_valve_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/straight_pipe_valve_redstone_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/thin_steel_pole_recipe_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/treated_wood_crafting_table_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/treated_wood_ladder_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/treated_wood_pole_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/treated_wood_stool_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/treated_wood_table_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/treated_wood_window_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/alternative/treated_wood_windowsill_standalone.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/dependent/concrete_halfslab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_halfslab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_slab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_stained_block_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_stained_slab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_stained_stairs_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_stairs_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_stairs_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_wall_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/clinker_brick_wall_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/panzerglass_slab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_halfslab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_slab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_stairs_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_stairs_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_tile_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_tile_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_tile_slab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_tile_stairs_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_tile_stairs_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_wall_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/rebar_concrete_wall_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/sign_danger_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/sign_defense_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/sign_factoryarea_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/sign_hotwire_recipe_wrapback.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/slag_brick_slab_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/slag_brick_stairs_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/slag_brick_stairs_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/slag_brick_wall_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/slag_brick_wall_recipe_decompose.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/steel_double_t_support_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/straight_pipe_valve_redstone_analog_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/straight_pipe_valve_redstone_recipe_backcycle.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/thick_steel_pole_head_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/thick_steel_pole_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/thick_steel_pole_recipe_backcycle.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/thin_steel_pole_head_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/thin_steel_pole_recipe_backcycle.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/treated_wood_pole_head_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/treated_wood_pole_support_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/treated_wood_pole_wrapover_recipe.json create mode 100644 1.14/src/main/resources/data/engineersdecor/tags/items/accepted_mineral_smelter_input.json create mode 100644 1.14/src/main/resources/data/engineersdecor/tags/items/brick_blocks.json create mode 100644 1.14/src/main/resources/data/engineersdecor/tags/items/brick_ingots.json create mode 100644 1.14/src/main/resources/data/engineersdecor/tags/items/dirts.json create mode 100644 1.14/src/main/resources/data/engineersdecor/tags/items/plain_concretes.json create mode 100644 1.14/src/main/resources/data/engineersdecor/tags/items/plain_glass_blocks.json create mode 100644 1.14/src/main/resources/data/engineersdecor/tags/items/plain_glass_panes.json create mode 100644 1.14/src/main/resources/logo.png create mode 100644 1.14/src/main/resources/pack.mcmeta diff --git a/1.14/build.gradle b/1.14/build.gradle index 406d07a..4a77f48 100644 --- a/1.14/build.gradle +++ b/1.14/build.gradle @@ -63,6 +63,17 @@ minecraft { } } } + data { + workingDirectory project.file('run') + property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + property 'forge.logging.console.level', 'debug' + args '--mod', 'engineersdecor', '--all', '--output', file('src/generated/resources/') + mods { + engineersdecor { + source sourceSets.main + } + } + } } } diff --git a/1.14/gradle.properties b/1.14/gradle.properties index d35e3a1..8b3a0f7 100644 --- a/1.14/gradle.properties +++ b/1.14/gradle.properties @@ -2,10 +2,10 @@ org.gradle.daemon=false org.gradle.jvmargs=-Xmx8G version_minecraft=1.14.3 -version_forge_minecraft=1.14.3-27.0.60 +version_forge_minecraft=1.14.4-28.0.2 version_fml_mappings=20190719-1.14.3 version_jei=6.0.0.7 -version_engineersdecor=1.0.9-b7 +version_engineersdecor=1.0.9-b8 # # jar signing data loaded from signing.properties in the project root. # diff --git a/1.14/readme.md b/1.14/readme.md index c748db6..27216dd 100644 --- a/1.14/readme.md +++ b/1.14/readme.md @@ -10,6 +10,8 @@ Mod sources for Minecraft version 1.14.3. ---- ## Version history + ~ v1.0.9-b8 [U] UPDATE TO 1.14.4. Forge 1.14.4-28.0.2/20190719-1.14.3. + - v1.0.9-b7 [U] Updated to Forge 1.14.3-27.0.60/20190719-1.14.3. [F] Disabled all early implemented fuild handling of valves and the Fluid Accumulator to prevent world loading diff --git a/1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java b/1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java new file mode 100644 index 0000000..83ff933 --- /dev/null +++ b/1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java @@ -0,0 +1,18 @@ +/* + * BluSunrize + * Copyright (c) 2017 + * + * This code is licensed under "Blu's License of Common Sense" + * Details can be found in the license file in the root folder of this project + */ + +package blusunrize.immersiveengineering.api.fluid; + +import net.minecraft.util.Direction; + +public interface IFluidPipe +{ + boolean canOutputPressurized(boolean consumePower); + + boolean hasOutputConnection(Direction side); +} diff --git a/1.14/src/main/java/wile/engineersdecor/ModContent.java b/1.14/src/main/java/wile/engineersdecor/ModContent.java new file mode 100644 index 0000000..17be32b --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/ModContent.java @@ -0,0 +1,662 @@ +/* + * @file ModContent.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2018 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Definition and initialisation of blocks of this + * module, along with their tile entities if applicable. + * + * Note: Straight forward definition of different blocks/entities + * to make recipes, models and texture definitions easier. + */ +package wile.engineersdecor; + +import org.apache.commons.lang3.ArrayUtils; +import wile.engineersdecor.blocks.*; +import wile.engineersdecor.detail.ModAuxiliaries; +import net.minecraft.client.gui.ScreenManager; +import net.minecraft.inventory.container.ContainerType; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityClassification; +import net.minecraft.entity.EntityType; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.block.material.MaterialColor; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.item.BlockItem; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.event.RegistryEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.Collections; +import javax.annotation.Nonnull; + +@SuppressWarnings("unused") +public class ModContent +{ + + //-------------------------------------------------------------------------------------------------------------------- + // Blocks + //-------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorFull CLINKER_BRICK_BLOCK = (BlockDecorFull)(new BlockDecorFull( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_block")); + + public static final BlockDecorSlab CLINKER_BRICK_SLAB = (BlockDecorSlab)(new BlockDecorSlab( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_slab")); + + public static final BlockDecorStairs CLINKER_BRICK_STAIRS = (BlockDecorStairs)(new BlockDecorStairs( + BlockDecor.CFG_DEFAULT, + CLINKER_BRICK_BLOCK.getDefaultState(), + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_stairs")); + + public static final BlockDecorWall CLINKER_BRICK_WALL = (BlockDecorWall)(new BlockDecorWall( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_wall")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorFull CLINKER_BRICK_STAINED_BLOCK = (BlockDecorFull)(new BlockDecorFull( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_stained_block")); + + public static final BlockDecorSlab CLINKER_BRICK_STAINED_SLAB = (BlockDecorSlab)(new BlockDecorSlab( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_stained_slab")); + + public static final BlockDecorStairs CLINKER_BRICK_STAINED_STAIRS = (BlockDecorStairs)(new BlockDecorStairs( + BlockDecor.CFG_DEFAULT, + CLINKER_BRICK_BLOCK.getDefaultState(), + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_stained_stairs")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorFull SLAG_BRICK_BLOCK = (BlockDecorFull)(new BlockDecorFull( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "slag_brick_block")); + + public static final BlockDecorSlab SLAG_BRICK_SLAB = (BlockDecorSlab)(new BlockDecorSlab( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "slag_brick_slab")); + + public static final BlockDecorStairs SLAG_BRICK_STAIRS = (BlockDecorStairs)(new BlockDecorStairs( + BlockDecor.CFG_DEFAULT, + SLAG_BRICK_BLOCK.getDefaultState(), + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "slag_brick_stairs")); + + public static final BlockDecorWall SLAG_BRICK_WALL = (BlockDecorWall)(new BlockDecorWall( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "slag_brick_wall")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorFull REBAR_CONCRETE_BLOCK = (BlockDecorFull)(new BlockDecorFull( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete")); + + public static final BlockDecorSlab REBAR_CONCRETE_SLAB = (BlockDecorSlab)(new BlockDecorSlab( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_slab")); + + public static final BlockDecorStairs REBAR_CONCRETE_STAIRS = (BlockDecorStairs)(new BlockDecorStairs( + BlockDecor.CFG_DEFAULT, + REBAR_CONCRETE_BLOCK.getDefaultState(), + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_stairs")); + + public static final BlockDecorWall REBAR_CONCRETE_WALL = (BlockDecorWall)(new BlockDecorWall( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_wall")); + + public static final BlockDecorHalfSlab HALFSLAB_REBARCONCRETE = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_rebar_concrete")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorFull REBAR_CONCRETE_TILE = (BlockDecorFull)(new BlockDecorFull( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_tile")); + + public static final BlockDecorSlab REBAR_CONCRETE_TILE_SLAB = (BlockDecorSlab)(new BlockDecorSlab( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_tile_slab")); + + public static final BlockDecorStairs REBAR_CONCRETE_TILE_STAIRS = (BlockDecorStairs)(new BlockDecorStairs( + BlockDecor.CFG_DEFAULT, + REBAR_CONCRETE_TILE.getDefaultState(), + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_tile_stairs")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorGlassBlock PANZERGLASS_BLOCK = (BlockDecorGlassBlock)(new BlockDecorGlassBlock( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "panzerglass_block")); + + public static final BlockDecorSlab PANZERGLASS_SLAB = (BlockDecorSlab)(new BlockDecorSlab( + BlockDecor.CFG_TRANSLUCENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "panzerglass_slab")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorLadder METAL_RUNG_LADDER = (BlockDecorLadder)(new BlockDecorLadder( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1.0f, 25f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "metal_rung_ladder")); + + public static final BlockDecorLadder METAL_RUNG_STEPS = (BlockDecorLadder)(new BlockDecorLadder( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1.0f, 25f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "metal_rung_steps")); + + public static final BlockDecorLadder TREATED_WOOD_LADDER = (BlockDecorLadder)(new BlockDecorLadder( + BlockDecor.CFG_DEFAULT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1.0f, 25f).sound(SoundType.WOOD) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_ladder")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecor TREATED_WOOD_TABLE = (BlockDecor)(new BlockDecor( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(1,0,1, 15,15.9,15) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_table")); + + public static final BlockDecorChair TREATED_WOOD_STOOL = (BlockDecorChair)(new BlockDecorChair( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(4.1,0,4.1, 11.8,8.8,11.8) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_stool")); + + public static final BlockDecorDirected TREATED_WOOD_WINDOWSILL = (BlockDecorDirected)(new BlockDecorDirected( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_FACING_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(0.5,15,10.5, 15.5,16,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_windowsill")); + + public static final BlockDecorDirected INSET_LIGHT_IRON = (BlockDecorDirected)(new BlockDecorDirected( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).lightValue(15), + ModAuxiliaries.getPixeledAABB(5.2,5.2,15.7, 10.8,10.8,16.0) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_inset_light")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorWindow TREATED_WOOD_WINDOW = (BlockDecorWindow)(new BlockDecorWindow( + BlockDecor.CFG_LOOK_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.GLASS), + ModAuxiliaries.getPixeledAABB(0,0,7, 16,16,9) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_window")); + + public static final BlockDecorWindow STEEL_FRAMED_WINDOW = (BlockDecorWindow)(new BlockDecorWindow( + BlockDecor.CFG_LOOK_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.GLASS), + ModAuxiliaries.getPixeledAABB(0,0,7.5, 16,16,8.5) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_framed_window")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorStraightPole TREATED_WOOD_POLE = (BlockDecorStraightPole)(new BlockDecorStraightPole( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_pole")); + + public static final BlockDecorStraightPole TREATED_WOOD_POLE_HEAD = (BlockDecorStraightPole)(new BlockDecorStraightPole( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_pole_head")); + + public static final BlockDecorStraightPole TREATED_WOOD_POLE_SUPPORT = (BlockDecorStraightPole)(new BlockDecorStraightPole( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_pole_support")); + + public static final BlockDecorStraightPole THIN_STEEL_POLE = (BlockDecorStraightPole)(new BlockDecorStraightPole( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(6,6,0, 10,10,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thin_steel_pole")); + + public static final BlockDecorStraightPole THIN_STEEL_POLE_HEAD = (BlockDecorStraightPole)(new BlockDecorStraightPole( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(6,6,0, 10,10,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thin_steel_pole_head")); + + public static final BlockDecorStraightPole THICK_STEEL_POLE = (BlockDecorStraightPole)(new BlockDecorStraightPole( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(5,5,0, 11,11,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thick_steel_pole")); + + public static final BlockDecorStraightPole THICK_STEEL_POLE_HEAD = (BlockDecorStraightPole)(new BlockDecorStraightPole( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(5,5,0, 11,11,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thick_steel_pole_head")); + + public static final BlockDecorHorizontalSupport STEEL_DOUBLE_T_SUPPORT = (BlockDecorHorizontalSupport)(new BlockDecorHorizontalSupport( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_double_t_support")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorDirected SIGN_MODLOGO = (BlockDecorDirected)(new BlockDecorDirected( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1000f).sound(SoundType.WOOD).lightValue(1), + ModAuxiliaries.getPixeledAABB(0,0,15.6, 16,16,16.0) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_decor")); + + public static final BlockDecorDirected SIGN_HOTWIRE = (BlockDecorDirected)(new BlockDecorDirected( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_hotwire")); + + public static final BlockDecorDirected SIGN_DANGER = (BlockDecorDirected)(new BlockDecorDirected( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_danger")); + + public static final BlockDecorDirected SIGN_DEFENSE = (BlockDecorDirected)(new BlockDecorDirected( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_defense")); + + public static final BlockDecorDirected SIGN_FACTORY_AREA = (BlockDecorDirected)(new BlockDecorDirected( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_factoryarea")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorCraftingTable TREATED_WOOD_CRAFTING_TABLE = (BlockDecorCraftingTable)(new BlockDecorCraftingTable( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 15f).sound(SoundType.WOOD), + ModAuxiliaries.getPixeledAABB(1,0,1, 15,15.9,15) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_crafting_table")); + + public static final BlockDecorFurnace SMALL_LAB_FURNACE = (BlockDecorFurnace)(new BlockDecorFurnace( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16.0) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_lab_furnace")); + + public static final BlockDecorFurnaceElectrical SMALL_ELECTRICAL_FURNACE = (BlockDecorFurnaceElectrical)(new BlockDecorFurnaceElectrical( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_ELECTRICAL, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_electrical_furnace")); + + public static final BlockDecorDropper FACTORY_DROPPER = (BlockDecorDropper)(new BlockDecorDropper( + BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,15) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "factory_dropper")); + + public static final BlockDecorWasteIncinerator SMALL_WASTE_INCINERATOR = (BlockDecorWasteIncinerator)(new BlockDecorWasteIncinerator( + BlockDecor.CFG_DEFAULT|BlockDecor.CFG_ELECTRICAL, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_waste_incinerator")); + + public static final BlockDecorMineralSmelter SMALL_MINERAL_SMELTER = (BlockDecorMineralSmelter)(new BlockDecorMineralSmelter( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_ELECTRICAL, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(1.1,0,1.1, 14.9,16,14.9) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_mineral_smelter")); + + public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = (BlockDecorPipeValve)(new BlockDecorPipeValve( + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "straight_pipe_valve")); + + public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = (BlockDecorPipeValve)(new BlockDecorPipeValve( + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "straight_pipe_valve_redstone")); + + public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = (BlockDecorPipeValve)(new BlockDecorPipeValve( + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "straight_pipe_valve_redstone_analog")); + + public static final BlockDecorPassiveFluidAccumulator PASSIVE_FLUID_ACCUMULATOR = (BlockDecorPassiveFluidAccumulator)(new BlockDecorPassiveFluidAccumulator( + BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "passive_fluid_accumulator")); + + // ------------------------------------------------------------------------------------------------------------------- + + public static final BlockDecorWall CONCRETE_WALL = (BlockDecorWall)(new BlockDecorWall( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 50f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "concrete_wall")); + + public static final BlockDecorHalfSlab HALFSLAB_CONCRETE = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(1f, 10f).sound(SoundType.STONE) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_concrete")); + + public static final BlockDecorHalfSlab HALFSLAB_TREATEDWOOD = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 4f).sound(SoundType.WOOD) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_treated_wood")); + + public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALIRON = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_iron")); + + public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALSTEEL = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_steel")); + + public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALCOPPER = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_copper")); + + public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALGOLD = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_gold")); + + public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALALUMINIUM = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_aluminum")); + + // ------------------------------------------------------------------------------------------------------------------- + + private static final Block modBlocks[] = { + SMALL_LAB_FURNACE, + FACTORY_DROPPER, + SMALL_ELECTRICAL_FURNACE, + SMALL_WASTE_INCINERATOR, + SMALL_MINERAL_SMELTER, + CLINKER_BRICK_BLOCK, + CLINKER_BRICK_SLAB, + CLINKER_BRICK_STAIRS, + CLINKER_BRICK_WALL, + CLINKER_BRICK_STAINED_BLOCK, + CLINKER_BRICK_STAINED_SLAB, + CLINKER_BRICK_STAINED_STAIRS, + SLAG_BRICK_BLOCK, + SLAG_BRICK_SLAB, + SLAG_BRICK_STAIRS, + SLAG_BRICK_WALL, + REBAR_CONCRETE_BLOCK, + REBAR_CONCRETE_SLAB, + REBAR_CONCRETE_STAIRS, + REBAR_CONCRETE_WALL, + REBAR_CONCRETE_TILE, + REBAR_CONCRETE_TILE_SLAB, + REBAR_CONCRETE_TILE_STAIRS, + HALFSLAB_REBARCONCRETE, + HALFSLAB_CONCRETE, + //HALFSLAB_TREATEDWOOD, + //HALFSLAB_SHEETMETALIRON + //HALFSLAB_SHEETMETALSTEEL, + //HALFSLAB_SHEETMETALCOPPER, + //HALFSLAB_SHEETMETALGOLD, + //HALFSLAB_SHEETMETALALUMINIUM, + CONCRETE_WALL, + METAL_RUNG_LADDER, + METAL_RUNG_STEPS, + TREATED_WOOD_LADDER, + TREATED_WOOD_POLE, + TREATED_WOOD_TABLE, + PANZERGLASS_BLOCK, + PANZERGLASS_SLAB, + INSET_LIGHT_IRON, + TREATED_WOOD_STOOL, + TREATED_WOOD_WINDOWSILL, + TREATED_WOOD_CRAFTING_TABLE, + STEEL_FRAMED_WINDOW, + TREATED_WOOD_WINDOW, + TREATED_WOOD_POLE_HEAD, + TREATED_WOOD_POLE_SUPPORT, + SIGN_MODLOGO, + THIN_STEEL_POLE, + THIN_STEEL_POLE_HEAD, + THICK_STEEL_POLE, + THICK_STEEL_POLE_HEAD, + SIGN_HOTWIRE, + SIGN_DANGER, + STEEL_DOUBLE_T_SUPPORT, + SIGN_DEFENSE, + SIGN_FACTORY_AREA + }; + + private static final Block devBlocks[] = { + STRAIGHT_CHECK_VALVE, + STRAIGHT_REDSTONE_VALVE, + STRAIGHT_REDSTONE_ANALOG_VALVE, + PASSIVE_FLUID_ACCUMULATOR, + }; + + //-------------------------------------------------------------------------------------------------------------------- + // Tile entities bound exclusively to the blocks above + //-------------------------------------------------------------------------------------------------------------------- + + public static final TileEntityType TET_TREATED_WOOD_CRAFTING_TABLE = TileEntityType.Builder + .create(BlockDecorCraftingTable.BTileEntity::new, TREATED_WOOD_CRAFTING_TABLE) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_treated_wood_crafting_table"); + + public static final TileEntityType TET_SMALL_LAB_FURNACE = TileEntityType.Builder + .create(BlockDecorFurnace.BTileEntity::new, SMALL_LAB_FURNACE) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_small_lab_furnace"); + + public static final TileEntityType TET_SMALL_ELECTRICAL_FURNACE = TileEntityType.Builder + .create(BlockDecorFurnaceElectrical.BTileEntity::new, SMALL_ELECTRICAL_FURNACE) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_small_electrical_furnace"); + + public static final TileEntityType TET_FACTORY_DROPPER = TileEntityType.Builder + .create(BlockDecorDropper.BTileEntity::new, FACTORY_DROPPER) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_factory_dropper"); + + public static final TileEntityType TET_WASTE_INCINERATOR = TileEntityType.Builder + .create(BlockDecorWasteIncinerator.BTileEntity::new, SMALL_WASTE_INCINERATOR) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_small_waste_incinerator"); + + public static final TileEntityType TET_STRAIGHT_PIPE_VALVE = TileEntityType.Builder + .create(BlockDecorPipeValve.BTileEntity::new, STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_pipe_valve"); + + public static final TileEntityType TET_PASSIVE_FLUID_ACCUMULATOR = TileEntityType.Builder + .create(BlockDecorPassiveFluidAccumulator.BTileEntity::new, PASSIVE_FLUID_ACCUMULATOR) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_passive_fluid_accumulator"); + + public static final TileEntityType TET_MINERAL_SMELTER = TileEntityType.Builder + .create(BlockDecorMineralSmelter.BTileEntity::new, SMALL_MINERAL_SMELTER) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_small_mineral_smelter"); + + + private static final TileEntityType tile_entity_types[] = { + TET_TREATED_WOOD_CRAFTING_TABLE, + TET_SMALL_LAB_FURNACE, + TET_FACTORY_DROPPER, + TET_SMALL_ELECTRICAL_FURNACE, + TET_WASTE_INCINERATOR, + TET_STRAIGHT_PIPE_VALVE, + TET_PASSIVE_FLUID_ACCUMULATOR, + TET_MINERAL_SMELTER + }; + + //-------------------------------------------------------------------------------------------------------------------- + // Entities bound exclusively to the blocks above + //-------------------------------------------------------------------------------------------------------------------- + + public static final EntityType ET_CHAIR = EntityType.Builder + .create(BlockDecorChair.EntityChair::new, EntityClassification.MISC) + .immuneToFire().size(1e-3f, 1e-3f) + .setShouldReceiveVelocityUpdates(false).setUpdateInterval(4) + .setCustomClientFactory(BlockDecorChair.EntityChair::customClientFactory) + .build(new ResourceLocation(ModEngineersDecor.MODID, "et_chair").toString()) + .setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "et_chair")) + ; + + private static final EntityType entity_types[] = { + ET_CHAIR + }; + + //-------------------------------------------------------------------------------------------------------------------- + // Container registration + //-------------------------------------------------------------------------------------------------------------------- + + public static final ContainerType CT_TREATED_WOOD_CRAFTING_TABLE; + public static final ContainerType CT_FACTORY_DROPPER; + public static final ContainerType CT_SMALL_LAB_FURNACE; + public static final ContainerType CT_SMALL_ELECTRICAL_FURNACE; + public static final ContainerType CT_WASTE_INCINERATOR; + + static { + CT_TREATED_WOOD_CRAFTING_TABLE = (new ContainerType(BlockDecorCraftingTable.BContainer::new)); + CT_TREATED_WOOD_CRAFTING_TABLE.setRegistryName(ModEngineersDecor.MODID,"ct_treated_wood_crafting_table"); + CT_FACTORY_DROPPER = (new ContainerType(BlockDecorDropper.BContainer::new)); + CT_FACTORY_DROPPER.setRegistryName(ModEngineersDecor.MODID,"ct_factory_dropper"); + CT_SMALL_LAB_FURNACE = (new ContainerType(BlockDecorFurnace.BContainer::new)); + CT_SMALL_LAB_FURNACE.setRegistryName(ModEngineersDecor.MODID,"ct_small_lab_furnace"); + CT_SMALL_ELECTRICAL_FURNACE = (new ContainerType(BlockDecorFurnaceElectrical.BContainer::new)); + CT_SMALL_ELECTRICAL_FURNACE.setRegistryName(ModEngineersDecor.MODID,"ct_small_electrical_furnace"); + CT_WASTE_INCINERATOR = (new ContainerType(BlockDecorWasteIncinerator.BContainer::new)); + CT_WASTE_INCINERATOR.setRegistryName(ModEngineersDecor.MODID,"ct_small_waste_incinerator"); + } + + // DON'T FORGET TO REGISTER THE GUI in registerContainerGuis(), no list/map format found yet for that. + private static final ContainerType container_types[] = { + CT_TREATED_WOOD_CRAFTING_TABLE, + CT_FACTORY_DROPPER, + CT_SMALL_LAB_FURNACE, + CT_SMALL_ELECTRICAL_FURNACE, + CT_WASTE_INCINERATOR + }; + + //-------------------------------------------------------------------------------------------------------------------- + // Initialisation events + //-------------------------------------------------------------------------------------------------------------------- + + private static ArrayList registeredBlocks = new ArrayList<>(); + + public static boolean isExperimentalBlock(Block block) + { return ArrayUtils.contains(devBlocks, block); } + + @Nonnull + public static List getRegisteredBlocks() + { return Collections.unmodifiableList(registeredBlocks); } + + public static final void registerBlocks(final RegistryEvent.Register event) + { + ArrayList allBlocks = new ArrayList<>(); + Collections.addAll(allBlocks, modBlocks); + if(ModAuxiliaries.isModLoaded("immersiveengineering")) ModAuxiliaries.logInfo("Immersive Engineering also installed ..."); + // @todo: config not available yet, other registration control for experimental features needed. + Collections.addAll(allBlocks, devBlocks); + registeredBlocks.addAll(allBlocks); + for(Block e:registeredBlocks) event.getRegistry().register(e); + ModAuxiliaries.logInfo("Registered " + Integer.toString(registeredBlocks.size()) + " blocks."); + } + + public static final void registerItemBlocks(final RegistryEvent.Register event) + { + int n = 0; + for(Block e:registeredBlocks) { + ResourceLocation rl = e.getRegistryName(); + if(rl == null) continue; + event.getRegistry().register(new BlockItem(e, (new BlockItem.Properties().group(ModEngineersDecor.ITEMGROUP))).setRegistryName(rl)); + ++n; + } + } + + public static final void registerTileEntities(final RegistryEvent.Register> event) + { + int n_registered = 0; + for(final TileEntityType e:tile_entity_types) { + event.getRegistry().register(e); + ++n_registered; + } + ModAuxiliaries.logInfo("Registered " + Integer.toString(n_registered) + " tile entities."); + } + + public static final void registerEntities(final RegistryEvent.Register> event) + { + int n_registered = 0; + for(final EntityType e:entity_types) { + if((e==ET_CHAIR) && (!registeredBlocks.contains(TREATED_WOOD_STOOL))) continue; + event.getRegistry().register(e); + ++n_registered; + } + ModAuxiliaries.logInfo("Registered " + Integer.toString(n_registered) + " entities bound to blocks."); + } + + public static final void registerContainers(final RegistryEvent.Register> event) + { + int n_registered = 0; + for(final ContainerType e:container_types) { + event.getRegistry().register(e); + ++n_registered; + } + ModAuxiliaries.logInfo("Registered " + Integer.toString(n_registered) + " containers bound to tile entities."); + } + + @OnlyIn(Dist.CLIENT) + public static final void registerContainerGuis(final FMLClientSetupEvent event) + { + ScreenManager.registerFactory(CT_TREATED_WOOD_CRAFTING_TABLE, BlockDecorCraftingTable.BGui::new); + ScreenManager.registerFactory(CT_FACTORY_DROPPER, BlockDecorDropper.BGui::new); + ScreenManager.registerFactory(CT_SMALL_LAB_FURNACE, BlockDecorFurnace.BGui::new); + ScreenManager.registerFactory(CT_SMALL_ELECTRICAL_FURNACE, BlockDecorFurnaceElectrical.BGui::new); + ScreenManager.registerFactory(CT_WASTE_INCINERATOR, BlockDecorWasteIncinerator.BGui::new); + } + +} diff --git a/1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java b/1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java new file mode 100644 index 0000000..ed1c480 --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java @@ -0,0 +1,152 @@ +package wile.engineersdecor; + +import wile.engineersdecor.detail.ModConfig; +import wile.engineersdecor.detail.RecipeCondModSpecific; +import wile.engineersdecor.detail.Networking; +import wile.engineersdecor.blocks.*; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.container.ContainerType; +import net.minecraft.item.ItemGroup; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent; +import net.minecraftforge.fml.event.server.FMLServerStartingEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.annotation.Nullable; + + +@Mod("engineersdecor") +public class ModEngineersDecor +{ + public static final String MODID = "engineersdecor"; + public static final int VERSION_DATAFIXER = 0; + private static final Logger LOGGER = LogManager.getLogger(); + + public ModEngineersDecor() + { + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSetup); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSendImc); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onRecvImc); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup); + ModLoadingContext.get().registerConfig(net.minecraftforge.fml.config.ModConfig.Type.COMMON, ModConfig.COMMON_CONFIG_SPEC); + ModLoadingContext.get().registerConfig(net.minecraftforge.fml.config.ModConfig.Type.CLIENT, ModConfig.CLIENT_CONFIG_SPEC); + MinecraftForge.EVENT_BUS.register(this); + } + + public static final Logger logger() { return LOGGER; } + + // + // Events + // + + private void onSetup(final FMLCommonSetupEvent event) + { + LOGGER.info("Registering recipe condition processor ..."); + CraftingHelper.register(new ResourceLocation(MODID, "grc"), new RecipeCondModSpecific()); + Networking.init(); + } + + private void onClientSetup(final FMLClientSetupEvent event) + { ModContent.registerContainerGuis(event); } + + private void onSendImc(final InterModEnqueueEvent event) + {} + + private void onRecvImc(final InterModProcessEvent event) + {} + + @SubscribeEvent + public void onServerStarting(FMLServerStartingEvent event) + {} + + @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) + public static class RegistryEvents + { + @SubscribeEvent + public static void onBlocksRegistry(final RegistryEvent.Register event) + { ModContent.registerBlocks(event); } + + @SubscribeEvent + public static void onItemRegistry(final RegistryEvent.Register event) + { ModContent.registerItemBlocks(event); } + + @SubscribeEvent + public static void onTileEntityRegistry(final RegistryEvent.Register> event) + { ModContent.registerTileEntities(event); } + + @SubscribeEvent + public static void onRegisterEntityTypes(final RegistryEvent.Register> event) + { ModContent.registerEntities(event); } + + @SubscribeEvent + public static void onRegisterContainerTypes(final RegistryEvent.Register> event) + { ModContent.registerContainers(event); } + } + + // + // Sided proxy functionality (skel) + // + public static ISidedProxy proxy = DistExecutor.runForDist(()->ClientProxy::new, ()->ServerProxy::new); + public interface ISidedProxy + { + default @Nullable PlayerEntity getPlayerClientSide() { return null; } + default @Nullable World getWorldClientSide() { return null; } + default @Nullable Minecraft mc() { return null; } + } + public static final class ClientProxy implements ISidedProxy + { + public @Nullable PlayerEntity getPlayerClientSide() { return Minecraft.getInstance().player; } + public @Nullable World getWorldClientSide() { return Minecraft.getInstance().world; } + public @Nullable Minecraft mc() { return Minecraft.getInstance(); } + } + public static final class ServerProxy implements ISidedProxy + { + public @Nullable PlayerEntity getPlayerClientSide() { return null; } + public @Nullable World getWorldClientSide() { return null; } + public @Nullable Minecraft mc() { return null; } + } + + // + // Item group / creative tab + // + public static final ItemGroup ITEMGROUP = (new ItemGroup("tab" + MODID) { + @OnlyIn(Dist.CLIENT) + public ItemStack createIcon() + { return new ItemStack(ModContent.SIGN_MODLOGO); } + }); + + // + // Player update event + // + @SubscribeEvent + public void onPlayerEvent(final LivingEvent.LivingUpdateEvent event) + { + if(!(event.getEntity() instanceof PlayerEntity)) return; + final PlayerEntity player = (PlayerEntity)event.getEntity(); + if(player.world == null) return; + if(player.isOnLadder()) BlockDecorLadder.onPlayerUpdateEvent(player); + } + +} diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java new file mode 100644 index 0000000..0374051 --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java @@ -0,0 +1,133 @@ +/* + * @file BlockDecorFull.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Common functionality class for decor blocks. + * Mainly needed for: + * - MC block defaults. + * - Tooltip functionality + * - Model initialisation + */ +package wile.engineersdecor.blocks; + +import wile.engineersdecor.detail.ModAuxiliaries; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.IFluidState; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.block.Block; +import net.minecraft.block.material.PushReaction; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.util.*; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; + + +public class BlockDecor extends Block implements IDecorBlock +{ + public static final long CFG_DEFAULT = 0x0000000000000000L; // no special config + public static final long CFG_CUTOUT = 0x0000000000000001L; // cutout rendering + public static final long CFG_HORIZIONTAL = 0x0000000000000002L; // horizontal block, affects bounding box calculation at construction time and placement + public static final long CFG_LOOK_PLACEMENT = 0x0000000000000004L; // placed in direction the player is looking when placing. + public static final long CFG_FACING_PLACEMENT = 0x0000000000000008L; // placed on the facing the player has clicked. + public static final long CFG_OPPOSITE_PLACEMENT = 0x0000000000000010L; // placed placed in the opposite direction of the face the player clicked. + public static final long CFG_FLIP_PLACEMENT_IF_SAME = 0x0000000000000020L; // placement direction flipped if an instance of the same class was clicked + public static final long CFG_FLIP_PLACEMENT_SHIFTCLICK = 0x0000000000000040L; // placement direction flipped if player is sneaking + public static final long CFG_TRANSLUCENT = 0x0000000000000080L; // indicates a block/pane is glass like (transparent, etc) + public static final long CFG_ELECTRICAL = 0x0000000000010000L; // Denotes if a component is mainly flux driven. + public static final long CFG_REDSTONE_CONTROLLED = 0x0000000000020000L; // Denotes if a component has somehow a redstone control input + public static final long CFG_ANALOG = 0x0000000000040000L; // Denotes if a component has analog behaviour + public static final long CFG_HARD_IE_DEPENDENT = 0x8000000000000000L; // The block is implicitly opt'ed out if IE is not installed + + public final long config; + public final VoxelShape vshape; + + public BlockDecor(long config, Block.Properties properties) + { this(config, properties, ModAuxiliaries.getPixeledAABB(0, 0, 0, 16, 16,16 )); } + + public BlockDecor(long config, Block.Properties properties, AxisAlignedBB aabb) + { super(properties); this.config = config; this.vshape = VoxelShapes.create(aabb); } + + public BlockDecor(long config, Block.Properties properties, VoxelShape voxel_shape) + { super(properties); this.config = config; this.vshape = voxel_shape; } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, @Nullable IBlockReader world, List tooltip, ITooltipFlag flag) + { ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true); } + + @Override + @OnlyIn(Dist.CLIENT) + public BlockRenderLayer getRenderLayer() + { return ((config & CFG_CUTOUT)!=0) ? BlockRenderLayer.CUTOUT : BlockRenderLayer.SOLID; } + + @Override + @SuppressWarnings("deprecation") + public VoxelShape getShape(BlockState state, IBlockReader source, BlockPos pos, ISelectionContext selectionContext) + { return vshape; } + + @Override + @SuppressWarnings("deprecation") + public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext) + { return vshape; } + + @Override + public boolean canSpawnInBlock() + { return false; } + + @Override + @SuppressWarnings("deprecation") + public PushReaction getPushReaction(BlockState state) + { return PushReaction.NORMAL; } + + @Override + @SuppressWarnings("deprecation") + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) + { + if(state.hasTileEntity() && (state.getBlock() != newState.getBlock())) { + world.removeTileEntity(pos); + world.updateComparatorOutputLevel(pos, this); + } + } + + public static boolean dropBlock(BlockState state, World world, BlockPos pos, boolean explosion) + { + if(!(state.getBlock() instanceof IDecorBlock)) { world.removeBlock(pos, false); return true; } + if(!world.isRemote()) { + ((IDecorBlock)state.getBlock()).dropList(state, world, pos, explosion).forEach(stack->world.addEntity(new ItemEntity(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack))); + } + if(state.getBlock().hasTileEntity(state)) world.removeTileEntity(pos); + world.removeBlock(pos, false); + return true; + } + + @Override + public boolean removedByPlayer(BlockState state, World world, BlockPos pos, PlayerEntity player, boolean willHarvest, IFluidState fluid) + { return dropBlock(state, world, pos, false); } + + @Override + public void onExplosionDestroy(World world, BlockPos pos, Explosion explosion) + { dropBlock(world.getBlockState(pos), world, pos, false); } + + @Override + @SuppressWarnings("deprecation") + public List getDrops(BlockState state, LootContext.Builder builder) + { return Collections.singletonList(ItemStack.EMPTY); } // { return Collections.singletonList(new ItemStack(this.asItem())); } // + +} diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java new file mode 100644 index 0000000..c5d39bf --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java @@ -0,0 +1,190 @@ +/* + * @file BlockDecorFull.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Full block characteristics class. + */ +package wile.engineersdecor.blocks; + +import wile.engineersdecor.ModContent; +import wile.engineersdecor.ModEngineersDecor; +import net.minecraft.entity.*; +import net.minecraft.entity.monster.*; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.IPacket; +import net.minecraft.util.math.*; +import net.minecraft.world.IWorldReader; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.*; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.FMLPlayMessages; +import net.minecraftforge.fml.network.NetworkHooks; + +import java.util.List; +import java.util.Random; + + +public class BlockDecorChair extends BlockDecorDirected +{ + private static boolean sitting_enabled = true; + private static double sitting_probability = 0.1; + private static double standup_probability = 0.01; + + public static void on_config(boolean without_sitting, boolean without_mob_sitting, double sitting_probability_percent, double standup_probability_percent) + { + sitting_enabled = (!without_sitting); + sitting_probability = (without_sitting||without_mob_sitting) ? 0.0 : MathHelper.clamp(sitting_probability_percent/100, 0, 0.9); + standup_probability = (without_sitting||without_mob_sitting) ? 1.0 : MathHelper.clamp(standup_probability_percent/100, 1e-6, 1e-2); + ModEngineersDecor.logger().info("Config chairs: " + sitting_enabled + ", sit: " + sitting_probability, ", stand up: " + standup_probability); + } + + public BlockDecorChair(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) + { super(config, builder.tickRandomly(), unrotatedAABB); } + + @Override + @SuppressWarnings("deprecation") + public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + { + if(sitting_enabled && (!world.isRemote)) { EntityChair.sit(world, player, pos); } + return true; + } + + @Override + @SuppressWarnings("deprecation") + public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) + { + if(sitting_enabled && (Math.random() < sitting_probability) && (entity instanceof MobEntity)) EntityChair.sit(world, (LivingEntity)entity, pos); + } + + @Override + public int tickRate(IWorldReader world) + { return 10; } + + @Override + @SuppressWarnings("deprecation") + public void tick(BlockState state, World world, BlockPos pos, Random rnd) + { + if((!sitting_enabled) || (sitting_probability < 1e-6)) return; + final List entities = world.getEntitiesWithinAABB(MobEntity.class, new AxisAlignedBB(pos).grow(2,1,2).expand(0,1,0), e->true); + if(entities.isEmpty()) return; + int index = rnd.nextInt(entities.size()); + if((index < 0) || (index >= entities.size())) return; + EntityChair.sit(world, entities.get(index), pos); + } + + //-------------------------------------------------------------------------------------------------------------------- + // Riding entity for sitting + //-------------------------------------------------------------------------------------------------------------------- + + public static class EntityChair extends Entity + { + public static final double x_offset = 0.5d; + public static final double y_offset = 0.4d; + public static final double z_offset = 0.5d; + private int t_sit = 0; + public BlockPos chair_pos = new BlockPos(0,0,0); + + public EntityChair(EntityType entityType, World world) + { + super(entityType, world); + preventEntitySpawning=true; + setMotion(Vec3d.ZERO); + canUpdate(true); + noClip=true; + } + + public EntityChair(World world) + { this(ModContent.ET_CHAIR, world); } + + public static EntityChair customClientFactory(FMLPlayMessages.SpawnEntity spkt, World world) + { return new EntityChair(world); } + + public IPacket createSpawnPacket() + { return NetworkHooks.getEntitySpawningPacket(this); } + + public static boolean accepts_mob(LivingEntity entity) + { + if(!(entity instanceof net.minecraft.entity.monster.MonsterEntity)) return false; + if((entity.getType().getSize().height > 2.5) || (entity.getType().getSize().height > 2.0)) return false; + if(entity instanceof ZombieEntity) return true; + if(entity instanceof ZombieVillagerEntity) return true; + if(entity instanceof ZombiePigmanEntity) return true; + if(entity instanceof HuskEntity) return true; + if(entity instanceof StrayEntity) return true; + if(entity instanceof SkeletonEntity) return true; + if(entity instanceof WitherSkeletonEntity) return true; + return false; + } + + public static void sit(World world, LivingEntity sitter, BlockPos pos) + { + if(!sitting_enabled) return; + if((world==null) || (world.isRemote) || (sitter==null) || (pos==null)) return; + if((!(sitter instanceof PlayerEntity)) && (!accepts_mob(sitter))) return; + if(!world.getEntitiesWithinAABB(EntityChair.class, new AxisAlignedBB(pos)).isEmpty()) return; + if(sitter.isBeingRidden() || (!sitter.isAlive()) || (sitter.isPassenger()) ) return; + if((!world.isAirBlock(pos.up())) || (!world.isAirBlock(pos.up(2)))) return; + boolean on_top_of_block_position = true; + boolean use_next_negative_y_position = false; + EntityChair chair = new EntityChair(world); + chair.chair_pos = pos; + chair.t_sit = 5; + chair.prevPosX = chair.posX; + chair.prevPosY = chair.posY; + chair.prevPosZ = chair.posZ; + chair.setPosition(pos.getX()+x_offset,pos.getY()+y_offset,pos.getZ()+z_offset); + world.addEntity(chair); + sitter.startRiding(chair, true); + } + + @Override + protected void registerData() {} + + @Override + protected void readAdditional(CompoundNBT compound) {} + + @Override + protected void writeAdditional(CompoundNBT compound) {} + + @Override + protected boolean canTriggerWalking() + { return false; } + + @Override + public boolean canBePushed() + { return false; } + + @Override + public double getMountedYOffset() + { return 0.0; } + + @Override + public void tick() + { + if(world.isRemote) return; + super.tick(); + if(--t_sit > 0) return; + Entity sitter = getPassengers().isEmpty() ? null : getPassengers().get(0); + if((sitter==null) || (!sitter.isAlive())) { + this.remove(); + return; + } + boolean abort = (!sitting_enabled); + final BlockState state = world.getBlockState(chair_pos); + if((state==null) || (!(state.getBlock() instanceof BlockDecorChair))) abort = true; + if(!world.isAirBlock(chair_pos.up())) abort = true; + if((!(sitter instanceof PlayerEntity)) && (Math.random() < standup_probability)) abort = true; + if(abort) { + for(Entity e:getPassengers()) { + if(e.isAlive()) e.stopRiding(); + } + this.remove(); + } + } + } + +} diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java new file mode 100644 index 0000000..0d28e3a --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java @@ -0,0 +1,1237 @@ +/* + * @file BlockDecorDirected.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Crafting table + */ +package wile.engineersdecor.blocks; + +import wile.engineersdecor.ModContent; +import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.detail.Networking; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.gui.widget.button.ImageButton; +import net.minecraft.inventory.container.*; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.ICraftingRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.play.server.SSetSlotPacket; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.*; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.inventory.*; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import com.mojang.blaze3d.platform.GlStateManager; +import com.google.common.collect.ImmutableList; +import javax.annotation.Nullable; +import java.util.*; + + +public class BlockDecorCraftingTable extends BlockDecorDirected +{ + public static boolean with_assist = true; + public static boolean with_assist_direct_history_refab = false; + public static boolean with_assist_quickmove_buttons = false; + + public static final void on_config(boolean without_crafting_assist, boolean with_assist_immediate_history_refab, boolean with_quickmove_buttons) + { + with_assist = !without_crafting_assist; + with_assist_direct_history_refab = with_assist_immediate_history_refab; + with_assist_quickmove_buttons = with_quickmove_buttons; + CraftingHistory.max_history_size(32); + } + + public BlockDecorCraftingTable(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) + { super(config, builder, unrotatedAABB); } + + @Override + public boolean hasTileEntity(BlockState state) + { return true; } + + @Override + @Nullable + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { return new BlockDecorCraftingTable.BTileEntity(); } + + @Override + @SuppressWarnings("deprecation") + public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + { + if(world.isRemote) return true; + final TileEntity te = world.getTileEntity(pos); + if(!(te instanceof BTileEntity)) return true; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); + return true; + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) + { + if(world.isRemote) return; + if(!stack.hasTag()) return; + if((!stack.hasTag()) || (!stack.getTag().contains("inventory"))) return; + CompoundNBT inventory_nbt = stack.getTag().getCompound("inventory"); + if(inventory_nbt.isEmpty()) return; + final TileEntity te = world.getTileEntity(pos); + if(!(te instanceof BTileEntity)) return; + ((BTileEntity)te).readnbt(inventory_nbt); + ((BTileEntity)te).markDirty(); + } + + @Override + public List dropList(BlockState state, World world, BlockPos pos, boolean explosion) + { + final List stacks = new ArrayList(); + if(world.isRemote) return stacks; + final TileEntity te = world.getTileEntity(pos); + if(!(te instanceof BTileEntity)) return stacks; + if(!explosion) { + ItemStack stack = new ItemStack(this, 1); + CompoundNBT inventory_nbt = new CompoundNBT(); + ItemStackHelper.saveAllItems(inventory_nbt, ((BTileEntity)te).stacks, false); + if(!inventory_nbt.isEmpty()) { + CompoundNBT nbt = new CompoundNBT(); + nbt.put("inventory", inventory_nbt); + stack.setTag(nbt); + } + ((BTileEntity) te).clear(); + stacks.add(stack); + } else { + for(ItemStack stack: ((BTileEntity)te).stacks) { + if(!stack.isEmpty()) stacks.add(stack); + } + ((BTileEntity)te).reset(); + } + return stacks; + } + + //-------------------------------------------------------------------------------------------------------------------- + // Tile entity + //-------------------------------------------------------------------------------------------------------------------- + + public static class BTileEntity extends TileEntity implements IInventory, INameable, INamedContainerProvider + { + public static final int NUM_OF_SLOTS = 9+8; + protected NonNullList stacks = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); + protected CompoundNBT history = new CompoundNBT(); + + public BTileEntity() + { this(ModContent.TET_TREATED_WOOD_CRAFTING_TABLE); } + + public BTileEntity(TileEntityType te_type) + { super(te_type); } + + public void reset() + { stacks = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); } + + public void readnbt(CompoundNBT nbt) + { + reset(); + ItemStackHelper.loadAllItems(nbt, this.stacks); + while(this.stacks.size() < NUM_OF_SLOTS) this.stacks.add(ItemStack.EMPTY); + history = nbt.getCompound("history"); + } + + private void writenbt(CompoundNBT nbt) + { + ItemStackHelper.saveAllItems(nbt, this.stacks); + if(!history.isEmpty()) nbt.put("history", history); + } + + // TileEntity ------------------------------------------------------------------------------ + + @Override + public void read(CompoundNBT compound) + { super.read(compound); readnbt(compound); } + + @Override + public CompoundNBT write(CompoundNBT compound) + { super.write(compound); writenbt(compound); return compound; } + + @Override + public CompoundNBT getUpdateTag() + { CompoundNBT nbt = super.getUpdateTag(); writenbt(nbt); return nbt; } + + @Override + public void onLoad() + {} + + // INameable --------------------------------------------------------------------------- + + @Override + public ITextComponent getName() + { final Block block=getBlockState().getBlock(); return new StringTextComponent((block!=null) ? block.getTranslationKey() : "Treated wood crafting table"); } + + @Override + public boolean hasCustomName() + { return false; } + + @Override + public ITextComponent getCustomName() + { return getName(); } + + // INamedContainerProvider ------------------------------------------------------------------------------ + + @Override + public ITextComponent getDisplayName() + { return INameable.super.getDisplayName(); } + + @Override + public Container createMenu( int id, PlayerInventory inventory, PlayerEntity player ) + { return new BContainer(id, inventory, this, IWorldPosCallable.of(world, pos)); } + + // IInventory ------------------------------------------------------------------------------ + + @Override + public int getSizeInventory() + { return stacks.size(); } + + @Override + public boolean isEmpty() + { for(ItemStack stack: stacks) { if(!stack.isEmpty()) return false; } return true; } + + @Override + public ItemStack getStackInSlot(int index) + { return (index < getSizeInventory()) ? stacks.get(index) : ItemStack.EMPTY; } + + @Override + public ItemStack decrStackSize(int index, int count) + { return ItemStackHelper.getAndSplit(stacks, index, count); } + + @Override + public ItemStack removeStackFromSlot(int index) + { return ItemStackHelper.getAndRemove(stacks, index); } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { stacks.set(index, stack); } + + @Override + public int getInventoryStackLimit() + { return 64; } + + @Override + public void markDirty() + { super.markDirty(); } + + @Override + public boolean isUsableByPlayer(PlayerEntity player) + { return getPos().distanceSq(player.getPosition()) < 36; } + + @Override + public void openInventory(PlayerEntity player) + {} + + @Override + public void closeInventory(PlayerEntity player) + { this.markDirty(); } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) + { return true; } + + @Override + public void clear() + { stacks.clear(); } + + } + + //-------------------------------------------------------------------------------------------------------------------- + // Crafting container + //-------------------------------------------------------------------------------------------------------------------- + + public static class BContainer extends Container implements Networking.INetworkSynchronisableContainer + { + // Crafting slot of container -------------------------------------------------------------------------------------- + public static class BSlotCrafting extends CraftingResultSlot + { + private final BContainer container; + private final PlayerEntity player; + + public BSlotCrafting(BContainer container, PlayerEntity player, CraftingInventory craftingInventory, IInventory inventoryIn, int slotIndex, int xPosition, int yPosition) + { super(player, craftingInventory, inventoryIn, slotIndex, xPosition, yPosition); this.container = container; this.player=player; } + + @Override + protected void onCrafting(ItemStack stack) + { + if((with_assist) && ((player.world!=null) && (!(player.world.isRemote))) && (!stack.isEmpty())) { + final IRecipe recipe = ((CraftResultInventory)this.inventory).getRecipeUsed(); + final ArrayList grid = new ArrayList(); + grid.add(stack); + for(int i = 0; i < 9; ++i) grid.add(container.inventory_.getStackInSlot(i)); + container.history().add(grid, recipe); + container.history().reset_current(); + container.syncHistory(player); + } + super.onCrafting(stack); + } + } + + // Crafting inventory (needed to allow SlotCrafting to have a InventoryCrafting) ----------------------------------- + public static class BInventoryCrafting extends CraftingInventory + { + protected final Container container; + protected final IInventory inventory; + + public BInventoryCrafting(Container container_, IInventory block_inventory) { + super(container_, 3, 3); + container = container_; + inventory = block_inventory; + } + + @Override + public int getSizeInventory() + { return 9; } + + @Override + public void openInventory(PlayerEntity player) + { inventory.openInventory(player); } + + @Override + public void closeInventory(PlayerEntity player) + { inventory.closeInventory(player); } + + @Override + public void markDirty() + { inventory.markDirty(); } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + inventory.setInventorySlotContents(index, stack); + container.onCraftMatrixChanged(this); + } + + @Override + public ItemStack getStackInSlot(int index) + { return inventory.getStackInSlot(index); } + + @Override + public ItemStack decrStackSize(int index, int count) + { + final ItemStack stack = inventory.decrStackSize(index, count); + if(!stack.isEmpty()) container.onCraftMatrixChanged(this); + return stack; + } + } + + //------------------------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------------------------ + public static final int CRAFTING_SLOTS_BEGIN = 0; + public static final int NUM_OF_CRAFTING_SLOTS = 9; + public static final int STORAGE_SLOTS_BEGIN = NUM_OF_CRAFTING_SLOTS; + public static final int NUM_OF_STORAGE_SLOTS = 8; + + public final ImmutableList> CRAFTING_SLOT_COORDINATES; + private final PlayerEntity player_; + private final IInventory inventory_; + private final IWorldPosCallable wpc_; + private final CraftingHistory history_; + private final BInventoryCrafting matrix_; + private final CraftResultInventory result_; + + public BContainer(int cid, PlayerInventory pinv) + { this(cid, pinv, new Inventory(BTileEntity.NUM_OF_SLOTS), IWorldPosCallable.DUMMY); } + + private BContainer(int cid, PlayerInventory pinv, IInventory block_inventory, IWorldPosCallable wpc) + { + super(ModContent.CT_TREATED_WOOD_CRAFTING_TABLE, cid); + wpc_ = wpc; + player_ = pinv.player; + inventory_ = block_inventory; + World world = player_.world; + if(world.isRemote && (inventory_ instanceof BTileEntity)) world = ((BTileEntity)inventory_).getWorld(); + history_ = new CraftingHistory(world); + result_ = new CraftResultInventory(); + matrix_ = new BInventoryCrafting(this, block_inventory); + matrix_.openInventory(player_); + // container slotId 0 === crafting output + addSlot(new BSlotCrafting(this, pinv.player, matrix_, result_, 0, 134, 35)); + ArrayList> slotpositions = new ArrayList>(); + slotpositions.add(new Tuple<>(134, 35)); + // container slotId 1..9 === TE slots 0..8 + for(int y=0; y<3; ++y) { + for(int x=0; x<3; ++x) { + int xpos = 60+x*18; + int ypos = 17+y*18; + addSlot(new Slot(matrix_, x+y*3, xpos, ypos)); + slotpositions.add(new Tuple<>(xpos, ypos)); + } + } + // container slotId 10..36 === player slots: 9..35 + for(int y=0; y<3; ++y) { + for(int x=0; x<9; ++x) { + addSlot(new Slot(pinv, x+y*9+9, 8+x*18, 86+y*18)); + } + } + // container slotId 37..45 === player slots: 0..8 + for(int x=0; x<9; ++x) { + addSlot(new Slot(pinv, x, 8+x*18, 144)); + } + // container slotId 46..53 === TE slots 9..17 (storage) + for(int y=0; y<4; ++y) { + for(int x=0; x<2; ++x) { + addSlot(new Slot(matrix_, x+y*2+9, 8+x*18, 9+y*18)); + } + } + if((!player_.world.isRemote) && (inventory_ instanceof BTileEntity)) { + history_.read(((BTileEntity)inventory_).history.copy()); + syncHistory(player_); + } + CRAFTING_SLOT_COORDINATES = ImmutableList.copyOf(slotpositions); + onCraftMatrixChanged(matrix_); + } + + @Override + public boolean canInteractWith(PlayerEntity player) + { return inventory_.isUsableByPlayer(player); } + + @Override + public void onCraftMatrixChanged(IInventory inv) + { + detectAndSendChanges(); + wpc_.consume((world,pos)->{ + if(world.isRemote) return; + try { + //craft(windowId, world, player_, matrix_, result_); + ServerPlayerEntity player = (ServerPlayerEntity) player_; + ItemStack stack = ItemStack.EMPTY; + Optional optional = world.getServer().getRecipeManager().getRecipe(IRecipeType.CRAFTING, matrix_, world); + if(optional.isPresent()) { + ICraftingRecipe icraftingrecipe = optional.get(); + if(result_.canUseRecipe(world, player, icraftingrecipe)) { + stack = icraftingrecipe.getCraftingResult(matrix_); + } + } + result_.setInventorySlotContents(0, stack); + player.connection.sendPacket(new SSetSlotPacket(windowId, 0, stack)); + } catch(Throwable exc) { + ModEngineersDecor.logger().error("Recipe failed:", exc); + } + }); + } + + @Override + public void onContainerClosed(PlayerEntity player) + { + matrix_.closeInventory(player); + result_.clear(); + result_.closeInventory(player); + if(player!=null) { + for(Slot e:player.container.inventorySlots) { + if(e instanceof CraftingResultSlot) { + ((CraftingResultSlot)e).putStack(ItemStack.EMPTY); + } + } + } + } + + @Override + public boolean canMergeSlot(ItemStack stack, Slot slot) + { return (slot.inventory != result_) && (super.canMergeSlot(stack, slot)); } + + @Override + public ItemStack transferStackInSlot(PlayerEntity player, int index) + { + Slot slot = inventorySlots.get(index); + if((slot == null) || (!slot.getHasStack())) return ItemStack.EMPTY; + ItemStack slotstack = slot.getStack(); + ItemStack stack = slotstack.copy(); + if(index == 0) { + wpc_.consume((world, pos)->slotstack.getItem().onCreated(slotstack, world, player)); + if(!this.mergeItemStack(slotstack, 10, 46, true)) return ItemStack.EMPTY; + slot.onSlotChange(slotstack, stack); + } else if(index >= 10 && (index < 46)) { + if(!this.mergeItemStack(slotstack, 46, 54, false)) return ItemStack.EMPTY; + } else if((index >= 46) && (index < 54)) { + if(!this.mergeItemStack(slotstack, 10, 46, false)) return ItemStack.EMPTY; + } else if(!this.mergeItemStack(slotstack, 10, 46, false)) { + return ItemStack.EMPTY; + } + if(slotstack.isEmpty()) { + slot.putStack(ItemStack.EMPTY); + } else { + slot.onSlotChanged(); + } + if(slotstack.getCount() == stack.getCount()) { + return ItemStack.EMPTY; + } + ItemStack itemstack2 = slot.onTake(player, slotstack); + if(index == 0) { + player.dropItem(itemstack2, false); + } + return stack; + } + + // private aux methods --------------------------------------------------------------------- + + private boolean itemstack_recipe_match(ItemStack grid_stack, ItemStack history_stack) + { + if(history_.current_recipe()!=null) { + boolean grid_match, dist_match; + for(int i=0; i crafting_slot_stacks_to_add() + { + final ArrayList slots = new ArrayList(); + final List tocraft = history_.current(); + final int stack_sizes[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; + if(tocraft.isEmpty()) return slots; + for(int i=0; i<9; ++i) { + if((i+CraftingHistory.INPUT_STACKS_BEGIN) >= tocraft.size()) break; + final ItemStack needed = tocraft.get(i+CraftingHistory.INPUT_STACKS_BEGIN); + final ItemStack palced = inventory_.getStackInSlot(i+CRAFTING_SLOTS_BEGIN); + if(needed.isEmpty() && (!palced.isEmpty())) return slots; // history vs grid mismatch. + if((!palced.isEmpty()) && (!itemstack_recipe_match(needed, palced))) return slots; // also mismatch + if(!needed.isEmpty()) stack_sizes[i] = palced.getCount(); + } + int min_placed = 64, max_placed=0; + for(int i=0; i<9; ++i) { + if(stack_sizes[i] < 0) continue; + min_placed = Math.min(min_placed, stack_sizes[i]); + max_placed = Math.max(max_placed, stack_sizes[i]); + } + int fillup_size = (max_placed <= min_placed) ? (min_placed + 1) : max_placed; + for(int i=0; i<9; ++i) { + if(stack_sizes[i] < 0) continue; + if(fillup_size > inventory_.getStackInSlot(i+CRAFTING_SLOTS_BEGIN).getMaxStackSize()) return slots; // can't fillup all + } + for(int i=0; i<9; ++i) { + if(stack_sizes[i] < 0) { + slots.add(ItemStack.EMPTY); + } else { + ItemStack st = inventory_.getStackInSlot(i+CRAFTING_SLOTS_BEGIN).copy(); + if(st.isEmpty()) { + st = tocraft.get(i+CraftingHistory.INPUT_STACKS_BEGIN).copy(); + st.setCount(Math.min(st.getMaxStackSize(), fillup_size)); + } else { + st.setCount(MathHelper.clamp(fillup_size-st.getCount(), 0, st.getMaxStackSize())); + } + slots.add(st); + } + } + return slots; + } + + /** + * Moves as much items from the stack to the slots in range [first_slot, last_slot] of the inventory, + * filling up existing stacks first, then (player inventory only) checks appropriate empty slots next + * to stacks that have that item already, and last uses any empty slot that can be found. + * Returns the stack that is still remaining in the referenced `stack`. + */ + private ItemStack move_stack_to_inventory(final ItemStack stack_to_move, IInventory inventory, final int slot_begin, final int slot_end, boolean only_fillup) + { + final ItemStack mvstack = stack_to_move.copy(); + if((mvstack.isEmpty()) || (slot_begin < 0) || (slot_end > inventory.getSizeInventory())) return mvstack; + // first iteration: fillup existing stacks + for(int i = slot_begin; i < slot_end; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if((stack.isEmpty()) || (!stack.isItemEqual(mvstack))) continue; + int nmax = stack.getMaxStackSize() - stack.getCount(); + if(mvstack.getCount() <= nmax) { + stack.setCount(stack.getCount()+mvstack.getCount()); + mvstack.setCount(0); + inventory.setInventorySlotContents(i, stack); + return mvstack; + } else { + stack.setCount(stack.getMaxStackSize()); + mvstack.shrink(nmax); + inventory.setInventorySlotContents(i, stack); + } + } + if(only_fillup) return mvstack; + if(inventory instanceof PlayerInventory) { + // second iteration: use appropriate empty slots + for(int i = slot_begin+1; i < slot_end-1; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if(!stack.isEmpty()) continue; + if((!inventory.getStackInSlot(i+1).isItemEqual(mvstack)) && (!inventory.getStackInSlot(i-1).isItemEqual(mvstack))) continue; + inventory.setInventorySlotContents(i, mvstack.copy()); + mvstack.setCount(0); + return mvstack; + } + } + // third iteration: use any empty slots + for(int i = slot_begin; i < slot_end; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if(!stack.isEmpty()) continue; + inventory.setInventorySlotContents(i, mvstack.copy()); + mvstack.setCount(0); + return mvstack; + } + return mvstack; + } + + /** + * Moves as much items from the slots in range [first_slot, last_slot] of the inventory into a new stack. + * Implicitly shrinks the inventory stacks and the `request_stack`. + */ + private ItemStack move_stack_from_inventory(IInventory inventory, final ItemStack request_stack, final int slot_begin, final int slot_end) + { + ItemStack fetched_stack = request_stack.copy(); + fetched_stack.setCount(0); + int n_left = request_stack.getCount(); + while(n_left > 0) { + int smallest_stack_size = 0; + int smallest_stack_index = -1; + for(int i = slot_begin; i < slot_end; ++i) { + final ItemStack stack = inventory.getStackInSlot(i); + if((!stack.isEmpty()) && (stack.isItemEqual(request_stack))) { + // Never automatically place stuff with nbt (except a few allowed like "Damage"), + // as this could be a full crate, a valuable tool item, etc. For these recipes + // the user has to place this item manually. + if(stack.hasTag()) { + final CompoundNBT nbt = stack.getTag(); + int n = stack.getTag().size(); + if((n > 0) && (stack.getTag().contains("Damage"))) --n; + if(n > 0) continue; + } + fetched_stack = stack.copy(); // copy exact stack with nbt and tool damage, otherwise we have an automagical repair of items. + fetched_stack.setCount(0); + int n = stack.getCount(); + if((n < smallest_stack_size) || (smallest_stack_size <= 0)) { + smallest_stack_size = n; + smallest_stack_index = i; + } + } + } + if(smallest_stack_index < 0) { + break; // no more items available + } else { + int n = Math.min(n_left, smallest_stack_size); + n_left -= n; + fetched_stack.grow(n); + ItemStack st = inventory.getStackInSlot(smallest_stack_index); + st.shrink(n); + inventory.setInventorySlotContents(smallest_stack_index, st); + } + } + return fetched_stack; + } + + private boolean clear_grid_to_storage(PlayerEntity player) + { + boolean changed = false; + for(int grid_i = CRAFTING_SLOTS_BEGIN; grid_i < (CRAFTING_SLOTS_BEGIN+NUM_OF_CRAFTING_SLOTS); ++grid_i) { + ItemStack stack = inventory_.getStackInSlot(grid_i); + if(stack.isEmpty()) continue; + ItemStack remaining = move_stack_to_inventory(stack, inventory_, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN+NUM_OF_STORAGE_SLOTS, false); + inventory_.setInventorySlotContents(grid_i, remaining); + changed = true; + } + return changed; + } + + private boolean clear_grid_to_player(PlayerEntity player) + { + boolean changed = false; + for(int grid_i = CRAFTING_SLOTS_BEGIN; grid_i < (CRAFTING_SLOTS_BEGIN+NUM_OF_CRAFTING_SLOTS); ++grid_i) { + ItemStack remaining = inventory_.getStackInSlot(grid_i); + if(remaining.isEmpty()) continue; + remaining = move_stack_to_inventory(remaining, player.inventory,9, 36, true); // prefer filling up inventory stacks + remaining = move_stack_to_inventory(remaining, player.inventory,0, 9, true); // then fill up the hotbar stacks + remaining = move_stack_to_inventory(remaining, player.inventory,9, 36, false); // then allow empty stacks in inventory + remaining = move_stack_to_inventory(remaining, player.inventory,0, 9, false); // then new stacks in the hotbar + inventory_.setInventorySlotContents(grid_i, remaining); + changed = true; + } + return changed; + } + + enum EnumRefabPlacement { UNCHANGED, INCOMPLETE, PLACED } + private EnumRefabPlacement place_refab_stacks(IInventory inventory, final int slot_begin, final int slot_end) + { + List to_fill = crafting_slot_stacks_to_add(); + boolean slots_changed = false; + boolean missing_item = false; + int num_slots_placed = 0; + if(!to_fill.isEmpty()) { + for(int it_guard=63; it_guard>=0; --it_guard) { + boolean slots_updated = false; + for(int i = 0; i < 9; ++i) { + final ItemStack req_stack = to_fill.get(i).copy(); + if(req_stack.isEmpty()) continue; + req_stack.setCount(1); + to_fill.get(i).shrink(1); + final ItemStack mv_stack = move_stack_from_inventory(inventory, req_stack, slot_begin, slot_end); + if(mv_stack.isEmpty()) { missing_item=true; continue; } + // sizes already checked + ItemStack grid_stack = inventory_.getStackInSlot(i + CRAFTING_SLOTS_BEGIN).copy(); + if(grid_stack.isEmpty()) { + grid_stack = mv_stack.copy(); + } else { + grid_stack.grow(mv_stack.getCount()); + } + inventory_.setInventorySlotContents(i + CRAFTING_SLOTS_BEGIN, grid_stack); + slots_changed = true; + slots_updated = true; + } + if(!slots_updated) break; + } + } + if(!slots_changed) { + return EnumRefabPlacement.UNCHANGED; + } else if(missing_item) { + return EnumRefabPlacement.INCOMPLETE; + } else { + return EnumRefabPlacement.PLACED; + } + } + + private EnumRefabPlacement distribute_stack(IInventory inventory, final int slotno) + { + List to_refab = crafting_slot_stacks_to_add(); + ItemStack to_distribute = inventory.getStackInSlot(slotno).copy(); + if(to_distribute.isEmpty()) return EnumRefabPlacement.UNCHANGED; + int matching_grid_stack_sizes[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; + int max_matching_stack_size = -1; + int min_matching_stack_size = 65; + int total_num_missing_stacks = 0; + for(int i=0; i<9; ++i) { + final ItemStack grid_stack = inventory_.getStackInSlot(i+CRAFTING_SLOTS_BEGIN); + final ItemStack refab_stack = to_refab.isEmpty() ? ItemStack.EMPTY : to_refab.get(i).copy(); + if((!grid_stack.isEmpty()) && (grid_stack.isItemEqual(to_distribute))) { + matching_grid_stack_sizes[i] = grid_stack.getCount(); + total_num_missing_stacks += grid_stack.getMaxStackSize()-grid_stack.getCount(); + if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i]; + if(min_matching_stack_size > matching_grid_stack_sizes[i]) min_matching_stack_size = matching_grid_stack_sizes[i]; + } else if((!refab_stack.isEmpty()) && (refab_stack.isItemEqual(to_distribute))) { + matching_grid_stack_sizes[i] = 0; + total_num_missing_stacks += grid_stack.getMaxStackSize(); + if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i]; + if(min_matching_stack_size > matching_grid_stack_sizes[i]) min_matching_stack_size = matching_grid_stack_sizes[i]; + } else if(grid_stack.isEmpty() && (!refab_stack.isEmpty())) { + if(itemstack_recipe_match(to_distribute, refab_stack)) { + matching_grid_stack_sizes[i] = 0; + total_num_missing_stacks += grid_stack.getMaxStackSize(); + if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i]; + if(min_matching_stack_size > matching_grid_stack_sizes[i]) min_matching_stack_size = matching_grid_stack_sizes[i]; + } + } + } + if(min_matching_stack_size < 0) return EnumRefabPlacement.UNCHANGED; + final int stack_limit_size = Math.min(to_distribute.getMaxStackSize(), inventory_.getInventoryStackLimit()); + if(min_matching_stack_size >= stack_limit_size) return EnumRefabPlacement.UNCHANGED; + int n_to_distribute = to_distribute.getCount(); + for(int it_guard=63; it_guard>=0; --it_guard) { + if(n_to_distribute <= 0) break; + for(int i=0; i<9; ++i) { + if(n_to_distribute <= 0) break; + if(matching_grid_stack_sizes[i] == min_matching_stack_size) { + ++matching_grid_stack_sizes[i]; + --n_to_distribute; + } + } + if(min_matching_stack_size < max_matching_stack_size) { + ++min_matching_stack_size; // distribute short stacks + } else { + ++min_matching_stack_size; // stacks even, increase all + max_matching_stack_size = min_matching_stack_size; + } + if(min_matching_stack_size >= stack_limit_size) break; // all full + } + if(n_to_distribute == to_distribute.getCount()) return EnumRefabPlacement.UNCHANGED; // was already full + if(n_to_distribute <= 0) { + inventory.setInventorySlotContents(slotno, ItemStack.EMPTY); + } else { + to_distribute.setCount(n_to_distribute); + inventory.setInventorySlotContents(slotno, to_distribute); + } + for(int i=0; i<9; ++i) { + if(matching_grid_stack_sizes[i] < 0) continue; + ItemStack grid_stack = inventory_.getStackInSlot(i + CRAFTING_SLOTS_BEGIN).copy(); + if(grid_stack.isEmpty()) grid_stack = to_distribute.copy(); + grid_stack.setCount(matching_grid_stack_sizes[i]); + inventory_.setInventorySlotContents(i + CRAFTING_SLOTS_BEGIN, grid_stack); + } + return EnumRefabPlacement.PLACED; + } + + // Container client/server synchronisation -------------------------------------------------- + + @OnlyIn(Dist.CLIENT) + public void onGuiAction(String message, CompoundNBT nbt) + { + nbt.putString("action", message); + Networking.PacketContainerSyncClientToServer.sendToServer(windowId, nbt); + } + + public void onServerPacketReceived(int windowId, CompoundNBT nbt) + { + if(nbt.contains("history")) { + history_.read(nbt.getCompound("history")); + } + } + + public void onClientPacketReceived(int windowId, PlayerEntity player, CompoundNBT nbt) + { + boolean changed = false; + boolean player_inventory_changed = false; + if(with_assist && nbt.contains("action")) { + switch(nbt.getString("action")) { + case BGui.BUTTON_NEXT: { + history_.next(); + syncHistory(player); + // implicitly clear the grid, so that the player can see the refab, and that no recipe is active. + if(clear_grid_to_player(player)) { changed = true; player_inventory_changed = true; } + if(clear_grid_to_storage(player)) changed = true; + } break; + case BGui.BUTTON_PREV: { + history_.prev(); + syncHistory(player); + if(clear_grid_to_player(player)) { changed = true; player_inventory_changed = true; } + if(clear_grid_to_storage(player)) changed = true; + } break; + case BGui.BUTTON_CLEAR_GRID: { + history_.reset_selection(); + syncHistory(player); + if(clear_grid_to_player(player)) { changed = true; player_inventory_changed = true; } + if(clear_grid_to_storage(player)) changed = true; + } break; + case BGui.BUTTON_TO_STORAGE: { + if(clear_grid_to_storage(player)) changed = true; + } break; + case BGui.BUTTON_TO_PLAYER: { + if(clear_grid_to_player(player)) { changed = true; player_inventory_changed = true; } + } break; + case BGui.BUTTON_FROM_STORAGE: { + EnumRefabPlacement from_storage = place_refab_stacks(inventory_, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN+NUM_OF_STORAGE_SLOTS); + if(from_storage != EnumRefabPlacement.UNCHANGED) changed = true; + } break; + case BGui.BUTTON_FROM_PLAYER: { + EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36); + if(from_player_inv != EnumRefabPlacement.UNCHANGED) { changed = true; player_inventory_changed = true; } + if(from_player_inv != EnumRefabPlacement.PLACED) { + EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9); + if(from_hotbar != EnumRefabPlacement.UNCHANGED) { changed = true; player_inventory_changed = true; } + } + } break; + case BGui.ACTION_PLACE_CURRENT_HISTORY_SEL: { + EnumRefabPlacement from_storage = place_refab_stacks(inventory_, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN+NUM_OF_STORAGE_SLOTS); + if(from_storage != EnumRefabPlacement.UNCHANGED) changed = true; + if(from_storage != EnumRefabPlacement.PLACED) { + EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36); + if(from_player_inv != EnumRefabPlacement.UNCHANGED) { changed = true; player_inventory_changed = true; } + if(from_player_inv != EnumRefabPlacement.PLACED) { + EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9); + if(from_hotbar != EnumRefabPlacement.UNCHANGED) { changed = true; player_inventory_changed = true; } + } + } + } break; + case BGui.ACTION_PLACE_SHIFTCLICKED_STACK: { + final int container_slot_id = nbt.getInt("containerslot"); + if((container_slot_id < 10) || (container_slot_id > 53)) break; // out of range + if(container_slot_id >= 46) { + // from storage + final int storage_slot = container_slot_id - 46 + STORAGE_SLOTS_BEGIN; + EnumRefabPlacement stat = distribute_stack(inventory_, storage_slot); + if(stat != EnumRefabPlacement.UNCHANGED) changed = true; + } else { + // from player + int player_slot = (container_slot_id >= 37) ? (container_slot_id-37) : (container_slot_id-10+9); + EnumRefabPlacement stat = distribute_stack(player.inventory, player_slot); + if(stat != EnumRefabPlacement.UNCHANGED) { player_inventory_changed = true; changed = true; } + } + } break; + } + } + if(changed) inventory_.markDirty(); + if(player_inventory_changed) player.inventory.markDirty(); + if(changed || player_inventory_changed) { + this.onCraftMatrixChanged(inventory_); + this.detectAndSendChanges(); + } + } + + public CraftingHistory history() + { return history_; } + + // todo: somehow hook into the container listeners for syncing all clients having that container open. + private void syncHistory(PlayerEntity player) + { + if((!with_assist) || (player.world.isRemote)) return; + CompoundNBT hist_nbt = history_.write(); + if((inventory_ instanceof BTileEntity)) { + ((BTileEntity)inventory_).history = hist_nbt.copy(); + inventory_.markDirty(); + } + final CompoundNBT nbt = new CompoundNBT(); + nbt.put("history", hist_nbt); + Networking.PacketContainerSyncServerToClient.sendToPlayer(player, windowId, nbt); + } + } + + //-------------------------------------------------------------------------------------------------------------------- + // GUI + //-------------------------------------------------------------------------------------------------------------------- + + @OnlyIn(Dist.CLIENT) + public static class BGui extends ContainerScreen + { + protected static final String BUTTON_NEXT = "next"; + protected static final String BUTTON_PREV = "prev"; + protected static final String BUTTON_CLEAR_GRID = "clear"; + protected static final String BUTTON_FROM_STORAGE = "from-storage"; + protected static final String BUTTON_TO_STORAGE = "to-storage"; + protected static final String BUTTON_FROM_PLAYER = "from-player"; + protected static final String BUTTON_TO_PLAYER = "to-player"; + protected static final String ACTION_PLACE_CURRENT_HISTORY_SEL = "place-refab"; + protected static final String ACTION_PLACE_SHIFTCLICKED_STACK = "place-stack"; + protected static final ResourceLocation BACKGROUND = new ResourceLocation(ModEngineersDecor.MODID, "textures/gui/treated_wood_crafting_table.png"); + protected final PlayerEntity player; + protected final ArrayList