From ee22ebc828af197b8689c8e1db4ee6fff0467fc4 Mon Sep 17 00:00:00 2001 From: DrMangoTea Date: Tue, 19 Sep 2023 14:48:10 +0200 Subject: [PATCH] distillation tower jei interface --- .../9047e4e94996e73e9dfde3738763637fb609e07e | 4 +- .../ad795fb8576279849034d802e60366ec43bb396a | 46 ++- .../blockstates/blast_furnace_output.json | 7 + .../fireproof_brick_reinforcement.json | 90 +++++ .../tfmg/blockstates/fireproof_bricks.json | 7 + .../tfmg/blockstates/industrial_pipe.json | 7 + .../tfmg/blockstates/machine_input.json | 7 + .../tfmg/blockstates/pumpjack_base.json | 7 + .../tfmg/blockstates/pumpjack_crank.json | 7 + .../blockstates/pumpjack_hammer_holder.json | 7 + .../resources/assets/tfmg/lang/en_ud.json | 8 + .../resources/assets/tfmg/lang/en_us.json | 13 +- .../models/block/blast_furnace_output.json | 6 + ...reproof_brick_reinforcement_wall_post.json | 6 + ...reproof_brick_reinforcement_wall_side.json | 6 + ...of_brick_reinforcement_wall_side_tall.json | 6 + .../tfmg/models/block/fireproof_bricks.json | 6 + .../tfmg/models/block/industrial_pipe.json | 6 + .../tfmg/models/block/machine_input.json | 6 + .../tfmg/models/block/pumpjack_base.json | 6 + .../tfmg/models/block/pumpjack_crank.json | 6 + .../models/block/pumpjack_hammer_holder.json | 6 + .../models/item/blast_furnace_output.json | 3 + .../item/fireproof_brick_reinforcement.json | 3 + .../tfmg/models/item/fireproof_bricks.json | 3 + .../tfmg/models/item/industrial_pipe.json | 3 + .../tfmg/models/item/machine_input.json | 3 + .../tfmg/models/item/pumpjack_base.json | 3 + .../tfmg/models/item/pumpjack_crank.json | 3 + .../models/item/pumpjack_hammer_holder.json | 3 + .../minecraft/tags/blocks/mineable/axe.json | 4 +- .../tags/blocks/mineable/pickaxe.json | 6 + .../data/minecraft/tags/blocks/walls.json | 1 + .../blocks/blast_furnace_output.json | 20 + .../blocks/fireproof_brick_reinforcement.json | 20 + .../loot_tables/blocks/fireproof_bricks.json | 20 + .../loot_tables/blocks/industrial_pipe.json | 20 + .../loot_tables/blocks/machine_input.json | 20 + .../loot_tables/blocks/pumpjack_base.json | 20 + .../loot_tables/blocks/pumpjack_crank.json | 20 + .../blocks/pumpjack_hammer_holder.json | 20 + .../tfmg/base/TFMGVanillaBlockStates.java | 18 + .../palettes/TFMGPaletteBlockPartial.java | 4 +- .../palettes/TFMGPaletteBlockPattern.java | 2 +- .../DistillationControllerBlockEntity.java | 2 +- .../DistillationOutputBlockEntity.java | 2 +- .../pumpjack/base/PumpjackBaseBlock.java | 72 ++++ .../base/PumpjackBaseBlockEntity.java | 374 ++++++++++++++++++ .../pumpjack/base/PumpjackBaseRenderer.java | 50 +++ .../pumpjack/crank/PumpjackCrankBlock.java | 48 +++ .../crank/PumpjackCrankBlockEntity.java | 122 ++++++ .../pumpjack/crank/PumpjackCrankInstance.java | 112 ++++++ .../pumpjack/crank/PumpjackCrankRenderer.java | 178 +++++++++ .../PumpjackHammerHolderBlock.java | 45 +++ .../PumpjackHammerHolderBlockEntity.java | 156 ++++++++ .../PumpjackHammerHolderInstance.java | 85 ++++ .../PumpjackHammerHolderRenderer.java | 66 ++++ .../machine_input/MachineInputBlock.java | 47 +++ .../MachineInputBlockEntity.java | 79 ++++ .../machine_input/MachineInputRenderer.java | 25 ++ .../jei/AdvancedDistillationCategory.java | 69 ++-- .../recipes/jei/DistillationCategory.java | 3 +- .../drmangotea/tfmg/recipes/jei/TFMGJei.java | 7 +- .../Distillery.java} | 6 +- .../tfmg/registry/TFMGBlockEntities.java | 38 ++ .../drmangotea/tfmg/registry/TFMGBlocks.java | 88 +++++ .../tfmg/registry/TFMGGuiTextures.java | 71 ++++ .../tfmg/registry/TFMGPartialModels.java | 4 + .../block/fireproof_brick_reinforcement.json | 70 ++++ .../tfmg/models/block/pumpjack/hammer.json | 8 + .../models/block/pumpjack/hammer_holder.json | 6 + .../models/block/pumpjack/pumpjack_base.json | 34 ++ .../block/pumpjack/pumpjack_connector.json | 58 +++ .../models/block/pumpjack/pumpjack_crank.json | 152 +++++++ .../block/pumpjack/pumpjack_crank_block.json | 34 ++ .../block/pumpjack/pumpjack_crank_item.json | 166 ++++++++ .../block/pumpjack/pumpjack_front_rope.json | 33 ++ .../models/block/pumpjack/pumpjack_hammer.mtl | 3 + .../models/block/pumpjack/pumpjack_hammer.obj | 95 +++++ .../models/block/pumpjack/pumpjack_hammer.png | Bin 0 -> 331 bytes .../pumpjack/pumpjack_hammer_holder.json | 112 ++++++ .../textures/block/blast_furnace_output.png | Bin 0 -> 273 bytes .../block/fireproof_brick_reinforcement.png | Bin 0 -> 243 bytes .../tfmg/textures/block/fireproof_bricks.png | Bin 157 -> 243 bytes .../tfmg/textures/block/machine_input.png | Bin 0 -> 19028 bytes .../textures/block/pumpjack_hammer_holder.png | Bin 0 -> 19028 bytes .../tfmg/textures/block/steel_block.png | Bin 287 -> 332 bytes .../textures/block/steel_block_connected.png | Bin 1672 -> 2400 bytes .../tfmg/textures/gui/distillation_tower.png | Bin 0 -> 1117 bytes 89 files changed, 2956 insertions(+), 53 deletions(-) create mode 100644 src/generated/resources/assets/tfmg/blockstates/blast_furnace_output.json create mode 100644 src/generated/resources/assets/tfmg/blockstates/fireproof_brick_reinforcement.json create mode 100644 src/generated/resources/assets/tfmg/blockstates/fireproof_bricks.json create mode 100644 src/generated/resources/assets/tfmg/blockstates/industrial_pipe.json create mode 100644 src/generated/resources/assets/tfmg/blockstates/machine_input.json create mode 100644 src/generated/resources/assets/tfmg/blockstates/pumpjack_base.json create mode 100644 src/generated/resources/assets/tfmg/blockstates/pumpjack_crank.json create mode 100644 src/generated/resources/assets/tfmg/blockstates/pumpjack_hammer_holder.json create mode 100644 src/generated/resources/assets/tfmg/models/block/blast_furnace_output.json create mode 100644 src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_post.json create mode 100644 src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side.json create mode 100644 src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side_tall.json create mode 100644 src/generated/resources/assets/tfmg/models/block/fireproof_bricks.json create mode 100644 src/generated/resources/assets/tfmg/models/block/industrial_pipe.json create mode 100644 src/generated/resources/assets/tfmg/models/block/machine_input.json create mode 100644 src/generated/resources/assets/tfmg/models/block/pumpjack_base.json create mode 100644 src/generated/resources/assets/tfmg/models/block/pumpjack_crank.json create mode 100644 src/generated/resources/assets/tfmg/models/block/pumpjack_hammer_holder.json create mode 100644 src/generated/resources/assets/tfmg/models/item/blast_furnace_output.json create mode 100644 src/generated/resources/assets/tfmg/models/item/fireproof_brick_reinforcement.json create mode 100644 src/generated/resources/assets/tfmg/models/item/fireproof_bricks.json create mode 100644 src/generated/resources/assets/tfmg/models/item/industrial_pipe.json create mode 100644 src/generated/resources/assets/tfmg/models/item/machine_input.json create mode 100644 src/generated/resources/assets/tfmg/models/item/pumpjack_base.json create mode 100644 src/generated/resources/assets/tfmg/models/item/pumpjack_crank.json create mode 100644 src/generated/resources/assets/tfmg/models/item/pumpjack_hammer_holder.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/blast_furnace_output.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_brick_reinforcement.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_bricks.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/industrial_pipe.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/machine_input.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_base.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_crank.json create mode 100644 src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_hammer_holder.json create mode 100644 src/main/java/com/drmangotea/tfmg/base/TFMGVanillaBlockStates.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlock.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlockEntity.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseRenderer.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlock.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlockEntity.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankInstance.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankRenderer.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlock.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlockEntity.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderInstance.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderRenderer.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlock.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlockEntity.java create mode 100644 src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputRenderer.java rename src/main/java/com/drmangotea/tfmg/recipes/jei/{AnimatedDistiller.java => machines/Distillery.java} (97%) create mode 100644 src/main/java/com/drmangotea/tfmg/registry/TFMGGuiTextures.java create mode 100644 src/main/resources/assets/tfmg/models/block/fireproof_brick_reinforcement.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/hammer.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/hammer_holder.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_base.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_connector.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_block.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_item.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_front_rope.json create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.mtl create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.obj create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.png create mode 100644 src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer_holder.json create mode 100644 src/main/resources/assets/tfmg/textures/block/blast_furnace_output.png create mode 100644 src/main/resources/assets/tfmg/textures/block/fireproof_brick_reinforcement.png create mode 100644 src/main/resources/assets/tfmg/textures/block/machine_input.png create mode 100644 src/main/resources/assets/tfmg/textures/block/pumpjack_hammer_holder.png create mode 100644 src/main/resources/assets/tfmg/textures/gui/distillation_tower.png diff --git a/src/generated/resources/.cache/9047e4e94996e73e9dfde3738763637fb609e07e b/src/generated/resources/.cache/9047e4e94996e73e9dfde3738763637fb609e07e index d4b037dd..f3530960 100644 --- a/src/generated/resources/.cache/9047e4e94996e73e9dfde3738763637fb609e07e +++ b/src/generated/resources/.cache/9047e4e94996e73e9dfde3738763637fb609e07e @@ -1,2 +1,2 @@ -// 1.19.2 2023-09-17T13:43:24.4728645 Create: The Factory Must Grow's lang merger -b20b2d55c4ecebb0f868c512c69646ba4d3d98cf assets/tfmg/lang/en_us.json +// 1.19.2 2023-09-19T14:23:32.3677565 Create: The Factory Must Grow's lang merger +279de59a50ebc382a1a701878d0e99bf46265336 assets/tfmg/lang/en_us.json diff --git a/src/generated/resources/.cache/ad795fb8576279849034d802e60366ec43bb396a b/src/generated/resources/.cache/ad795fb8576279849034d802e60366ec43bb396a index bf740663..8e79db72 100644 --- a/src/generated/resources/.cache/ad795fb8576279849034d802e60366ec43bb396a +++ b/src/generated/resources/.cache/ad795fb8576279849034d802e60366ec43bb396a @@ -1,7 +1,8 @@ -// 1.19.2 2023-09-17T11:15:14.4329646 Registrate Provider for tfmg [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] +// 1.19.2 2023-09-19T14:23:32.3567546 Registrate Provider for tfmg [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] b7f5146505c40c08cdea7ad01fa99048b7ac5451 assets/tfmg/blockstates/aluminum_block.json 933485fa587fccc649b4cbe8f76f15e590cc8bb1 assets/tfmg/blockstates/bauxite.json 2b53ff8e880d35a42388584cb3ca896c55bfaf95 assets/tfmg/blockstates/bauxite_pillar.json +83154b3fd031e4e10e1103d4befc800a82da4bbe assets/tfmg/blockstates/blast_furnace_output.json 9ca537517fb8baeff3d4e4137c93aebd6b874c81 assets/tfmg/blockstates/cast_iron_block.json e13ba2fa789c784e4b7cfec3dd4603e29152387e assets/tfmg/blockstates/cast_iron_distillation_controller.json 61bcb8f09523c05fe8ee07a4b8b71a59e98393fe assets/tfmg/blockstates/cast_iron_distillation_output.json @@ -20,6 +21,8 @@ e11a6159da224e69f12e11a594c20bb2bd8c0e68 assets/tfmg/blockstates/cut_bauxite_bri 3803629d3a0fe11a30c7dedaf0ae8e396df4c994 assets/tfmg/blockstates/cut_bauxite_stairs.json 700d6569dd98adc6a3167c99295816453bf351b9 assets/tfmg/blockstates/cut_bauxite_wall.json 03983ce3de10310cd75b98f17c9161653b7034cd assets/tfmg/blockstates/diesel.json +13c8eae3dd74b79d0e43c31ff101111e0af058f1 assets/tfmg/blockstates/fireproof_bricks.json +fe071d9f7c86c74e47390c35709f6c59b71bfa59 assets/tfmg/blockstates/fireproof_brick_reinforcement.json f16d1cf03e5053455ea485f7aa53a88206f61749 assets/tfmg/blockstates/formwork_block.json e74acd9562e4b46295cf017d17f2662e20a7f5ea assets/tfmg/blockstates/fossilstone.json b0a3f4da5d9efdd01800c8b9738aee194565c6e7 assets/tfmg/blockstates/gasoline.json @@ -27,12 +30,14 @@ d23c28129bc7885986c65290071fb7a9cc5391d7 assets/tfmg/blockstates/glass_steel_pip 9753ec68aa5fe10f618000b453a242d5e685b7d7 assets/tfmg/blockstates/heavy_casing_door.json c7aa764cc11ee837deeed68c9c2d8567ea078f5c assets/tfmg/blockstates/heavy_machinery_casing.json dea24edfcb504c6c74560174a94bd7d3e5d58e76 assets/tfmg/blockstates/heavy_oil.json +4205e4d0f3967a25f65dc2a250d037a662fc0476 assets/tfmg/blockstates/industrial_pipe.json 7199cbfa37e83fcedf8e99af48b05b283aef319f assets/tfmg/blockstates/kerosene.json a8f81ce72c3f074ffef304b238ae805f3b4ea763 assets/tfmg/blockstates/layered_bauxite.json 34b4665b1ad1f302cebf30a5b1694c47b7ec1b8a assets/tfmg/blockstates/lead_block.json 55cba7d103b52b31f2deb59effcc01cfae6e2c05 assets/tfmg/blockstates/liquid_concrete.json d3ba2682652fd44337d1f82ec382df17611fabe1 assets/tfmg/blockstates/liquid_plastic.json 2dc4b1da2bee0275cbb13ef89003d56f62d4443d assets/tfmg/blockstates/lubrication_oil.json +6c819d5f63ca53146d069ba0d00b3e1b10391a68 assets/tfmg/blockstates/machine_input.json ebd6804b999acea36abbf07c2381ee6dee0d7a16 assets/tfmg/blockstates/napalm.json 0f33dc6b2a736164b17f416ce7d127c87bfb6441 assets/tfmg/blockstates/napalm_bomb.json 89f2902010903aad686571ef37c781b111147456 assets/tfmg/blockstates/naphtha.json @@ -41,6 +46,9 @@ de9db40aec6d8dfe1afc222cd136df66a5ea0ff4 assets/tfmg/blockstates/polished_cut_ba 666a8272c3b88cc95106ff6c517b39d5f405cd15 assets/tfmg/blockstates/polished_cut_bauxite_slab.json 09b0074325813fc7b3cc47d406127abd0cfff21a assets/tfmg/blockstates/polished_cut_bauxite_stairs.json 92ac841c40e42468c4a01f98c61bc7df13eb4b9f assets/tfmg/blockstates/polished_cut_bauxite_wall.json +59fb2e38fb27b009de937602af7fb6b93a882f52 assets/tfmg/blockstates/pumpjack_base.json +9c839b1cc9aa5450ca4bc3501a055a0b5f8b5eee assets/tfmg/blockstates/pumpjack_crank.json +48e6c14565bf2d1c3a33a6642ce17e76d99f200c assets/tfmg/blockstates/pumpjack_hammer_holder.json 759968da877221c21f6979f6af6cf201a9a8c1b7 assets/tfmg/blockstates/small_bauxite_bricks.json bf9dcbeabbd8d9da8dcd1cd9d42c3fce6509e7e6 assets/tfmg/blockstates/small_bauxite_brick_slab.json e80f4610e3272a4edfb47572aff71f1db3d283d7 assets/tfmg/blockstates/small_bauxite_brick_stairs.json @@ -57,8 +65,8 @@ e29906d296994a13fefc2beb22f7693e1027dd1b assets/tfmg/blockstates/steel_fluid_val 71b4c68d8a02062252c4dfde41650b7667d8c0ca assets/tfmg/blockstates/steel_sheetmetal.json 47b56dad1f2715aae7430b5f9acb1d51a26cf562 assets/tfmg/blockstates/steel_smart_fluid_pipe.json 942bb86fa92b3c40fc535dccdd2e9f3b79a36d92 assets/tfmg/blockstates/surface_scanner.json -587858610506ca0b063af552a67b96dd3a85e232 assets/tfmg/lang/en_ud.json -595fc774dfdc75f633a922ef452984d0c5d4df1d assets/tfmg/lang/en_us.json +67b8a6fd76d364c98275a66fb3f4cc9bbb043359 assets/tfmg/lang/en_ud.json +4bb8653cbdb013bc36e507bc2408c5b4279a4864 assets/tfmg/lang/en_us.json 9e6a6b62f5e7528c4e4d4f72f3510edcd8f0c078 assets/tfmg/models/block/aluminum_block.json 5a4c785e8d8394ccd125732c0017459648574c4e assets/tfmg/models/block/bauxite_natural_0.json 4ace0da00498fcbb9ddfdf321767b40b095c8778 assets/tfmg/models/block/bauxite_natural_1.json @@ -66,6 +74,7 @@ e29906d296994a13fefc2beb22f7693e1027dd1b assets/tfmg/blockstates/steel_fluid_val b43711f35915b71b15db638538a83a4ea46480dc assets/tfmg/models/block/bauxite_natural_3.json 920f96d4b648414ce8331e5a81e6b7ddbce7e225 assets/tfmg/models/block/bauxite_pillar.json cd5ade5f9a0b3b5e28b5d11a685408dd922dbe2d assets/tfmg/models/block/bauxite_pillar_horizontal.json +15597a6b96250c5ac383daca00e7cbf47d629947 assets/tfmg/models/block/blast_furnace_output.json 37789d06ec6cfc0312be7b1b66ac1ec6403d4516 assets/tfmg/models/block/cast_iron_block.json 925d61d0f1379e02c1f8892e3b86be5aa623b9ae assets/tfmg/models/block/cast_iron_distillation_controller.json 73cb08b1b298a3e02731e61326b65f94ef39e9bb assets/tfmg/models/block/cast_iron_distillation_output.json @@ -93,16 +102,22 @@ c85e3f557de57442a06502abd302f2b0deb4c6bf assets/tfmg/models/block/cut_bauxite_wa 38e83097489baf251fba2c4229a6fedf6b441528 assets/tfmg/models/block/cut_bauxite_wall_side.json a98527559bb1385b628e465d629ac429cdfb9f8e assets/tfmg/models/block/cut_bauxite_wall_side_tall.json 997750c71f9ead915c393c5821146a57dcd01bfa assets/tfmg/models/block/diesel.json +9202745e6093098507d6b800f5e52a99b74eaa20 assets/tfmg/models/block/fireproof_bricks.json +88d17739f2b8a2d77397f20bdbba486f95f88d18 assets/tfmg/models/block/fireproof_brick_reinforcement_wall_post.json +157a113acb124b65874defe8379d70552838339f assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side.json +a657ae729b3afadf239d0a48b55f54ab756f4ec9 assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side_tall.json b0cb044b77cb3ffaf0628e0a06a8fe12c7462da0 assets/tfmg/models/block/fossilstone.json e0cf42adbfeaa5c781b8239352335985658ae2d3 assets/tfmg/models/block/gasoline.json 717ee09803cb584062c9717f45475fbd15673cde assets/tfmg/models/block/heavy_machinery_casing.json 725ac5c4c5aade982edbcb6c4e6c53626f0e68e4 assets/tfmg/models/block/heavy_oil.json +6c893c24e234b70930e69cfc742df3af97d9a337 assets/tfmg/models/block/industrial_pipe.json 796f870ee5d3f55ace500798ae389e532c7233b8 assets/tfmg/models/block/kerosene.json 87cc75cb9bc8e65f8e46785b14e21ac5a4356faa assets/tfmg/models/block/layered_bauxite.json 79862c4e9a084be72f402e1378c3bb009a8db889 assets/tfmg/models/block/lead_block.json eced115e0feb825f719abc480c4f9d7e7cc698c8 assets/tfmg/models/block/liquid_concrete.json 03ace76bbda220374985683aeea1eb4466bd4f13 assets/tfmg/models/block/liquid_plastic.json 6de36688139c9b11ed1ce6ef26ef1b65dfad34f5 assets/tfmg/models/block/lubrication_oil.json +0eb63c5a02a37435d1abef55fb1373aa67cf7b88 assets/tfmg/models/block/machine_input.json 80fb4a90f861992322bfd63f1232593e8cce708e assets/tfmg/models/block/napalm.json b541c0cab9298f1d2578639349755b93f1019621 assets/tfmg/models/block/napalm_bomb.json e8e7bb74d46f9cec768a5443c10870fe1dd2105b assets/tfmg/models/block/naphtha.json @@ -117,6 +132,9 @@ f92bda412c3057000812a86a702b1f7d94d696a8 assets/tfmg/models/block/polished_cut_b 931053f2b5c646d80f1a74820733fe072b11a83f assets/tfmg/models/block/polished_cut_bauxite_wall_post.json ad9fe70859fbb4152c183c33f159e88f1f1e532b assets/tfmg/models/block/polished_cut_bauxite_wall_side.json dfaec7706609f1df7535203fbc653e53907f6885 assets/tfmg/models/block/polished_cut_bauxite_wall_side_tall.json +cd235893ef4ab30f83c76635dba2ed6a09e5aa3a assets/tfmg/models/block/pumpjack_base.json +46190cbdab7774010229d537796d8396aecf3288 assets/tfmg/models/block/pumpjack_crank.json +f134b83206ab8fa1199aecbfb110a8cc5e964cee assets/tfmg/models/block/pumpjack_hammer_holder.json 0527561f96904dabea20a824baf8828ff1bbfc32 assets/tfmg/models/block/small_bauxite_bricks.json 35349e72beddafb42b477c100ba16e41eb0bc473 assets/tfmg/models/block/small_bauxite_bricks_wall_post.json 86658ab1a36973071032dd844664d817e0628adb assets/tfmg/models/block/small_bauxite_bricks_wall_side.json @@ -165,6 +183,7 @@ c7b153dff2ba1a88f02e950cc8d28d61bd68b1df assets/tfmg/models/block/steel_sheetmet f685ca653c8e197986b1ac8f43297989816d39d2 assets/tfmg/models/item/aluminum_ingot.json 4ace0da00498fcbb9ddfdf321767b40b095c8778 assets/tfmg/models/item/bauxite.json 41091873d85bac787e4752d0ff81189432f1e28e assets/tfmg/models/item/bauxite_pillar.json +8ef0374ff08be7e1501c64fce1e075144e0c070f assets/tfmg/models/item/blast_furnace_output.json ec38882fb9010884823d6d6afa604f8a6512d279 assets/tfmg/models/item/cast_iron_block.json 25acd7ba8827401619c5faf7bdbe60228b411864 assets/tfmg/models/item/cast_iron_distillation_controller.json fc48286f0e70651f3d5a915558c3c91ae3ad0da6 assets/tfmg/models/item/cast_iron_distillation_output.json @@ -185,12 +204,15 @@ cb56b95b0aad65f7d51e707eb7c4e5fa406bb741 assets/tfmg/models/item/cut_bauxite_bri e6bf52c7a969b26d65cc36353a6a3e2a91752e42 assets/tfmg/models/item/cut_bauxite_stairs.json 0cef1f82baa51acdbe768b60f54ba126f9f6eb60 assets/tfmg/models/item/cut_bauxite_wall.json 3497bcbaee50b2f766de659043bf3c36823b570d assets/tfmg/models/item/diesel_bucket.json +080629b77cc20daacb129c7fe3c3a97d5df677f2 assets/tfmg/models/item/fireproof_bricks.json +c0137c7e66f70afe28cac27fe903fe000e4c8eae assets/tfmg/models/item/fireproof_brick_reinforcement.json a11a0b5a9887ba342d80b574a7f2c3dc5cdd7372 assets/tfmg/models/item/formwork_block.json 7e4a58a6d05b19dc8c5fff73434c2d7cefa75343 assets/tfmg/models/item/fossilstone.json ed2830b2988403aebaca633b2e315878b41f7503 assets/tfmg/models/item/gasoline_bucket.json 5b5625568b4b6e0920fd680f626b31fd3ae6d095 assets/tfmg/models/item/heavy_casing_door.json 3fdff9e88db39939ee31968358eb51c060006766 assets/tfmg/models/item/heavy_machinery_casing.json f3bea42a905b7df9395bda18f751e2ee0c023e65 assets/tfmg/models/item/heavy_oil_bucket.json +81bf095f356d9dc74a83af78b860ef8d3aed9b72 assets/tfmg/models/item/industrial_pipe.json 8996fe57623ded9433d6766e80a39e41a2aba1ca assets/tfmg/models/item/kerosene_bucket.json c0f668fca568bc4c35aba97d9ac93986720e501f assets/tfmg/models/item/layered_bauxite.json ee1682c21054b9a9ffde5983141d49e8177f9a2a assets/tfmg/models/item/lead_block.json @@ -198,6 +220,7 @@ ee1682c21054b9a9ffde5983141d49e8177f9a2a assets/tfmg/models/item/lead_block.json 46bda405310f45b8faff7d29f3e2b76b6e6d512f assets/tfmg/models/item/liquid_concrete_bucket.json 630e09bfe78ed89d966b0e78599e818ef69f56a6 assets/tfmg/models/item/liquid_plastic_bucket.json c86a836bfcf884dc13094fd908a561dd1d8f7ad8 assets/tfmg/models/item/lubrication_oil_bucket.json +e5b540df3672daceba8eac388904fa91cad98277 assets/tfmg/models/item/machine_input.json afac1fce0904a0df4e68d731b897ff1be6c68766 assets/tfmg/models/item/napalm_bomb.json b41853a4ae8b890f924058e57d274e956e6f4e37 assets/tfmg/models/item/napalm_bucket.json aa94f1afebb7c458e85849d8ddff76c27efefb80 assets/tfmg/models/item/naphtha_bucket.json @@ -206,6 +229,9 @@ b652ff21ebb628809b8756d7d62644e0d2a5adfb assets/tfmg/models/item/polished_cut_ba 489528130097d6163d032483048ac41fa9da0dff assets/tfmg/models/item/polished_cut_bauxite_slab.json ac7c8f2f308145f0ae8108648cfb9fd0513987c6 assets/tfmg/models/item/polished_cut_bauxite_stairs.json 1dd75a9ca8cda0bb0237dee6b477d76823c15b8a assets/tfmg/models/item/polished_cut_bauxite_wall.json +a6da50f604abf3b381b447c494a217cdac2a9b65 assets/tfmg/models/item/pumpjack_base.json +3bcbd66f8acbdafc865012eb6cc1307c4c1efa8e assets/tfmg/models/item/pumpjack_crank.json +01e6301c2b992c89790fdf385c1f89e2c71469c8 assets/tfmg/models/item/pumpjack_hammer_holder.json 3cfdbac1c06b4e75416fcd24a93616d98f59d6e3 assets/tfmg/models/item/quad_potato_cannon.json d6cafabe2c6380ac0d2f2339a3861009de3ec989 assets/tfmg/models/item/screwdriver.json c00f7c5c7d05936bbe6a3069116c5adba5c60acf assets/tfmg/models/item/small_bauxite_bricks.json @@ -258,14 +284,14 @@ d26621b9617890011a68780cf7ab40fbb4658edc data/forge/tags/items/storage_blocks/le 1fdd0efd4d4b48c3d5989a7c43e53a6d1c2adc2b data/minecraft/tags/blocks/doors.json 63c4a8d8e713db70730e766f1a10f8dd9072f98f data/minecraft/tags/blocks/dripstone_replaceable_blocks.json 63c4a8d8e713db70730e766f1a10f8dd9072f98f data/minecraft/tags/blocks/lush_ground_replaceable.json -9b558f29e672499a30354b9113c1d494e858b208 data/minecraft/tags/blocks/mineable/axe.json -cd64e606ab00398ec320c641e554951e7f30aedd data/minecraft/tags/blocks/mineable/pickaxe.json +694d1673a052cf6c604fd75f5f0b8954a04a05e3 data/minecraft/tags/blocks/mineable/axe.json +b156ae4361196e2464f03fb95a11d5d9e3d03850 data/minecraft/tags/blocks/mineable/pickaxe.json 63c4a8d8e713db70730e766f1a10f8dd9072f98f data/minecraft/tags/blocks/moss_replaceable.json f67e51a16b6d140324ca0201f1b05e672eb63774 data/minecraft/tags/blocks/needs_iron_tool.json 755548d9019c1bb26a568488912ebfdf399e02d2 data/minecraft/tags/blocks/needs_stone_tool.json 193c8b45d804216ca5fe2035fa8dfc4567303500 data/minecraft/tags/blocks/slabs.json e02820ff93a8835947837b6b7e4f75b90a365ffb data/minecraft/tags/blocks/stairs.json -0472af44cb3c69aa62ace428304592aacc443045 data/minecraft/tags/blocks/walls.json +ab31c3dbbad90f45620470d3c22c64a2cc475790 data/minecraft/tags/blocks/walls.json 1fdd0efd4d4b48c3d5989a7c43e53a6d1c2adc2b data/minecraft/tags/blocks/wooden_doors.json 1fdd0efd4d4b48c3d5989a7c43e53a6d1c2adc2b data/minecraft/tags/items/doors.json 193c8b45d804216ca5fe2035fa8dfc4567303500 data/minecraft/tags/items/slabs.json @@ -310,6 +336,7 @@ d152c8826235944ea57ff042dcd0bd19e13a7c29 data/tfmg/advancements/recipes/tfmg.bui a4b393a2526bd10fa38095ac80769f913f139889 data/tfmg/loot_tables/blocks/aluminum_block.json 56d114d40ea3160b5c06cf9cfaa2e5107543c460 data/tfmg/loot_tables/blocks/bauxite.json 473b0effd9a768189aa232855cd09e7b380c3adc data/tfmg/loot_tables/blocks/bauxite_pillar.json +42f0a002820ca15e79fbc28e45e0f34638e9aeab data/tfmg/loot_tables/blocks/blast_furnace_output.json 60857d034446187e758de87644a80a7bc4d6b150 data/tfmg/loot_tables/blocks/cast_iron_block.json 300a96dcae25ba9bc085ee75f066b4ad2590b6e0 data/tfmg/loot_tables/blocks/cast_iron_distillation_controller.json 24517e07383f7a7eb8651f58721cf9f6f49393c0 data/tfmg/loot_tables/blocks/cast_iron_distillation_output.json @@ -324,19 +351,26 @@ d32a75f20ca3f2da6ba69b0a91e295c63f65de92 data/tfmg/loot_tables/blocks/concrete.j ce0c785984e63fa57a0cc8a9d5af0ce997285554 data/tfmg/loot_tables/blocks/cut_bauxite_slab.json efba82fdf0c26dd90aacf5f604e613e29513b60e data/tfmg/loot_tables/blocks/cut_bauxite_stairs.json ce47c0f03819dab221e70b3d4197ac82963b47d6 data/tfmg/loot_tables/blocks/cut_bauxite_wall.json +84715ecae584c6da15030710e401288881c3b845 data/tfmg/loot_tables/blocks/fireproof_bricks.json +1ce0e68d76b640ce1c668cfdcf4acf744288982f data/tfmg/loot_tables/blocks/fireproof_brick_reinforcement.json 51818c7cf522c10c409c8737fdc30a58d7560f71 data/tfmg/loot_tables/blocks/formwork_block.json fd7674b996fd961339614656498a1ff54f092bb8 data/tfmg/loot_tables/blocks/fossilstone.json 1622328d319fc3c71269b0f9f1aef43a77132f3a data/tfmg/loot_tables/blocks/glass_steel_pipe.json 673b4eaefb99f4322f2b172c2c2651969389ff9b data/tfmg/loot_tables/blocks/heavy_casing_door.json 661cc61f9c13ddf8c6bf06470defa93170e8ee7f data/tfmg/loot_tables/blocks/heavy_machinery_casing.json +922fec21549635d98ec80e7a2a4bf92bd8878da8 data/tfmg/loot_tables/blocks/industrial_pipe.json 1633b0609c1f7b71d0ccda03bdb95bf873692b18 data/tfmg/loot_tables/blocks/layered_bauxite.json a5ecc7b7daab82db283453319f5bae9057e63e62 data/tfmg/loot_tables/blocks/lead_block.json +c54478618ec2bcb1433ef2ad69a9b2453b3b8424 data/tfmg/loot_tables/blocks/machine_input.json 7da9b20012e584104331da961756d6c1d02682b5 data/tfmg/loot_tables/blocks/napalm_bomb.json 04ed0121924425d89886398da07c98277cb26100 data/tfmg/loot_tables/blocks/oil_deposit.json c8658b25761345012c9861389a95a4605380f868 data/tfmg/loot_tables/blocks/polished_cut_bauxite.json df7e518e9def864a4fad6b6bfbb605ae5bd4e57b data/tfmg/loot_tables/blocks/polished_cut_bauxite_slab.json 699d56aed6ceeeecb9ba94634130a05167ca041c data/tfmg/loot_tables/blocks/polished_cut_bauxite_stairs.json 4490dd2dd5e3d851c4dac4b37374094d6e90478b data/tfmg/loot_tables/blocks/polished_cut_bauxite_wall.json +8979e04ca8e0b1874baad459d35d7c80bb3fc5a8 data/tfmg/loot_tables/blocks/pumpjack_base.json +0fc9c3218514717c907b1f76f2abc55911459670 data/tfmg/loot_tables/blocks/pumpjack_crank.json +7e589d000c28526e306c5da5948e6c88ffb73d93 data/tfmg/loot_tables/blocks/pumpjack_hammer_holder.json 8392e6fbbaeb3a1f1316b3f12ecaf8927042a7ea data/tfmg/loot_tables/blocks/small_bauxite_bricks.json 211d6ba8f5576975698ad91ebdf5feb36f618ac7 data/tfmg/loot_tables/blocks/small_bauxite_brick_slab.json b43d1fa7a2ac0534ab2867dec787d97f205f4a8d data/tfmg/loot_tables/blocks/small_bauxite_brick_stairs.json diff --git a/src/generated/resources/assets/tfmg/blockstates/blast_furnace_output.json b/src/generated/resources/assets/tfmg/blockstates/blast_furnace_output.json new file mode 100644 index 00000000..c596aa0f --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/blast_furnace_output.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "tfmg:block/blast_furnace_output" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/blockstates/fireproof_brick_reinforcement.json b/src/generated/resources/assets/tfmg/blockstates/fireproof_brick_reinforcement.json new file mode 100644 index 00000000..182ce71c --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/fireproof_brick_reinforcement.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "tfmg:block/fireproof_brick_reinforcement_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/blockstates/fireproof_bricks.json b/src/generated/resources/assets/tfmg/blockstates/fireproof_bricks.json new file mode 100644 index 00000000..881e492a --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/fireproof_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "tfmg:block/fireproof_bricks" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/blockstates/industrial_pipe.json b/src/generated/resources/assets/tfmg/blockstates/industrial_pipe.json new file mode 100644 index 00000000..101b96a1 --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/industrial_pipe.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "tfmg:block/industrial_pipe" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/blockstates/machine_input.json b/src/generated/resources/assets/tfmg/blockstates/machine_input.json new file mode 100644 index 00000000..fab55bca --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/machine_input.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "tfmg:block/machine_input" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/blockstates/pumpjack_base.json b/src/generated/resources/assets/tfmg/blockstates/pumpjack_base.json new file mode 100644 index 00000000..016cb00b --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/pumpjack_base.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "tfmg:block/pumpjack_base" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/blockstates/pumpjack_crank.json b/src/generated/resources/assets/tfmg/blockstates/pumpjack_crank.json new file mode 100644 index 00000000..7a71fe5e --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/pumpjack_crank.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "tfmg:block/pumpjack_crank" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/blockstates/pumpjack_hammer_holder.json b/src/generated/resources/assets/tfmg/blockstates/pumpjack_hammer_holder.json new file mode 100644 index 00000000..4728ea4b --- /dev/null +++ b/src/generated/resources/assets/tfmg/blockstates/pumpjack_hammer_holder.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "tfmg:block/pumpjack_hammer_holder" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/lang/en_ud.json b/src/generated/resources/assets/tfmg/lang/en_ud.json index 278d4fb6..9ab0c9e9 100644 --- a/src/generated/resources/assets/tfmg/lang/en_ud.json +++ b/src/generated/resources/assets/tfmg/lang/en_ud.json @@ -2,6 +2,7 @@ "block.tfmg.aluminum_block": "ɯnuıɯnןⱯ ɟo ʞɔoןᗺ", "block.tfmg.bauxite": "ǝʇıxnɐᗺ", "block.tfmg.bauxite_pillar": "ɹɐןןıԀ ǝʇıxnɐᗺ", + "block.tfmg.blast_furnace_output": "ʇndʇnO ǝɔɐuɹnℲ ʇsɐןᗺ", "block.tfmg.cast_iron_block": "uoɹI ʇsɐƆ ɟo ʞɔoןᗺ", "block.tfmg.cast_iron_distillation_controller": "ɹǝןןoɹʇuoƆ uoıʇɐןןıʇsıᗡ uoɹI ʇsɐƆ", "block.tfmg.cast_iron_distillation_output": "ʇndʇnO uoıʇɐןןıʇsıᗡ uoɹI ʇsɐƆ", @@ -20,6 +21,8 @@ "block.tfmg.cut_bauxite_stairs": "sɹıɐʇS ǝʇıxnɐᗺ ʇnƆ", "block.tfmg.cut_bauxite_wall": "ןןɐM ǝʇıxnɐᗺ ʇnƆ", "block.tfmg.diesel": "ןǝsǝıᗡ", + "block.tfmg.fireproof_brick_reinforcement": "ʇuǝɯǝɔɹoɟuıǝᴚ ʞɔıɹᗺ ɟooɹdǝɹıℲ", + "block.tfmg.fireproof_bricks": "sʞɔıɹᗺ ɟooɹdǝɹıℲ", "block.tfmg.formwork_block": "ʞɔoןᗺ ʞɹoʍɯɹoℲ", "block.tfmg.fossilstone": "ǝuoʇsןıssoℲ", "block.tfmg.gasoline": "ǝuıןosɐ⅁", @@ -27,12 +30,14 @@ "block.tfmg.heavy_casing_door": "ɹooᗡ buısɐƆ ʎʌɐǝH", "block.tfmg.heavy_machinery_casing": "buısɐƆ ʎɹǝuıɥɔɐW ʎʌɐǝH", "block.tfmg.heavy_oil": "ןıO ʎʌɐǝH", + "block.tfmg.industrial_pipe": "ǝdıԀ ןɐıɹʇsnpuI", "block.tfmg.kerosene": "ǝuǝsoɹǝʞ", "block.tfmg.layered_bauxite": "ǝʇıxnɐᗺ pǝɹǝʎɐꞀ", "block.tfmg.lead_block": "pɐǝꞀ ɟo ʞɔoןᗺ", "block.tfmg.liquid_concrete": "ǝʇǝɹɔuoƆ pınbıꞀ", "block.tfmg.liquid_plastic": "ɔıʇsɐןԀ pınbıꞀ", "block.tfmg.lubrication_oil": "ןıO uoıʇɐɔıɹqnꞀ", + "block.tfmg.machine_input": "ʇnduI ǝuıɥɔɐW", "block.tfmg.napalm": "ɯןɐdɐN", "block.tfmg.napalm_bomb": "qɯoᗺ ɯןɐdɐN", "block.tfmg.naphtha": "ɐɥʇɥdɐN", @@ -41,6 +46,9 @@ "block.tfmg.polished_cut_bauxite_slab": "qɐןS ǝʇıxnɐᗺ ʇnƆ pǝɥsıןoԀ", "block.tfmg.polished_cut_bauxite_stairs": "sɹıɐʇS ǝʇıxnɐᗺ ʇnƆ pǝɥsıןoԀ", "block.tfmg.polished_cut_bauxite_wall": "ןןɐM ǝʇıxnɐᗺ ʇnƆ pǝɥsıןoԀ", + "block.tfmg.pumpjack_base": "ǝsɐᗺ ʞɔɐظdɯnԀ", + "block.tfmg.pumpjack_crank": "ʞuɐɹƆ ʞɔɐظdɯnԀ", + "block.tfmg.pumpjack_hammer_holder": "ɹǝpןoH ɹǝɯɯɐH ʞɔɐظdɯnԀ", "block.tfmg.small_bauxite_brick_slab": "qɐןS ʞɔıɹᗺ ǝʇıxnɐᗺ ןןɐɯS", "block.tfmg.small_bauxite_brick_stairs": "sɹıɐʇS ʞɔıɹᗺ ǝʇıxnɐᗺ ןןɐɯS", "block.tfmg.small_bauxite_brick_wall": "ןןɐM ʞɔıɹᗺ ǝʇıxnɐᗺ ןןɐɯS", diff --git a/src/generated/resources/assets/tfmg/lang/en_us.json b/src/generated/resources/assets/tfmg/lang/en_us.json index 20a5fadf..e3eb5c92 100644 --- a/src/generated/resources/assets/tfmg/lang/en_us.json +++ b/src/generated/resources/assets/tfmg/lang/en_us.json @@ -5,6 +5,7 @@ "block.tfmg.aluminum_block": "Block of Aluminum", "block.tfmg.bauxite": "Bauxite", "block.tfmg.bauxite_pillar": "Bauxite Pillar", + "block.tfmg.blast_furnace_output": "Blast Furnace Output", "block.tfmg.cast_iron_block": "Block of Cast Iron", "block.tfmg.cast_iron_distillation_controller": "Cast Iron Distillation Controller", "block.tfmg.cast_iron_distillation_output": "Cast Iron Distillation Output", @@ -23,6 +24,8 @@ "block.tfmg.cut_bauxite_stairs": "Cut Bauxite Stairs", "block.tfmg.cut_bauxite_wall": "Cut Bauxite Wall", "block.tfmg.diesel": "Diesel", + "block.tfmg.fireproof_brick_reinforcement": "Fireproof Brick Reinforcement", + "block.tfmg.fireproof_bricks": "Fireproof Bricks", "block.tfmg.formwork_block": "Formwork Block", "block.tfmg.fossilstone": "Fossilstone", "block.tfmg.gasoline": "Gasoline", @@ -30,12 +33,14 @@ "block.tfmg.heavy_casing_door": "Heavy Casing Door", "block.tfmg.heavy_machinery_casing": "Heavy Machinery Casing", "block.tfmg.heavy_oil": "Heavy Oil", + "block.tfmg.industrial_pipe": "Industrial Pipe", "block.tfmg.kerosene": "Kerosene", "block.tfmg.layered_bauxite": "Layered Bauxite", "block.tfmg.lead_block": "Block of Lead", "block.tfmg.liquid_concrete": "Liquid Concrete", "block.tfmg.liquid_plastic": "Liquid Plastic", "block.tfmg.lubrication_oil": "Lubrication Oil", + "block.tfmg.machine_input": "Machine Input", "block.tfmg.napalm": "Napalm", "block.tfmg.napalm_bomb": "Napalm Bomb", "block.tfmg.naphtha": "Naphtha", @@ -44,6 +49,9 @@ "block.tfmg.polished_cut_bauxite_slab": "Polished Cut Bauxite Slab", "block.tfmg.polished_cut_bauxite_stairs": "Polished Cut Bauxite Stairs", "block.tfmg.polished_cut_bauxite_wall": "Polished Cut Bauxite Wall", + "block.tfmg.pumpjack_base": "Pumpjack Base", + "block.tfmg.pumpjack_crank": "Pumpjack Crank", + "block.tfmg.pumpjack_hammer_holder": "Pumpjack Hammer Holder", "block.tfmg.small_bauxite_brick_slab": "Small Bauxite Brick Slab", "block.tfmg.small_bauxite_brick_stairs": "Small Bauxite Brick Stairs", "block.tfmg.small_bauxite_brick_wall": "Small Bauxite Brick Wall", @@ -118,17 +126,18 @@ "create.goggles.misc.dot_one": ".", "create.goggles.misc.dot_two": "..", "create.goggles.misc.dot_three": "...", + "create.goggles.fluid_in_tank": "Fluid In Tank:", "create.goggles.surface_scanner.no_rotation": "No Rotation Provided", "create.goggles.surface_scanner.no_deposit": "No Deposit Found", "create.goggles.surface_scanner.deposit_found": "Found Deposit", "create.goggles.surface_scanner.distance": "Distance: %1$s Blocks", "create.goggles.surface_scanner.scanning_surface": "Scanning Surface", + "create.goggles.distillation_tower.status": "Distillation Tower Info:", "create.goggles.distillation_tower.tank_not_found": "Steel Fluid Tank Not Found", + "create.goggles.distillation_tower.not_tall_enough": "Distillation Tower is Not Tall Enough", "create.goggles.distillation_tower.level": "Distillation Tower Level: %1$s", "create.goggles.distillation_tower.found_outputs": "Found Outputs: %1$s", "create.goggles.distillation_tower.no_outputs": "No Output Blocks Found", - "create.goggles.distillation_tower.status": "Distillation Tower Info:", - "create.goggles.fluid_in_tank": "Fluid In Tank:", "_": "->------------------------] UI & Messages [------------------------<-", diff --git a/src/generated/resources/assets/tfmg/models/block/blast_furnace_output.json b/src/generated/resources/assets/tfmg/models/block/blast_furnace_output.json new file mode 100644 index 00000000..6716612e --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/blast_furnace_output.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "tfmg:block/blast_furnace_output" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_post.json b/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_post.json new file mode 100644 index 00000000..60935256 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "tfmg:block/fireproof_brick_reinforcement" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side.json b/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side.json new file mode 100644 index 00000000..4894a792 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "tfmg:block/fireproof_brick_reinforcement" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side_tall.json b/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side_tall.json new file mode 100644 index 00000000..e4e5b67c --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/fireproof_brick_reinforcement_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "tfmg:block/fireproof_brick_reinforcement" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/fireproof_bricks.json b/src/generated/resources/assets/tfmg/models/block/fireproof_bricks.json new file mode 100644 index 00000000..3879b13b --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/fireproof_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "tfmg:block/fireproof_bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/industrial_pipe.json b/src/generated/resources/assets/tfmg/models/block/industrial_pipe.json new file mode 100644 index 00000000..4c1a1a8a --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/industrial_pipe.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "tfmg:block/industrial_pipe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/machine_input.json b/src/generated/resources/assets/tfmg/models/block/machine_input.json new file mode 100644 index 00000000..36e0115c --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/machine_input.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "tfmg:block/machine_input" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/pumpjack_base.json b/src/generated/resources/assets/tfmg/models/block/pumpjack_base.json new file mode 100644 index 00000000..7ad6d2ee --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/pumpjack_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "tfmg:block/pumpjack_base" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/pumpjack_crank.json b/src/generated/resources/assets/tfmg/models/block/pumpjack_crank.json new file mode 100644 index 00000000..11f113c4 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/pumpjack_crank.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "tfmg:block/pumpjack_crank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/block/pumpjack_hammer_holder.json b/src/generated/resources/assets/tfmg/models/block/pumpjack_hammer_holder.json new file mode 100644 index 00000000..b14ef3ef --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/block/pumpjack_hammer_holder.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "tfmg:block/pumpjack_hammer_holder" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/blast_furnace_output.json b/src/generated/resources/assets/tfmg/models/item/blast_furnace_output.json new file mode 100644 index 00000000..a17ee0c0 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/blast_furnace_output.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/blast_furnace_output" +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/fireproof_brick_reinforcement.json b/src/generated/resources/assets/tfmg/models/item/fireproof_brick_reinforcement.json new file mode 100644 index 00000000..2e57ea70 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/fireproof_brick_reinforcement.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/fireproof_brick_reinforcement" +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/fireproof_bricks.json b/src/generated/resources/assets/tfmg/models/item/fireproof_bricks.json new file mode 100644 index 00000000..37612526 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/fireproof_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/fireproof_bricks" +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/industrial_pipe.json b/src/generated/resources/assets/tfmg/models/item/industrial_pipe.json new file mode 100644 index 00000000..5a89f6c1 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/industrial_pipe.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/industrial_pipe" +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/machine_input.json b/src/generated/resources/assets/tfmg/models/item/machine_input.json new file mode 100644 index 00000000..d4beafbe --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/machine_input.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/machine_input" +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/pumpjack_base.json b/src/generated/resources/assets/tfmg/models/item/pumpjack_base.json new file mode 100644 index 00000000..f165d742 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/pumpjack_base.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/pumpjack_base" +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/pumpjack_crank.json b/src/generated/resources/assets/tfmg/models/item/pumpjack_crank.json new file mode 100644 index 00000000..d8221ba0 --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/pumpjack_crank.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/pumpjack_crank" +} \ No newline at end of file diff --git a/src/generated/resources/assets/tfmg/models/item/pumpjack_hammer_holder.json b/src/generated/resources/assets/tfmg/models/item/pumpjack_hammer_holder.json new file mode 100644 index 00000000..89d4579a --- /dev/null +++ b/src/generated/resources/assets/tfmg/models/item/pumpjack_hammer_holder.json @@ -0,0 +1,3 @@ +{ + "parent": "tfmg:block/pumpjack_hammer_holder" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json index a5260c83..d52e23ac 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -5,6 +5,8 @@ "tfmg:formwork_block", "tfmg:copper_encased_steel_pipe", "tfmg:cast_iron_distillation_output", - "tfmg:steel_distillation_output" + "tfmg:steel_distillation_output", + "tfmg:machine_input", + "tfmg:pumpjack_crank" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 966401a4..a3d35055 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -14,6 +14,12 @@ "tfmg:steel_fluid_tank", "tfmg:cast_iron_distillation_output", "tfmg:steel_distillation_output", + "tfmg:industrial_pipe", + "tfmg:machine_input", + "tfmg:pumpjack_crank", + "tfmg:fireproof_bricks", + "tfmg:fireproof_brick_reinforcement", + "tfmg:blast_furnace_output", "tfmg:steel_block", "tfmg:cast_iron_block", "tfmg:aluminum_block", diff --git a/src/generated/resources/data/minecraft/tags/blocks/walls.json b/src/generated/resources/data/minecraft/tags/blocks/walls.json index 00c29213..7683b5a0 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/walls.json +++ b/src/generated/resources/data/minecraft/tags/blocks/walls.json @@ -1,5 +1,6 @@ { "values": [ + "tfmg:fireproof_brick_reinforcement", "tfmg:cut_bauxite_wall", "tfmg:polished_cut_bauxite_wall", "tfmg:cut_bauxite_brick_wall", diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/blast_furnace_output.json b/src/generated/resources/data/tfmg/loot_tables/blocks/blast_furnace_output.json new file mode 100644 index 00000000..7871057e --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/blast_furnace_output.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:blast_furnace_output" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_brick_reinforcement.json b/src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_brick_reinforcement.json new file mode 100644 index 00000000..6079f682 --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_brick_reinforcement.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:fireproof_brick_reinforcement" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_bricks.json b/src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_bricks.json new file mode 100644 index 00000000..258e3d86 --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/fireproof_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:fireproof_bricks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/industrial_pipe.json b/src/generated/resources/data/tfmg/loot_tables/blocks/industrial_pipe.json new file mode 100644 index 00000000..33676dd0 --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/industrial_pipe.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:industrial_pipe" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/machine_input.json b/src/generated/resources/data/tfmg/loot_tables/blocks/machine_input.json new file mode 100644 index 00000000..89a608dd --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/machine_input.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:machine_input" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_base.json b/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_base.json new file mode 100644 index 00000000..eca2b4de --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_base.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:pumpjack_base" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_crank.json b/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_crank.json new file mode 100644 index 00000000..23d0e101 --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_crank.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:pumpjack_crank" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_hammer_holder.json b/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_hammer_holder.json new file mode 100644 index 00000000..1f0e1e0e --- /dev/null +++ b/src/generated/resources/data/tfmg/loot_tables/blocks/pumpjack_hammer_holder.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "tfmg:pumpjack_hammer_holder" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/drmangotea/tfmg/base/TFMGVanillaBlockStates.java b/src/main/java/com/drmangotea/tfmg/base/TFMGVanillaBlockStates.java new file mode 100644 index 00000000..03207167 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/base/TFMGVanillaBlockStates.java @@ -0,0 +1,18 @@ +package com.drmangotea.tfmg.base; + +import com.drmangotea.tfmg.CreateTFMG; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.providers.RegistrateBlockstateProvider; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.WallBlock; + +public class TFMGVanillaBlockStates { + + public static void generateWallBlockState(DataGenContext ctx, RegistrateBlockstateProvider prov, + String name) { + prov.wallBlock(ctx.get(), name, CreateTFMG.asResource("block/"+name)); + } + + +} diff --git a/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPartial.java b/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPartial.java index d0de527a..09a4c7b1 100644 --- a/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPartial.java +++ b/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPartial.java @@ -47,7 +47,7 @@ public abstract class TFMGPaletteBlockPartial { private String name; - private TFMGPaletteBlockPartial(String name) { + protected TFMGPaletteBlockPartial(String name) { this.name = name; } @@ -216,7 +216,7 @@ public abstract class TFMGPaletteBlockPartial { } - private static class Wall extends TFMGPaletteBlockPartial { + public static class Wall extends TFMGPaletteBlockPartial { public Wall() { super("wall"); diff --git a/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPattern.java b/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPattern.java index 65c1513f..e79c64ea 100644 --- a/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPattern.java +++ b/src/main/java/com/drmangotea/tfmg/base/palettes/TFMGPaletteBlockPattern.java @@ -201,7 +201,7 @@ public class TFMGPaletteBlockPattern { // Utility - protected String createName(String variant) { + public String createName(String variant) { if (nameType == WRAP) { String[] split = id.split("_"); if (split.length == 2) { diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationControllerBlockEntity.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationControllerBlockEntity.java index 35879487..172e6ee0 100644 --- a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationControllerBlockEntity.java +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationControllerBlockEntity.java @@ -192,7 +192,7 @@ public class DistillationControllerBlockEntity extends DistilleryControllerBlock for(int i = 0; i <5;i++){ if( level.getBlockState(checkedPos).is(TFMGBlocks.STEEL_DISTILLATION_OUTPUT.get())&& - level.getBlockState(checkedPos.below()).is(TFMGBlocks.ALUMINUM_BLOCK.get()) + level.getBlockState(checkedPos.below()).is(TFMGBlocks.INDUSTRIAL_PIPE.get()) ){ outputCount++; checkedPos = checkedPos.above(2); diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationOutputBlockEntity.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationOutputBlockEntity.java index b106eb7a..162855fe 100644 --- a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationOutputBlockEntity.java +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/distillation/distillation_tower/DistillationOutputBlockEntity.java @@ -380,7 +380,7 @@ if(!(((AdvancedDistillationRecipe) currentRecipe).getThirdItemResult().isEmpty() for(int i = 0;i<(outputAmount-1);i++){ checkedBlock = level.getBlockState(checkedPos).getBlock(); - if(checkedBlock == TFMGBlocks.ALUMINUM_BLOCK.get()){ + if(checkedBlock == TFMGBlocks.INDUSTRIAL_PIPE.get()){ checkedPos=checkedPos.above(2); continue; } diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlock.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlock.java new file mode 100644 index 00000000..6d222786 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlock.java @@ -0,0 +1,72 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.base; + + +import com.drmangotea.tfmg.registry.TFMGBlockEntities; +import com.drmangotea.tfmg.registry.TFMGShapes; +import com.simibubi.create.content.equipment.wrench.IWrenchable; +import com.simibubi.create.foundation.block.IBE; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class PumpjackBaseBlock extends HorizontalDirectionalBlock implements IWrenchable, IBE { + + + + + public PumpjackBaseBlock(Properties p_i48440_1_) { + super(p_i48440_1_); + + } + @Override + public VoxelShape getShape(BlockState pState, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + + return TFMGShapes.PUMPJACK_BASE; + } + public BlockState rotate(BlockState p_54540_, Rotation p_54541_) { + return p_54540_.setValue(FACING, p_54541_.rotate(p_54540_.getValue(FACING))); + } + + public BlockState mirror(BlockState p_54537_, Mirror p_54538_) { + return p_54537_.rotate(p_54538_.getRotation(p_54537_.getValue(FACING))); + } + + protected void createBlockStateDefinition(StateDefinition.Builder p_54543_) { + p_54543_.add(FACING); + } + + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) { + + + world.removeBlockEntity(pos); + } + + + @Override + public Class getBlockEntityClass() { + return PumpjackBaseBlockEntity.class; + } + + @Override + public BlockEntityType getBlockEntityType() { + return TFMGBlockEntities.PUMPJACK_BASE.get(); + } + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlockEntity.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlockEntity.java new file mode 100644 index 00000000..92886322 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseBlockEntity.java @@ -0,0 +1,374 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.base; + + +import com.drmangotea.tfmg.content.deposits.FluidDepositBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank.PumpjackCrankBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputBlockEntity; +import com.drmangotea.tfmg.registry.TFMGBlocks; +import com.drmangotea.tfmg.registry.TFMGFluids; +import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.simibubi.create.foundation.fluid.SmartFluidTank; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.LangBuilder; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +import static net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING; + +public class PumpjackBaseBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation { + + public BlockPos crankPos = this.getBlockPos(); + + protected LazyOptional fluidCapability; + public FluidTank tankInventory; + public FluidDepositBlockEntity deposit; + public Direction direction = this.getBlockState().getValue(FACING).getOpposite(); + int debugCounter = 0; + public int miningRate = 0; + int depositCheckTimer = 0; + + private static final int SYNC_RATE = 8; + protected int syncCooldown; + protected boolean queuedSync; + + + public PumpjackBaseBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + tankInventory = createInventory(); + fluidCapability = LazyOptional.of(() -> tankInventory); + + refreshCapability(); + } + + + @Override + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { + Lang.translate("goggles.pumpjack_info") + .forGoggles(tooltip); + if (!isComplete()) { + Lang.translate("goggles.pumpjack.part_missing") + .style(ChatFormatting.DARK_RED) + .forGoggles(tooltip); + if(isWronglyRotated()){ + Lang.translate("goggles.pumpjack.wrong_rotation1") + .style(ChatFormatting.GOLD) + .forGoggles(tooltip); + Lang.translate("goggles.pumpjack.wrong_rotation2") + .style(ChatFormatting.GOLD) + .forGoggles(tooltip); + } + return true; + } + + + LangBuilder mb = Lang.translate("generic.unit.millibuckets"); + + + Lang.translate("goggles.pumpjack.deposit_info") + .style(ChatFormatting.GRAY) + .forGoggles(tooltip); + + + if (!(deposit == null || deposit.fluidAmount == 0)) { + Lang.translate("goggles.pumpjack.fluid_amount") + .style(ChatFormatting.DARK_GRAY) + .add( + Lang.translate("pumpjack_deposit_amount", this.deposit.baseFluidAmount) + .style(ChatFormatting.BLUE) + // .add(mb)) + ).forGoggles(tooltip, 1); + + + } else { + + Lang.translate("goggles.zero") + .style(ChatFormatting.DARK_RED) + .forGoggles(tooltip, 1); + } + + + return true; + + + } + + + public void process() { + if (deposit == null || deposit.fluidAmount == 0) + return; + + if (tankInventory.getFluidAmount() + miningRate > 1000) + return; + + deposit.fluidAmount -= miningRate; + tankInventory.setFluid(new FluidStack(deposit.getDepositFluid(), tankInventory.getFluidAmount() + miningRate)); + } + + public boolean hasPipe() { + + for (int i = -62; i != getBlockPos().getY(); i++) { + BlockPos pos = new BlockPos(getBlockPos().getX(), i, getBlockPos().getZ()); + if (!(level.getBlockState(pos).is(TFMGBlocks.INDUSTRIAL_PIPE.get()))) + return false; + } + + return true; + + } + + public void findDeposit() { + for (int i = 0; i < this.getBlockPos().getY() + 64; i++) { + debugCounter = this.getBlockPos().getY() - i; + BlockPos checkedPos = new BlockPos(this.getBlockPos().getX(), (this.getBlockPos().getY() - 1) - i, this.getBlockPos().getZ()); + + if (level.getBlockState(new BlockPos(checkedPos)).is(TFMGBlocks.OIL_DEPOSIT.get())) { + deposit = (FluidDepositBlockEntity) level.getBlockEntity(checkedPos); + return; + } + + if (!(level.getBlockState(new BlockPos(checkedPos)).is(TFMGBlocks.INDUSTRIAL_PIPE.get()))) { + deposit = null; + return; + } + + + } + debugCounter = 0; + deposit = null; + return; + + /* + if(!hasPipe()) { + deposit = null; + return; + } + + if(level.getBlockEntity(new BlockPos(getBlockPos().getX(),-63,getBlockPos().getZ())) instanceof FluidDepositTileEntity) { + deposit = (FluidDepositTileEntity) (level.getBlockEntity(new BlockPos(getBlockPos().getX(),-64,getBlockPos().getZ()))); + }else { + deposit=null; + } + + */ + } + + protected SmartFluidTank createInventory() { + return new SmartFluidTank(1000, this::onFluidStackChanged) { + @Override + public boolean isFluidValid(FluidStack stack) { + return stack.getFluid().isSame(TFMGFluids.CRUDE_OIL.getSource()); + } + }; + } + + protected void onFluidStackChanged(FluidStack newFluidStack) { + } + + @Override + public void tick() { + super.tick(); + if (!isComplete()) + return; + + + MachineInputBlockEntity input = null; + if (level.getBlockEntity(crankPos.below()) instanceof MachineInputBlockEntity) + input = (MachineInputBlockEntity) level.getBlockEntity(crankPos.below()); + if (input == null) + return; + miningRate = input.powerLevel * 12; + + + depositCheckTimer++; + if (depositCheckTimer > 50) { + depositCheckTimer = 0; + findDeposit(); + + } + + + direction = this.getBlockState().getValue(FACING).getOpposite(); + + process(); + if (syncCooldown > 0) { + syncCooldown--; + if (syncCooldown == 0 && queuedSync) + sendData(); + } + + + } + + + @Override + public void initialize() { + super.initialize(); + sendData(); + if (level.isClientSide) + invalidateRenderBoundingBox(); + } + + + @Override + public void sendData() { + if (syncCooldown > 0) { + queuedSync = true; + return; + } + super.sendData(); + queuedSync = false; + syncCooldown = SYNC_RATE; + } + + + private void refreshCapability() { + LazyOptional oldCap = fluidCapability; + fluidCapability = LazyOptional.of(() -> handlerForCapability()); + oldCap.invalidate(); + } + + private IFluidHandler handlerForCapability() { + + return tankInventory; + } + + + @Override + protected void read(CompoundTag compound, boolean clientPacket) { + super.read(compound, clientPacket); + + tankInventory.setCapacity(1000); + tankInventory.readFromNBT(compound.getCompound("TankContent")); + } + + + @Override + public void write(CompoundTag compound, boolean clientPacket) { + + compound.put("TankContent", tankInventory.writeToNBT(new CompoundTag())); + super.write(compound, clientPacket); + + + } + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + if (!fluidCapability.isPresent()) + refreshCapability(); + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return fluidCapability.cast(); + return super.getCapability(cap, side); + } + + + @Override + public void addBehaviours(List behaviours) { + + } + + public IFluidTank getTankInventory() { + return tankInventory; + } + + public boolean isComplete() { + BlockPos hammerPos = this.getBlockPos(); + crankPos = this.getBlockPos(); + if (direction == Direction.WEST) { + hammerPos = new BlockPos(this.getBlockPos().west(2).above(2)); + crankPos = new BlockPos(this.getBlockPos().west(4).above(1)); + } + if (direction == Direction.EAST) { + hammerPos = new BlockPos(this.getBlockPos().east(2).above(2)); + crankPos = new BlockPos(this.getBlockPos().east(4).above(1)); + } + if (direction == Direction.NORTH) { + hammerPos = new BlockPos(this.getBlockPos().north(2).above(2)); + crankPos = new BlockPos(this.getBlockPos().north(4).above(1)); + } + if (direction == Direction.SOUTH) { + hammerPos = new BlockPos(this.getBlockPos().south(2).above(2)); + crankPos = new BlockPos(this.getBlockPos().south(4).above(1)); + } + + + if (!(level.getBlockEntity(hammerPos) instanceof PumpjackHammerHolderBlockEntity && + level.getBlockEntity(crankPos) instanceof PumpjackCrankBlockEntity)) { + return false; + } + //MachineInputTileEntity input = (MachineInputTileEntity) level.getBlockEntity(crankPos.below()); + // if(input.powerLevel==0) + // return false; + + + if (level.getBlockEntity(hammerPos).getBlockState().getValue(FACING).getOpposite() == direction + && level.getBlockEntity(crankPos).getBlockState().getValue(FACING).getOpposite() == direction + ) + return true; + + return false; + + } + + public boolean isWronglyRotated() { + if (isComplete()) + return false; + + + BlockPos hammerPos1 = this.getBlockPos(); + BlockPos hammerPos2 = this.getBlockPos(); + BlockPos hammerPos3 = this.getBlockPos(); + crankPos = this.getBlockPos(); + if (direction == Direction.WEST) { + hammerPos1 = new BlockPos(this.getBlockPos().east(2).above(2)); + hammerPos2 = new BlockPos(this.getBlockPos().north(2).above(2)); + hammerPos3 = new BlockPos(this.getBlockPos().south(2).above(2)); + } + if (direction == Direction.EAST) { + hammerPos1 = new BlockPos(this.getBlockPos().west(2).above(2)); + hammerPos2 = new BlockPos(this.getBlockPos().north(2).above(2)); + hammerPos3 = new BlockPos(this.getBlockPos().south(2).above(2)); + } + if (direction == Direction.NORTH) { + hammerPos1 = new BlockPos(this.getBlockPos().south(2).above(2)); + hammerPos2 = new BlockPos(this.getBlockPos().west(2).above(2)); + hammerPos3 = new BlockPos(this.getBlockPos().east(2).above(2)); + } + if (direction == Direction.SOUTH) { + hammerPos1 = new BlockPos(this.getBlockPos().north(2).above(2)); + hammerPos2 = new BlockPos(this.getBlockPos().east(2).above(2)); + hammerPos3 = new BlockPos(this.getBlockPos().west(2).above(2)); + } + + + BlockState hammer1 = level.getBlockState(hammerPos1); + BlockState hammer2 = level.getBlockState(hammerPos2); + BlockState hammer3 = level.getBlockState(hammerPos3); + + + return hammer1.is(TFMGBlocks.PUMPJACK_HAMMER_HOLDER.get())|| + hammer2.is(TFMGBlocks.PUMPJACK_HAMMER_HOLDER.get())|| + hammer3.is(TFMGBlocks.PUMPJACK_HAMMER_HOLDER.get()); + + + } +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseRenderer.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseRenderer.java new file mode 100644 index 00000000..aca8fd9c --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/base/PumpjackBaseRenderer.java @@ -0,0 +1,50 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.base; + + +import com.drmangotea.tfmg.registry.TFMGPartialModels; +import com.jozufozu.flywheel.util.transform.TransformStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; +import com.simibubi.create.foundation.render.CachedBufferer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.world.level.block.state.BlockState; + +public class PumpjackBaseRenderer extends SafeBlockEntityRenderer { + + public PumpjackBaseRenderer(BlockEntityRendererProvider.Context context) {} + + @Override + protected void renderSafe(PumpjackBaseBlockEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, + int light, int overlay) { + BlockState blockState = te.getBlockState(); + VertexConsumer vb = buffer.getBuffer(RenderType.solid()); + ms.pushPose(); + TransformStack msr = TransformStack.cast(ms); + msr.translate(1 / 2f, 0.5, 1 / 2f); + float dialPivot = 5.75f / 16; + if(te.isComplete()) { + + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_FRONT_ROPE, blockState) + // .rotateY(d.toYRot()) + .unCentre() + .translateY(1) + .light(light) + .renderInto(ms, vb); + } + + + + ms.popPose(); + + } + + + @Override + public boolean shouldRenderOffScreen(PumpjackBaseBlockEntity te) { + return false; + } + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlock.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlock.java new file mode 100644 index 00000000..480b5d78 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlock.java @@ -0,0 +1,48 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank; + + +import com.drmangotea.tfmg.registry.TFMGBlockEntities; +import com.drmangotea.tfmg.registry.TFMGShapes; +import com.simibubi.create.content.equipment.wrench.IWrenchable; +import com.simibubi.create.foundation.block.IBE; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class PumpjackCrankBlock extends HorizontalDirectionalBlock implements IBE, IWrenchable { + public PumpjackCrankBlock(Properties p_54120_) { + super(p_54120_); + } + + public BlockState getStateForPlacement(BlockPlaceContext p_54779_) { + return this.defaultBlockState().setValue(FACING, p_54779_.getHorizontalDirection()); + } + @Override + public VoxelShape getShape(BlockState state, BlockGetter p_220053_2_, BlockPos p_220053_3_, + CollisionContext p_220053_4_) { + return TFMGShapes.PUMPJACK_CRANK; + } + @Override + public Class getBlockEntityClass() { + return PumpjackCrankBlockEntity.class; + } + @Override + public RenderShape getRenderShape(BlockState pState) { + return RenderShape.ENTITYBLOCK_ANIMATED; + } + @Override + public BlockEntityType getBlockEntityType() { + return TFMGBlockEntities.PUMPJACK_CRANK.get(); + } + protected void createBlockStateDefinition(StateDefinition.Builder p_54794_) { + p_54794_.add(FACING); + } +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlockEntity.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlockEntity.java new file mode 100644 index 00000000..e80468ab --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankBlockEntity.java @@ -0,0 +1,122 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank; + + +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputBlockEntity; +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +import static net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING; + +public class PumpjackCrankBlockEntity extends KineticBlockEntity { + float targetSpeed; + + + public float angle=0; + public Direction direction; + public BlockPos hammerPos; + + + public PumpjackCrankBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + angle=177; + if(direction==Direction.NORTH) + hammerPos =this.getBlockPos().north(2).above(); + if(direction==Direction.SOUTH) + hammerPos =this.getBlockPos().south(2).above(); + if(direction==Direction.WEST) + hammerPos =this.getBlockPos().west(2).above(); + if(direction==Direction.EAST) + hammerPos =this.getBlockPos().east(2).above(); + } + + + @Override + public void write(CompoundTag compound, boolean clientPacket) { + super.write(compound, clientPacket); + if (clientPacket) { + compound.putFloat("Angle", angle); + } + } + + @Override + protected void read(CompoundTag compound, boolean clientPacket) { + super.read(compound, clientPacket); + if (clientPacket) { + + angle = compound.getFloat("Angle"); + } + } + + @Override + public void tick() { + super.tick(); + + + direction = this.getBlockState().getValue(FACING); + + if (!level.isClientSide) + return; + + + if(direction==Direction.NORTH) + hammerPos =this.getBlockPos().north(2).above(); + if(direction==Direction.SOUTH) + hammerPos =this.getBlockPos().south(2).above(); + if(direction==Direction.WEST) + hammerPos =this.getBlockPos().west(2).above(); + if(direction==Direction.EAST) + hammerPos =this.getBlockPos().east(2).above(); + + + if(!isValid()) { + angle = 177; + return; + } + + if(level.getBlockEntity(this.getBlockPos().below())instanceof MachineInputBlockEntity) { + if(((MachineInputBlockEntity)level.getBlockEntity(this.getBlockPos().below())).powerLevel!=0) { + angle += 3; + }else angle=177; + }else + angle=177; + + + + targetSpeed= 10; + + + + angle%=360; + + } + + public boolean isValid(){ + if(hammerPos==null) + return false; + + if(!(level.getBlockEntity(hammerPos) instanceof PumpjackHammerHolderBlockEntity)) + return false; + if(!(direction==level.getBlockEntity(hammerPos).getBlockState().getValue(FACING))) + return false; + + return true; + } +/* + private void moveConnectionPos() { + connectionPos = new BlockPos(this.getBlockPos().getX()+0.5f,this.getBlockPos().getY()+0.25f,this.getBlockPos().getZ()+0.5f); + + float y=0.8f; + float x=0.8f; + // connectionPos. + + + + } + + */ +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankInstance.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankInstance.java new file mode 100644 index 00000000..ad2afdb1 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankInstance.java @@ -0,0 +1,112 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank; + + +import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.instance.DynamicInstance; +import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.util.transform.TransformStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.foundation.utility.AngleHelper; +import net.minecraft.core.Direction; + + +public class PumpjackCrankInstance extends KineticBlockEntityInstance implements DynamicInstance { + + + protected final ModelData hammer; + protected float lastAngle = Float.NaN; + static float originOffset = 1 / 16f; + + public PumpjackCrankInstance(MaterialManager modelManager, PumpjackCrankBlockEntity tile) { + super(modelManager, tile); + + + hammer = getTransformMaterial().getModel(blockState) + .createInstance(); + + animate(tile.angle); + + + } + + @Override + public void beginFrame() { + + + + float angle = blockEntity.angle; + + + animate(angle); + + lastAngle = angle; + } + + private void animate(float angle) { + PoseStack ms = new PoseStack(); + TransformStack msr = TransformStack.cast(ms); + + msr.translate(getInstancePosition()); + + + + // msr.centre() + // .rotateCentered(Direction.EAST, AngleHelper.rad(angle)) + // .unCentre(); + if(blockEntity.direction==Direction.EAST) { + msr.translateY(-0.5); + msr + .centre() + .translate(0, .25, 0) + .rotate(Direction.SOUTH, AngleHelper.rad(angle)) + .translateBack(0, -.25, 0) + .unCentre(); + } + if(blockEntity.direction==Direction.WEST) { + msr.translateY(-0.5); + msr + .centre() + .translate(0, .25, 0) + .rotate(Direction.NORTH, AngleHelper.rad(angle)) + .translateBack(0, -.25, 0) + .unCentre(); + } + if(blockEntity.direction==Direction.NORTH) { + msr.translateY(-0.5); + msr + .centre() + .translate(0, .25, 0) + .rotate(Direction.EAST, AngleHelper.rad(angle)) + .translateBack(0, -.25, 0) + .unCentre(); + } + if(blockEntity.direction==Direction.SOUTH) { + msr.translateY(-0.5); + msr + .centre() + .translate(0, .25, 0) + .rotate(Direction.WEST, AngleHelper.rad(angle)) + .translateBack(0, -.25, 0) + .unCentre(); + } + + + + + hammer.setTransform(ms); + } + + + + @Override + public void updateLight() { + relight(pos, hammer); + } + + @Override + public void remove() { + hammer.delete(); + } + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankRenderer.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankRenderer.java new file mode 100644 index 00000000..866af0f8 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/crank/PumpjackCrankRenderer.java @@ -0,0 +1,178 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank; + + + +import com.drmangotea.tfmg.registry.TFMGPartialModels; +import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.util.transform.TransformStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.utility.AngleHelper; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; + +public class PumpjackCrankRenderer extends KineticBlockEntityRenderer { + + public PumpjackCrankRenderer(BlockEntityRendererProvider.Context context) { + super(context); + } + + @Override + protected void renderSafe(KineticBlockEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, + int light, int overlay) { + renderBlock((PumpjackCrankBlockEntity) te, ms, light,buffer); + + + + + + if (Backend.canUseInstancing(te.getLevel())) + return; + + BlockState blockState = te.getBlockState(); + PumpjackCrankBlockEntity wte = (PumpjackCrankBlockEntity) te; + + + + float angle = wte.angle * partialTicks; + + VertexConsumer vb = buffer.getBuffer(RenderType.solid()); + + renderCrank(te, ms, light, blockState, angle, vb); + } + + private void renderCrank(KineticBlockEntity te, PoseStack ms, int light, BlockState blockState, float angle, + VertexConsumer vb) { + + /** + * check + */ + + SuperByteBuffer hammer = CachedBufferer.block(blockState); + //kineticRotationTransform(hammer, te, getRotationAxisOf(te), AngleHelper.rad(angle), light); + hammer.renderInto(ms, vb); + } + private void renderBlock(PumpjackCrankBlockEntity te, PoseStack ms, int light, + MultiBufferSource buffer) { + + BlockState blockState = te.getBlockState(); + VertexConsumer vb = buffer.getBuffer(RenderType.solid()); + ms.pushPose(); + TransformStack msr = TransformStack.cast(ms); + msr.translate(1 / 2f, 0.5, 1 / 2f); + + float dialPivot = 5.75f / 16; + + + if (te.direction == Direction.NORTH){ + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CRANK_BLOCK, blockState) + // .rotateY(d.toYRot()) + .unCentre() + .light(light) + .renderInto(ms, vb); + + if(te.isValid()) { + + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CONNECTOR, blockState) + + .translate(-0.5, -0.75, -0.5) + .centre() + .rotate(Direction.WEST, -AngleHelper.rad(te.angle)) + .unCentre() + .translateY(0.4) + .centre() + .rotate(Direction.WEST, AngleHelper.rad(te.angle)) + .unCentre() + .light(light) + .translateY(0.4) + .renderInto(ms, vb); + } + } + if(te.direction == Direction.EAST) { + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CRANK_BLOCK, blockState) + .rotateY(270) + .unCentre() + .light(light) + .renderInto(ms, vb); + if(te.isValid()) { + + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CONNECTOR, blockState) + .rotateY(270) + .translate(-0.5, -0.75, -0.5) + .centre() + .rotate(Direction.WEST, -AngleHelper.rad(te.angle)) + .unCentre() + .translateY(0.4) + .centre() + .rotate(Direction.WEST, AngleHelper.rad(te.angle)) + .unCentre() + .light(light) + .translateY(0.4) + .renderInto(ms, vb); + } + } + if(te.direction == Direction.SOUTH) { + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CRANK_BLOCK, blockState) + .rotateY(180) + .unCentre() + .light(light) + .renderInto(ms, vb); + + if(te.isValid()) { + + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CONNECTOR, blockState) + .rotateY(180) + .translate(-0.5, -0.75, -0.5) + .centre() + .rotate(Direction.WEST, -AngleHelper.rad(te.angle)) + .unCentre() + .translateY(0.4) + .centre() + .rotate(Direction.WEST, AngleHelper.rad(te.angle)) + .unCentre() + .light(light) + .translateY(0.4) + .renderInto(ms, vb); + } + } + if(te.direction == Direction.WEST) { + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CRANK_BLOCK, blockState) + .rotateY(90) + .unCentre() + .light(light) + .renderInto(ms, vb); + if(te.isValid()) { + + CachedBufferer.partial(TFMGPartialModels.PUMPJACK_CONNECTOR, blockState) + .rotateY(90) + .translate(-0.5, -0.75, -0.5) + .centre() + .rotate(Direction.WEST, -AngleHelper.rad(te.angle)) + .unCentre() + .translateY(0.4) + .centre() + .rotate(Direction.WEST, AngleHelper.rad(te.angle)) + .unCentre() + .light(light) + .translateY(0.4) + .renderInto(ms, vb); + } + } + + + ms.popPose(); + } + + @Override + protected BlockState getRenderedBlockState(KineticBlockEntity te) { + return shaft(getRotationAxisOf(te)); + } + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlock.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlock.java new file mode 100644 index 00000000..11afae5b --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlock.java @@ -0,0 +1,45 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder; + + +import com.drmangotea.tfmg.registry.TFMGBlockEntities; +import com.simibubi.create.foundation.block.IBE; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; + +public class PumpjackHammerHolderBlock extends HorizontalDirectionalBlock implements IBE { + + public PumpjackHammerHolderBlock(Properties properties) { + super(properties); + } + + + + protected void createBlockStateDefinition(StateDefinition.Builder p_54794_) { + p_54794_.add(FACING); + } + public BlockState getStateForPlacement(BlockPlaceContext p_54779_) { + return this.defaultBlockState().setValue(FACING, p_54779_.getHorizontalDirection()); + } + @Override + public RenderShape getRenderShape(BlockState pState) { + return RenderShape.ENTITYBLOCK_ANIMATED; + } + @Override + public Class getBlockEntityClass() { + return PumpjackHammerHolderBlockEntity.class; + } + + @Override + public BlockEntityType getBlockEntityType() { + return TFMGBlockEntities.PUMPJACK_HAMMER_HOLDER.get(); + } + + + + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlockEntity.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlockEntity.java new file mode 100644 index 00000000..76ff2f7a --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderBlockEntity.java @@ -0,0 +1,156 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder; + +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank.PumpjackCrankBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputBlockEntity; +import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; +import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.simibubi.create.foundation.utility.animation.LerpedFloat; +import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; + + +public class PumpjackHammerHolderBlockEntity extends KineticBlockEntity implements IHaveGoggleInformation { + float targetSpeed; + LerpedFloat visualSpeed = LerpedFloat.linear(); + LerpedFloat angle = LerpedFloat.angular(); + float debugMogus = 0.4f; + float speedModifier=0; + public BlockPos crankPos; + public PumpjackCrankBlockEntity crank; + + + public float crankAngle; + public Direction direction = this.getBlockState().getValue(HorizontalDirectionalBlock.FACING);; + public Direction direction2 = this.getBlockState().getValue(HorizontalDirectionalBlock.FACING).getCounterClockWise();; + public PumpjackHammerHolderBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + angle.setValue(14); + + } + + @Override + public void addBehaviours(List behaviours) { + + } + public boolean hasCrank(){ + BlockPos theoreticalPos; + if(direction == Direction.NORTH){ + theoreticalPos = this.getBlockPos().south(2).below(); + if(level.getBlockEntity(theoreticalPos) instanceof PumpjackCrankBlockEntity){ + crankPos = theoreticalPos; + crank = (PumpjackCrankBlockEntity) level.getBlockEntity(crankPos); + return true; + } + } + if(direction == Direction.SOUTH){ + theoreticalPos = this.getBlockPos().north(2).below(); + if(level.getBlockEntity(theoreticalPos) instanceof PumpjackCrankBlockEntity){ + crankPos = theoreticalPos; + crank = (PumpjackCrankBlockEntity) level.getBlockEntity(crankPos); + return true; + } + } + if(direction == Direction.WEST){ + theoreticalPos = this.getBlockPos().east(2).below(); + if(level.getBlockEntity(theoreticalPos) instanceof PumpjackCrankBlockEntity){ + crankPos = theoreticalPos; + crank = (PumpjackCrankBlockEntity) level.getBlockEntity(crankPos); + return true; + } + } + if(direction == Direction.EAST){ + theoreticalPos = this.getBlockPos().west(2).below(); + if(level.getBlockEntity(theoreticalPos) instanceof PumpjackCrankBlockEntity) { + crankPos = theoreticalPos; + crank = (PumpjackCrankBlockEntity) level.getBlockEntity(crankPos); + return true; + } + } + return false; + } + + + @Override + public void tick() { + super.tick(); + direction = this.getBlockState().getValue(HorizontalDirectionalBlock.FACING); + if (!level.isClientSide) + return; + if(!hasCrank()) { + angle.setValue(14); + return; + } + + if(!(level.getBlockEntity(crankPos.below()) instanceof MachineInputBlockEntity)){ + angle.setValue(14); + return; + } + if(((MachineInputBlockEntity) level.getBlockEntity(crankPos.below())).powerLevel==0) { + angle.setValue(14); + return; + } + if(!(crank.isValid())){ + angle.setValue(14); + return; + } + angle.tickChaser(); + + if(angle.getValue()>0){ + speedModifier=(angle.getValue()/25)*-1; + }else + speedModifier=angle.getValue()/25; + + crankAngle=crank.angle; + + //if(crankAngle==90||crankAngle==270) { + // angle.chase(13, 0.125f, Chaser.EXP); + //} + + angle.updateChaseSpeed(.8f+speedModifier); + if(crankAngle==180){ + angle.chase(-14, .8f+speedModifier, Chaser.LINEAR); + + } + + if(crankAngle==0) { + angle.chase(14, .8f+speedModifier, Chaser.LINEAR); + //angle.updateChaseSpeed(angle.getValue()); + } + } + /* + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { + if(hasCrank()){ + Lang.translate("goggles.surface_scanner.no_rotation") + .style(ChatFormatting.GREEN) + .forGoggles(tooltip); + return true; + } + return false; + } + + */ + @Override + public void write(CompoundTag compound, boolean clientPacket) { + super.write(compound, clientPacket); + if (clientPacket) { + compound.putFloat("Angle", angle.getValue()); + } + } + + @Override + protected void read(CompoundTag compound, boolean clientPacket) { + super.read(compound, clientPacket); + if (clientPacket) { + + angle.setValue(compound.getFloat("Angle")); + } + } +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderInstance.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderInstance.java new file mode 100644 index 00000000..7b489b80 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderInstance.java @@ -0,0 +1,85 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder; + + +import com.drmangotea.tfmg.registry.TFMGPartialModels; +import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.instance.DynamicInstance; +import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.util.transform.TransformStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + +public class PumpjackHammerHolderInstance extends KineticBlockEntityInstance implements DynamicInstance { + + + protected final ModelData hammer; + protected final ModelData holder; + protected float lastAngle = Float.NaN; + + public PumpjackHammerHolderInstance(MaterialManager modelManager, PumpjackHammerHolderBlockEntity tile) { + super(modelManager, tile); + + + hammer = getTransformMaterial() + .getModel(TFMGPartialModels.PUMPJACK_HAMMER,blockState,tile.direction) + .createInstance(); + + holder = getTransformMaterial() + .getModel(blockState) + .createInstance(); + + } + + @Override + public void beginFrame() { + + float partialTicks = AnimationTickHolder.getPartialTicks(); + + float speed = blockEntity.visualSpeed.getValue(partialTicks) * 3 / 10f; + float angle = blockEntity.angle.getValue() + speed * partialTicks; + + if (Math.abs(angle - lastAngle) < 0.001) + return; + + animate(angle); + + lastAngle = angle; + } + + private void animate(float angle) { + PoseStack ms = new PoseStack(); + TransformStack msr = TransformStack.cast(ms); + + msr.translate(getInstancePosition()); + msr.centre() + .rotate(blockEntity.direction.getClockWise(), AngleHelper.rad(angle)) + .unCentre(); + PoseStack ms2 = new PoseStack(); + TransformStack msr2 = TransformStack.cast(ms2); + + msr2.translate(getInstancePosition()); + //msr.centre() + // .rotate(blockEntity.direction.getClockWise(), AngleHelper.rad(angle)) + // .unCentre(); + + + hammer.setTransform(ms); + holder.setTransform(ms2); + } + + + + @Override + public void updateLight() { + relight(pos, hammer,holder); + } + + @Override + public void remove() { + hammer.delete(); + holder.delete(); + } + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderRenderer.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderRenderer.java new file mode 100644 index 00000000..bbfe4ee2 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/hammer_holder/PumpjackHammerHolderRenderer.java @@ -0,0 +1,66 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder; + + +import com.drmangotea.tfmg.registry.TFMGPartialModels; +import com.jozufozu.flywheel.backend.Backend; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.SuperByteBuffer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.world.level.block.state.BlockState; + +public class PumpjackHammerHolderRenderer extends KineticBlockEntityRenderer { + + protected float lastAngle = Float.NaN; + public PumpjackHammerHolderRenderer(BlockEntityRendererProvider.Context context) { + super(context); + } + + @Override + protected void renderSafe(PumpjackHammerHolderBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer, + int light, int overlay) { + + // super.renderSafe(te, partialTicks, ms, buffer, light, overlay); + + + if (Backend.canUseInstancing(be.getLevel())) + return; + + BlockState blockState = be.getBlockState(); + PumpjackHammerHolderBlockEntity wte = (PumpjackHammerHolderBlockEntity) be; + + + float speed = be.visualSpeed.getValue(partialTicks) * 3 / 10f; + float angle = be.angle.getValue() + speed * partialTicks; + + if (Math.abs(angle - lastAngle) < 0.001) + return; + VertexConsumer vb = buffer.getBuffer(RenderType.solid()); + renderHammer(be, ms, light, blockState, angle, vb); + + lastAngle = angle; + } + + private void renderHammer(PumpjackHammerHolderBlockEntity be, PoseStack ms, int light, BlockState blockState, float angle, + VertexConsumer vb) { + + + SuperByteBuffer hammer = + CachedBufferer.partialFacing(TFMGPartialModels.PUMPJACK_HAMMER, be.getBlockState(), be.direction); + int lightInFront = LevelRenderer.getLightColor(be.getLevel(), be.getBlockPos().relative(be.direction)); + kineticRotationTransform(hammer, be, be.direction2.getAxis(), angle, lightInFront).renderInto(ms, vb); + + + + + } + + + + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlock.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlock.java new file mode 100644 index 00000000..66401d01 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlock.java @@ -0,0 +1,47 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input; + +import com.drmangotea.tfmg.registry.TFMGBlockEntities; +import com.simibubi.create.content.kinetics.base.DirectionalKineticBlock; +import com.simibubi.create.foundation.block.IBE; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.pathfinder.PathComputationType; + +public class MachineInputBlock extends DirectionalKineticBlock implements IBE { + + + + public MachineInputBlock(Properties properties) { + super(properties); + } + + @Override + public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) { + return face == state.getValue(FACING); + } + + @Override + public Direction.Axis getRotationAxis(BlockState state) { + return state.getValue(FACING).getAxis(); + } + + + @Override + public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) { + return false; + } + + @Override + public Class getBlockEntityClass() { + return MachineInputBlockEntity.class; + } + + @Override + public BlockEntityType getBlockEntityType() { + return TFMGBlockEntities.MACHINE_INPUT.get(); + } +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlockEntity.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlockEntity.java new file mode 100644 index 00000000..68e23603 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputBlockEntity.java @@ -0,0 +1,79 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input; + + +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; +import com.simibubi.create.foundation.utility.Lang; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; + +public class MachineInputBlockEntity extends KineticBlockEntity { + public int powerLevel=0; + public MachineInputBlockEntity(BlockEntityType typeIn, BlockPos pos, BlockState state) { + super(typeIn, pos, state); + } + + @Override + public void tick(){ + super.tick(); + if(stress<80) + powerLevel=0; + if(stress>=80) + powerLevel=1; + if(stress>=160) + powerLevel=2; + if(stress>=320) + powerLevel=3; + if(stress>=512) + powerLevel=4; + + } + + + + public int getPowerLevel(){ + return powerLevel; + } + + @Override + protected void write(CompoundTag compound, boolean clientPacket) { + + compound.putInt("PowerLevel", powerLevel); + super.write(compound, clientPacket); + } + + @Override + protected void read(CompoundTag compound, boolean clientPacket) { + super.read(compound, clientPacket); + powerLevel = compound.getInt("PowerLevel"); + } + + @Override + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { + Lang.translate("goggles.machine_input.info") + .forGoggles(tooltip); + /* + if(powerLevel==0){ + Lang.translate("goggles.machine_input.no_rot") + .style(ChatFormatting.DARK_RED) + .forGoggles(tooltip); + return true; + } + + */ + Lang.translate("goggles.machine_input.power_level") + .style(ChatFormatting.AQUA) + .add(Lang.translate("goggles.number", this.getPowerLevel())) + .forGoggles(tooltip,1); + + + return true; + } + + +} diff --git a/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputRenderer.java b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputRenderer.java new file mode 100644 index 00000000..47e92d90 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/content/machines/oil_processing/pumpjack/machine_input/MachineInputRenderer.java @@ -0,0 +1,25 @@ +package com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input; + +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.SuperByteBuffer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.world.level.block.state.BlockState; + + + public class MachineInputRenderer extends KineticBlockEntityRenderer { + + public MachineInputRenderer(BlockEntityRendererProvider.Context context) { + super(context); + + } + + + @Override + protected SuperByteBuffer getRotatedModel(MachineInputBlockEntity be, BlockState state) { + return CachedBufferer.partialFacing(AllPartialModels.SHAFT_HALF, state, state + .getValue(MachineInputBlock.FACING) + .getOpposite()); + } + } \ No newline at end of file diff --git a/src/main/java/com/drmangotea/tfmg/recipes/jei/AdvancedDistillationCategory.java b/src/main/java/com/drmangotea/tfmg/recipes/jei/AdvancedDistillationCategory.java index 54aa38b2..51606872 100644 --- a/src/main/java/com/drmangotea/tfmg/recipes/jei/AdvancedDistillationCategory.java +++ b/src/main/java/com/drmangotea/tfmg/recipes/jei/AdvancedDistillationCategory.java @@ -4,6 +4,8 @@ package com.drmangotea.tfmg.recipes.jei; import com.drmangotea.tfmg.recipes.distillation.AdvancedDistillationRecipe; +import com.drmangotea.tfmg.recipes.jei.machines.Distillery; +import com.drmangotea.tfmg.registry.TFMGGuiTextures; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.compat.jei.category.CreateRecipeCategory; import com.simibubi.create.foundation.fluid.FluidIngredient; @@ -13,14 +15,13 @@ import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; -import net.minecraft.world.item.ItemStack; import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault public class AdvancedDistillationCategory extends CreateRecipeCategory { - private final AnimatedDistiller distiller = new AnimatedDistiller(); + public AdvancedDistillationCategory(Info info) { super(info); @@ -33,46 +34,54 @@ public class AdvancedDistillationCategory extends CreateRecipeCategory { - private final AnimatedDistiller distiller = new AnimatedDistiller(); + private final Distillery distiller = new Distillery(); public DistillationCategory(Info info) { super(info); diff --git a/src/main/java/com/drmangotea/tfmg/recipes/jei/TFMGJei.java b/src/main/java/com/drmangotea/tfmg/recipes/jei/TFMGJei.java index 839c1066..ffa336f7 100644 --- a/src/main/java/com/drmangotea/tfmg/recipes/jei/TFMGJei.java +++ b/src/main/java/com/drmangotea/tfmg/recipes/jei/TFMGJei.java @@ -66,9 +66,10 @@ public class TFMGJei implements IModPlugin { advancedDistillation = builder(AdvancedDistillationRecipe.class) .addTypedRecipes(TFMGRecipeTypes.ADVANCED_DISTILLATION) - .catalyst(TFMGBlocks.CAST_IRON_DISTILLATION_CONTROLLER::get) - .itemIcon(TFMGFluids.KEROSENE.getBucket().get()) - .emptyBackground(177, 123) + .catalyst(TFMGBlocks.STEEL_DISTILLATION_CONTROLLER::get) + .catalyst(TFMGBlocks.STEEL_DISTILLATION_OUTPUT::get) + .itemIcon(TFMGBlocks.STEEL_DISTILLATION_CONTROLLER.get()) + .emptyBackground(177, 150) .build("advanced_distillation", AdvancedDistillationCategory::new) diff --git a/src/main/java/com/drmangotea/tfmg/recipes/jei/AnimatedDistiller.java b/src/main/java/com/drmangotea/tfmg/recipes/jei/machines/Distillery.java similarity index 97% rename from src/main/java/com/drmangotea/tfmg/recipes/jei/AnimatedDistiller.java rename to src/main/java/com/drmangotea/tfmg/recipes/jei/machines/Distillery.java index 906398af..eb845867 100644 --- a/src/main/java/com/drmangotea/tfmg/recipes/jei/AnimatedDistiller.java +++ b/src/main/java/com/drmangotea/tfmg/recipes/jei/machines/Distillery.java @@ -1,4 +1,4 @@ -package com.drmangotea.tfmg.recipes.jei; +package com.drmangotea.tfmg.recipes.jei.machines; import com.drmangotea.tfmg.registry.TFMGBlocks; @@ -21,11 +21,11 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; import net.minecraft.world.level.block.Blocks; -public class AnimatedDistiller extends AnimatedKinetics { +public class Distillery extends AnimatedKinetics { - public AnimatedDistiller() { + public Distillery() { } diff --git a/src/main/java/com/drmangotea/tfmg/registry/TFMGBlockEntities.java b/src/main/java/com/drmangotea/tfmg/registry/TFMGBlockEntities.java index 6a54c939..d392355a 100644 --- a/src/main/java/com/drmangotea/tfmg/registry/TFMGBlockEntities.java +++ b/src/main/java/com/drmangotea/tfmg/registry/TFMGBlockEntities.java @@ -11,6 +11,16 @@ import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distilla import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower.DistillationOutputBlockEntity; import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillery.DistilleryControllerBlockEntity; import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillery.DistilleryOutputBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.base.PumpjackBaseRenderer; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.base.PumpjackBaseBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank.PumpjackCrankInstance; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank.PumpjackCrankRenderer; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank.PumpjackCrankBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderInstance; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderRenderer; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderBlockEntity; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputRenderer; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputBlockEntity; import com.drmangotea.tfmg.content.machines.pipes.normal.LockablePipeBlockEntity; import com.drmangotea.tfmg.content.machines.tanks.SteelFluidTankRenderer; import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlockEntity; @@ -23,6 +33,7 @@ import com.simibubi.create.content.fluids.pipes.valve.FluidValveRenderer; import com.simibubi.create.content.fluids.pump.PumpBlockEntity; import com.simibubi.create.content.fluids.pump.PumpCogInstance; import com.simibubi.create.content.fluids.pump.PumpRenderer; +import com.simibubi.create.content.kinetics.base.HalfShaftInstance; import com.simibubi.create.content.kinetics.base.HorizontalHalfShaftInstance; import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer; import com.tterrag.registrate.util.entry.BlockEntityEntry; @@ -124,6 +135,33 @@ public class TFMGBlockEntities { .validBlocks(TFMGBlocks.STEEL_DISTILLATION_CONTROLLER) .register(); + public static final BlockEntityEntry PUMPJACK_HAMMER_HOLDER = REGISTRATE + .blockEntity("pumpjack_hammer_holder", PumpjackHammerHolderBlockEntity::new) + .instance(() -> PumpjackHammerHolderInstance::new, false) + .validBlocks(TFMGBlocks.PUMPJACK_HAMMER_HOLDER) + .renderer(() -> PumpjackHammerHolderRenderer::new) + .register(); + + public static final BlockEntityEntry PUMPJACK_CRANK = REGISTRATE + .blockEntity("pumpjack_crank", PumpjackCrankBlockEntity::new) + .instance(() -> PumpjackCrankInstance::new, true) + .validBlocks(TFMGBlocks.PUMPJACK_CRANK) + .renderer(() -> PumpjackCrankRenderer::new) + .register(); + + public static final BlockEntityEntry MACHINE_INPUT = REGISTRATE + .blockEntity("machine_input", MachineInputBlockEntity::new) + .instance(() -> HalfShaftInstance::new,true) + .validBlocks(TFMGBlocks.MACHINE_INPUT) + .renderer(() -> MachineInputRenderer::new) + .register(); + + public static final BlockEntityEntry PUMPJACK_BASE = REGISTRATE + .blockEntity("pumpjack_base", PumpjackBaseBlockEntity::new) + .validBlocks(TFMGBlocks.PUMPJACK_BASE) + .renderer(() -> PumpjackBaseRenderer::new) + .register(); + public static void register() {} } diff --git a/src/main/java/com/drmangotea/tfmg/registry/TFMGBlocks.java b/src/main/java/com/drmangotea/tfmg/registry/TFMGBlocks.java index a5bea9a3..261595b9 100644 --- a/src/main/java/com/drmangotea/tfmg/registry/TFMGBlocks.java +++ b/src/main/java/com/drmangotea/tfmg/registry/TFMGBlocks.java @@ -2,6 +2,7 @@ package com.drmangotea.tfmg.registry; import com.drmangotea.tfmg.base.TFMGBuilderTransformers; import com.drmangotea.tfmg.base.TFMGSpriteShifts; +import com.drmangotea.tfmg.base.TFMGVanillaBlockStates; import com.drmangotea.tfmg.content.concrete.formwork.FormWorkBlock; import com.drmangotea.tfmg.content.concrete.formwork.FormWorkGenerator; import com.drmangotea.tfmg.content.decoration.doors.TFMGSlidingDoorBlock; @@ -14,6 +15,10 @@ import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distilla import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower.DistillationOutputBlock; import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillery.DistilleryControllerBlock; import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillery.DistilleryOutputBlock; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.base.PumpjackBaseBlock; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank.PumpjackCrankBlock; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderBlock; +import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputBlock; import com.drmangotea.tfmg.content.machines.pipes.normal.steel.EncasedSteelPipeBlock; import com.drmangotea.tfmg.content.machines.pipes.normal.steel.GlassSteelPipeBlock; import com.drmangotea.tfmg.content.machines.pipes.normal.steel.SteelPipeAttachmentModel; @@ -43,6 +48,7 @@ import net.minecraft.tags.BlockTags; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.WallBlock; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.material.Material; @@ -272,10 +278,92 @@ public static final BlockEntry STEEL_DISTILLATION_OUTPU .item() .build() .register(); + public static final BlockEntry INDUSTRIAL_PIPE = REGISTRATE.block("industrial_pipe", Block::new) + .initialProperties(() -> Blocks.IRON_BLOCK) + .properties(p -> p.color(MaterialColor.COLOR_LIGHT_GRAY)) + .properties(p -> p.requiresCorrectToolForDrops()) + .transform(pickaxeOnly()) + .item() + .build() + .lang("Industrial Pipe") + .register(); +//////////////// + //Pumpjack + public static final BlockEntry MACHINE_INPUT = + REGISTRATE.block("machine_input", MachineInputBlock::new) + .properties(p -> p.color(MaterialColor.COLOR_GRAY)) + .properties(BlockBehaviour.Properties::noOcclusion) + .properties(p -> p + .strength(4.5F)) + .transform(axeOrPickaxe()) + .transform(BlockStressDefaults.setImpact(4.0)) + .item() + .build() + .register(); + + public static final BlockEntry PUMPJACK_CRANK = + REGISTRATE.block("pumpjack_crank", PumpjackCrankBlock::new) + .properties(p -> p.color(MaterialColor.COLOR_GRAY)) + .properties(p -> p + .strength(4.5F)) + .properties(BlockBehaviour.Properties::noOcclusion) + .transform(axeOrPickaxe()) + .item() + .build() + .register(); + public static final BlockEntry PUMPJACK_BASE = + REGISTRATE.block("pumpjack_base", PumpjackBaseBlock::new) + .initialProperties(SharedProperties::copperMetal) + .properties(BlockBehaviour.Properties::noOcclusion) + .item() + .build() + .register(); + + public static final BlockEntry PUMPJACK_HAMMER_HOLDER = + REGISTRATE.block("pumpjack_hammer_holder", PumpjackHammerHolderBlock::new) + .initialProperties(SharedProperties::copperMetal) + .properties(BlockBehaviour.Properties::noOcclusion) + .item() + .build() + .register(); ////// + //Blast Furnace + + public static final BlockEntry FIREPROOF_BRICKS = REGISTRATE.block("fireproof_bricks", Block::new) + .initialProperties(() -> Blocks.BRICKS) + .properties(p -> p.color(MaterialColor.COLOR_RED)) + .properties(p -> p.requiresCorrectToolForDrops()) + .transform(pickaxeOnly()) + .item() + .build() + .lang("Fireproof Bricks") + .register(); + public static final BlockEntry FIREPROOF_BRICK_REINFORCEMENT = REGISTRATE.block("fireproof_brick_reinforcement", WallBlock::new) + .initialProperties(() -> Blocks.BRICKS) + .properties(p -> p.color(MaterialColor.COLOR_RED)) + .properties(p -> p.requiresCorrectToolForDrops()) + .transform(pickaxeOnly()) + .tag(BlockTags.WALLS) + .blockstate((c, p) -> TFMGVanillaBlockStates.generateWallBlockState(c, p, "fireproof_brick_reinforcement")) + .item() + .build() + .lang("Fireproof Brick Reinforcement") + .register(); + public static final BlockEntry BLAST_FURNACE_OUTPUT = REGISTRATE.block("blast_furnace_output", Block::new) + .initialProperties(() -> Blocks.BRICKS) + .properties(p -> p.color(MaterialColor.COLOR_RED)) + .properties(p -> p.requiresCorrectToolForDrops()) + .transform(pickaxeOnly()) + .item() + .build() + .lang("Blast Furnace Output") + .register(); + + ////////// + diff --git a/src/main/java/com/drmangotea/tfmg/registry/TFMGGuiTextures.java b/src/main/java/com/drmangotea/tfmg/registry/TFMGGuiTextures.java new file mode 100644 index 00000000..09652423 --- /dev/null +++ b/src/main/java/com/drmangotea/tfmg/registry/TFMGGuiTextures.java @@ -0,0 +1,71 @@ +package com.drmangotea.tfmg.registry; + + +import com.drmangotea.tfmg.CreateTFMG; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.gui.UIRenderHelper; +import com.simibubi.create.foundation.gui.element.ScreenElement; +import com.simibubi.create.foundation.utility.Color; + +import net.minecraft.client.gui.GuiComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public enum TFMGGuiTextures implements ScreenElement { + + + // JEI + DISTILLATION_TOWER_TOP("distillation_tower", 0, 0, 44, 12), + DISTILLATION_TOWER_MIDDLE("distillation_tower", 0, 12, 44, 24), + DISTILLATION_TOWER_BOTTOM("distillation_tower", 0, 36, 44, 24), + DISTILLATION_TOWER_FIRE("distillation_tower", 0, 60, 44, 12), + + ; + + + + public final ResourceLocation location; + public int width, height; + public int startX, startY; + + + + private TFMGGuiTextures(String location, int startX, int startY, int width, int height) { + this(CreateTFMG.MOD_ID, location, startX, startY, width, height); + } + + private TFMGGuiTextures(String namespace, String location, int startX, int startY, int width, int height) { + this.location = new ResourceLocation(namespace, "textures/gui/" + location + ".png"); + this.width = width; + this.height = height; + this.startX = startX; + this.startY = startY; + } + + @OnlyIn(Dist.CLIENT) + public void bind() { + RenderSystem.setShaderTexture(0, location); + } + + @OnlyIn(Dist.CLIENT) + @Override + public void render(PoseStack ms, int x, int y) { + bind(); + GuiComponent.blit(ms, x, y, 0, startX, startY, width, height, 256, 256); + } + + @OnlyIn(Dist.CLIENT) + public void render(PoseStack ms, int x, int y, GuiComponent component) { + bind(); + component.blit(ms, x, y, startX, startY, width, height); + } + + @OnlyIn(Dist.CLIENT) + public void render(PoseStack ms, int x, int y, Color c) { + bind(); + UIRenderHelper.drawColoredTexture(ms, c, x, y, startX, startY, width, height); + } + +} diff --git a/src/main/java/com/drmangotea/tfmg/registry/TFMGPartialModels.java b/src/main/java/com/drmangotea/tfmg/registry/TFMGPartialModels.java index e687d189..0f8174dc 100644 --- a/src/main/java/com/drmangotea/tfmg/registry/TFMGPartialModels.java +++ b/src/main/java/com/drmangotea/tfmg/registry/TFMGPartialModels.java @@ -18,6 +18,10 @@ import java.util.Map; public class TFMGPartialModels { public static final PartialModel + PUMPJACK_HAMMER = block("pumpjack/hammer_holder"), + PUMPJACK_FRONT_ROPE = block("pumpjack/pumpjack_front_rope"), + PUMPJACK_CONNECTOR = block("pumpjack/pumpjack_connector"), + PUMPJACK_CRANK_BLOCK = block("pumpjack/pumpjack_crank_block"), TOWER_GAUGE = block("distillation_tower/gauge"), STEEL_FLUID_PIPE_CASING = block("steel_pipe/casing"), SURFACE_SCANNER_DIAL = block("surface_scanner/dial"), diff --git a/src/main/resources/assets/tfmg/models/block/fireproof_brick_reinforcement.json b/src/main/resources/assets/tfmg/models/block/fireproof_brick_reinforcement.json new file mode 100644 index 00000000..ba9e2f8d --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/fireproof_brick_reinforcement.json @@ -0,0 +1,70 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "2": "create:block/smart_pipe_1", + "3": "create:block/smart_pipe_2", + "particle": "create:block/smart_pipe_2" + }, + "elements": [ + { + "from": [4.05, 4.05, 12], + "to": [11.95, 11.95, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 14]}, + "faces": { + "east": {"uv": [6, 3, 10, 11], "texture": "#2"}, + "west": {"uv": [6, 3, 10, 11], "texture": "#2"}, + "up": {"uv": [6, 11, 10, 3], "rotation": 90, "texture": "#2"}, + "down": {"uv": [10, 11, 6, 3], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [3, 3, 3], + "to": [13, 13, 13], + "faces": { + "north": {"uv": [3, 3, 4, 4], "tex ture": "#2"}, + "east": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "south": {"uv": [3, 3, 4, 4], "texture": "#2"}, + "west": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "rotation": 270, "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "rotation": 270, "texture": "#2"} + } + }, + { + "from": [4.05, 4.05, 0], + "to": [11.95, 11.95, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 0]}, + "faces": { + "east": {"uv": [6, 3, 10, 11], "texture": "#2"}, + "west": {"uv": [6, 3, 10, 11], "texture": "#2"}, + "up": {"uv": [6, 11, 10, 3], "rotation": 90, "texture": "#2"}, + "down": {"uv": [10, 11, 6, 3], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [4.5, 5, 7.15], + "to": [11.5, 12, 13.15], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 12, 13]}, + "faces": { + "north": {"uv": [1, 9, 7, 15], "texture": "#3"}, + "east": {"uv": [0, 0, 6, 7], "texture": "#3"}, + "west": {"uv": [0, 0, 6, 7], "rotation": 180, "texture": "#3"}, + "up": {"uv": [0, 0, 6, 7], "rotation": 270, "texture": "#3"}, + "down": {"uv": [0, 0, 6, 7], "rotation": 90, "texture": "#3"} + } + }, + { + "from": [3.9, 4.4, 4.15], + "to": [12.1, 12.6, 7.15], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 12, 13]}, + "faces": { + "north": {"uv": [8, 8, 16, 16], "texture": "#3"}, + "east": {"uv": [13, 0, 16, 8], "texture": "#3"}, + "south": {"uv": [0, 8, 8, 16], "texture": "#3"}, + "west": {"uv": [13, 8, 16, 0], "rotation": 180, "texture": "#3"}, + "up": {"uv": [13, 8, 16, 0], "rotation": 270, "texture": "#3"}, + "down": {"uv": [13, 0, 16, 8], "rotation": 90, "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/hammer.json b/src/main/resources/assets/tfmg/models/block/pumpjack/hammer.json new file mode 100644 index 00000000..55cd84b1 --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/hammer.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "0": "tfmg:block/pumpjack_hammer", + "particle": "tfmg:block/steel_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/hammer_holder.json b/src/main/resources/assets/tfmg/models/block/pumpjack/hammer_holder.json new file mode 100644 index 00000000..c3fd3ced --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/hammer_holder.json @@ -0,0 +1,6 @@ +{ + "parent": "tfmg:block/pumpjack/hammer", + "loader": "forge:obj", + "flip-v": true, + "model": "tfmg:models/block/pumpjack/pumpjack_hammer.obj" +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_base.json b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_base.json new file mode 100644 index 00000000..e8b9b8ef --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_base.json @@ -0,0 +1,34 @@ +{ + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "0": "tfmg:block/pumpjack_base", + "particle": "tfmg:block/pumpjack_base" + }, + "elements": [ + { + "from": [3, 0, 3], + "to": [13, 14, 13], + "faces": { + "north": {"uv": [0, 2, 5, 9], "texture": "#0"}, + "east": {"uv": [0, 2, 5, 9], "texture": "#0"}, + "south": {"uv": [0, 2, 5, 9], "texture": "#0"}, + "west": {"uv": [0, 2, 5, 9], "texture": "#0"}, + "up": {"uv": [10.5, 0, 14, 4], "texture": "#0"}, + "down": {"uv": [0, 11, 5, 16], "texture": "#0"} + } + }, + { + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "east": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "south": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "west": {"uv": [10, 0, 16, 1], "texture": "#0"}, + "up": {"uv": [10, 0, 16, 6], "texture": "#0"}, + "down": {"uv": [10, 0, 16, 6], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_connector.json b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_connector.json new file mode 100644 index 00000000..a5aa3bd5 --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_connector.json @@ -0,0 +1,58 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "tfmg:block/fossilstone", + "1": "tfmg:block/steel_fluid_tank_connected", + "particle": "tfmg:block/fossilstone" + }, + "elements": [ + { + "from": [-3.01, 0, 7], + "to": [-3.01, 14, 9], + "faces": { + "north": {"uv": [0, 0, 0, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 5, 16], "texture": "#0"}, + "south": {"uv": [11, 0, 11, 16], "texture": "#0"}, + "west": {"uv": [6, 0, 7, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 0, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [19.01, 0, 7], + "to": [19.01, 14, 9], + "faces": { + "north": {"uv": [0, 0, 0, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 5, 16], "texture": "#0"}, + "south": {"uv": [11, 0, 11, 16], "texture": "#0"}, + "west": {"uv": [6, 0, 7, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 0, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [-3, 14, 7], + "to": [19, 15, 9], + "faces": { + "north": {"uv": [0, 7, 4, 7.25], "texture": "#1"}, + "east": {"uv": [0, 0, 0.5, 0.25], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 0.25], "texture": "#1"}, + "west": {"uv": [0, 0, 0.5, 0.25], "texture": "#1"}, + "up": {"uv": [0, 11.75, 4, 12.25], "texture": "#1"}, + "down": {"uv": [0, 7.5, 4, 8], "texture": "#1"} + } + }, + { + "from": [7, 15, 7], + "to": [9, 17, 9], + "faces": { + "north": {"uv": [2.5, 4.25, 3, 4.75], "texture": "#1"}, + "east": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "up": {"uv": [0, 11.75, 0.5, 12.25], "texture": "#1"}, + "down": {"uv": [0, 7.5, 0.5, 8], "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank.json b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank.json new file mode 100644 index 00000000..a8daf086 --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank.json @@ -0,0 +1,152 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "tfmg:block/pumpjack_crank", + "particle": "tfmg:block/pumpjack_crank" + }, + "elements": [ + { + "from": [-2, 2, 6], + "to": [18, 6, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"}, + "east": {"uv": [2.5, 12.5, 4.5, 14.5], "texture": "#0"}, + "south": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"}, + "west": {"uv": [2.5, 12.5, 4.5, 14.5], "texture": "#0"}, + "up": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-3, 13, 2], + "to": [0, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11.5, 4, 12], "texture": "#0"}, + "east": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 4, 12], "texture": "#0"}, + "west": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [0.5, 9, 6.5, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 3, 12], "texture": "#0"} + } + }, + { + "from": [-2, 6, 6], + "to": [0, 9, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [-2, 0, 6], + "to": [0, 2, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [2.5, 11.5, 4.5, 12.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [16, 14, 6], + "to": [18, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [2.5, 11, 4.5, 12.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [16, 13, 2], + "to": [19, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [3, 11.5, 4.5, 12], "texture": "#0"}, + "east": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "south": {"uv": [3, 11.5, 4.5, 12], "texture": "#0"}, + "west": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [0.5, 9, 6.5, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 3, 12], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [16, 9, 1], + "to": [19, 13, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "east": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "south": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "west": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "up": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [16, 6, 6], + "to": [18, 9, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [16, 0, 6], + "to": [18, 2, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"}, + "down": {"uv": [2.5, 11.5, 4.5, 12.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-2, 14, 6], + "to": [0, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [2.5, 11, 4.5, 12.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [-3, 9, 1], + "to": [0, 13, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "east": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "south": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "west": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "up": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_block.json b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_block.json new file mode 100644 index 00000000..acf57ca7 --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_block.json @@ -0,0 +1,34 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "tfmg:block/pumpjack_crank", + "1": "tfmg:block/heavy_machinery_casing", + "particle": "tfmg:block/pumpjack_crank" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 4, 8, 8], "texture": "#0"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "south": {"uv": [0, 4, 8, 8], "texture": "#0"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#1"} + } + }, + { + "from": [7, 8.01, 1], + "to": [9, 8.01, 2], + "faces": { + "north": {"uv": [0, 0, 4, 0], "texture": "#missing"}, + "east": {"uv": [0, 0, 2, 0], "texture": "#missing"}, + "south": {"uv": [0, 0, 4, 0], "texture": "#0"}, + "west": {"uv": [0, 0, 2, 0], "texture": "#missing"}, + "up": {"uv": [9.5, 3, 10.5, 3.5], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 2], "texture": "#missing"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_item.json b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_item.json new file mode 100644 index 00000000..0001f349 --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_crank_item.json @@ -0,0 +1,166 @@ +{ + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "0": "tfmg:block/pumpjack_crank", + "1": "tfmg:block/heavy_machinery_casing", + "particle": "tfmg:block/pumpjack_crank" + }, + "elements": [ + { + "from": [-2, 2, 6], + "to": [18, 6, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"}, + "east": {"uv": [2.5, 12.5, 4.5, 14.5], "texture": "#0"}, + "south": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"}, + "west": {"uv": [2.5, 12.5, 4.5, 14.5], "texture": "#0"}, + "up": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8.5, 0, 10.5, 9], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-3, 13, 2], + "to": [0, 14, 14], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11.5, 4, 12], "texture": "#0"}, + "east": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 4, 12], "texture": "#0"}, + "west": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [0.5, 9, 6.5, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 3, 12], "texture": "#0"} + } + }, + { + "from": [-2, 6, 6], + "to": [0, 9, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [-2, 0, 6], + "to": [0, 2, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "texture": "#0"}, + "down": {"uv": [2.5, 11.5, 4.5, 12.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [16, 14, 6], + "to": [18, 16, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [2.5, 11, 4.5, 12.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [16, 13, 2], + "to": [19, 14, 14], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [3, 11.5, 4.5, 12], "texture": "#0"}, + "east": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "south": {"uv": [3, 11.5, 4.5, 12], "texture": "#0"}, + "west": {"uv": [0.5, 8.5, 6.5, 9], "texture": "#0"}, + "up": {"uv": [0.5, 9, 6.5, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 3, 12], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [16, 9, 1], + "to": [19, 13, 15], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "east": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "south": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "west": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "up": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [16, 6, 6], + "to": [18, 9, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 11, 4.5, 12.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [16, 0, 6], + "to": [18, 2, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "south": {"uv": [2.5, 11.5, 3.5, 12.5], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 4], "rotation": 180, "texture": "#0"}, + "down": {"uv": [2.5, 11.5, 4.5, 12.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-2, 14, 6], + "to": [0, 16, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "east": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [2.5, 11, 3.5, 12], "texture": "#0"}, + "west": {"uv": [2.5, 14.5, 4.5, 15.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [2.5, 11, 4.5, 12.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 4], "texture": "#0"} + } + }, + { + "from": [-3, 9, 1], + "to": [0, 13, 15], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "east": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "south": {"uv": [2.5, 9.5, 4, 11.5], "texture": "#0"}, + "west": {"uv": [0, 9, 7, 11], "texture": "#0"}, + "up": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 9, 7, 10.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 4, 8, 8], "texture": "#0"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "south": {"uv": [0, 4, 8, 8], "texture": "#0"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_front_rope.json b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_front_rope.json new file mode 100644 index 00000000..b45c9c05 --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_front_rope.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "tfmg:block/fossilstone", + "particle": "tfmg:block/fossilstone" + }, + "elements": [ + { + "from": [8, 0, 7.5], + "to": [8, 20, 8.5], + "faces": { + "north": {"uv": [6, 0, 6, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 5, 16], "texture": "#0"}, + "south": {"uv": [2, 0, 2, 16], "texture": "#0"}, + "west": {"uv": [12, 0, 13, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 0, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "texture": "#0"} + } + }, + { + "from": [7.5, 0, 8], + "to": [8.5, 20, 8], + "faces": { + "north": {"uv": [6, 0, 7, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 4, 16], "texture": "#0"}, + "south": {"uv": [2, 0, 3, 16], "texture": "#0"}, + "west": {"uv": [12, 0, 12, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.mtl b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.mtl new file mode 100644 index 00000000..62e0a662 --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.mtl @@ -0,0 +1,3 @@ +# Made in Blockbench 4.6.5 +newmtl m_fe4f30a7-7eab-73c8-02da-55eaec181ae2 +map_Kd #0 diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.obj b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.obj new file mode 100644 index 00000000..c327d5cf --- /dev/null +++ b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.obj @@ -0,0 +1,95 @@ +# Made in Blockbench 4.7.4 +mtllib pumpjack_hammer.mtl + +o cube +v 0.8124999999999925 -0.25000000000000255 2.2500000000000018 +v 0.18749999999999256 -0.25000000000000366 2.2499999999999982 +v 0.8124999999999893 -0.25000000000000366 2.8125000000000018 +v 0.18749999999998956 -0.2500000000000048 2.8124999999999982 +v 0.18749999999999023 1.062499999999996 2.250000000000001 +v 0.8124999999999902 1.0624999999999973 2.2500000000000044 +v 0.18749999999998712 1.0624999999999951 2.8125000000000004 +v 0.8124999999999871 1.062499999999996 2.812500000000004 +vt 0.0859375 1 +vt 0.25 1 +vt 0.25 0.921875 +vt 0.0859375 0.921875 +vt 0 0.921875 +vt 0 1 +vt 0.0703125 1 +vt 0.0703125 0.921875 +vt 0.0859375 1 +vt 0.25 1 +vt 0.25 0.921875 +vt 0.0859375 0.921875 +vt 0 0.921875 +vt 0 1 +vt 0.0703125 1 +vt 0.0703125 0.921875 +vt 0 0.9140625 +vt 0.1640625 0.9140625 +vt 0.1640625 0.84375 +vt 0 0.84375 +vt 0 0.9140625 +vt 0.1640625 0.9140625 +vt 0.1640625 0.84375 +vt 0 0.84375 +vn -1 -1.7763568394002404e-15 -5.440092820663271e-15 +vn 1.665334536937746e-15 -1 -1.9984014443252727e-15 +vn 1 1.7763568394002404e-15 5.440092820663271e-15 +vn -1.665334536937746e-15 1 1.9984014443252727e-15 +vn 5.5511151231257795e-15 1.887379141862776e-15 -1 +vn -5.5511151231257795e-15 -1.887379141862776e-15 1 +usemtl m_fe4f30a7-7eab-73c8-02da-55eaec181ae2 +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 +o octagon +v 0.25444173824157956 0.1250000000000231 -2.0625 +v 0.25444173824158034 0.8750000000000231 -2.062499999999994 +v 0.25444173824160066 0.12499999999998579 2.2499999999999982 +v 0.25444173824160143 0.8749999999999858 2.250000000000005 +v 0.7544417382415802 0.8750000000000226 -2.0624999999999964 +v 0.7544417382415796 0.12500000000002265 -2.0625000000000027 +v 0.7544417382416015 0.8749999999999853 2.2500000000000027 +v 0.7544417382416007 0.12499999999998523 2.2499999999999956 +vt 0 0.7734375 +vt 0 0.8359375 +vt 0.5390625 0.8359375 +vt 0.5390625 0.7734375 +vt 0 0.671875 +vt 0 0.765625 +vt 0.5390625 0.765625 +vt 0.5390625 0.671875 +vt 0 0.7734375 +vt 0 0.8359375 +vt 0.5390625 0.8359375 +vt 0.5390625 0.7734375 +vt 0 0.671875 +vt 0 0.765625 +vt 0.5390625 0.765625 +vt 0.5390625 0.671875 +vt 0.171875 0.8515625 +vt 0.171875 0.9140625 +vt 0.265625 0.9140625 +vt 0.265625 0.8515625 +vt 0 1 +vt 0.0625 1 +vt 0.0625 0.9375 +vt 0 0.9375 +vn 1.0106430996149036e-15 1 8.659739592076216e-15 +vn -1 1.010643099614861e-15 4.887165570769081e-15 +vn -1.0106430996149036e-15 -1 -8.659739592076216e-15 +vn 1 -1.010643099614861e-15 -4.887165570769081e-15 +vn -4.887165570769073e-15 8.659739592076226e-15 -1 +vn 4.887165570769073e-15 -8.659739592076226e-15 1 +usemtl m_fe4f30a7-7eab-73c8-02da-55eaec181ae2 +f 12/28/7 15/27/7 13/26/7 10/25/7 +f 11/32/8 12/31/8 10/30/8 9/29/8 +f 16/36/9 11/35/9 9/34/9 14/33/9 +f 15/40/10 16/39/10 14/38/10 13/37/10 +f 14/44/11 9/43/11 10/42/11 13/41/11 +f 15/48/12 12/47/12 11/46/12 16/45/12 \ No newline at end of file diff --git a/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.png b/src/main/resources/assets/tfmg/models/block/pumpjack/pumpjack_hammer.png new file mode 100644 index 0000000000000000000000000000000000000000..45e0c294fa37eb0375cc642e5e109350a54d0647 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}24DbnY1=0--4M6f>&hL#tin%1nFZlm|hU=$zfod5z3p^r=85sBugD~Uq z{1quc!9AWXjv*CsZ?9bBYF1!qyZG$4{THd<;$jCqHXB;qpE~8G;F8RhQ+TdTJ?MM+ z@m=l-iLwj~2V@!MzbXuU#+&_v?fxlC^R;s6&lXIx4lrjnn#IhpLwkXiG5b_sv!_o* zV|QN9vn)!FT(k79b%6;(gFXA4K(XwV&u<5x60|yHEDO8Luq45!jP5ov&2)3$M#2 zF2@fW&)Qx-{*#f(Ctc@=>oSKR$G<1i9cTTXbNn0MmYwg86jUEoZqVPq>pI`{<&Snd z8fR8Xe^}tJcx3IP$BNlU0}EbfX|HCUmeHQ%d?;tBp%csdnusKidV3S4$CLK_*&U2p&Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tfmg/textures/block/fireproof_brick_reinforcement.png b/src/main/resources/assets/tfmg/textures/block/fireproof_brick_reinforcement.png new file mode 100644 index 0000000000000000000000000000000000000000..d683d1e1a3731a5be55230b52d905fea291f957c GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFWme>IKFik1sgT%sO((#E&En;z|5~m8?zAsezgfk`6|_pzxumm4 ziNAuyHlzCTEA6Rls{2)rGjEPQ^5)<7EnSa)dfaB4A+6h!q49i4Lf4DvC6CRbt^2go h*DhaHbSL``kHe`-lYK~xyi zMUBx710f7U%?5=DAYp;lEKo=WIO($gDuw>shovXkdIkzoswqQsiHsr-cmzFYd(-MG zl?ElhB*z1@Tg2@C_q2-R`AFLam>VsOXej5TV2bElq~kVQJB}-7t*54P+-vv`h-ehv T32C#u00000NkvXXu0mjfDV0Go delta 79 zcmey&IG1sPBR^Y!Pl#)V3^M}*!?)CjQzynqm@0U>IEF}EPCmfM!s^(2$h j<6?y)4s3rK8W|bv4l|tj@Jzh{sE5JR)z4*}Q$iB}=$9G7 diff --git a/src/main/resources/assets/tfmg/textures/block/machine_input.png b/src/main/resources/assets/tfmg/textures/block/machine_input.png new file mode 100644 index 0000000000000000000000000000000000000000..efdf27089cf24561c1ffe9dca4c2150e17457f85 GIT binary patch literal 19028 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 QJPC@y)78&qol`;+03C47`2YX_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tfmg/textures/block/pumpjack_hammer_holder.png b/src/main/resources/assets/tfmg/textures/block/pumpjack_hammer_holder.png new file mode 100644 index 0000000000000000000000000000000000000000..efdf27089cf24561c1ffe9dca4c2150e17457f85 GIT binary patch literal 19028 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 QJPC@y)78&qol`;+03C47`2YX_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tfmg/textures/block/steel_block.png b/src/main/resources/assets/tfmg/textures/block/steel_block.png index 4d7cdebd7813ad9d8a72b5486ecdcb14ebcdf292..308ac734fd9ad25f09f8a48214df8dad49e72c00 100644 GIT binary patch delta 317 zcmV-D0mA;D0?Y!C7=H)?0001xk!Usm0004VQb$4nuFf3k00037NklqCg>eer?PQ4NgFx#;?y_0p6ESi*>?AHML+HbH*Ry946sw9yBpyA+c( zu--770jXd)7d#VcB^rR+ynsm_Pro*R=sXjC&w~kPTYLpv3YqRwvr+#n8o;KbLDc9# zTI{d_uxyp&xi<72mdn+XFzPpPh=?W3%=2i}{`){gt??u-rL4Cbb^R-EphakjAkfib P00000NkvXXu0mjfY1NcQ delta 272 zcmX@ZG@ogLL_G^L0|Ud`yN`l^6k~CayA#8@b22Z19F}xPUq=Rpjs4tz5?O(Kl>na* zSO1`>hL-lp(`PJLw%p9Z+ScCD#m&RU-YF_JAu%08 zVs5gfxG=G%=?JDLoSU^VBXv5*go!tonkFlHs3bo;rMFg0LD?(o*do#3hMogcV}s`E z-jC6n$s#=298@??7 Pxst)t)z4*}Q$iB}cg|b4 diff --git a/src/main/resources/assets/tfmg/textures/block/steel_block_connected.png b/src/main/resources/assets/tfmg/textures/block/steel_block_connected.png index a7f5e2e42f319df0362b8330778bdb0bf45bf196..ffb8c33316dd5098ba01db99d91a535e3b218bd5 100644 GIT binary patch literal 2400 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 diff --git a/src/main/resources/assets/tfmg/textures/gui/distillation_tower.png b/src/main/resources/assets/tfmg/textures/gui/distillation_tower.png new file mode 100644 index 0000000000000000000000000000000000000000..bbbc4b035d5a4ffbbac9644f40801b1403178e58 GIT binary patch literal 1117 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBesX|Mh^w}?p0|HMWL$hfNk#AEDaOX8W){{q_D(JyUWsYx1_lNdHTB+p zu}&^QDw?K-rcS1&)@f-u`T3<`VKLs`fsT&uF)>N*?!Ljnk&%({9v*)6&COCmDpIn# z@)|~tv9UmV^!q2QMfB6>}DNL>4nJ@ErtU#vK#0-!d>Thk3d< zhE&A8oqe|KmVpFoYmaNM_awEY{~7oH5B@fJ=av~V3F~)mJ|S>i$7EaU2LDSe#~D*} z_!N>08#M2_?%wL{wR%qR_0recNx^>-uhukjY>2wcB~Z`A;<1w7OLI2&qwBjw3wUcR zn9u3guqB*p_@udF`N4pbrG9HR-_Hu&KHVhu|HAECTv=YcQk*aShhO0E`sm%0yyT9D zcu5_P`7&==2Se!+bEX_6hc_2`lf&a*+4_F8IIu(R)e?&}?imexu-xMhW~8l>=V2u9~M}?D0ET15jJ=fyT^qj5=gv68t;e+Ge~d$NT!G+%zt5SZJ~Oc%@Ne4ad|STxb8ca8 zrQ_Xu%wkSZreB4gfqW)V^B&vW(`x_u+I%xN9XM>6F#B_a`a!+)jD{=UKd-iPWd3q^ z{`XTCoSCOQEU=O3Z*R0>pR$h4Vo&)UhR>o5d;46hr0 zpJ$yF&*|1w9aAHkQS|5Ec1!jN8!Z}ojzZ&?L9(0qM1+jPu}2I>Vxv;ThsFVBpUd%S XyA_?+eb6faW;+H?S3j3^P6