From e3bef624a03e2921358f8151320bec879c5ded02 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 2 Dec 2020 21:49:57 +0100 Subject: [PATCH 1/5] Casing case closed - Encased shafts and gearboxes can now join textures with respective casing blocks - Added back encased shaft items for creative mode - Fixed encased shafts able to be created with casing and cogs --- src/generated/resources/.cache/cache | 32 +++-- .../blockstates/andesite_encased_shaft.json | 20 +++ .../blockstates/brass_encased_shaft.json | 20 +++ .../create/blockstates/encased_shaft.json | 30 ----- .../assets/create/blockstates/gearbox.json | 9 +- .../resources/assets/create/lang/en_ud.json | 3 +- .../resources/assets/create/lang/en_us.json | 3 +- .../assets/create/lang/unfinished/de_de.json | 5 +- .../assets/create/lang/unfinished/fr_fr.json | 5 +- .../assets/create/lang/unfinished/it_it.json | 5 +- .../assets/create/lang/unfinished/ja_jp.json | 5 +- .../assets/create/lang/unfinished/ko_kr.json | 5 +- .../assets/create/lang/unfinished/nl_nl.json | 5 +- .../assets/create/lang/unfinished/pt_br.json | 5 +- .../assets/create/lang/unfinished/ru_ru.json | 5 +- .../assets/create/lang/unfinished/zh_cn.json | 5 +- .../models/item/andesite_encased_shaft.json | 3 + .../models/item/brass_encased_shaft.json | 3 + ...shaft.json => andesite_encased_shaft.json} | 0 .../blocks/brass_encased_shaft.json | 19 +++ .../java/com/simibubi/create/AllBlocks.java | 23 ++-- .../com/simibubi/create/AllTileEntities.java | 4 +- .../com/simibubi/create/CreateClient.java | 8 ++ .../fluids/pipes/BracketBlock.java | 4 +- .../relays/belt/item/BeltConnectorItem.java | 5 +- .../relays/elementary/AbstractShaftBlock.java | 126 +++++++++++++++++ .../BracketedTileEntityBehaviour.java | 2 +- .../relays/elementary/CogWheelBlock.java | 2 +- .../relays/elementary/ShaftBlock.java | 127 ++---------------- .../relays/encased/CasingConnectivity.java | 62 +++++++++ .../relays/encased/EncasedCTBehaviour.java | 42 ++++++ .../relays/encased/EncasedShaftBlock.java | 62 +++------ .../schematics/block/LaunchedItem.java | 4 +- .../block/SchematicannonTileEntity.java | 4 +- .../connected/ConnectedTextureBehaviour.java | 15 ++- .../create/foundation/data/BlockStateGen.java | 6 + .../foundation/data/BuilderTransformers.java | 31 ++++- .../foundation/data/CreateRegistrate.java | 14 ++ .../behaviour/ValueBoxRenderer.java | 4 +- .../foundation/utility/RemapHelper.java | 66 +++++++-- .../models/block/encased_shaft/andesite.json | 6 - .../encased_shaft/{base.json => block.json} | 26 ++-- .../block/encased_shaft/block_andesite.json | 7 + .../block/encased_shaft/block_brass.json | 7 + .../models/block/encased_shaft/brass.json | 6 - .../models/block/encased_shaft/copper.json | 6 - .../models/block/encased_shaft/item.json | 6 +- .../block/encased_shaft/item_andesite.json | 7 + .../block/encased_shaft/item_brass.json | 7 + 49 files changed, 568 insertions(+), 308 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/andesite_encased_shaft.json create mode 100644 src/generated/resources/assets/create/blockstates/brass_encased_shaft.json delete mode 100644 src/generated/resources/assets/create/blockstates/encased_shaft.json create mode 100644 src/generated/resources/assets/create/models/item/andesite_encased_shaft.json create mode 100644 src/generated/resources/assets/create/models/item/brass_encased_shaft.json rename src/generated/resources/data/create/loot_tables/blocks/{encased_shaft.json => andesite_encased_shaft.json} (100%) create mode 100644 src/generated/resources/data/create/loot_tables/blocks/brass_encased_shaft.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/relays/encased/CasingConnectivity.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java delete mode 100644 src/main/resources/assets/create/models/block/encased_shaft/andesite.json rename src/main/resources/assets/create/models/block/encased_shaft/{base.json => block.json} (58%) create mode 100644 src/main/resources/assets/create/models/block/encased_shaft/block_andesite.json create mode 100644 src/main/resources/assets/create/models/block/encased_shaft/block_brass.json delete mode 100644 src/main/resources/assets/create/models/block/encased_shaft/brass.json delete mode 100644 src/main/resources/assets/create/models/block/encased_shaft/copper.json create mode 100644 src/main/resources/assets/create/models/block/encased_shaft/item_andesite.json create mode 100644 src/main/resources/assets/create/models/block/encased_shaft/item_brass.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 2ea3c0370..d8a091480 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -15,6 +15,7 @@ a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets/create/blockstates/andesite_bric 97adf53a7cb99d7652fb39adc957e9e34cbaca47 assets/create/blockstates/andesite_cobblestone_slab.json 96b5284693da168ab8e0809d86515b5f1a7e763f assets/create/blockstates/andesite_cobblestone_stairs.json 82bd82270aff7d51e9239680ef4dd7b5c899ceb0 assets/create/blockstates/andesite_cobblestone_wall.json +9639b901ffdd2ecccab5575c5c9e6c7b5c901e02 assets/create/blockstates/andesite_encased_shaft.json 11908c2f8603e61bec88010bc6d0890e6339c6b1 assets/create/blockstates/andesite_funnel.json 398922758a6219544e5b85c91c9cf8a543b437e5 assets/create/blockstates/andesite_pillar.json 1d2d8081581e07d9be4b382aede4f2de4401cc6b assets/create/blockstates/andesite_tunnel.json @@ -32,6 +33,7 @@ ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.jso ee1299a15fca849eb42bf81507f85a54c167bbfe assets/create/blockstates/brass_belt_funnel.json 8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.json +288bad07593a8a2c8efaf44bba0ffb0011d36cd3 assets/create/blockstates/brass_encased_shaft.json 3057e1121117c0cd651c288cd8e2d46bdf64afb1 assets/create/blockstates/brass_funnel.json 672eedcd3520c6d39603449165a23be9c612c620 assets/create/blockstates/brass_tunnel.json 11ebdd9bd0815833e62ec1bea03a4cdd86ce00f3 assets/create/blockstates/brown_sail.json @@ -101,7 +103,6 @@ f179202e59e449157f89efc37229b03bbfd391d7 assets/create/blockstates/dolomite_pill 7b1c40891b07c8f3238537625d9e25c8627e7333 assets/create/blockstates/encased_belt.json 7b2b836649e729feafa60972bf95e3afb2143131 assets/create/blockstates/encased_fan.json 656813b75dd3b901bf34f24df785e4b0fbe11aa6 assets/create/blockstates/encased_fluid_pipe.json -e157d7f67b08493b71d7ffea8d622f4a64dbc155 assets/create/blockstates/encased_shaft.json a774e815376a67e2a2de44e39af0a1a0b4406932 assets/create/blockstates/fancy_andesite_bricks.json 180be26a75834cf9cdb881f969f77906e91cc36a assets/create/blockstates/fancy_andesite_bricks_slab.json d5d7762b80952052d0a7adf3081967cac3f3ba6c assets/create/blockstates/fancy_andesite_bricks_stairs.json @@ -155,7 +156,7 @@ afff479c0e5284771afa9e7ce513595fe65860ee assets/create/blockstates/gabbro_cobble a1f31a194129cfb65e335b3b96490f9275f9c564 assets/create/blockstates/gabbro_cobblestone_stairs.json a64d8d0924c0b5b192f355343dd9b3a440875f6a assets/create/blockstates/gabbro_cobblestone_wall.json a6b44e8a1c4ce0c7442b2384b41ad36dd133f19b assets/create/blockstates/gabbro_pillar.json -9c48e311be8b959bfb98e16ffaa358210ac8b9dd assets/create/blockstates/gearbox.json +eca1f0e56efdadb241f42dc6ebb036f1d52213a9 assets/create/blockstates/gearbox.json f34814b17cde3231a1dfb271f3dabf8d6de4fbf6 assets/create/blockstates/gearshift.json 93f8bdc22d9a5e04268964e35e4285c8cbf2b89d assets/create/blockstates/glass_fluid_pipe.json 87661d61e1645ef5ad4ea34f1c0fa31f139ea431 assets/create/blockstates/granite_bricks.json @@ -394,17 +395,17 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -458ea82f1528fc105ae5511619a8673dbd71101f assets/create/lang/en_ud.json -a9b08f790ce95310966b32fd2fda7ff345c1aa06 assets/create/lang/en_us.json -df56d014cd57fc3671b045b4c38c56344645b67e assets/create/lang/unfinished/de_de.json -62827b2303501f5ff8a2a6b32bb8626de3ab5c43 assets/create/lang/unfinished/fr_fr.json -3d4486c4c55e61714f1a9f244a911d9b7726288a assets/create/lang/unfinished/it_it.json -08b938808c76b1069b46cf071001c9f8190dfb0d assets/create/lang/unfinished/ja_jp.json -5e4673880e92012fc27d680a9c15d62ea08961d1 assets/create/lang/unfinished/ko_kr.json -5b43ca6db5772d53618d3ea38f1b97f14c3b2b6d assets/create/lang/unfinished/nl_nl.json -2355818f7e6b9176ced2fcbf741cab339c0376b7 assets/create/lang/unfinished/pt_br.json -50f6b4f0166f8cf379c27c108b6ca6d0103c4847 assets/create/lang/unfinished/ru_ru.json -ccd2ea1e73d535feb22597ea739d1caceff60944 assets/create/lang/unfinished/zh_cn.json +d85a97025cad5fad4410a1bc46b59b3b72096524 assets/create/lang/en_ud.json +57c7008d6c3d1deda3eaf5703acecbd8464beb8f assets/create/lang/en_us.json +f1cd3a70b1567ad73681ad42ca0d754882845b4a assets/create/lang/unfinished/de_de.json +4358a9a4ae0cd69944590eb1b636c318e07679d8 assets/create/lang/unfinished/fr_fr.json +3f2ed1c2d1ae12ffe890be971ef498211d404426 assets/create/lang/unfinished/it_it.json +921f766a873e1c215a5874164bcbb580c6e63020 assets/create/lang/unfinished/ja_jp.json +ea1d59990f4ce87ca33ae14000869762bb517fcb assets/create/lang/unfinished/ko_kr.json +5d87a8b82204010fbd9ed765b566026be0a02ae6 assets/create/lang/unfinished/nl_nl.json +25157ef8e492c71b2d0d840048b660d92d1a3644 assets/create/lang/unfinished/pt_br.json +47a8850c0e417a32c1c47d273f0aac11808f7ddf assets/create/lang/unfinished/ru_ru.json +e2b80140f0ffd04335d7551c0feff9aa3c9913b9 assets/create/lang/unfinished/zh_cn.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1121,6 +1122,7 @@ d283f86cd05ed378efd82ce46cf49bc83783069b assets/create/models/item/andesite_bric 1ceb0e49f2c46f1d5414d5fd6edfc2bdd3afa6f7 assets/create/models/item/andesite_cobblestone_slab.json b0f664dd6de3d0ee9afcb6223fbcd53b97fa0d65 assets/create/models/item/andesite_cobblestone_stairs.json 4856d13a72ec0af9f10226b4a4bf0567eb580b9a assets/create/models/item/andesite_cobblestone_wall.json +bc6e7469744604e578200ea87690e4dd3b25e447 assets/create/models/item/andesite_encased_shaft.json 7490819e7e5445019b6b8cb2538f12a5b6717a46 assets/create/models/item/andesite_funnel.json 75b8b00c2418b9660d35a7fabd0774925cf1c02f assets/create/models/item/andesite_pillar.json c0e35daccfb398947532e9499d6bda963387cd9c assets/create/models/item/andesite_tunnel.json @@ -1136,6 +1138,7 @@ c20627feba667b063893b128ee195c1abdb0f88d assets/create/models/item/blaze_cake.js bec96ebf3369d3cffa9bb1b8bf9f2a5cd5d0ef96 assets/create/models/item/blue_valve_handle.json 17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets/create/models/item/brass_block.json f5a18f4279c2e845a5967b1c2f9e807c2bb77afb assets/create/models/item/brass_casing.json +c723011e09203821b6b59cff9de22454c5e4395a assets/create/models/item/brass_encased_shaft.json 099961ca4a75b6ecfddd1db6dd29909276759f3b assets/create/models/item/brass_funnel.json 361f75a79de5007d7a99ad0a38103c9aa8c3017c assets/create/models/item/brass_hand.json 1786bdffa2ab5a07c88d2797db3d7b54461323c4 assets/create/models/item/brass_ingot.json @@ -2165,6 +2168,7 @@ cb36b039a511aca643fe674a63de8d6ad8478256 data/create/loot_tables/blocks/andesite a438bc69030589264e1d736bbd08662bdd123be3 data/create/loot_tables/blocks/andesite_cobblestone_slab.json 6b5393dab7d443da6d54debccbc8b060c6c9bdc7 data/create/loot_tables/blocks/andesite_cobblestone_stairs.json 36d38c085d8e522fe15f0ef9bc64363e163f3de7 data/create/loot_tables/blocks/andesite_cobblestone_wall.json +b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/andesite_encased_shaft.json d3202a337c15c8b8ec41fa5879bb94327bb75057 data/create/loot_tables/blocks/andesite_funnel.json 6908f62c809ea2105bc92765d84d5655197346ab data/create/loot_tables/blocks/andesite_pillar.json 317aa99086127c649981b7b2fc85e66774a30f58 data/create/loot_tables/blocks/andesite_tunnel.json @@ -2182,6 +2186,7 @@ fcddccd1bf45c2f4ad5f1520e209a4f04487274a data/create/loot_tables/blocks/blue_val 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_belt_funnel.json 70d9d4def43d5b31fa7cdc5ca5002c71cf4a90b0 data/create/loot_tables/blocks/brass_block.json 8a14258ad5d79d9e4dc5a318905644b446196420 data/create/loot_tables/blocks/brass_casing.json +b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/brass_encased_shaft.json 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_funnel.json 6c8e784677d1a843b6c707484c79751acdb46ebc data/create/loot_tables/blocks/brass_tunnel.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/brown_sail.json @@ -2251,7 +2256,6 @@ d5fc5b3dc612cd748117e9d8b0ecda76e73f4514 data/create/loot_tables/blocks/dolomite 503a93787537b46f462d32b0382c3396f42bb1f6 data/create/loot_tables/blocks/encased_belt.json 9055d82b983b673e1638d17b712b9fcd1f5a52e6 data/create/loot_tables/blocks/encased_fan.json c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/encased_fluid_pipe.json -b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/encased_shaft.json ddfc4764a6039d771e03af815ac4493da80d2e6b data/create/loot_tables/blocks/fancy_andesite_bricks.json 6de29951b4129dfd5c7fd6960e7dd8b8d371b451 data/create/loot_tables/blocks/fancy_andesite_bricks_slab.json 413c8bb80954679796cd9d18f808c28a7bdbe681 data/create/loot_tables/blocks/fancy_andesite_bricks_stairs.json diff --git a/src/generated/resources/assets/create/blockstates/andesite_encased_shaft.json b/src/generated/resources/assets/create/blockstates/andesite_encased_shaft.json new file mode 100644 index 000000000..c78b4a1c4 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/andesite_encased_shaft.json @@ -0,0 +1,20 @@ +{ + "variants": { + "axis=x": { + "model": "create:block/encased_shaft/block_andesite", + "x": 90, + "y": 90, + "uvlock": true + }, + "axis=y": { + "model": "create:block/encased_shaft/block_andesite", + "uvlock": true + }, + "axis=z": { + "model": "create:block/encased_shaft/block_andesite", + "x": 90, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/brass_encased_shaft.json b/src/generated/resources/assets/create/blockstates/brass_encased_shaft.json new file mode 100644 index 000000000..af3983628 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/brass_encased_shaft.json @@ -0,0 +1,20 @@ +{ + "variants": { + "axis=x": { + "model": "create:block/encased_shaft/block_brass", + "x": 90, + "y": 90, + "uvlock": true + }, + "axis=y": { + "model": "create:block/encased_shaft/block_brass", + "uvlock": true + }, + "axis=z": { + "model": "create:block/encased_shaft/block_brass", + "x": 90, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/encased_shaft.json b/src/generated/resources/assets/create/blockstates/encased_shaft.json deleted file mode 100644 index b630e5edf..000000000 --- a/src/generated/resources/assets/create/blockstates/encased_shaft.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "variants": { - "axis=x,casing=andesite": { - "model": "create:block/encased_shaft/andesite", - "x": 90, - "y": 90 - }, - "axis=y,casing=andesite": { - "model": "create:block/encased_shaft/andesite" - }, - "axis=z,casing=andesite": { - "model": "create:block/encased_shaft/andesite", - "x": 90, - "y": 180 - }, - "axis=x,casing=brass": { - "model": "create:block/encased_shaft/brass", - "x": 90, - "y": 90 - }, - "axis=y,casing=brass": { - "model": "create:block/encased_shaft/brass" - }, - "axis=z,casing=brass": { - "model": "create:block/encased_shaft/brass", - "x": 90, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/gearbox.json b/src/generated/resources/assets/create/blockstates/gearbox.json index 74cffdb7d..2c7b4ca20 100644 --- a/src/generated/resources/assets/create/blockstates/gearbox.json +++ b/src/generated/resources/assets/create/blockstates/gearbox.json @@ -3,15 +3,18 @@ "axis=x": { "model": "create:block/gearbox/block", "x": 90, - "y": 90 + "y": 90, + "uvlock": true }, "axis=y": { - "model": "create:block/gearbox/block" + "model": "create:block/gearbox/block", + "uvlock": true }, "axis=z": { "model": "create:block/gearbox/block", "x": 90, - "y": 180 + "y": 180, + "uvlock": true } } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index d85a1a98e..bdf06c6c1 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -16,6 +16,7 @@ "block.create.andesite_cobblestone_slab": "q\u0250\u05DFS \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", + "block.create.andesite_encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_funnel": "\u05DF\u01DDuun\u2132 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_tunnel": "\u05DF\u01DDuun\u27D8 \u01DD\u0287\u0131s\u01DDpu\u2C6F", @@ -33,6 +34,7 @@ "block.create.brass_belt_funnel": "\u05DF\u01DDuun\u2132 \u0287\u05DF\u01DD\u15FA ss\u0250\u0279\u15FA", "block.create.brass_block": "\u029E\u0254o\u05DF\u15FA ss\u0250\u0279\u15FA", "block.create.brass_casing": "bu\u0131s\u0250\u0186 ss\u0250\u0279\u15FA", + "block.create.brass_encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E ss\u0250\u0279\u15FA", "block.create.brass_funnel": "\u05DF\u01DDuun\u2132 ss\u0250\u0279\u15FA", "block.create.brass_tunnel": "\u05DF\u01DDuun\u27D8 ss\u0250\u0279\u15FA", "block.create.brown_sail": "\u05DF\u0131\u0250S u\u028Do\u0279\u15FA", @@ -102,7 +104,6 @@ "block.create.encased_belt": "\u0287\u05DF\u01DD\u15FA p\u01DDs\u0250\u0254u\u018E", "block.create.encased_fan": "u\u0250\u2132 p\u01DDs\u0250\u0254u\u018E", "block.create.encased_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 p\u01DDs\u0250\u0254u\u018E", - "block.create.encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E", "block.create.fancy_andesite_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132", "block.create.fancy_andesite_bricks_slab": "q\u0250\u05DFS s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132", "block.create.fancy_andesite_bricks_stairs": "s\u0279\u0131\u0250\u0287S s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index a9adc88ed..6d798ec12 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -19,6 +19,7 @@ "block.create.andesite_cobblestone_slab": "Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "Andesite Encased Shaft", "block.create.andesite_funnel": "Andesite Funnel", "block.create.andesite_pillar": "Andesite Pillar", "block.create.andesite_tunnel": "Andesite Tunnel", @@ -36,6 +37,7 @@ "block.create.brass_belt_funnel": "Brass Belt Funnel", "block.create.brass_block": "Brass Block", "block.create.brass_casing": "Brass Casing", + "block.create.brass_encased_shaft": "Brass Encased Shaft", "block.create.brass_funnel": "Brass Funnel", "block.create.brass_tunnel": "Brass Tunnel", "block.create.brown_sail": "Brown Sail", @@ -105,7 +107,6 @@ "block.create.encased_belt": "Encased Belt", "block.create.encased_fan": "Encased Fan", "block.create.encased_fluid_pipe": "Encased Fluid Pipe", - "block.create.encased_shaft": "Encased Shaft", "block.create.fancy_andesite_bricks": "Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 48759c510..a1454ec4e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1052", + "_": "Missing Localizations: 1054", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "Eingeschlossener Riemen", "block.create.encased_fan": "Eingeschlossener Propeller", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "Eingeschlossene Welle", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index b38db1fe2..c3c05ab81 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 682", + "_": "Missing Localizations: 684", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "Boîtier en laiton", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "Tapis roulant enfermé", "block.create.encased_fan": "Ventilateur enfermé", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "Arbre mécanique enfermé", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 46ea7fe96..2437edf40 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 666", + "_": "Missing Localizations: 668", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "Blocco di Ottone", "block.create.brass_casing": "Involucro di Ottone", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "Nastro Incassato", "block.create.encased_fan": "Ventilatore incassato", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "Albero Incassato", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 0011bb4bb..dfde660e0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 665", + "_": "Missing Localizations: 667", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "真鍮ブロック", "block.create.brass_casing": "真鍮ケーシング", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "ケース入りベルト", "block.create.encased_fan": "ケース入りファン", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "ケース入りシャフト", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index a882d876e..934b7d683 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 666", + "_": "Missing Localizations: 668", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "황동 블럭", "block.create.brass_casing": "황동 케이스", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "덮힌 벨트", "block.create.encased_fan": "덮힌 환풍기", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "덮힌 축", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index ecccd1423..3ad604b98 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 993", + "_": "Missing Localizations: 995", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "Omhulsde Transportband", "block.create.encased_fan": "Omhulsde Ventilator", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "Omhulsde Drijfas", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index edc6ba37a..cd4138904 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1059", + "_": "Missing Localizations: 1061", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", "block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "Esteira Revestida", "block.create.encased_fan": "Ventilador Revestida", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "Eixo Revestido", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index c67cf04a9..d09abba3f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 335", + "_": "Missing Localizations: 337", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "Андезит-булыжниковая плита", "block.create.andesite_cobblestone_stairs": "Андезит-булыжниковые ступени", "block.create.andesite_cobblestone_wall": "Андезит-булыжниковая стена", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "Андезитовая колонна", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "Латунный блок", "block.create.brass_casing": "Латунный корпус", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "Конвейерный привод", "block.create.encased_fan": "Вентилятор в кожухе", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "Вал в кожухе", "block.create.fancy_andesite_bricks": "Красивый андезитовый кирпич", "block.create.fancy_andesite_bricks_slab": "Плита из красивого андезитового кирпича", "block.create.fancy_andesite_bricks_stairs": "Ступени из красивого андезитового кирпича", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 31c513c21..76c347876 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 348", + "_": "Missing Localizations: 350", "_": "->------------------------] Game Elements [------------------------<-", @@ -20,6 +20,7 @@ "block.create.andesite_cobblestone_slab": "安山岩圆石台阶", "block.create.andesite_cobblestone_stairs": "安山岩圆石楼梯", "block.create.andesite_cobblestone_wall": "安山岩圆石墙", + "block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft", "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "竖纹安山岩", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", @@ -37,6 +38,7 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "黄铜块", "block.create.brass_casing": "黄铜机壳", + "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", @@ -106,7 +108,6 @@ "block.create.encased_belt": "连携齿轮箱", "block.create.encased_fan": "鼓风机", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", - "block.create.encased_shaft": "齿轮箱", "block.create.fancy_andesite_bricks": "方纹安山岩砖", "block.create.fancy_andesite_bricks_slab": "方纹安山岩砖台阶", "block.create.fancy_andesite_bricks_stairs": "方纹安山岩砖楼梯", diff --git a/src/generated/resources/assets/create/models/item/andesite_encased_shaft.json b/src/generated/resources/assets/create/models/item/andesite_encased_shaft.json new file mode 100644 index 000000000..6edf0c3e5 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/andesite_encased_shaft.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/encased_shaft/item_andesite" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/brass_encased_shaft.json b/src/generated/resources/assets/create/models/item/brass_encased_shaft.json new file mode 100644 index 000000000..aa516d10d --- /dev/null +++ b/src/generated/resources/assets/create/models/item/brass_encased_shaft.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/encased_shaft/item_brass" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/encased_shaft.json b/src/generated/resources/data/create/loot_tables/blocks/andesite_encased_shaft.json similarity index 100% rename from src/generated/resources/data/create/loot_tables/blocks/encased_shaft.json rename to src/generated/resources/data/create/loot_tables/blocks/andesite_encased_shaft.json diff --git a/src/generated/resources/data/create/loot_tables/blocks/brass_encased_shaft.json b/src/generated/resources/data/create/loot_tables/blocks/brass_encased_shaft.json new file mode 100644 index 000000000..84f976dfb --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/brass_encased_shaft.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:shaft" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 39f44f9c8..7d35cd70b 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -105,6 +105,7 @@ import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyB import com.simibubi.create.content.contraptions.relays.encased.ClutchBlock; import com.simibubi.create.content.contraptions.relays.encased.EncasedBeltBlock; import com.simibubi.create.content.contraptions.relays.encased.EncasedBeltGenerator; +import com.simibubi.create.content.contraptions.relays.encased.EncasedCTBehaviour; import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock; import com.simibubi.create.content.contraptions.relays.encased.GearshiftBlock; import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock; @@ -238,22 +239,24 @@ public class AllBlocks { .build() .register(); - public static final BlockEntry ENCASED_SHAFT = - REGISTRATE.block("encased_shaft", EncasedShaftBlock::new) - .initialProperties(SharedProperties::stone) - .properties(Block.Properties::nonOpaque) - .transform(StressConfigDefaults.setNoImpact()) - .blockstate((c, p) -> axisBlock(c, p, blockState -> p.models() - .getExistingFile(p.modLoc("block/encased_shaft/" + blockState.get(EncasedShaftBlock.CASING) - .getName())))) - .loot((p, b) -> p.registerDropping(b, SHAFT.get())) + public static final BlockEntry ANDESITE_ENCASED_SHAFT = + REGISTRATE.block("andesite_encased_shaft", EncasedShaftBlock::andesite) + .transform(BuilderTransformers.encasedShaft("andesite", AllSpriteShifts.ANDESITE_CASING)) + .register(); + + public static final BlockEntry BRASS_ENCASED_SHAFT = + REGISTRATE.block("brass_encased_shaft", EncasedShaftBlock::brass) + .transform(BuilderTransformers.encasedShaft("brass", AllSpriteShifts.BRASS_CASING)) .register(); public static final BlockEntry GEARBOX = REGISTRATE.block("gearbox", GearboxBlock::new) .initialProperties(SharedProperties::stone) .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) - .blockstate(BlockStateGen.axisBlockProvider(true)) + .onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.ANDESITE_CASING))) + .onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.ANDESITE_CASING, + (s, f) -> f.getAxis() == s.get(GearboxBlock.AXIS)))) + .blockstate((c, p) -> axisBlock(c, p, $ -> AssetLookup.partialBaseModel(c, p), true)) .item() .transform(customItemModel()) .register(); diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index aba35da40..3a92ad6fb 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -131,7 +131,7 @@ public class AllTileEntities { // Kinetics public static final TileEntityEntry SIMPLE_KINETIC = Create.registrate() .tileEntity("simple_kinetic", SimpleKineticTileEntity::new) - .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL, AllBlocks.ENCASED_SHAFT) + .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL) .renderer(() -> KineticTileEntityRenderer::new) .register(); @@ -149,7 +149,7 @@ public class AllTileEntities { public static final TileEntityEntry ENCASED_SHAFT = Create.registrate() .tileEntity("encased_shaft", EncasedShaftTileEntity::new) - .validBlocks(AllBlocks.ENCASED_SHAFT, AllBlocks.ENCASED_BELT) + .validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_BELT) .renderer(() -> EncasedShaftRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 0892ba960..b347bce5f 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -7,6 +7,7 @@ import java.util.function.Function; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRenderer; +import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity; import com.simibubi.create.content.schematics.ClientSchematicLoader; import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler; import com.simibubi.create.content.schematics.client.SchematicHandler; @@ -47,6 +48,7 @@ public class CreateClient { private static CustomItemModels customItemModels; private static CustomRenderedItems customRenderedItems; private static AllColorHandlers colorHandlers; + private static CasingConnectivity casingConnectivity; public static void addClientListeners(IEventBus modEventBus) { modEventBus.addListener(CreateClient::clientInit); @@ -162,5 +164,11 @@ public class CreateClient { colorHandlers = new AllColorHandlers(); return colorHandlers; } + + public static CasingConnectivity getCasingConnectivity() { + if (casingConnectivity == null) + casingConnectivity = new CasingConnectivity(); + return casingConnectivity; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java index 90c72f341..5ced0d5f9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java @@ -6,7 +6,7 @@ import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; import com.simibubi.create.content.contraptions.fluids.FluidPropagator; import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock; -import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; +import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftBlock; import com.simibubi.create.foundation.block.ProperDirectionalBlock; import com.simibubi.create.foundation.utility.Lang; @@ -46,7 +46,7 @@ public class BracketBlock extends ProperDirectionalBlock { } public Optional getSuitableBracket(BlockState blockState, Direction direction) { - if (blockState.getBlock() instanceof ShaftBlock) + if (blockState.getBlock() instanceof AbstractShaftBlock) return getSuitableBracket(blockState.get(RotatedPillarKineticBlock.AXIS), direction, blockState.getBlock() instanceof CogWheelBlock ? BracketType.COG : BracketType.SHAFT); return getSuitableBracket(FluidPropagator.getStraightPipeAxis(blockState), direction, BracketType.PIPE); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java index 9f51af84f..29d5ad0b3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java @@ -11,6 +11,7 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; +import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftBlock; import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.config.AllConfigs; @@ -135,7 +136,7 @@ public class BeltConnectorItem extends BlockItem { boolean pulley = ShaftBlock.isShaft(shaftState); if (part == BeltPart.MIDDLE && pulley) part = BeltPart.PULLEY; - if (pulley && shaftState.get(ShaftBlock.AXIS) == Axis.Y) + if (pulley && shaftState.get(AbstractShaftBlock.AXIS) == Axis.Y) slope = BeltSlope.SIDEWAYS; world.setBlockState(pos, beltBlock.with(BeltBlock.SLOPE, slope) .with(BeltBlock.PART, part) @@ -237,7 +238,7 @@ public class BeltConnectorItem extends BlockItem { for (BlockPos currentPos = first.add(step); !currentPos.equals(second) && limit-- > 0; currentPos = currentPos.add(step)) { BlockState blockState = world.getBlockState(currentPos); - if (ShaftBlock.isShaft(blockState) && blockState.get(ShaftBlock.AXIS) == shaftAxis) + if (ShaftBlock.isShaft(blockState) && blockState.get(AbstractShaftBlock.AXIS) == shaftAxis) continue; if (!blockState.getMaterial() .isReplaceable()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java new file mode 100644 index 000000000..9883870d4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java @@ -0,0 +1,126 @@ +package com.simibubi.create.content.contraptions.relays.elementary; + +import java.util.Optional; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; +import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock; +import com.simibubi.create.content.contraptions.wrench.IWrenchableWithBracket; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluids; +import net.minecraft.fluid.IFluidState; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; + +public abstract class AbstractShaftBlock extends RotatedPillarKineticBlock implements IWaterLoggable, IWrenchableWithBracket { + + public AbstractShaftBlock(Properties properties) { + super(properties); + setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + } + + @Override + public ActionResultType onWrenched(BlockState state, ItemUseContext context) { + return IWrenchableWithBracket.super.onWrenched(state, context); + } + + @Override + public PushReaction getPushReaction(BlockState state) { + return PushReaction.NORMAL; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.SIMPLE_KINETIC.create(); + } + + @Override + @SuppressWarnings("deprecation") + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + if (state != newState && !isMoving) + removeBracket(world, pos).ifPresent(stack -> Block.spawnAsEntity(world, pos, stack)); + super.onReplaced(state, world, pos, newState, isMoving); + } + + // IRotate: + + @Override + public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { + return face.getAxis() == state.get(AXIS); + } + + @Override + public Axis getRotationAxis(BlockState state) { + return state.get(AXIS); + } + + @Override + public IFluidState getFluidState(BlockState state) { + return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) + : Fluids.EMPTY.getDefaultState(); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(BlockStateProperties.WATERLOGGED); + super.fillStateContainer(builder); + } + + @Override + public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + IWorld world, BlockPos pos, BlockPos neighbourPos) { + if (state.get(BlockStateProperties.WATERLOGGED)) { + world.getPendingFluidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + } + return state; + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + IFluidState ifluidstate = context.getWorld() + .getFluidState(context.getPos()); + return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); + } + + @Override + public Optional removeBracket(IBlockReader world, BlockPos pos) { + BracketedTileEntityBehaviour behaviour = TileEntityBehaviour.get(world, pos, BracketedTileEntityBehaviour.TYPE); + if (behaviour == null) + return Optional.empty(); + BlockState bracket = behaviour.getBracket(); + behaviour.removeBracket(); + if (bracket == Blocks.AIR.getDefaultState()) + return Optional.empty(); + return Optional.of(new ItemStack(bracket.getBlock())); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java index 2348e2921..4ee03298d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java @@ -67,7 +67,7 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { public boolean canHaveBracket() { BlockState blockState = tileEntity.getBlockState(); - if (blockState.getBlock() instanceof ShaftBlock) + if (blockState.getBlock() instanceof AbstractShaftBlock) return true; return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java index 4dd0b1310..4b9eb3af8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java @@ -23,7 +23,7 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -public class CogWheelBlock extends ShaftBlock { +public class CogWheelBlock extends AbstractShaftBlock { boolean isLarge; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java index 9a19a0f95..5fddb77d6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java @@ -1,78 +1,31 @@ package com.simibubi.create.content.contraptions.relays.elementary; -import java.util.Optional; - import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; -import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock; -import com.simibubi.create.content.contraptions.wrench.IWrenchableWithBracket; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.IWaterLoggable; -import net.minecraft.block.material.PushReaction; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.fluid.Fluids; -import net.minecraft.fluid.IFluidState; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.state.properties.BlockStateProperties; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; import net.minecraft.util.Hand; -import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; -import net.minecraft.world.IWorld; -import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -public class ShaftBlock extends RotatedPillarKineticBlock implements IWaterLoggable, IWrenchableWithBracket { +public class ShaftBlock extends AbstractShaftBlock { public ShaftBlock(Properties properties) { super(properties); - setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); } public static boolean isShaft(BlockState state) { return AllBlocks.SHAFT.has(state); } - - @Override - public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - return IWrenchableWithBracket.super.onWrenched(state, context); - } - - @Override - public PushReaction getPushReaction(BlockState state) { - return PushReaction.NORMAL; - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.SIMPLE_KINETIC.create(); - } - - @Override - @SuppressWarnings("deprecation") - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { - if (state != newState && !isMoving) - removeBracket(world, pos).ifPresent(stack -> Block.spawnAsEntity(world, pos, stack)); - super.onReplaced(state, world, pos, newState, isMoving); - } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { @@ -89,11 +42,6 @@ public class ShaftBlock extends RotatedPillarKineticBlock implements IWaterLogga return 0f; } - @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { - super.fillItemGroup(group, items); - } - @Override public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult p_225533_6_) { @@ -101,74 +49,21 @@ public class ShaftBlock extends RotatedPillarKineticBlock implements IWaterLogga return ActionResultType.PASS; ItemStack heldItem = player.getHeldItem(hand); + for (EncasedShaftBlock encasedShaft : new EncasedShaftBlock[] { AllBlocks.ANDESITE_ENCASED_SHAFT.get(), + AllBlocks.BRASS_ENCASED_SHAFT.get() }) { - for (EncasedShaftBlock.Casing casing : EncasedShaftBlock.Casing.values()) { - if (casing.getCasingEntry() - .isIn(heldItem)) { - if (world.isRemote) - return ActionResultType.SUCCESS; + if (!encasedShaft.getCasing() + .isIn(heldItem)) + continue; - KineticTileEntity.switchToBlockState(world, pos, AllBlocks.ENCASED_SHAFT.getDefaultState() - .with(EncasedShaftBlock.CASING, casing) - .with(AXIS, state.get(AXIS))); + if (world.isRemote) return ActionResultType.SUCCESS; - } + + KineticTileEntity.switchToBlockState(world, pos, encasedShaft.getDefaultState() + .with(AXIS, state.get(AXIS))); + return ActionResultType.SUCCESS; } return ActionResultType.PASS; } - - // IRotate: - - @Override - public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(AXIS); - } - - @Override - public Axis getRotationAxis(BlockState state) { - return state.get(AXIS); - } - - @Override - public IFluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) - : Fluids.EMPTY.getDefaultState(); - } - - @Override - protected void fillStateContainer(Builder builder) { - builder.add(BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); - } - - @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, - IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks() - .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); - } - return state; - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - IFluidState ifluidstate = context.getWorld() - .getFluidState(context.getPos()); - return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, - Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); - } - - @Override - public Optional removeBracket(IBlockReader world, BlockPos pos) { - BracketedTileEntityBehaviour behaviour = TileEntityBehaviour.get(world, pos, BracketedTileEntityBehaviour.TYPE); - if (behaviour == null) - return Optional.empty(); - BlockState bracket = behaviour.getBracket(); - behaviour.removeBracket(); - if (bracket == Blocks.AIR.getDefaultState()) - return Optional.empty(); - return Optional.of(new ItemStack(bracket.getBlock())); - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/CasingConnectivity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/CasingConnectivity.java new file mode 100644 index 000000000..936b624d4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/CasingConnectivity.java @@ -0,0 +1,62 @@ +package com.simibubi.create.content.contraptions.relays.encased; + +import java.util.IdentityHashMap; +import java.util.Map; +import java.util.function.BiPredicate; + +import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; + +public class CasingConnectivity { + + private Map entries; + + public CasingConnectivity() { + entries = new IdentityHashMap<>(); + } + + public Entry get(BlockState blockState) { + return entries.get(blockState.getBlock()); + } + + public void makeCasing(Block block, CTSpriteShiftEntry casing) { + new Entry(block, casing, (s, f) -> true).register(); + } + + public void make(Block block, CTSpriteShiftEntry casing) { + new Entry(block, casing, (s, f) -> true).register(); + } + + public void make(Block block, CTSpriteShiftEntry casing, BiPredicate predicate) { + new Entry(block, casing, predicate).register(); + } + + public class Entry { + + private Block block; + private CTSpriteShiftEntry casing; + private BiPredicate predicate; + + private Entry(Block block, CTSpriteShiftEntry casing, BiPredicate predicate) { + this.block = block; + this.casing = casing; + this.predicate = predicate; + } + + public CTSpriteShiftEntry getCasing() { + return casing; + } + + public boolean isSideValid(BlockState state, Direction face) { + return predicate.test(state, face); + } + + public void register() { + entries.put(block, this); + } + + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java new file mode 100644 index 000000000..3b81109cb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java @@ -0,0 +1,42 @@ +package com.simibubi.create.content.contraptions.relays.encased; + +import com.simibubi.create.CreateClient; +import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; +import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; + +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ILightReader; + +public class EncasedCTBehaviour extends ConnectedTextureBehaviour { + + private CTSpriteShiftEntry shift; + + public EncasedCTBehaviour(CTSpriteShiftEntry shift) { + this.shift = shift; + } + + @Override + public boolean connectsTo(BlockState state, BlockState other, ILightReader reader, BlockPos pos, BlockPos otherPos, + Direction face) { + if (isBeingBlocked(state, reader, pos, otherPos, face)) + return false; + CasingConnectivity cc = CreateClient.getCasingConnectivity(); + CasingConnectivity.Entry entry = cc.get(state); + CasingConnectivity.Entry otherEntry = cc.get(other); + if (entry == null || otherEntry == null) + return false; + if (!entry.isSideValid(state, face) || !otherEntry.isSideValid(other, face)) + return false; + if (entry.getCasing() != otherEntry.getCasing()) + return false; + return true; + } + + @Override + public CTSpriteShiftEntry get(BlockState state, Direction direction) { + return shift; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java index 44c419e75..57b284045 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java @@ -4,48 +4,39 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.CasingBlock; import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.foundation.utility.Lang; import com.tterrag.registrate.util.entry.BlockEntry; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; -import net.minecraft.state.EnumProperty; -import net.minecraft.state.IProperty; -import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; -import net.minecraft.util.IStringSerializable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; public class EncasedShaftBlock extends AbstractEncasedShaftBlock { - public static final IProperty CASING = EnumProperty.create("casing", Casing.class); + private BlockEntry casing; - public EncasedShaftBlock(Properties properties) { + public static EncasedShaftBlock andesite(Properties properties) { + return new EncasedShaftBlock(properties, AllBlocks.ANDESITE_CASING); + } + + public static EncasedShaftBlock brass(Properties properties) { + return new EncasedShaftBlock(properties, AllBlocks.BRASS_CASING); + } + + protected EncasedShaftBlock(Properties properties, BlockEntry casing) { super(properties); - this.setDefaultState(this.getDefaultState().with(CASING, Casing.ANDESITE)); - } - - @Override - protected void fillStateContainer(StateContainer.Builder builder) { - super.fillStateContainer(builder); - builder.add(CASING); - } - - @Override - public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, PlayerEntity player) { - return new ItemStack(state.get(CASING).getCasingEntry().get().asItem()); + this.casing = casing; } @Override public TileEntity createTileEntity(BlockState state, IBlockReader world) { return AllTileEntities.ENCASED_SHAFT.create(); } + + public BlockEntry getCasing() { + return casing; + } @Override public ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) { @@ -56,27 +47,4 @@ public class EncasedShaftBlock extends AbstractEncasedShaftBlock { return ActionResultType.SUCCESS; } - public enum Casing implements IStringSerializable { - ANDESITE(AllBlocks.ANDESITE_CASING), - BRASS(AllBlocks.BRASS_CASING), - //COPPER(AllBlocks.COPPER_CASING) - - ; - - private final BlockEntry casingEntry; - - Casing(BlockEntry casingEntry) { - this.casingEntry = casingEntry; - } - - public BlockEntry getCasingEntry() { - return casingEntry; - } - - @Override - public String getName() { - return Lang.asId(name()); - } - } - } diff --git a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java index c106c0046..efebcdcd7 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java @@ -6,7 +6,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem; -import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; +import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -176,7 +176,7 @@ public abstract class LaunchedItem { BlockPos offset = BeltBlock.nextSegmentPosition(state, BlockPos.ZERO, isStart); int i = length - 1; Axis axis = state.get(BeltBlock.HORIZONTAL_FACING).rotateY().getAxis(); - world.setBlockState(target, AllBlocks.SHAFT.getDefaultState().with(ShaftBlock.AXIS, axis)); + world.setBlockState(target, AllBlocks.SHAFT.getDefaultState().with(AbstractShaftBlock.AXIS, axis)); BeltConnectorItem .createBelts(world, target, target.add(offset.getX() * i, offset.getY() * i, offset.getZ() * i)); } diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java index a2008395d..a2fa5fcd5 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java @@ -10,7 +10,7 @@ import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; -import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; +import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftBlock; import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType; import com.simibubi.create.content.schematics.MaterialChecklist; @@ -491,7 +491,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (!isLastSegment) blockState = (blockState.get(BeltBlock.PART) == BeltPart.MIDDLE) ? Blocks.AIR.getDefaultState() : AllBlocks.SHAFT.getDefaultState() - .with(ShaftBlock.AXIS, facing.rotateY() + .with(AbstractShaftBlock.AXIS, facing.rotateY() .getAxis()); return blockState; } diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java index ffea6e247..5b9edc03b 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java @@ -33,18 +33,19 @@ public abstract class ConnectedTextureBehaviour { public boolean buildContextForOccludedDirections() { return false; } - + public boolean connectsTo(BlockState state, BlockState other, ILightReader reader, BlockPos pos, BlockPos otherPos, Direction face) { + return !isBeingBlocked(state, reader, pos, otherPos, face) && state.getBlock() == other.getBlock(); + } + protected boolean isBeingBlocked(BlockState state, ILightReader reader, BlockPos pos, BlockPos otherPos, + Direction face) { BlockPos blockingPos = otherPos.offset(face); - if ((face.getAxis() + return face.getAxis() .getCoordinate(pos.getX(), pos.getY(), pos.getZ()) == face.getAxis() - .getCoordinate(otherPos.getX(), otherPos.getY(), otherPos.getZ())) - && connectsTo(state, reader.getBlockState(blockingPos), reader, pos, blockingPos, face)) - return false; - - return state.getBlock() == other.getBlock(); + .getCoordinate(otherPos.getX(), otherPos.getY(), otherPos.getZ()) + && connectsTo(state, reader.getBlockState(blockingPos), reader, pos, blockingPos, face); } public CTContext buildContext(ILightReader reader, BlockPos pos, BlockState state, Direction face) { diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 047d9b454..76874dc7c 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -121,11 +121,17 @@ public class BlockStateGen { public static void axisBlock(DataGenContext ctx, RegistrateBlockstateProvider prov, Function modelFunc) { + axisBlock(ctx, prov, modelFunc, false); + } + + public static void axisBlock(DataGenContext ctx, RegistrateBlockstateProvider prov, + Function modelFunc, boolean uvLock) { prov.getVariantBuilder(ctx.getEntry()) .forAllStatesExcept(state -> { Axis axis = state.get(BlockStateProperties.AXIS); return ConfiguredModel.builder() .modelFile(modelFunc.apply(state)) + .uvLock(uvLock) .rotationX(axis == Axis.Y ? 0 : 90) .rotationY(axis == Axis.X ? 90 : axis == Axis.Z ? 180 : 0) .build(); diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index a3e2e4473..8704135a5 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -1,5 +1,7 @@ package com.simibubi.create.foundation.data; +import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock; +import static com.simibubi.create.foundation.data.CreateRegistrate.casingConnectivity; import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures; import java.util.HashMap; @@ -15,6 +17,8 @@ import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.CasingBlock; import com.simibubi.create.content.contraptions.components.crank.ValveHandleBlock; import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonGenerator; +import com.simibubi.create.content.contraptions.relays.encased.EncasedCTBehaviour; +import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock.Shape; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelItem; @@ -22,7 +26,6 @@ import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; import com.simibubi.create.content.logistics.block.funnel.FunnelItem; import com.simibubi.create.content.logistics.block.inventories.CrateBlock; import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; -import com.simibubi.create.foundation.block.connected.StandardCTBehaviour; import com.simibubi.create.foundation.config.StressConfigDefaults; import com.simibubi.create.foundation.item.TooltipHelper; import com.tterrag.registrate.builders.BlockBuilder; @@ -53,6 +56,22 @@ public class BuilderTransformers { .transform(ModelGen.customItemModel("cuckoo_clock", "item")); } + public static NonNullUnaryOperator> encasedShaft(String casing, + CTSpriteShiftEntry casingShift) { + return builder -> builder.initialProperties(SharedProperties::stone) + .properties(Block.Properties::nonOpaque) + .onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(casingShift))) + .onRegister(CreateRegistrate.casingConnectivity( + (block, cc) -> cc.make(block, casingShift, (s, f) -> f.getAxis() != s.get(EncasedShaftBlock.AXIS)))) + .blockstate((c, p) -> axisBlock(c, p, blockState -> p.models() + .getExistingFile(p.modLoc("block/encased_shaft/block_" + casing)), true)) + .transform(StressConfigDefaults.setNoImpact()) + .loot((p, b) -> p.registerDropping(b, AllBlocks.SHAFT.get())) + .item() + .model(AssetLookup.customItemModel("encased_shaft", "item_" + casing)) + .build(); + } + public static NonNullUnaryOperator> valveHandle( @Nullable DyeColor color) { return b -> b.initialProperties(SharedProperties::softMetal) @@ -74,9 +93,10 @@ public class BuilderTransformers { public static NonNullUnaryOperator> casing( CTSpriteShiftEntry ct) { - return b -> b.onRegister(connectedTextures(new StandardCTBehaviour(ct))) - .initialProperties(SharedProperties::stone) + return b -> b.initialProperties(SharedProperties::stone) .blockstate((c, p) -> p.simpleBlock(c.get())) + .onRegister(connectedTextures(new EncasedCTBehaviour(ct))) + .onRegister(casingConnectivity((block, cc) -> cc.makeCasing(block, ct))) .simpleItem(); } @@ -156,8 +176,9 @@ public class BuilderTransformers { ResourceLocation baseBlockModelLocation = Create.asResource("block/bearing/block"); ResourceLocation baseItemModelLocation = Create.asResource("block/bearing/item"); ResourceLocation topTextureLocation = Create.asResource("block/bearing_top" + (woodenTop ? "_wooden" : "")); - ResourceLocation nookTextureLocation = Create.asResource("block/" + (woodenTop ? "andesite" : "brass") + "_casing"); - ResourceLocation sideTextureLocation = Create.asResource("block/" + prefix + "_bearing_side"); + ResourceLocation nookTextureLocation = + Create.asResource("block/" + (woodenTop ? "andesite" : "brass") + "_casing"); + ResourceLocation sideTextureLocation = Create.asResource("block/" + prefix + "_bearing_side"); ResourceLocation backTextureLocation = Create.asResource("block/" + backTexture); return b -> b.initialProperties(SharedProperties::stone) .properties(p -> p.nonOpaque()) diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java index f30e4c089..70aced24b 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java @@ -4,13 +4,16 @@ import java.util.Collection; import java.util.IdentityHashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.function.BiConsumer; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Supplier; import java.util.stream.Collectors; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; import com.simibubi.create.content.AllSections; +import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity; import com.simibubi.create.foundation.block.IBlockVertexColor; import com.simibubi.create.foundation.block.connected.CTModel; import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; @@ -136,6 +139,11 @@ public class CreateRegistrate extends AbstractRegistrate { return entry -> onClient(() -> () -> registerCTBehviour(entry, behavior)); } + public static NonNullConsumer casingConnectivity( + BiConsumer consumer) { + return entry -> onClient(() -> () -> registerCasingConnectivity(entry, consumer)); + } + public static NonNullConsumer blockModel( Supplier> func) { return entry -> onClient(() -> () -> registerBlockModel(entry, func)); @@ -176,6 +184,12 @@ public class CreateRegistrate extends AbstractRegistrate { .register(entry.delegate, model -> new CTModel(model, behavior)); } + @OnlyIn(Dist.CLIENT) + private static void registerCasingConnectivity(T entry, + BiConsumer consumer) { + consumer.accept(entry, CreateClient.getCasingConnectivity()); + } + @OnlyIn(Dist.CLIENT) private static void registerBlockModel(Block entry, Supplier> func) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java index e27466235..fd37abb2a 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.foundation.tileEntity.behaviour; import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; +import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftBlock; import com.simibubi.create.content.logistics.item.filter.FilterItem; import net.minecraft.block.Block; @@ -36,7 +36,7 @@ public class ValueBoxRenderer { return NUDGE; if (item instanceof BlockItem) { Block block = ((BlockItem) item).getBlock(); - if (block instanceof ShaftBlock) + if (block instanceof AbstractShaftBlock) return NUDGE; if (block instanceof FenceBlock) return NUDGE; diff --git a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java index 297b86d9c..82ad97a9c 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java @@ -1,7 +1,63 @@ package com.simibubi.create.foundation.utility; +import static com.simibubi.create.AllBlocks.ADJUSTABLE_CRATE; +import static com.simibubi.create.AllBlocks.ADJUSTABLE_PULSE_REPEATER; +import static com.simibubi.create.AllBlocks.ADJUSTABLE_REPEATER; +import static com.simibubi.create.AllBlocks.ANDESITE_ENCASED_SHAFT; +import static com.simibubi.create.AllBlocks.BRASS_BELT_FUNNEL; +import static com.simibubi.create.AllBlocks.BRASS_TUNNEL; +import static com.simibubi.create.AllBlocks.CONTENT_OBSERVER; +import static com.simibubi.create.AllBlocks.LINEAR_CHASSIS; +import static com.simibubi.create.AllBlocks.MECHANICAL_DRILL; +import static com.simibubi.create.AllBlocks.MECHANICAL_HARVESTER; +import static com.simibubi.create.AllBlocks.MECHANICAL_PLOUGH; +import static com.simibubi.create.AllBlocks.MECHANICAL_SAW; +import static com.simibubi.create.AllBlocks.PISTON_EXTENSION_POLE; +import static com.simibubi.create.AllBlocks.POWERED_LATCH; +import static com.simibubi.create.AllBlocks.POWERED_TOGGLE_LATCH; +import static com.simibubi.create.AllBlocks.RADIAL_CHASSIS; +import static com.simibubi.create.AllBlocks.REDSTONE_CONTACT; +import static com.simibubi.create.AllBlocks.REDSTONE_LINK; +import static com.simibubi.create.AllBlocks.SECONDARY_LINEAR_CHASSIS; +import static com.simibubi.create.AllBlocks.SPEEDOMETER; +import static com.simibubi.create.AllBlocks.STOCKPILE_SWITCH; +import static com.simibubi.create.AllBlocks.STRESSOMETER; +import static com.simibubi.create.AllItems.ATTRIBUTE_FILTER; +import static com.simibubi.create.AllItems.BLOCKZAPPER; +import static com.simibubi.create.AllItems.CRAFTER_SLOT_COVER; +import static com.simibubi.create.AllItems.CRUSHED_COPPER; +import static com.simibubi.create.AllItems.CRUSHED_GOLD; +import static com.simibubi.create.AllItems.CRUSHED_IRON; +import static com.simibubi.create.AllItems.CRUSHED_ZINC; +import static com.simibubi.create.AllItems.GOLDEN_SHEET; +import static com.simibubi.create.AllItems.LAPIS_SHEET; +import static com.simibubi.create.AllItems.POWDERED_OBSIDIAN; +import static com.simibubi.create.AllItems.SCHEMATIC; +import static com.simibubi.create.AllItems.SCHEMATIC_AND_QUILL; +import static com.simibubi.create.AllItems.WAND_OF_SYMMETRY; +import static com.simibubi.create.AllItems.WHEAT_FLOUR; +import static com.simibubi.create.AllItems.WORLDSHAPER; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.ACACIA_WINDOW; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.ACACIA_WINDOW_PANE; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.BIRCH_WINDOW; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.BIRCH_WINDOW_PANE; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.DARK_OAK_WINDOW; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.DARK_OAK_WINDOW_PANE; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.JUNGLE_WINDOW; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.JUNGLE_WINDOW_PANE; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.OAK_WINDOW; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.OAK_WINDOW_PANE; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.ORNATE_IRON_WINDOW; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.ORNATE_IRON_WINDOW_PANE; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.SPRUCE_WINDOW; +import static com.simibubi.create.content.palettes.AllPaletteBlocks.SPRUCE_WINDOW_PANE; + +import java.util.HashMap; +import java.util.Map; + import com.google.common.collect.ImmutableList; import com.simibubi.create.Create; + import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; @@ -12,13 +68,6 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.ForgeRegistries; -import java.util.HashMap; -import java.util.Map; - -import static com.simibubi.create.AllBlocks.*; -import static com.simibubi.create.AllItems.*; -import static com.simibubi.create.content.palettes.AllPaletteBlocks.*; - @Mod.EventBusSubscriber @SuppressWarnings("unused") public class RemapHelper { @@ -26,6 +75,7 @@ public class RemapHelper { static { reMap.put("toggle_latch", POWERED_TOGGLE_LATCH.getId()); + reMap.put("encased_shaft", ANDESITE_ENCASED_SHAFT.getId()); // reMap.put("linked_extractor", ); reMap.put("limestone_stairs", Create.asResource("polished_limestone_stairs")); // reMap.put("window_in_a_block", ); @@ -123,7 +173,7 @@ public class RemapHelper { reMap.put("symmetry_wand", WAND_OF_SYMMETRY.getId()); reMap.put("terrain_zapper", WORLDSHAPER.getId()); // reMap.put("blazing_sword", ); - reMap.put("zinc_handle", HAND_CRANK.getId()); +// reMap.put("zinc_handle", HAND_CRANK.getId()); // reMap.put("rose_quartz_axe", ); // reMap.put("shadow_steel_pickaxe", ); reMap.put("placement_handgun", BLOCKZAPPER.getId()); diff --git a/src/main/resources/assets/create/models/block/encased_shaft/andesite.json b/src/main/resources/assets/create/models/block/encased_shaft/andesite.json deleted file mode 100644 index b30279387..000000000 --- a/src/main/resources/assets/create/models/block/encased_shaft/andesite.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/encased_shaft/base", - "textures": { - "casing": "create:block/andesite_casing" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/base.json b/src/main/resources/assets/create/models/block/encased_shaft/block.json similarity index 58% rename from src/main/resources/assets/create/models/block/encased_shaft/base.json rename to src/main/resources/assets/create/models/block/encased_shaft/block.json index b280f78ab..6a0feeea1 100644 --- a/src/main/resources/assets/create/models/block/encased_shaft/base.json +++ b/src/main/resources/assets/create/models/block/encased_shaft/block.json @@ -2,8 +2,8 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "1": "create:block/gearbox", - "particle": "create:block/andesite_casing" + "1": "#opening", + "particle": "#casing" }, "elements": [ { @@ -11,10 +11,10 @@ "from": [0, 0, 0], "to": [16, 16, 2], "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#casing"}, - "east": {"uv": [0, 14, 16, 16], "rotation": 270, "texture": "#casing"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#casing"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#casing"}, "south": {"uv": [0, 0, 16, 16], "texture": "#casing"}, - "west": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#casing"}, + "west": {"uv": [0, 0, 2, 16], "texture": "#casing"}, "up": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#casing"}, "down": {"uv": [0, 14, 16, 16], "texture": "#casing"} } @@ -33,10 +33,10 @@ "from": [0, 0, 14], "to": [16, 16, 16], "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#casing"}, - "east": {"uv": [0, 0, 16, 2], "rotation": 270, "texture": "#casing"}, - "south": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#casing"}, - "west": {"uv": [0, 0, 16, 2], "rotation": 90, "texture": "#casing"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#casing"}, + "east": {"uv": [0, 0, 2, 16], "texture": "#casing"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#casing"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#casing"}, "up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#casing"}, "down": {"uv": [0, 0, 16, 2], "texture": "#casing"} } @@ -46,8 +46,8 @@ "from": [0, 0, 2], "to": [2, 16, 14], "faces": { - "east": {"uv": [0, 2, 16, 14], "rotation": 270, "texture": "#casing"}, - "west": {"uv": [0, 2, 16, 14], "rotation": 90, "texture": "#casing"}, + "east": {"uv": [2, 0, 14, 16], "texture": "#casing"}, + "west": {"uv": [2, 0, 14, 16], "texture": "#casing"}, "up": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#casing"}, "down": {"uv": [0, 2, 2, 14], "texture": "#casing"} } @@ -57,8 +57,8 @@ "from": [14, 0, 2], "to": [16, 16, 14], "faces": { - "east": {"uv": [0, 2, 16, 14], "rotation": 270, "texture": "#casing"}, - "west": {"uv": [0, 2, 16, 14], "rotation": 90, "texture": "#casing"}, + "east": {"uv": [2, 0, 14, 16], "texture": "#casing"}, + "west": {"uv": [2, 0, 14, 16], "texture": "#casing"}, "up": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#casing"}, "down": {"uv": [14, 2, 16, 14], "texture": "#casing"} } diff --git a/src/main/resources/assets/create/models/block/encased_shaft/block_andesite.json b/src/main/resources/assets/create/models/block/encased_shaft/block_andesite.json new file mode 100644 index 000000000..450c8930a --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_shaft/block_andesite.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/encased_shaft/block", + "textures": { + "casing": "create:block/andesite_casing", + "opening": "create:block/gearbox" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/block_brass.json b/src/main/resources/assets/create/models/block/encased_shaft/block_brass.json new file mode 100644 index 000000000..8d9795e98 --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_shaft/block_brass.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/encased_shaft/block", + "textures": { + "casing": "create:block/brass_casing", + "opening": "create:block/brass_gearbox" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/brass.json b/src/main/resources/assets/create/models/block/encased_shaft/brass.json deleted file mode 100644 index 2d2907d69..000000000 --- a/src/main/resources/assets/create/models/block/encased_shaft/brass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/encased_shaft/base", - "textures": { - "casing": "create:block/brass_casing" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/copper.json b/src/main/resources/assets/create/models/block/encased_shaft/copper.json deleted file mode 100644 index e9407b71c..000000000 --- a/src/main/resources/assets/create/models/block/encased_shaft/copper.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/encased_shaft/base", - "textures": { - "casing": "create:block/copper_casing" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/item.json b/src/main/resources/assets/create/models/block/encased_shaft/item.json index badac1e31..91d41a757 100644 --- a/src/main/resources/assets/create/models/block/encased_shaft/item.json +++ b/src/main/resources/assets/create/models/block/encased_shaft/item.json @@ -2,9 +2,9 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "0": "create:block/andesite_casing", - "1": "create:block/gearbox", - "particle": "create:block/axis", + "0": "#casing", + "1": "#opening", + "particle": "#casing", "1_0": "create:block/axis", "1_1": "create:block/axis_top" }, diff --git a/src/main/resources/assets/create/models/block/encased_shaft/item_andesite.json b/src/main/resources/assets/create/models/block/encased_shaft/item_andesite.json new file mode 100644 index 000000000..ecee85bb5 --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_shaft/item_andesite.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/encased_shaft/item", + "textures": { + "casing": "create:block/andesite_casing", + "opening": "create:block/gearbox" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/item_brass.json b/src/main/resources/assets/create/models/block/encased_shaft/item_brass.json new file mode 100644 index 000000000..84c4f08bf --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_shaft/item_brass.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/encased_shaft/item", + "textures": { + "casing": "create:block/brass_casing", + "opening": "create:block/brass_gearbox" + } +} \ No newline at end of file From 00b01cac55f6b4ffc3eef33a5957ba296f6e41fb Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 2 Dec 2020 22:34:26 +0100 Subject: [PATCH 2/5] Fix pipe brackets not rendering on contraptions --- .../components/structureMovement/Contraption.java | 12 ++++++++---- .../structureMovement/ContraptionRenderer.java | 4 ++-- .../processing/BasinMovementBehaviour.java | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 41e20d42b..fd27685ce 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -112,7 +112,8 @@ public abstract class Contraption { private List pendingSubContraptions; // Client - public Map renderedTileEntities; + public Map presentTileEntities; + public List renderedTileEntities; public Contraption() { blocks = new HashMap<>(); @@ -124,7 +125,8 @@ public abstract class Contraption { fluidStorage = new HashMap<>(); glueToRemove = new ArrayList<>(); initialPassengers = new HashMap<>(); - renderedTileEntities = new HashMap<>(); + presentTileEntities = new HashMap<>(); + renderedTileEntities = new ArrayList<>(); pendingSubContraptions = new ArrayList<>(); stabilizedSubContraptions = new HashMap<>(); } @@ -512,6 +514,7 @@ public abstract class Contraption { public void readNBT(World world, CompoundNBT nbt, boolean spawnData) { blocks.clear(); + presentTileEntities.clear(); renderedTileEntities.clear(); nbt.getList("Blocks", 10) @@ -549,7 +552,8 @@ public abstract class Contraption { if (te instanceof KineticTileEntity) ((KineticTileEntity) te).setSpeed(0); te.getBlockState(); - renderedTileEntities.put(info.pos, te); + presentTileEntities.put(info.pos, te); + renderedTileEntities.add(te); } }); @@ -587,7 +591,7 @@ public abstract class Contraption { if (spawnData) fluidStorage.forEach((pos, mfs) -> { - TileEntity tileEntity = renderedTileEntities.get(pos); + TileEntity tileEntity = presentTileEntities.get(pos); if (!(tileEntity instanceof FluidTankTileEntity)) return; FluidTankTileEntity tank = (FluidTankTileEntity) tileEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java index 32398f9e5..7892307d8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java @@ -71,7 +71,7 @@ public class ContraptionRenderer { private static void renderTileEntities(World world, Contraption c, MatrixStack ms, MatrixStack msLocal, IRenderTypeBuffer buffer) { - TileEntityRenderHelper.renderTileEntities(world, c.renderedTileEntities.values(), ms, msLocal, buffer); + TileEntityRenderHelper.renderTileEntities(world, c.renderedTileEntities, ms, msLocal, buffer); } private static SuperByteBuffer buildStructureBuffer(Contraption c, RenderType layer) { @@ -86,7 +86,7 @@ public class ContraptionRenderer { Random random = new Random(); BufferBuilder builder = new BufferBuilder(DefaultVertexFormats.BLOCK.getIntegerSize()); builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - renderWorld.setTileEntities(c.renderedTileEntities.values()); + renderWorld.setTileEntities(c.presentTileEntities.values()); for (BlockInfo info : c.getBlocks() .values()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java index 4412e0b0c..a3de35c6c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java @@ -52,7 +52,7 @@ public class BasinMovementBehaviour extends MovementBehaviour { } context.tileData.put(key, itemStackHandler.serializeNBT()); }); - TileEntity tileEntity = context.contraption.renderedTileEntities.get(context.localPos); + TileEntity tileEntity = context.contraption.presentTileEntities.get(context.localPos); if (tileEntity instanceof BasinTileEntity) ((BasinTileEntity) tileEntity).readOnlyItems(context.tileData); context.temporaryData = false; // did already dump, so can't any more From 16705c5cb53a703cfd643d177b22532c5a778236 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 3 Dec 2020 20:41:55 +0100 Subject: [PATCH 3/5] A flock of fluids - Added Fluids for chocolate, honey, milk and tea --- src/generated/resources/.cache/cache | 41 ++++--- .../assets/create/blockstates/chocolate.json | 7 ++ .../assets/create/blockstates/fluid_pipe.json | 110 +++++++++--------- .../assets/create/blockstates/honey.json | 7 ++ .../create/blockstates/radial_chassis.json | 48 ++++---- .../resources/assets/create/lang/en_ud.json | 10 +- .../resources/assets/create/lang/en_us.json | 10 +- .../assets/create/lang/unfinished/de_de.json | 12 +- .../assets/create/lang/unfinished/fr_fr.json | 12 +- .../assets/create/lang/unfinished/it_it.json | 12 +- .../assets/create/lang/unfinished/ja_jp.json | 12 +- .../assets/create/lang/unfinished/ko_kr.json | 12 +- .../assets/create/lang/unfinished/nl_nl.json | 12 +- .../assets/create/lang/unfinished/pt_br.json | 12 +- .../assets/create/lang/unfinished/ru_ru.json | 12 +- .../assets/create/lang/unfinished/zh_cn.json | 12 +- .../assets/create/models/block/chocolate.json | 5 + .../assets/create/models/block/honey.json | 5 + .../create/models/item/chocolate_bucket.json | 6 + .../create/models/item/honey_bucket.json | 6 + .../create/recipes/emptying/honey_bottle.json | 17 +++ .../create/recipes/emptying/milk_bucket.json | 17 +++ .../create/recipes/filling/honey_bottle.json | 17 +++ .../create/recipes/filling/milk_bucket.json | 17 +++ .../data/create/recipes/mixing/chocolate.json | 22 ++++ .../data/create/recipes/mixing/tea.json | 24 ++++ .../data/forge/tags/fluids/honey.json | 7 ++ .../data/forge/tags/fluids/milk.json | 7 ++ .../data/minecraft/tags/fluids/water.json | 9 ++ .../java/com/simibubi/create/AllFluids.java | 74 +++++++++++- .../java/com/simibubi/create/AllTags.java | 6 + .../com/simibubi/create/CreateClient.java | 1 + .../contraptions/fluids/VirtualFluid.java | 47 ++++++++ .../fluids/potion/PotionFluid.java | 39 +------ .../processing/ProcessingRecipeBuilder.java | 2 + .../simibubi/create/events/ClientEvents.java | 63 ++++++++-- .../simibubi/create/events/CommonEvents.java | 34 +++++- .../foundation/data/CreateRegistrate.java | 12 +- .../data/recipe/EmptyingRecipeGen.java | 25 ++-- .../data/recipe/FillingRecipeGen.java | 25 ++-- .../data/recipe/MixingRecipeGen.java | 14 +++ .../foundation/fluid/FluidIngredient.java | 7 ++ .../create/textures/fluid/chocolate_flow.png | Bin 0 -> 16913 bytes .../textures/fluid/chocolate_flow.png.mcmeta | 5 + .../create/textures/fluid/chocolate_still.png | Bin 0 -> 4961 bytes .../textures/fluid/chocolate_still.png.mcmeta | 5 + .../create/textures/fluid/honey_flow.png | Bin 0 -> 17371 bytes .../textures/fluid/honey_flow.png.mcmeta | 5 + .../create/textures/fluid/milk_flow.png | Bin 0 -> 13348 bytes .../textures/fluid/milk_flow.png.mcmeta | 5 + .../create/textures/fluid/milk_still.png | Bin 0 -> 4677 bytes .../textures/fluid/milk_still.png.mcmeta | 5 + .../assets/create/textures/fluid/tea_flow.png | Bin 0 -> 16568 bytes .../create/textures/fluid/tea_flow.png.mcmeta | 5 + .../create/textures/fluid/tea_still.png | Bin 0 -> 4918 bytes .../textures/fluid/tea_still.png.mcmeta | 5 + .../create/textures/item/chocolate_bucket.png | Bin 0 -> 302 bytes .../create/textures/item/honey_bucket.png | Bin 0 -> 297 bytes 58 files changed, 702 insertions(+), 182 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/chocolate.json create mode 100644 src/generated/resources/assets/create/blockstates/honey.json create mode 100644 src/generated/resources/assets/create/models/block/chocolate.json create mode 100644 src/generated/resources/assets/create/models/block/honey.json create mode 100644 src/generated/resources/assets/create/models/item/chocolate_bucket.json create mode 100644 src/generated/resources/assets/create/models/item/honey_bucket.json create mode 100644 src/generated/resources/data/create/recipes/emptying/honey_bottle.json create mode 100644 src/generated/resources/data/create/recipes/emptying/milk_bucket.json create mode 100644 src/generated/resources/data/create/recipes/filling/honey_bottle.json create mode 100644 src/generated/resources/data/create/recipes/filling/milk_bucket.json create mode 100644 src/generated/resources/data/create/recipes/mixing/chocolate.json create mode 100644 src/generated/resources/data/create/recipes/mixing/tea.json create mode 100644 src/generated/resources/data/forge/tags/fluids/honey.json create mode 100644 src/generated/resources/data/forge/tags/fluids/milk.json create mode 100644 src/generated/resources/data/minecraft/tags/fluids/water.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java create mode 100644 src/main/resources/assets/create/textures/fluid/chocolate_flow.png create mode 100644 src/main/resources/assets/create/textures/fluid/chocolate_flow.png.mcmeta create mode 100644 src/main/resources/assets/create/textures/fluid/chocolate_still.png create mode 100644 src/main/resources/assets/create/textures/fluid/chocolate_still.png.mcmeta create mode 100644 src/main/resources/assets/create/textures/fluid/honey_flow.png create mode 100644 src/main/resources/assets/create/textures/fluid/honey_flow.png.mcmeta create mode 100644 src/main/resources/assets/create/textures/fluid/milk_flow.png create mode 100644 src/main/resources/assets/create/textures/fluid/milk_flow.png.mcmeta create mode 100644 src/main/resources/assets/create/textures/fluid/milk_still.png create mode 100644 src/main/resources/assets/create/textures/fluid/milk_still.png.mcmeta create mode 100644 src/main/resources/assets/create/textures/fluid/tea_flow.png create mode 100644 src/main/resources/assets/create/textures/fluid/tea_flow.png.mcmeta create mode 100644 src/main/resources/assets/create/textures/fluid/tea_still.png create mode 100644 src/main/resources/assets/create/textures/fluid/tea_still.png.mcmeta create mode 100644 src/main/resources/assets/create/textures/item/chocolate_bucket.png create mode 100644 src/main/resources/assets/create/textures/item/honey_bucket.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index d8a091480..7a8b08638 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -46,6 +46,7 @@ e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.js 2ca82a3c4bf7ba1a9cf3bb674e786d9b23b020a4 assets/create/blockstates/chiseled_limestone.json cbcdab42d01f8085db9e5f8db884f8adf7f17625 assets/create/blockstates/chiseled_scoria.json 291952556c52fba2af5bbd793c71af81abd27e71 assets/create/blockstates/chiseled_weathered_limestone.json +470e8c6a9c37b91fa745bc4f6e9d3740bd72467e assets/create/blockstates/chocolate.json b59324f051f21d8ce1a48a08f4721a61a3c414d6 assets/create/blockstates/chute.json 4947c261310445fa55b92038326ac82967d192dd assets/create/blockstates/clockwork_bearing.json 1f33834c685e3243882acfe20183fe64dfa872be assets/create/blockstates/clutch.json @@ -139,7 +140,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json +499aade14db59f62b46e8a266998feb41e1922a1 assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json 5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json @@ -175,6 +176,7 @@ a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.jso 13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json 6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json +4572b90f5d6c586e145f2c7a55664c3cb734bd2b assets/create/blockstates/honey.json be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_framed_glass.json 18d9fdaa1352a7e2ec91135e46dae5c02ccd8f8f assets/create/blockstates/horizontal_framed_glass_pane.json 30ec347dfc827a9ae52cf3da964b828005acede1 assets/create/blockstates/hose_pulley.json @@ -333,7 +335,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json 61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json -8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json +9e7ea57c58889fa0021e3c4f19da3f763108399f assets/create/blockstates/radial_chassis.json 45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json @@ -395,17 +397,17 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -d85a97025cad5fad4410a1bc46b59b3b72096524 assets/create/lang/en_ud.json -57c7008d6c3d1deda3eaf5703acecbd8464beb8f assets/create/lang/en_us.json -f1cd3a70b1567ad73681ad42ca0d754882845b4a assets/create/lang/unfinished/de_de.json -4358a9a4ae0cd69944590eb1b636c318e07679d8 assets/create/lang/unfinished/fr_fr.json -3f2ed1c2d1ae12ffe890be971ef498211d404426 assets/create/lang/unfinished/it_it.json -921f766a873e1c215a5874164bcbb580c6e63020 assets/create/lang/unfinished/ja_jp.json -ea1d59990f4ce87ca33ae14000869762bb517fcb assets/create/lang/unfinished/ko_kr.json -5d87a8b82204010fbd9ed765b566026be0a02ae6 assets/create/lang/unfinished/nl_nl.json -25157ef8e492c71b2d0d840048b660d92d1a3644 assets/create/lang/unfinished/pt_br.json -47a8850c0e417a32c1c47d273f0aac11808f7ddf assets/create/lang/unfinished/ru_ru.json -e2b80140f0ffd04335d7551c0feff9aa3c9913b9 assets/create/lang/unfinished/zh_cn.json +f3dbaf7f4421e8af956ecf17ce7cedef28cbbfe8 assets/create/lang/en_ud.json +9697cd407f7a049b129fe5e76c6a17969bcf9e68 assets/create/lang/en_us.json +062b0e2a0aac1eea9a3de85e66377091ae21f76d assets/create/lang/unfinished/de_de.json +8a117682ad45996564fc6cf6c22c92d7f17ad29a assets/create/lang/unfinished/fr_fr.json +1c3a68ebd422f6d40d178162f4ab7b627a48f49b assets/create/lang/unfinished/it_it.json +349213d72b60ed084ffd8dd18eadcf97f97a1fe5 assets/create/lang/unfinished/ja_jp.json +d29a71eb5c3955d487a1c3ff5bd7b065dc89e7f7 assets/create/lang/unfinished/ko_kr.json +0245f101e497d0895a7a070a3b4c07a3f62ad465 assets/create/lang/unfinished/nl_nl.json +12ec39553e80e1d740093b50860cbd2b506b08ba assets/create/lang/unfinished/pt_br.json +1ad44c155b71cdcd3c1a8763758e8b9f53941ee2 assets/create/lang/unfinished/ru_ru.json +f750f0cee38a3020c92ca6dae48b28f84b22f007 assets/create/lang/unfinished/zh_cn.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json @@ -511,6 +513,7 @@ cd7751090cf3d55296b8e415d0af9b6f18d69770 assets/create/models/block/chiseled_gab d2e195aa2e90c712e51d855a9a4a334b52f62a69 assets/create/models/block/chiseled_limestone.json ac07568fa7b2d3fa84d0fe89a498514d30514291 assets/create/models/block/chiseled_scoria.json ecb2b85ee210dce329d2be66b98d0f0d4e6fc223 assets/create/models/block/chiseled_weathered_limestone.json +4156227e18c0896ce83f260f71b939abbbf4f01e assets/create/models/block/chocolate.json 30fe120af3cb32faf0729df4d2cdf868f804be17 assets/create/models/block/clockwork_bearing.json 70406933cc4fa5471af6e562fd84a397347dba17 assets/create/models/block/copper_casing.json b2c528cfd24a5cb0cb96c45d0a914f1090f8c32b assets/create/models/block/copper_valve_handle.json @@ -751,6 +754,7 @@ a68cd40ffb769b195437107f4a2c2188b222b74a assets/create/models/block/gray_sail.js 17b651233c62b928f0228562a7f6e7a2b7b2d6b7 assets/create/models/block/green_sail.json 1438b8ce54ac5557b8f10dcef94f3525eae19461 assets/create/models/block/green_seat.json cc7ce9b6bc687ad5027a67c3bf22bdf5bcd71674 assets/create/models/block/green_valve_handle.json +5bbe7e5322020d205d2c60bc14e4b45b317a193c assets/create/models/block/honey.json 9730fcb02f679087e81e24c836751e625be6a298 assets/create/models/block/horizontal_framed_glass.json d13df8a5920c5778d98081fb0e97f045e2fd46a2 assets/create/models/block/horizontal_framed_glass_pane_noside.json 3e975bec02e2670ce2b1868cebcbd780a5ebf3f8 assets/create/models/block/horizontal_framed_glass_pane_noside_alt.json @@ -1155,6 +1159,7 @@ afd697168c9786eb80e54eccdc6a23afa6c7fb0e assets/create/models/item/chiseled_gabb 0cb1692f6cdd007ac690fd1f0222dde3429d136f assets/create/models/item/chiseled_limestone.json a47fbe5f2da79080d99ef0975bfa8da4d08f8be4 assets/create/models/item/chiseled_scoria.json 70232ce9b88119fb383717e2c1ad113f7aad6a99 assets/create/models/item/chiseled_weathered_limestone.json +eabf1870127d78c920305228eb51ddf36c44d016 assets/create/models/item/chocolate_bucket.json fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets/create/models/item/chute.json d418205c83d3e57c830755ee8c09e2962353e493 assets/create/models/item/cinder_flour.json c1da21be9f1af4f7a2ef4ec9cd92195d65ada316 assets/create/models/item/clockwork_bearing.json @@ -1298,6 +1303,7 @@ ecb9f32f62d3fa43fb226ab85adc2eb229fdfb77 assets/create/models/item/green_valve_h 398b1a7c76c7bdb6a23b1248fdce98f6d835467f assets/create/models/item/hand_crank.json cfab82a2cf7495d21778c1de9730a26afbdd523d assets/create/models/item/handheld_blockzapper.json dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.json +967695ab65edb8cb19e9759425f2d12d75406122 assets/create/models/item/honey_bucket.json e7ec65ad5be13cae5f7d60836b8df9e4a5baad56 assets/create/models/item/horizontal_framed_glass.json f0e3b2b8a553b6e61746c922c27302dabfff71b6 assets/create/models/item/horizontal_framed_glass_pane.json ff92f6a9dfb73a6ee1eaaed3279c89390ff04a80 assets/create/models/item/hose_pulley.json @@ -2862,6 +2868,8 @@ ddda28bb6efc43b7e3149756daf53e1664187283 data/create/recipes/dolomite_cobbleston 500ecdfdcf34e9d26256948e206aab4f0b79e659 data/create/recipes/dolomite_cobblestone_wall_from_dolomite_cobblestone_stonecutting.json ff39e629b242ae91e23aec86b0a1f757dd938305 data/create/recipes/dolomite_pillar.json b4a8d14d9a20e812e0acb691b5b511a87e8b0576 data/create/recipes/dolomite_pillar_from_dolomite_stonecutting.json +20b7c7c62fa2e33199e08188dd8836844a6d9cfd data/create/recipes/emptying/honey_bottle.json +28a0f9a45671de2e6db19fa66374e245feeed142 data/create/recipes/emptying/milk_bucket.json 0e11aa1accb71ed62e212f23a7069b7b7b4e8119 data/create/recipes/fancy_andesite_bricks_from_andesite_stonecutting.json 8b86fc9a9416adeaab3f26192a73a481887675c3 data/create/recipes/fancy_andesite_bricks_slab.json c7b762b25c7a6705dba3e922e981be851ac4f36b data/create/recipes/fancy_andesite_bricks_slab_from_fancy_andesite_bricks_stonecutting.json @@ -2925,6 +2933,8 @@ bd355332d17adcb0460b1d43146ca288efb78395 data/create/recipes/fancy_weathered_lim d2ab9ce73636773165564506580f2ec13bd1fc50 data/create/recipes/fancy_weathered_limestone_bricks_stairs_from_fancy_weathered_limestone_bricks_stonecutting.json 36947f27d2b2e57b00440fd5acd06a7554e5a387 data/create/recipes/fancy_weathered_limestone_bricks_wall.json 1d0e41ca98e48073c72adf4077610c96e592f9a5 data/create/recipes/fancy_weathered_limestone_bricks_wall_from_fancy_weathered_limestone_bricks_stonecutting.json +c8ca74a6cd071308a1750a2ad1153e79422598a0 data/create/recipes/filling/honey_bottle.json +c83e77a9799b6ca34dd73aa76b56159f2103c48c data/create/recipes/filling/milk_bucket.json 5b8bbde7f8b270ab75fac18d6858f2fadbc0efa3 data/create/recipes/framed_glass_from_glass_colorless_stonecutting.json d697de0c9b706ca4e18da7a2d769e7e5fe8d769d data/create/recipes/framed_glass_pane.json a0dae50faaa1b7142bb4309675e3084c68daa547 data/create/recipes/gabbro_bricks_from_gabbro_stonecutting.json @@ -3043,9 +3053,11 @@ eec880075efd6008b604a4b8064d782752b4bad6 data/create/recipes/milling/wool.json b3cc5e61bab40ca6135dc1f706f3ab447e9f78bf data/create/recipes/mixing/andesite_alloy.json ce9dc7dacb85cb23a7187c19a115b40e597ad36b data/create/recipes/mixing/andesite_alloy_from_zinc.json 3417f9399ce0fb32fc4bce94c772b40d780c9006 data/create/recipes/mixing/brass_ingot.json +ab602a53a5d8d057aad910dd1c5529cde2d587ab data/create/recipes/mixing/chocolate.json 0e29b4ce13750aab5a60ae54cbec8776569b35e0 data/create/recipes/mixing/chromatic_compound.json d9a3dff1288d675ab812eef1eb73cb27dcc71bd2 data/create/recipes/mixing/crushed_brass.json 00b165ea38d834c7955440e87062004a8182c3f8 data/create/recipes/mixing/gunpowder.json +0f89b3f2d81585591513619b8d1e8694eb874316 data/create/recipes/mixing/tea.json 3279bd1a34217a19bc9992a2ad87629390dd003f data/create/recipes/mixing/temp_cobble.json 3295a2195707f952a83deb3bed10b43570b215e5 data/create/recipes/mixing/temp_lava.json 1998c6f84f871d6da58ec29d729401d18f8f1aa1 data/create/recipes/mossy_andesite_from_andesite_stonecutting.json @@ -3301,6 +3313,8 @@ d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/blocks/ores/zinc.json ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/blocks/storage_blocks/brass.json f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/blocks/storage_blocks/copper.json 7f71a774800111e50b42de0e6159ed2d2a807d32 data/forge/tags/blocks/storage_blocks/zinc.json +391c9b2be5740aea943a8a5fe27eb327e2d973b0 data/forge/tags/fluids/honey.json +aa729fedc4fcca0f0a18bf7b00075af06bf5357f data/forge/tags/fluids/milk.json d9ffc62a496946fc4848934e7c0a6e917337f8be data/forge/tags/items/beacon_payment.json 05ca51cdc60a5e109b5a0e3b782de13d34ebcb24 data/forge/tags/items/cobblestone.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/items/glass/colorless.json @@ -3330,6 +3344,7 @@ f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/items/storage_blocks/co 29e6f7e3d4be9a9b0af1fca5d32fa55e29905ce2 data/minecraft/tags/blocks/slabs.json 0d188ad2c33d10ee8f0d455c4e63a4460a8302fb data/minecraft/tags/blocks/stairs.json 92584f914c53e00c111f9ff5e3894e2e3594946b data/minecraft/tags/blocks/walls.json +09d26bcd0f94459f945219997277c4fbf14adeb7 data/minecraft/tags/fluids/water.json 29e6f7e3d4be9a9b0af1fca5d32fa55e29905ce2 data/minecraft/tags/items/slabs.json 0d188ad2c33d10ee8f0d455c4e63a4460a8302fb data/minecraft/tags/items/stairs.json 92584f914c53e00c111f9ff5e3894e2e3594946b data/minecraft/tags/items/walls.json diff --git a/src/generated/resources/assets/create/blockstates/chocolate.json b/src/generated/resources/assets/create/blockstates/chocolate.json new file mode 100644 index 000000000..d373c6e9b --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/chocolate.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/chocolate" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 3b646b920..a8a9a60dc 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -60,10 +60,10 @@ }, { "when": { - "down": "false", + "south": "false", "north": "true", - "up": "true", - "south": "false" + "down": "false", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_x" @@ -71,10 +71,10 @@ }, { "when": { - "down": "false", + "south": "true", "north": "false", - "up": "true", - "south": "true" + "down": "false", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_x" @@ -82,10 +82,10 @@ }, { "when": { - "down": "true", + "south": "false", "north": "true", - "up": "false", - "south": "false" + "down": "true", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_x" @@ -93,10 +93,10 @@ }, { "when": { - "down": "true", + "south": "true", "north": "false", - "up": "false", - "south": "true" + "down": "true", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_x" @@ -104,10 +104,10 @@ }, { "when": { + "south": "false", + "north": "false", "down": "true", - "north": "false", - "up": "true", - "south": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -115,10 +115,10 @@ }, { "when": { + "south": "false", + "north": "false", "down": "false", - "north": "false", - "up": "true", - "south": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -126,10 +126,10 @@ }, { "when": { + "south": "false", + "north": "false", "down": "true", - "north": "false", - "up": "false", - "south": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -137,10 +137,10 @@ }, { "when": { - "down": "false", + "south": "true", "north": "true", - "up": "false", - "south": "true" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -148,10 +148,10 @@ }, { "when": { - "down": "false", + "south": "false", "north": "true", - "up": "false", - "south": "false" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -159,10 +159,10 @@ }, { "when": { - "down": "false", + "south": "true", "north": "false", - "up": "false", - "south": "true" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -170,10 +170,10 @@ }, { "when": { - "down": "false", + "south": "false", "north": "false", - "up": "false", - "south": "false" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/none_x" @@ -181,10 +181,10 @@ }, { "when": { + "south": "true", "west": "true", - "east": "false", "north": "false", - "south": "true" + "east": "false" }, "apply": { "model": "create:block/fluid_pipe/lu_y" @@ -192,10 +192,10 @@ }, { "when": { + "south": "true", "west": "false", - "east": "true", "north": "false", - "south": "true" + "east": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_y" @@ -203,10 +203,10 @@ }, { "when": { + "south": "false", "west": "true", - "east": "false", "north": "true", - "south": "false" + "east": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_y" @@ -214,10 +214,10 @@ }, { "when": { + "south": "false", "west": "false", - "east": "true", "north": "true", - "south": "false" + "east": "true" }, "apply": { "model": "create:block/fluid_pipe/rd_y" @@ -225,10 +225,10 @@ }, { "when": { + "south": "true", "west": "false", - "east": "false", "north": "true", - "south": "true" + "east": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -236,10 +236,10 @@ }, { "when": { + "south": "true", "west": "false", - "east": "false", "north": "false", - "south": "true" + "east": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -247,10 +247,10 @@ }, { "when": { + "south": "false", "west": "false", - "east": "false", "north": "true", - "south": "false" + "east": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -258,10 +258,10 @@ }, { "when": { + "south": "false", "west": "true", - "east": "true", "north": "false", - "south": "false" + "east": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -269,10 +269,10 @@ }, { "when": { + "south": "false", "west": "true", - "east": "false", "north": "false", - "south": "false" + "east": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -280,10 +280,10 @@ }, { "when": { + "south": "false", "west": "false", - "east": "true", "north": "false", - "south": "false" + "east": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -291,10 +291,10 @@ }, { "when": { + "south": "false", "west": "false", - "east": "false", "north": "false", - "south": "false" + "east": "false" }, "apply": { "model": "create:block/fluid_pipe/none_y" diff --git a/src/generated/resources/assets/create/blockstates/honey.json b/src/generated/resources/assets/create/blockstates/honey.json new file mode 100644 index 000000000..60b561e56 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/honey.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/honey" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/radial_chassis.json b/src/generated/resources/assets/create/blockstates/radial_chassis.json index 9d00ea8b1..899486339 100644 --- a/src/generated/resources/assets/create/blockstates/radial_chassis.json +++ b/src/generated/resources/assets/create/blockstates/radial_chassis.json @@ -89,8 +89,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "x" + "axis": "x", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -99,8 +99,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "y" + "axis": "y", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -109,8 +109,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "z" + "axis": "z", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky", @@ -119,8 +119,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "x" + "axis": "x", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -129,8 +129,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "y" + "axis": "y", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -139,8 +139,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "z" + "axis": "z", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_z", @@ -149,8 +149,8 @@ }, { "when": { - "sticky_north": "true", - "axis": "x" + "axis": "x", + "sticky_north": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky" @@ -158,8 +158,8 @@ }, { "when": { - "sticky_north": "true", - "axis": "y" + "axis": "y", + "sticky_north": "true" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -168,8 +168,8 @@ }, { "when": { - "sticky_north": "true", - "axis": "z" + "axis": "z", + "sticky_north": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -178,8 +178,8 @@ }, { "when": { - "sticky_north": "false", - "axis": "x" + "axis": "x", + "sticky_north": "false" }, "apply": { "model": "create:block/radial_chassis_side_x" @@ -187,8 +187,8 @@ }, { "when": { - "sticky_north": "false", - "axis": "y" + "axis": "y", + "sticky_north": "false" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -197,8 +197,8 @@ }, { "when": { - "sticky_north": "false", - "axis": "z" + "axis": "z", + "sticky_north": "false" }, "apply": { "model": "create:block/radial_chassis_side_x", diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index bdf06c6c1..64fb4b653 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -47,6 +47,7 @@ "block.create.chiseled_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u05DF\u01DDs\u0131\u0265\u0186", "block.create.chiseled_scoria": "\u0250\u0131\u0279o\u0254S p\u01DD\u05DF\u01DDs\u0131\u0265\u0186", "block.create.chiseled_weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u05DF\u01DDs\u0131\u0265\u0186", + "block.create.chocolate": "\u01DD\u0287\u0250\u05DFo\u0254o\u0265\u0186", "block.create.chute": "\u01DD\u0287n\u0265\u0186", "block.create.clockwork_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186", "block.create.clutch": "\u0265\u0254\u0287n\u05DF\u0186", @@ -176,6 +177,7 @@ "block.create.green_seat": "\u0287\u0250\u01DDS u\u01DD\u01DD\u0279\u2141", "block.create.green_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u01DD\u01DD\u0279\u2141", "block.create.hand_crank": "\u029Eu\u0250\u0279\u0186 pu\u0250H", + "block.create.honey": "\u028E\u01DDuoH", "block.create.horizontal_framed_glass": "ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0287uoz\u0131\u0279oH", "block.create.horizontal_framed_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0287uoz\u0131\u0279oH", "block.create.hose_pulley": "\u028E\u01DD\u05DF\u05DFn\u0500 \u01DDsoH", @@ -400,7 +402,11 @@ "entity.create.seat": "\u0287\u0250\u01DDS", "entity.create.stationary_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0250uo\u0131\u0287\u0250\u0287S", "entity.create.super_glue": "\u01DDn\u05DF\u2141 \u0279\u01DDdnS", - "fluid.create.flowing_potion": "uo\u0131\u0287o\u0500", + "fluid.create.chocolate": "\u01DD\u0287\u0250\u05DFo\u0254o\u0265\u0186", + "fluid.create.honey": "\u028E\u01DDuoH", + "fluid.create.milk": "\u029E\u05DF\u0131W", + "fluid.create.potion": "uo\u0131\u0287o\u0500", + "fluid.create.tea": "\u0250\u01DD\u27D8 s,\u0279\u01DDp\u05DF\u0131n\u15FA", "item.create.andesite_alloy": "\u028Eo\u05DF\u05DF\u2C6F \u01DD\u0287\u0131s\u01DDpu\u2C6F", "item.create.attribute_filter": "\u0279\u01DD\u0287\u05DF\u0131\u2132 \u01DD\u0287nq\u0131\u0279\u0287\u0287\u2C6F", "item.create.belt_connector": "\u0287\u05DF\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW", @@ -410,6 +416,7 @@ "item.create.brass_nugget": "\u0287\u01DDbbnN ss\u0250\u0279\u15FA", "item.create.brass_sheet": "\u0287\u01DD\u01DD\u0265S ss\u0250\u0279\u15FA", "item.create.chest_minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W \u0287s\u01DD\u0265\u0186", + "item.create.chocolate_bucket": "\u0287\u01DD\u029E\u0254n\u15FA \u01DD\u0287\u0250\u05DFo\u0254o\u0265\u0186", "item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186", "item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186", "item.create.copper_ingot": "\u0287obuI \u0279\u01DDddo\u0186", @@ -433,6 +440,7 @@ "item.create.golden_sheet": "\u0287\u01DD\u01DD\u0265S u\u01DDp\u05DFo\u2141", "item.create.handheld_blockzapper": "\u0279\u01DDdd\u0250z\u029E\u0254o\u05DF\u15FA p\u05DF\u01DD\u0265pu\u0250H", "item.create.handheld_worldshaper": "\u0279\u01DDd\u0250\u0265sp\u05DF\u0279oM p\u05DF\u01DD\u0265pu\u0250H", + "item.create.honey_bucket": "\u0287\u01DD\u029E\u0254n\u15FA \u028E\u01DDuoH", "item.create.integrated_circuit": "\u0287\u0131n\u0254\u0279\u0131\u0186 p\u01DD\u0287\u0250\u0279b\u01DD\u0287uI", "item.create.iron_sheet": "\u0287\u01DD\u01DD\u0265S uo\u0279I", "item.create.lapis_sheet": "\u0287\u01DD\u01DD\u0265S s\u0131d\u0250\uA780", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 6d798ec12..596416921 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -50,6 +50,7 @@ "block.create.chiseled_limestone": "Chiseled Limestone", "block.create.chiseled_scoria": "Chiseled Scoria", "block.create.chiseled_weathered_limestone": "Chiseled Weathered Limestone", + "block.create.chocolate": "Chocolate", "block.create.chute": "Chute", "block.create.clockwork_bearing": "Clockwork Bearing", "block.create.clutch": "Clutch", @@ -179,6 +180,7 @@ "block.create.green_seat": "Green Seat", "block.create.green_valve_handle": "Green Valve Handle", "block.create.hand_crank": "Hand Crank", + "block.create.honey": "Honey", "block.create.horizontal_framed_glass": "Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "Horizontal Framed Glass Pane", "block.create.hose_pulley": "Hose Pulley", @@ -405,7 +407,11 @@ "entity.create.stationary_contraption": "Stationary Contraption", "entity.create.super_glue": "Super Glue", - "fluid.create.flowing_potion": "Potion", + "fluid.create.chocolate": "Chocolate", + "fluid.create.honey": "Honey", + "fluid.create.milk": "Milk", + "fluid.create.potion": "Potion", + "fluid.create.tea": "Builder's Tea", "item.create.andesite_alloy": "Andesite Alloy", "item.create.attribute_filter": "Attribute Filter", @@ -416,6 +422,7 @@ "item.create.brass_nugget": "Brass Nugget", "item.create.brass_sheet": "Brass Sheet", "item.create.chest_minecart_contraption": "Chest Minecart Contraption", + "item.create.chocolate_bucket": "Chocolate Bucket", "item.create.chromatic_compound": "Chromatic Compound", "item.create.cinder_flour": "Cinder Flour", "item.create.copper_ingot": "Copper Ingot", @@ -439,6 +446,7 @@ "item.create.golden_sheet": "Golden Sheet", "item.create.handheld_blockzapper": "Handheld Blockzapper", "item.create.handheld_worldshaper": "Handheld Worldshaper", + "item.create.honey_bucket": "Honey Bucket", "item.create.integrated_circuit": "Integrated Circuit", "item.create.iron_sheet": "Iron Sheet", "item.create.lapis_sheet": "Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index a1454ec4e..3aa4db383 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1054", + "_": "Missing Localizations: 1062", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone", "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing", "block.create.clutch": "Kupplung", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "UNLOCALIZED: Hand Crank", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.super_glue": "UNLOCALIZED: Super Glue", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy", "item.create.attribute_filter": "UNLOCALIZED: Attribute Filter", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "UNLOCALIZED: Brass Nugget", "item.create.brass_sheet": "UNLOCALIZED: Brass Sheet", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "UNLOCALIZED: Copper Ingot", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.handheld_blockzapper": "Blockpistole", "item.create.handheld_worldshaper": "UNLOCALIZED: Handheld Worldshaper", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit", "item.create.iron_sheet": "Eisenblech", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index c3c05ab81..b917b0a65 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 684", + "_": "Missing Localizations: 692", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone", "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "Roulement mécanique horloger", "block.create.clutch": "Embrayage", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "Manivelle", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "Fenêtre en verre horizontale", "block.create.horizontal_framed_glass_pane": "Vitre encadrée horizontale", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.super_glue": "UNLOCALIZED: Super Glue", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "Alliage d'andésite", "item.create.attribute_filter": "Filtre d'attribut", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "Pépite de laiton", "item.create.brass_sheet": "Plaques de laiton", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "Composé chromatique", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "Lingot de cuivre", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.handheld_blockzapper": "Blockzappeur portable", "item.create.handheld_worldshaper": "Térraformeur portable", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "Circuit intégré", "item.create.iron_sheet": "Plaque de Fer", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 2437edf40..bc568f600 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 668", + "_": "Missing Localizations: 676", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone", "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "Supporto del Orologio", "block.create.clutch": "Frizione", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "Manovella", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "Finestra Orizzontale Vetro", "block.create.horizontal_framed_glass_pane": "Pannello di Finestra Orizzontale Vetro", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.super_glue": "UNLOCALIZED: Super Glue", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "Lega di Andesite", "item.create.attribute_filter": "Filtro Attributi", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "Pepita di Ottone", "item.create.brass_sheet": "Lamiera di Ottone", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "Composto Cromatico", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "Lingotto di Rame", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.handheld_blockzapper": "Zapper di Blocchi Portatile", "item.create.handheld_worldshaper": "Plasmatore del Mondo Portatile", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "Circuito Integrato", "item.create.iron_sheet": "Lamiera di Ferro", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index dfde660e0..1bd589dcf 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 667", + "_": "Missing Localizations: 675", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone", "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "時計仕掛けのベアリング", "block.create.clutch": "クラッチ", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "ハンドクランク", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "横型ガラス窓", "block.create.horizontal_framed_glass_pane": "横型ガラス窓板", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.super_glue": "UNLOCALIZED: Super Glue", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "安山岩合金", "item.create.attribute_filter": "属性フィルター", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "真鍮ナゲット", "item.create.brass_sheet": "真鍮シート", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "色彩の化合物", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "銅インゴット", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.handheld_blockzapper": "携帯型ブロックザッパー", "item.create.handheld_worldshaper": "携帯型ワールドシェイパー", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "集積回路", "item.create.iron_sheet": "鉄板", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 934b7d683..948863b94 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 668", + "_": "Missing Localizations: 676", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone", "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "시계 베어링", "block.create.clutch": "클러치", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "핸드 크랭크", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "수평 유리", "block.create.horizontal_framed_glass_pane": "수평 유리판", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.super_glue": "UNLOCALIZED: Super Glue", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "안산암 합금", "item.create.attribute_filter": "속성 필터 틀", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "황동 조각", "item.create.brass_sheet": "황동 판", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "색채 혼합물", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "구리 주괴", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.handheld_blockzapper": "휴대용 블럭발사기", "item.create.handheld_worldshaper": "휴대용 세계편집기", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "집적 회로", "item.create.iron_sheet": "철 판", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 3ad604b98..a2947c95f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 995", + "_": "Missing Localizations: 1003", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone", "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing", "block.create.clutch": "Koppeling", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "UNLOCALIZED: Hand Crank", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.super_glue": "UNLOCALIZED: Super Glue", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy", "item.create.attribute_filter": "UNLOCALIZED: Attribute Filter", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "Brons klompje", "item.create.brass_sheet": "Brons Platen", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "Koperstaaf", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.handheld_blockzapper": "Blokzapper", "item.create.handheld_worldshaper": "UNLOCALIZED: Handheld Worldshaper", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit", "item.create.iron_sheet": "IJzeren Platen", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index cd4138904..09e5c71e8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1061", + "_": "Missing Localizations: 1069", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone", "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing", "block.create.clutch": "Embreagem", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "UNLOCALIZED: Hand Crank", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.super_glue": "UNLOCALIZED: Super Glue", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy", "item.create.attribute_filter": "UNLOCALIZED: Attribute Filter", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "UNLOCALIZED: Brass Nugget", "item.create.brass_sheet": "UNLOCALIZED: Brass Sheet", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "UNLOCALIZED: Copper Ingot", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.handheld_blockzapper": "Blockzapper Portátil", "item.create.handheld_worldshaper": "UNLOCALIZED: Handheld Worldshaper", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit", "item.create.iron_sheet": "Placas de Ferro", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index d09abba3f..d785a1d7a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 337", + "_": "Missing Localizations: 345", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "Резной известняк", "block.create.chiseled_scoria": "Резной пепел", "block.create.chiseled_weathered_limestone": "Выветренный резной известняк", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "Часовой механизм", "block.create.clutch": "Сцепление", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "Рукоятка", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "Стационарная штуковина", "entity.create.super_glue": "Супер клей", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "Андезитовый сплав", "item.create.attribute_filter": "Фильтр атрибутов", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "Кусочек латуни", "item.create.brass_sheet": "Латунный лист", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "Хроматический компаунд", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "Медный слиток", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "Золотой лист", "item.create.handheld_blockzapper": "Ручная блоковая пушка", "item.create.handheld_worldshaper": "Ручной редактор мира", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "Интегральная схема", "item.create.iron_sheet": "Железный лист", "item.create.lapis_sheet": "Лазуритовый лист", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 76c347876..d4fc955fa 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 350", + "_": "Missing Localizations: 358", "_": "->------------------------] Game Elements [------------------------<-", @@ -51,6 +51,7 @@ "block.create.chiseled_limestone": "錾制石灰岩", "block.create.chiseled_scoria": "錾制熔渣", "block.create.chiseled_weathered_limestone": "錾制风化石灰岩", + "block.create.chocolate": "UNLOCALIZED: Chocolate", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "时钟轴承", "block.create.clutch": "离合器", @@ -180,6 +181,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "手摇曲柄", + "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", @@ -406,7 +408,11 @@ "entity.create.stationary_contraption": "固定结构", "entity.create.super_glue": "强力胶", - "fluid.create.flowing_potion": "UNLOCALIZED: Potion", + "fluid.create.chocolate": "UNLOCALIZED: Chocolate", + "fluid.create.honey": "UNLOCALIZED: Honey", + "fluid.create.milk": "UNLOCALIZED: Milk", + "fluid.create.potion": "UNLOCALIZED: Potion", + "fluid.create.tea": "UNLOCALIZED: Builder's Tea", "item.create.andesite_alloy": "安山合金", "item.create.attribute_filter": "属性过滤器", @@ -417,6 +423,7 @@ "item.create.brass_nugget": "黄铜粒", "item.create.brass_sheet": "黄铜板", "item.create.chest_minecart_contraption": "UNLOCALIZED: Chest Minecart Contraption", + "item.create.chocolate_bucket": "UNLOCALIZED: Chocolate Bucket", "item.create.chromatic_compound": "异彩化合物", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_ingot": "铜锭", @@ -440,6 +447,7 @@ "item.create.golden_sheet": "金板", "item.create.handheld_blockzapper": "手持式方块放置器", "item.create.handheld_worldshaper": "手持式环境塑形器", + "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.integrated_circuit": "集成电路板", "item.create.iron_sheet": "铁板", "item.create.lapis_sheet": "青金石板", diff --git a/src/generated/resources/assets/create/models/block/chocolate.json b/src/generated/resources/assets/create/models/block/chocolate.json new file mode 100644 index 000000000..1baf010f2 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/chocolate.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "create:fluid/chocolate_still" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/honey.json b/src/generated/resources/assets/create/models/block/honey.json new file mode 100644 index 000000000..262271bb6 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/honey.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "block/honey_block_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/chocolate_bucket.json b/src/generated/resources/assets/create/models/item/chocolate_bucket.json new file mode 100644 index 000000000..66dd557ec --- /dev/null +++ b/src/generated/resources/assets/create/models/item/chocolate_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/chocolate_bucket" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/honey_bucket.json b/src/generated/resources/assets/create/models/item/honey_bucket.json new file mode 100644 index 000000000..f4a500afb --- /dev/null +++ b/src/generated/resources/assets/create/models/item/honey_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/honey_bucket" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/emptying/honey_bottle.json b/src/generated/resources/data/create/recipes/emptying/honey_bottle.json new file mode 100644 index 000000000..de62bb4a3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/emptying/honey_bottle.json @@ -0,0 +1,17 @@ +{ + "type": "create:emptying", + "ingredients": [ + { + "item": "minecraft:honey_bottle" + } + ], + "results": [ + { + "item": "minecraft:glass_bottle" + }, + { + "fluid": "create:honey", + "amount": 250 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/emptying/milk_bucket.json b/src/generated/resources/data/create/recipes/emptying/milk_bucket.json new file mode 100644 index 000000000..be95f4c33 --- /dev/null +++ b/src/generated/resources/data/create/recipes/emptying/milk_bucket.json @@ -0,0 +1,17 @@ +{ + "type": "create:emptying", + "ingredients": [ + { + "item": "minecraft:milk_bucket" + } + ], + "results": [ + { + "item": "minecraft:bucket" + }, + { + "fluid": "create:milk", + "amount": 1000 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/filling/honey_bottle.json b/src/generated/resources/data/create/recipes/filling/honey_bottle.json new file mode 100644 index 000000000..dd1f62eb2 --- /dev/null +++ b/src/generated/resources/data/create/recipes/filling/honey_bottle.json @@ -0,0 +1,17 @@ +{ + "type": "create:filling", + "ingredients": [ + { + "item": "minecraft:glass_bottle" + }, + { + "fluidTag": "forge:honey", + "amount": 250 + } + ], + "results": [ + { + "item": "minecraft:honey_bottle" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/filling/milk_bucket.json b/src/generated/resources/data/create/recipes/filling/milk_bucket.json new file mode 100644 index 000000000..ab968ec8d --- /dev/null +++ b/src/generated/resources/data/create/recipes/filling/milk_bucket.json @@ -0,0 +1,17 @@ +{ + "type": "create:filling", + "ingredients": [ + { + "item": "minecraft:bucket" + }, + { + "fluidTag": "forge:milk", + "amount": 1000 + } + ], + "results": [ + { + "item": "minecraft:milk_bucket" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/chocolate.json b/src/generated/resources/data/create/recipes/mixing/chocolate.json new file mode 100644 index 000000000..e15f7307d --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/chocolate.json @@ -0,0 +1,22 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:cocoa_beans" + }, + { + "fluidTag": "forge:milk", + "amount": 250 + } + ], + "results": [ + { + "fluid": "create:chocolate", + "amount": 250 + } + ], + "heatRequirement": "heated" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/tea.json b/src/generated/resources/data/create/recipes/mixing/tea.json new file mode 100644 index 000000000..40ccbf50a --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/tea.json @@ -0,0 +1,24 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "tag": "minecraft:leaves" + }, + { + "fluid": "minecraft:water", + "nbt": {}, + "amount": 250 + }, + { + "fluidTag": "forge:milk", + "amount": 250 + } + ], + "results": [ + { + "fluid": "create:tea", + "amount": 500 + } + ], + "heatRequirement": "heated" +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/fluids/honey.json b/src/generated/resources/data/forge/tags/fluids/honey.json new file mode 100644 index 000000000..6fab599f2 --- /dev/null +++ b/src/generated/resources/data/forge/tags/fluids/honey.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "create:flowing_honey", + "create:honey" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/fluids/milk.json b/src/generated/resources/data/forge/tags/fluids/milk.json new file mode 100644 index 000000000..6860027e8 --- /dev/null +++ b/src/generated/resources/data/forge/tags/fluids/milk.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "create:flowing_milk", + "create:milk" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/fluids/water.json b/src/generated/resources/data/minecraft/tags/fluids/water.json new file mode 100644 index 000000000..01d633e97 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/fluids/water.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "create:flowing_honey", + "create:honey", + "create:flowing_chocolate", + "create:chocolate" + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllFluids.java b/src/main/java/com/simibubi/create/AllFluids.java index dba2a7919..0666e5c72 100644 --- a/src/main/java/com/simibubi/create/AllFluids.java +++ b/src/main/java/com/simibubi/create/AllFluids.java @@ -1,21 +1,93 @@ package com.simibubi.create; +import javax.annotation.Nullable; + +import com.simibubi.create.content.contraptions.fluids.VirtualFluid; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid.PotionFluidAttributes; +import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.foundation.data.CreateRegistrate; import com.tterrag.registrate.util.entry.RegistryEntry; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.IFluidState; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.ForgeFlowingFluid; + public class AllFluids { private static final CreateRegistrate REGISTRATE = Create.registrate(); public static RegistryEntry POTION = REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new) - .lang(f -> "fluid.create.flowing_potion", "Potion") + .lang(f -> "fluid.create.potion", "Potion") .register(); + public static RegistryEntry TEA = REGISTRATE.virtualFluid("tea") + .lang(f -> "fluid.create.tea", "Builder's Tea") + .register(); + + public static RegistryEntry MILK = REGISTRATE.virtualFluid("milk") + .lang(f -> "fluid.create.milk", "Milk") + .tag(AllTags.forgeFluidTag("milk")) + .register(); + + public static RegistryEntry HONEY = + REGISTRATE.fluid("honey", new ResourceLocation("block/honey_block_top"), Create.asResource("fluid/honey_flow")) + .lang(f -> "fluid.create.honey", "Honey") + .attributes(b -> b.viscosity(500) + .density(1400)) + .properties(p -> p.levelDecreasePerBlock(2) + .tickRate(25) + .slopeFindDistance(3) + .explosionResistance(100f)) + .tag(AllTags.forgeFluidTag("honey")) + .register(); + + public static RegistryEntry CHOCOLATE = REGISTRATE.standardFluid("chocolate") + .lang(f -> "fluid.create.chocolate", "Chocolate") + .attributes(b -> b.viscosity(500) + .density(1400)) + .properties(p -> p.levelDecreasePerBlock(2) + .tickRate(25) + .slopeFindDistance(3) + .explosionResistance(100f)) + .register(); + // Load this class public static void register() {} + @OnlyIn(Dist.CLIENT) + public static void assignRenderLayers() { + makeTranslucent(HONEY); + } + + @OnlyIn(Dist.CLIENT) + private static void makeTranslucent(RegistryEntry entry) { + ForgeFlowingFluid fluid = entry.get(); + RenderTypeLookup.setRenderLayer(fluid, RenderType.getTranslucent()); + RenderTypeLookup.setRenderLayer(fluid.getStillFluid(), RenderType.getTranslucent()); + } + + @Nullable + public static BlockState getLavaInteraction(IFluidState fluidState) { + Fluid fluid = fluidState.getFluid(); + if (fluid.isEquivalentTo(HONEY.get())) + return fluidState.isSource() ? AllPaletteBlocks.LIMESTONE.getDefaultState() + : AllPaletteBlocks.LIMESTONE_VARIANTS.registeredBlocks.get(0) + .getDefaultState(); + if (fluid.isEquivalentTo(CHOCOLATE.get())) + return fluidState.isSource() ? AllPaletteBlocks.SCORIA.getDefaultState() + : AllPaletteBlocks.SCORIA_VARIANTS.registeredBlocks.get(0) + .getDefaultState(); + return null; + } + } diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 3bb8c76ce..b486accd5 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -13,11 +13,13 @@ import com.tterrag.registrate.util.nullness.NonNullFunction; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.fluid.Fluid; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.Tag; import net.minecraft.tags.TagCollection; @@ -41,6 +43,10 @@ public class AllTags { public static Tag forgeItemTag(String name) { return forgeTag(ItemTags.getCollection(), name); } + + public static Tag forgeFluidTag(String name) { + return forgeTag(FluidTags.getContainer(), name); + } public static Tag forgeTag(TagCollection collection, String name) { return tag(collection, "forge", name); diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index b347bce5f..26c91360b 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -73,6 +73,7 @@ public class CreateClient { //AllTileEntities.registerRenderers(); AllEntityTypes.registerRenderers(); getColorHandler().init(); + AllFluids.assignRenderLayers(); IResourceManager resourceManager = Minecraft.getInstance() .getResourceManager(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java new file mode 100644 index 000000000..e95c2bf58 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java @@ -0,0 +1,47 @@ +package com.simibubi.create.content.contraptions.fluids; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.IFluidState; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraftforge.fluids.ForgeFlowingFluid; + +public class VirtualFluid extends ForgeFlowingFluid { + + public VirtualFluid(Properties properties) { + super(properties); + } + + @Override + public Fluid getStillFluid() { + return super.getStillFluid(); + } + + @Override + public Fluid getFlowingFluid() { + return this; + } + + @Override + public Item getFilledBucket() { + return Items.AIR; + } + + @Override + protected BlockState getBlockState(IFluidState state) { + return Blocks.AIR.getDefaultState(); + } + + @Override + public boolean isSource(IFluidState p_207193_1_) { + return false; + } + + @Override + public int getLevel(IFluidState p_207192_1_) { + return 0; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java index d1d54ff75..da3aa0bce 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java @@ -4,13 +4,9 @@ import java.util.Collection; import java.util.List; import com.simibubi.create.AllFluids; +import com.simibubi.create.content.contraptions.fluids.VirtualFluid; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.fluid.Fluid; -import net.minecraft.fluid.IFluidState; -import net.minecraft.item.Item; -import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; import net.minecraft.potion.EffectInstance; @@ -20,10 +16,9 @@ import net.minecraft.potion.Potions; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.ForgeFlowingFluid; import net.minecraftforge.registries.ForgeRegistries; -public class PotionFluid extends ForgeFlowingFluid { +public class PotionFluid extends VirtualFluid { public enum BottleType { REGULAR, SPLASH, LINGERING; @@ -41,36 +36,6 @@ public class PotionFluid extends ForgeFlowingFluid { return fluidStack; } - @Override - public Fluid getStillFluid() { - return this; - } - - @Override - public Fluid getFlowingFluid() { - return this; - } - - @Override - public Item getFilledBucket() { - return Items.AIR; - } - - @Override - protected BlockState getBlockState(IFluidState state) { - return Blocks.AIR.getDefaultState(); - } - - @Override - public boolean isSource(IFluidState p_207193_1_) { - return false; - } - - @Override - public int getLevel(IFluidState p_207192_1_) { - return 0; - } - public static class PotionFluidAttributes extends FluidAttributes { public PotionFluidAttributes(Builder builder, Fluid fluid) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index c0b1deb2e..1a68ddc6a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -8,6 +8,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; +import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidIngredient; import com.simibubi.create.foundation.utility.Lang; @@ -155,6 +156,7 @@ public class ProcessingRecipeBuilder> { } public ProcessingRecipeBuilder output(Fluid fluid, int amount) { + fluid = FluidHelper.convertToStill(fluid); return output(new FluidStack(fluid, amount)); } diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index c963cf013..5f5e8c978 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -1,6 +1,10 @@ package com.simibubi.create.events; +import java.util.ArrayList; +import java.util.List; + import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllFluids; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.KineticDebugger; @@ -29,15 +33,19 @@ import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkRenderer; import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.ServerSpeedProvider; + import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ActiveRenderInfo; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.IFluidState; import net.minecraft.item.ItemStack; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityViewRenderEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.RenderWorldLastEvent; @@ -49,9 +57,6 @@ import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import java.util.ArrayList; -import java.util.List; - @EventBusSubscriber(value = Dist.CLIENT) public class ClientEvents { @@ -72,11 +77,11 @@ public class ClientEvents { CreateClient.schematicSender.tick(); CreateClient.schematicAndQuillHandler.tick(); CreateClient.schematicHandler.tick(); - + ContraptionHandler.tick(world); CapabilityMinecartController.tick(world); CouplingPhysics.tick(world); - + ScreenOpener.tick(); ServerSpeedProvider.clientTick(); BeltConnectorHandler.tick(); @@ -96,9 +101,9 @@ public class ClientEvents { ArmInteractionPointHandler.tick(); SailBlockPlacementHelper.tick(); PistonPolePlacementHelper.tick(); - CreateClient.outliner.tickOutlines(); + CreateClient.outliner.tickOutlines(); } - + @SubscribeEvent public static void onLoadWorld(WorldEvent.Load event) { CreateClient.bufferCache.invalidate(); @@ -112,13 +117,13 @@ public class ClientEvents { ms.push(); ms.translate(-view.getX(), -view.getY(), -view.getZ()); SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance(); - + CouplingRenderer.renderAll(ms, buffer); CreateClient.schematicHandler.render(ms, buffer); CreateClient.outliner.renderOutlines(ms, buffer); // CollisionDebugger.render(ms, buffer); buffer.draw(); - + ms.pop(); } @@ -171,4 +176,44 @@ public class ClientEvents { return !(Minecraft.getInstance().world == null || Minecraft.getInstance().player == null); } + @SubscribeEvent + public static void getFogDensity(EntityViewRenderEvent.FogDensity event) { + ActiveRenderInfo info = event.getInfo(); + IFluidState fluidState = info.getFluidState(); + if (fluidState.isEmpty()) + return; + Fluid fluid = fluidState.getFluid(); + + if (fluid.isEquivalentTo(AllFluids.CHOCOLATE.get())) { + event.setDensity(5f); + event.setCanceled(true); + } + + if (fluid.isEquivalentTo(AllFluids.HONEY.get())) { + event.setDensity(1.5f); + event.setCanceled(true); + } + } + + @SubscribeEvent + public static void getFogColor(EntityViewRenderEvent.FogColors event) { + ActiveRenderInfo info = event.getInfo(); + IFluidState fluidState = info.getFluidState(); + if (fluidState.isEmpty()) + return; + Fluid fluid = fluidState.getFluid(); + + if (fluid.isEquivalentTo(AllFluids.CHOCOLATE.get())) { + event.setRed(98 / 256f); + event.setGreen(32 / 256f); + event.setBlue(32 / 256f); + } + + if (fluid.isEquivalentTo(AllFluids.HONEY.get())) { + event.setRed(234 / 256f); + event.setGreen(174 / 256f); + event.setBlue(47 / 256f); + } + } + } diff --git a/src/main/java/com/simibubi/create/events/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java index 3120fb8d1..e3dd7bf80 100644 --- a/src/main/java/com/simibubi/create/events/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -1,5 +1,6 @@ package com.simibubi.create.events; +import com.simibubi.create.AllFluids; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionHandler; import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingPhysics; @@ -9,14 +10,20 @@ import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipe import com.simibubi.create.content.contraptions.wrench.WrenchItem; import com.simibubi.create.content.schematics.ServerSchematicLoader; import com.simibubi.create.foundation.command.AllCommands; -import com.simibubi.create.foundation.utility.Debug; +import com.simibubi.create.foundation.fluid.FluidHelper; +import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.ServerSpeedProvider; import com.simibubi.create.foundation.utility.WorldAttached; import com.simibubi.create.foundation.utility.recipe.RecipeFinder; +import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; +import net.minecraft.fluid.IFluidState; import net.minecraft.resources.IReloadableResourceManager; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraftforge.event.AttachCapabilitiesEvent; @@ -27,6 +34,7 @@ import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.world.BlockEvent.FluidPlaceBlockEvent; import net.minecraftforge.event.world.ChunkEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -54,6 +62,28 @@ public class CommonEvents { CapabilityMinecartController.onChunkUnloaded(event); } + @SubscribeEvent + public static void whenFluidsMeet(FluidPlaceBlockEvent event) { + BlockState blockState = event.getOriginalState(); + IFluidState fluidState = blockState.getFluidState(); + BlockPos pos = event.getPos(); + IWorld world = event.getWorld(); + + if (fluidState.isSource() && FluidHelper.isLava(fluidState.getFluid())) + return; + + for (Direction direction : Iterate.directions) { + IFluidState metFluidState = fluidState.isSource() ? fluidState : world.getFluidState(pos.offset(direction)); + if (!metFluidState.isTagged(FluidTags.WATER)) + continue; + BlockState lavaInteraction = AllFluids.getLavaInteraction(metFluidState); + if (lavaInteraction == null) + continue; + event.setNewState(lavaInteraction); + break; + } + } + @SubscribeEvent public static void onWorldTick(WorldTickEvent event) { if (event.phase == Phase.START) @@ -123,7 +153,7 @@ public class CommonEvents { public static void attachCapabilities(AttachCapabilitiesEvent event) { CapabilityMinecartController.attach(event); } - + @SubscribeEvent public static void startTracking(PlayerEvent.StartTracking event) { CapabilityMinecartController.startTracking(event); diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java index 70aced24b..f619a4dc2 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java @@ -6,13 +6,13 @@ import java.util.Map; import java.util.Map.Entry; import java.util.function.BiConsumer; import java.util.function.BiFunction; -import java.util.function.Consumer; import java.util.function.Supplier; import java.util.stream.Collectors; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; import com.simibubi.create.content.AllSections; +import com.simibubi.create.content.contraptions.fluids.VirtualFluid; import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity; import com.simibubi.create.foundation.block.IBlockVertexColor; import com.simibubi.create.foundation.block.connected.CTModel; @@ -133,6 +133,16 @@ public class CreateRegistrate extends AbstractRegistrate { Create.asResource("fluid/" + name + "_flow"), attributesFactory, factory)); } + public FluidBuilder virtualFluid(String name) { + return entry(name, + c -> new VirtualFluidBuilder<>(self(), self(), name, c, Create.asResource("fluid/" + name + "_still"), + Create.asResource("fluid/" + name + "_flow"), null, VirtualFluid::new)); + } + + public FluidBuilder standardFluid(String name) { + return fluid(name, Create.asResource("fluid/" + name + "_still"), Create.asResource("fluid/" + name + "_flow")); + } + /* Util */ public static NonNullConsumer connectedTextures(ConnectedTextureBehaviour behavior) { diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java index e49369f0e..73985fe44 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java @@ -1,23 +1,30 @@ package com.simibubi.create.foundation.data.recipe; +import com.simibubi.create.AllFluids; import com.simibubi.create.AllRecipeTypes; import net.minecraft.data.DataGenerator; +import net.minecraft.item.Items; public class EmptyingRecipeGen extends ProcessingRecipeGen { /* - * potion/bottles are handled internally now. keeping this builder for reference + * potion/water bottles are handled internally */ -// GeneratedRecipe -// -// WATER_BOTTLE = create("water_bottle", b -> b -// .require(NBTIngredient.fromStacks(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER))) -// .output(Fluids.WATER, 250) -// .output(Items.GLASS_BOTTLE)) -// -// ; + GeneratedRecipe + + HONEY_BOTTLE = create("honey_bottle", b -> b + .require(Items.field_226638_pX_) + .output(AllFluids.HONEY.get(), 250) + .output(Items.GLASS_BOTTLE)), + + MILK_BUCKET = create("milk_bucket", b -> b + .require(Items.MILK_BUCKET) + .output(AllFluids.MILK.get(), 1000) + .output(Items.BUCKET)) + + ; public EmptyingRecipeGen(DataGenerator p_i48262_1_) { super(p_i48262_1_); diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java index 480d741ec..5aefc579a 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java @@ -1,22 +1,25 @@ package com.simibubi.create.foundation.data.recipe; import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.AllTags; import net.minecraft.data.DataGenerator; +import net.minecraft.item.Items; public class FillingRecipeGen extends ProcessingRecipeGen { - /* - * potion/bottles are handled internally now. keeping this builder for reference - */ - -// GeneratedRecipe -// -// WATER_BOTTLE = create("water_bottle", b -> b.require(Items.GLASS_BOTTLE) -// .require(FluidTags.WATER, 250) -// .output(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER))) -// -// ; + GeneratedRecipe + + HONEY_BOTTLE = create("honey_bottle", b -> b + .require(AllTags.forgeFluidTag("honey"), 250) + .require(Items.GLASS_BOTTLE) + .output(Items.field_226638_pX_)), + + MILK_BUCKET = create("milk_bucket", b -> b + .require(AllTags.forgeFluidTag("milk"), 1000) + .require(Items.BUCKET) + .output(Items.MILK_BUCKET)) + ; public FillingRecipeGen(DataGenerator p_i48262_1_) { super(p_i48262_1_); diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java index 39fb993cf..2d3d07cee 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.data.recipe; +import com.simibubi.create.AllFluids; import com.simibubi.create.AllItems; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllTags; @@ -24,6 +25,19 @@ public class MixingRecipeGen extends ProcessingRecipeGen { .output(Fluids.LAVA, 25) .requiresHeat(HeatCondition.SUPERHEATED)), + TEA = create("tea", b -> b.require(Fluids.WATER, 250) + .require(AllTags.forgeFluidTag("milk"), 250) + .require(ItemTags.LEAVES) + .output(AllFluids.TEA.get(), 500) + .requiresHeat(HeatCondition.HEATED)), + + CHOCOLATE = create("chocolate", b -> b + .require(AllTags.forgeFluidTag("milk"), 250) + .require(Items.SUGAR) + .require(Items.COCOA_BEANS) + .output(AllFluids.CHOCOLATE.get(), 250) + .requiresHeat(HeatCondition.HEATED)), + BRASS_INGOT = create("brass_ingot", b -> b.require(I.copper()) .require(I.zinc()) .output(AllItems.BRASS_INGOT.get(), 2) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java index 12580778a..c87524b45 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -41,6 +41,7 @@ public abstract class FluidIngredient implements Predicate { FluidStackIngredient ingredient = new FluidStackIngredient(); ingredient.fluid = fluid; ingredient.amountRequired = amount; + ingredient.fixFlowing(); return ingredient; } @@ -48,6 +49,7 @@ public abstract class FluidIngredient implements Predicate { FluidStackIngredient ingredient = new FluidStackIngredient(); ingredient.fluid = fluidStack.getFluid(); ingredient.amountRequired = fluidStack.getAmount(); + ingredient.fixFlowing(); if (fluidStack.hasTag()) ingredient.tagToMatch = fluidStack.getTag(); return ingredient; @@ -140,6 +142,11 @@ public abstract class FluidIngredient implements Predicate { public FluidStackIngredient() { tagToMatch = new CompoundNBT(); } + + void fixFlowing() { + if (fluid instanceof FlowingFluid) + fluid = ((FlowingFluid) fluid).getStillFluid(); + } @Override protected boolean testInternal(FluidStack t) { diff --git a/src/main/resources/assets/create/textures/fluid/chocolate_flow.png b/src/main/resources/assets/create/textures/fluid/chocolate_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..2df0830b0c3aa29c78eff836e40d76130da35508 GIT binary patch literal 16913 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 IdLQ_|0EiQIlK=n! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/fluid/milk_flow.png.mcmeta b/src/main/resources/assets/create/textures/fluid/milk_flow.png.mcmeta new file mode 100644 index 000000000..24f9c2fae --- /dev/null +++ b/src/main/resources/assets/create/textures/fluid/milk_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 1 + } +} diff --git a/src/main/resources/assets/create/textures/fluid/milk_still.png b/src/main/resources/assets/create/textures/fluid/milk_still.png new file mode 100644 index 0000000000000000000000000000000000000000..c75de609782c17277e0701d86cd1f9dee4a81853 GIT binary patch literal 4677 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 WO)u%&7Wf0l07W^~_to!AgZ~eix{P@M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/fluid/tea_flow.png.mcmeta b/src/main/resources/assets/create/textures/fluid/tea_flow.png.mcmeta new file mode 100644 index 000000000..24f9c2fae --- /dev/null +++ b/src/main/resources/assets/create/textures/fluid/tea_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 1 + } +} diff --git a/src/main/resources/assets/create/textures/fluid/tea_still.png b/src/main/resources/assets/create/textures/fluid/tea_still.png new file mode 100644 index 0000000000000000000000000000000000000000..84b3618d6c806a8c659017846deaa1982d348fdf GIT binary patch literal 4918 zcmXw62{_c<_aBK7YEoIUe1(!NBPQ#}sIl)`mKeLSB>OV5B*~tHEZJqxmVFu7lLjIC zZZL$H8T;1X`+ML2bDz7M^W5h?=bn4c=W}j^wx-f$T2@*R2y|IR8L4|dUj>0KfM}@C zS5b`{!{@?|pT3c&uBFc{S9cdXhiA68JTb1ew`_eK>_8yj$`yTKZBVFLCe%oJZ+!&#Jj1bfeN}Mz5}zPh)$8Qs;ZslEWrN78WVap{Rt}jp^k(g&IW%$r2c^`2^c~1IO$7A2m6zqy=ebKp9hvn0 zX=8BbohY}3brh{mJ*Voc?4-8hfI+L73a>u?rV=4-kP6$w>U7+=4tX<;n>MQL;|f}! zUQiiwgiU->hAdhPAv7#jzM0w+?#Y<*D6MF2+dLAPWS=uRusMNlGT8SUG$IFMty)0j zYwW{DOQVb^&?B;a@zc4P_PWN1xmH@5-ybF_TUpCxI`eiu-jdGB*n{_iW`4^*gunJ0u=N(?<=>NVnpG`HZ}Rj%ll7sSd9mj8 z6Tu$?^IWp*P`c@rGn$Wsd964Mqf>U}WBSp@k78zfPE%Mp9HWdT1NS~rS4|kwm`p_o z+uiDpKuj}H+<-yt2Kn!xmYAxHe4Taa9Y4`&7AVkP9KJQG0`b;z4_ab^oia+CaWqu? zJmp+!f8^71+Pg_vgWBg*5YO6W6xPU9fA-AKw)}wC(={b^@wA%7;^q4?^S3RtGX9^Q z-&NaYrAj=VXzA14d%V8i)AOTmNpFJ%IP{tVd^T9B@KC0}3pmQJWbxnXZ0Bh}ZKbA! z1pWP|Wnl~A&o!4^m5n_>AYq<=I)!hZocFmB?5U!m0A8YFV4}SZ65~VcWz+5u7F6+03P3upP1Vg+9#XmIp;XD?HR z6J^E1DI7fHd_B|4SSdhvO8d$pkGj@85{1319$3=g;7&+>svK{lgj7-naa*)qIcf55 zQis5C92@->TS~NpyM^5jwy4ZRT)Uf=onj zBFQzd@FTUaGCwI4_ZGnV%9{8%~3>~3iF*t5FA>-nO>i|!7zHf|M^{pJwpyo;Y z4X_~zaL19bdU;QR;&G zCg6KJ4|jyrS=)}bQ%r@Vr9~mCM+vZZ0F;;|Q4BmnxeV5NXBv^`MWhRDuee?)qPbeg z&Yh=e2S{@IYOg6~*CKBzZ0o$!e};^xzVC6M%hNcd-1JBk`9R}Jc?jJ-VGEp;#9X#0 zA%mR|OrO2dMs7oOQ^x%s^4NV0FRVmuw@Ps~o?C3MupOO}Qa80X&j$uQzArh0{NXjF zxa=6bL5BlNfwIMDA6MgEgRRadhTN-T0|p+v;swF;Ve>jjFgnUapsNZu~$ZOF0ynes-CK-jUZc1w80%14~2mZQYDL=HJe$ zOt;ZQ?x);Lzw$~B$<|)Y_HC&1lKp_`ZEkhp4eezsUU_#4-U&w@5lS3@Ulk^_O}m>` zFsJRiIW)XlE*q0XatWBb+inHa2Yq^jKg#rD=-cfEwQi2iyU7{A-|48tE|uMrU@N6T z6`ovU%v}k7r_v{6pCfs_opOcU+-7f3m`2W*!>k6Ew}n}5>kUZ+Z$*J|^8HVN*Vy}b zFXZwCoIt=E@RvWFE=Sc8SLWz4|9TID2ccpdufbz%9AOG9xh@LVgXy?V$+o?{zmAl9 z@5^zTPC{#*XD?9~?{@=Q<+b+_?Z-KlIW{vr~E@*9-PI4 z3Hq$lpS2yJ2{J$3xl8d&di1WASBV%PP3dt5r6rb7v6+MltpB}z;7BJh26ycb2@es^ zxim!CYC#aWpDKX0q>he_o1WtYzkJ8tti~`fhz@?=pf{hzl9156#Oc~J%vg%#eLsbm zPFtL?5rorx*uc*!Qg93L&;H{kLC7ow0vF?5$6raDzst-6FyUJ9E!#E>R4McAL5Pul z>pxm2{$tEfWvO$Xh3}+_uJd$G!k*VrYlT%9vf?#07+y8;qVTZ*?GhIS1Y0)qLHGK#4O#lQB-T3JyUiC zb0mwYEwma_7~t|Ai%8g{GM1cB%dBBu`b*fL5}TThVZzg#lgBJH7jE$Lc{gRhqJk4t zglB?o$R%DVHo1g#<@I~)tql10wbLUOj0Mb3L!M1;ZWrx~5DUr~r+X8={f(SJitE%H zq2~3_Pex?5qwKv`N%%5Ru+});#oLDV6PuRqT=}dso$VBa0~n;&ZIsDoQ!9;#SQW%J zfBhr)B6~}{Qngjm_-c-D!WZGcf$7s1AcYGQVc~>=CXM%-Ln!-1CwFBA3!1}O_nG2Ty5m5;81*6Ayrs4NRDoC%dHD)&w+)pq%P6ONhcTpNh zGuk(UJnx#kxYyG38mxBKIWL*uzx)BrZ{D!g7Y)9zMTJZtB|Zgq-dN12yvWwH=f`Bx zNM#q9axb)rsFN!OEkZcD(n#WhX0Ee_@cP+8X>+MPMJGl{%v&%t1Zu-M-ige=ZvwND z;lH(om}{pr_RdXsCAhPo3w-il)$7&lCTUS-_>=x}m}%a|owmtC}9 zv+4-x%MTH32P>VNqr?B01`MZRXtmm7dto{JF&-{L*a$roMSq7oLWS__o!ltbudx%qy z&p13{{P_q5z{NLxz+|P7D@GUo^x|$m&)8P47`2WZY%3eaFlL};a&;pjP8ayM zbAxz+X>%Vm=IR$}N=UShNdA2AMWH0$iuI8-U!D*y>4wgb)Bo%@e+jO#J&!YoFAkj5 zobIs+`2zax;^vqS)8mtLYKOhM?j)-gQkYKd6BhDcO?T@^7M}*mN#;9mEj4AKs1!K2^;8CKJ+= zu7uV2#rMm^_v~4qiJhco4-6qL+2I1X=NoOREC`1zAhI?v?s~RY$1Cd;J`)NpmQI@1zX06eaPR z-H<6tlT3+?1UqA^2kn{<^>-g`EJ3Vi9}}Y2Bu3TLehXPQRih?r4Gpd;A)5kC4_ zubxru4%s;9b!F)74!tDr4z(9+!ywSYq*0PZB%?{~)Rj@ti;H}pnR}>_d66A>9V+NSM2rx;>MSoH-tU1l^rnyoQ$xC%p z<8n_?ob|)1+Kl2PLXC5D>c~^5b&0NcVA1RmK9JT!gxOkip?)YfRs4y7p|j31L&^7* z4XC0pQjkj7BkzZW9KXTFbkgrqnV{xbzab+G@FQ<`bjy2Xh)^js_B3c*D@Y#eRr=v( z1^iE_-}-3ZdTCuu59E(aouvAiKh_HasJ-2>jT07I*QnKX|Mk@$h|(8xUN4<{rXdm( zTychFnL$#_L=9MfS8PZ|IF5bPehg%LmGTi|S%ba|Iet+5f9&Z9`Do^o04^pmCL9-h zj&qc&&#gj{=7%@!ykE78p><}v1@zk~&EcDrAi&(2H3)k%rZnP7%QD7!e~jZ-*%&%= zjLF_WVp$fyjtB894`|7i-`n_g(oUY#zd4x3`&2{MJZ;M^>%eXALZ(0JBmCk{!Nc;+ z;n?$G|LYRQS#ekaE_u`}?gR}&O%aaG;HLg780W8DH0Yj}z2yalO*S$muyqoAtUQ*o zd4COT9e@8WQKgH$xvuFUdETyI;QSySpH&VTqI6$MRX*&~Zr{|5=4lH33Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/fluid/tea_still.png.mcmeta b/src/main/resources/assets/create/textures/fluid/tea_still.png.mcmeta new file mode 100644 index 000000000..24f9c2fae --- /dev/null +++ b/src/main/resources/assets/create/textures/fluid/tea_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 1 + } +} diff --git a/src/main/resources/assets/create/textures/item/chocolate_bucket.png b/src/main/resources/assets/create/textures/item/chocolate_bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..db71755e701c9d8e48550f4b2c16d465e3fc1e18 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}r0G|+7AZ==DT2WCkW5$e0&Xya4?T(~-C25=9xN)PXsA$@>X-`{XSFBj^ z|NnoWN~>Ace}NQ#NswPKPy`7uT)8u2AyA65z$3Dlfr0NZ2s0kfUy%Y7%=dJ04ABUV zJs-$-*norif~qlN)U4m~NS%G}50G|+7AZ==DT2WCkW5$ddtsI|M^ZmaZvOJaP#*G_AMMcx5OI#sB~R zfy(3)ms|rFVdQ&MBb@04z>$#Q*>R literal 0 HcmV?d00001 From 2a56bb76be90c162596ca39cf0146847a777a063 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 3 Dec 2020 23:49:12 +0100 Subject: [PATCH 4/5] Casing case closed, Part II - Encasing fluid pipes now locks their configuration - Encased fluid pipes now join textures with adjacent casing blocks - Fixed windowed pipe not allowing to be encased - Fixed wrapped models not passing down model data in multi layered situations --- src/generated/resources/.cache/cache | 3 +- .../blockstates/encased_fluid_pipe.json | 117 ++++++++++++++++-- .../models/block/encased_fluid_pipe.json | 7 -- .../java/com/simibubi/create/AllBlocks.java | 7 +- .../com/simibubi/create/AllTileEntities.java | 4 +- .../fluids/FluidPipeAttachmentBehaviour.java | 4 + .../fluids/PipeAttachmentModel.java | 10 +- .../fluids/pipes/AxisPipeBlock.java | 20 ++- .../fluids/pipes/EncasedPipeBlock.java | 116 +++++++++++++++-- .../fluids/pipes/FluidPipeBlock.java | 9 +- .../fluids/pipes/FluidPipeTileEntity.java | 7 +- .../fluids/tank/FluidTankModel.java | 8 +- .../relays/encased/EncasedShaftBlock.java | 3 +- .../connected/BakedModelWrapperWithData.java | 29 +++++ .../foundation/block/connected/CTModel.java | 14 +-- .../block/render/CustomBlockModels.java | 17 ++- .../create/foundation/data/BlockStateGen.java | 21 ++++ .../block/encased_fluid_pipe/block_flat.json | 16 +++ .../block/encased_fluid_pipe/block_open.json | 16 +++ 19 files changed, 361 insertions(+), 67 deletions(-) delete mode 100644 src/generated/resources/assets/create/models/block/encased_fluid_pipe.json create mode 100644 src/main/java/com/simibubi/create/foundation/block/connected/BakedModelWrapperWithData.java create mode 100644 src/main/resources/assets/create/models/block/encased_fluid_pipe/block_flat.json create mode 100644 src/main/resources/assets/create/models/block/encased_fluid_pipe/block_open.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 7a8b08638..26114f7a6 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -103,7 +103,7 @@ f63a5816d4bfe643aa098d03c3b54462dd06fe19 assets/create/blockstates/dolomite_cobb f179202e59e449157f89efc37229b03bbfd391d7 assets/create/blockstates/dolomite_pillar.json 7b1c40891b07c8f3238537625d9e25c8627e7333 assets/create/blockstates/encased_belt.json 7b2b836649e729feafa60972bf95e3afb2143131 assets/create/blockstates/encased_fan.json -656813b75dd3b901bf34f24df785e4b0fbe11aa6 assets/create/blockstates/encased_fluid_pipe.json +d13940ed213d7acbc6ebe3bdd21175ef89e4d613 assets/create/blockstates/encased_fluid_pipe.json a774e815376a67e2a2de44e39af0a1a0b4406932 assets/create/blockstates/fancy_andesite_bricks.json 180be26a75834cf9cdb881f969f77906e91cc36a assets/create/blockstates/fancy_andesite_bricks_slab.json d5d7762b80952052d0a7adf3081967cac3f3ba6c assets/create/blockstates/fancy_andesite_bricks_stairs.json @@ -613,7 +613,6 @@ cc6d9300cd26f2323c653dbcc61b7a885be8fa3b assets/create/models/block/dolomite_cob a101974d906487326dc38916f828d12a278a49ae assets/create/models/block/dolomite_cobblestone_wall_post.json 9c497140dfe73abe1964479eaf1af8f1892de290 assets/create/models/block/dolomite_cobblestone_wall_side.json 999a7cd79a9dc80c47fd6103b65f006b55187402 assets/create/models/block/dolomite_pillar.json -1a8bac1e97a2a6c3cc362081568d2a7fce815ad5 assets/create/models/block/encased_fluid_pipe.json 17dae5fdc1a551d8ab1ab8a68cabf7a8c3848d86 assets/create/models/block/fancy_andesite_bricks.json cfb2cd84a1cbd9226a77ebc1f6c29e8eaa9c577f assets/create/models/block/fancy_andesite_bricks_slab.json 8ee27601996ab577991b6a0f7e9df27db0282cad assets/create/models/block/fancy_andesite_bricks_slab_top.json diff --git a/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json b/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json index 129e39baa..dc11492f3 100644 --- a/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json @@ -1,17 +1,110 @@ { - "variants": { - "axis=x": { - "model": "create:block/encased_fluid_pipe", - "x": 90, - "y": 90 + "multipart": [ + { + "when": { + "down": "false" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_flat", + "x": -90 + } }, - "axis=y": { - "model": "create:block/encased_fluid_pipe" + { + "when": { + "up": "false" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_flat", + "x": 90 + } }, - "axis=z": { - "model": "create:block/encased_fluid_pipe", - "x": 90, - "y": 180 + { + "when": { + "north": "false" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_flat", + "y": 180 + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_flat" + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_flat", + "y": 90 + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_flat", + "y": 270 + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_open", + "x": -90 + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_open", + "x": 90 + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_open", + "y": 180 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_open" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_open", + "y": 90 + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "create:block/encased_fluid_pipe/block_open", + "y": 270 + } } - } + ] } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json b/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json deleted file mode 100644 index a8aad1994..000000000 --- a/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_column", - "textures": { - "side": "create:block/copper_casing", - "end": "create:block/encased_pipe" - } -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 7d35cd70b..d53d27bcc 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -519,8 +519,11 @@ public class AllBlocks { public static final BlockEntry ENCASED_FLUID_PIPE = REGISTRATE.block("encased_fluid_pipe", EncasedPipeBlock::new) .initialProperties(SharedProperties::softMetal) - .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, state -> p.models() - .cubeColumn(c.getName(), p.modLoc("block/copper_casing"), p.modLoc("block/encased_pipe")))) + .properties(Block.Properties::nonOpaque) + .blockstate(BlockStateGen.encasedPipe()) + .onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING))) + .onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING, + (s, f) -> !s.get(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f))))) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) .loot((p, b) -> p.registerDropping(b, FLUID_PIPE.get())) .register(); diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 3a92ad6fb..2d6f2513c 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -219,8 +219,8 @@ public class AllTileEntities { .validBlocks(AllBlocks.FLUID_PIPE) .register(); - public static final TileEntityEntry ENCASED_FLUID_PIPE = Create.registrate() - .tileEntity("encased_fluid_pipe", StraightPipeTileEntity::new) + public static final TileEntityEntry ENCASED_FLUID_PIPE = Create.registrate() + .tileEntity("encased_fluid_pipe", FluidPipeTileEntity::new) .validBlocks(AllBlocks.ENCASED_FLUID_PIPE) .register(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java index cdd3ef3d9..51d064588 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java @@ -26,6 +26,10 @@ public class FluidPipeAttachmentBehaviour extends BracketedTileEntityBehaviour { .getAxis() == direction.getAxis()) return AttachmentTypes.NONE; + if (AllBlocks.ENCASED_FLUID_PIPE.has(facingState) + && facingState.get(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(direction.getOpposite()))) + return AttachmentTypes.NONE; + if (FluidPropagator.hasFluidCapability(facingState, world, offsetPos, direction) && !AllBlocks.HOSE_PULLEY.has(facingState)) return AttachmentTypes.DRAIN; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java index b05ce97ac..1e7834771 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java @@ -8,7 +8,7 @@ import java.util.Random; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour.AttachmentTypes; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; -import com.simibubi.create.foundation.block.render.WrappedBakedModel; +import com.simibubi.create.foundation.block.connected.BakedModelWrapperWithData; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.Iterate; @@ -21,9 +21,10 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.ILightReader; import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.data.ModelDataMap; +import net.minecraftforge.client.model.data.ModelDataMap.Builder; import net.minecraftforge.client.model.data.ModelProperty; -public class PipeAttachmentModel extends WrappedBakedModel { +public class PipeAttachmentModel extends BakedModelWrapperWithData { private static ModelProperty PIPE_PROPERTY = new ModelProperty<>(); @@ -32,7 +33,7 @@ public class PipeAttachmentModel extends WrappedBakedModel { } @Override - public IModelData getModelData(ILightReader world, BlockPos pos, BlockState state, IModelData tileData) { + protected Builder gatherModelData(Builder builder, ILightReader world, BlockPos pos, BlockState state) { PipeModelData data = new PipeModelData(); FluidPipeAttachmentBehaviour attachmentBehaviour = TileEntityBehaviour.get(world, pos, FluidPipeAttachmentBehaviour.TYPE); @@ -44,8 +45,7 @@ public class PipeAttachmentModel extends WrappedBakedModel { } data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state)); - return new ModelDataMap.Builder().withInitial(PIPE_PROPERTY, data) - .build(); + return builder.withInitial(PIPE_PROPERTY, data); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java index 751ff1de4..a3570ee9a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java @@ -10,6 +10,7 @@ import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehavi import com.simibubi.create.content.contraptions.fluids.FluidPropagator; import com.simibubi.create.content.contraptions.wrench.IWrenchableWithBracket; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -19,10 +20,13 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.network.DebugPacketSender; import net.minecraft.state.BooleanProperty; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; +import net.minecraft.util.Hand; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; @@ -43,12 +47,26 @@ public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchableWith boolean blockTypeChanged = state.getBlock() != newState.getBlock(); if (blockTypeChanged && !world.isRemote) FluidPropagator.propagateChangedPipe(world, pos, state); - if (state != newState && !isMoving) + if (state != newState && !isMoving) removeBracket(world, pos).ifPresent(stack -> Block.spawnAsEntity(world, pos, stack)); if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) world.removeTileEntity(pos); } + @Override + public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + BlockRayTraceResult hit) { + if (!AllBlocks.COPPER_CASING.isIn(player.getHeldItem(hand))) + return ActionResultType.PASS; + if (!world.isRemote) { + BlockState newState = AllBlocks.ENCASED_FLUID_PIPE.getDefaultState(); + for (Direction d : Iterate.directionsInAxis(getAxis(state))) + newState = newState.with(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(d), true); + world.setBlockState(pos, newState); + } + return ActionResultType.SUCCESS; + } + @Override public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { if (world.isRemote) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java index 6d236427c..f74484b10 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java @@ -1,22 +1,58 @@ package com.simibubi.create.content.contraptions.fluids.pipes; -import com.simibubi.create.AllTileEntities; +import static net.minecraft.state.properties.BlockStateProperties.DOWN; +import static net.minecraft.state.properties.BlockStateProperties.EAST; +import static net.minecraft.state.properties.BlockStateProperties.NORTH; +import static net.minecraft.state.properties.BlockStateProperties.SOUTH; +import static net.minecraft.state.properties.BlockStateProperties.UP; +import static net.minecraft.state.properties.BlockStateProperties.WEST; +import java.util.Map; +import java.util.Random; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.fluids.FluidPropagator; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.SixWayBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; +import net.minecraft.network.DebugPacketSender; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; +import net.minecraft.world.TickPriority; import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; -public class EncasedPipeBlock extends AxisPipeBlock { +public class EncasedPipeBlock extends Block implements IWrenchable { + + public static final Map FACING_TO_PROPERTY_MAP = SixWayBlock.FACING_TO_PROPERTY_MAP; public EncasedPipeBlock(Properties p_i48339_1_) { super(p_i48339_1_); + setDefaultState(getDefaultState().with(NORTH, false) + .with(SOUTH, false) + .with(DOWN, false) + .with(UP, false) + .with(WEST, false) + .with(EAST, false)); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN); + super.fillStateContainer(builder); } @Override @@ -25,22 +61,80 @@ public class EncasedPipeBlock extends AxisPipeBlock { } @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.ENCASED_FLUID_PIPE.create(); + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + boolean blockTypeChanged = state.getBlock() != newState.getBlock(); + if (blockTypeChanged && !world.isRemote) + FluidPropagator.propagateChangedPipe(world, pos, state); + if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) + world.removeTileEntity(pos); } @Override - public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, - ISelectionContext p_220053_4_) { - return VoxelShapes.fullCube(); + public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (!world.isRemote && state != oldState) + world.getPendingBlockTicks() + .scheduleTick(pos, this, 1, TickPriority.HIGH); + } + + @Override + public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, + PlayerEntity player) { + return AllBlocks.FLUID_PIPE.asStack(); + } + + @Override + public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, + boolean isMoving) { + DebugPacketSender.func_218806_a(world, pos); + Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); + if (d == null) + return; + if (!state.get(FACING_TO_PROPERTY_MAP.get(d))) + return; + world.getPendingBlockTicks() + .scheduleTick(pos, this, 1, TickPriority.HIGH); + } + + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + FluidPropagator.propagateChangedPipe(world, pos, state); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.ENCASED_FLUID_PIPE.create(); } @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { World world = context.getWorld(); BlockPos pos = context.getPos(); - world.setBlockState(pos, toRegularPipe(world, pos, state), 3); + + if (world.isRemote) + return ActionResultType.SUCCESS; + + context.getWorld() + .playEvent(2001, context.getPos(), Block.getStateId(state)); + BlockState equivalentPipe = transferSixWayProperties(state, AllBlocks.FLUID_PIPE.getDefaultState()); + + Direction firstFound = Direction.UP; + for (Direction d : Iterate.directions) + if (state.get(FACING_TO_PROPERTY_MAP.get(d))) { + firstFound = d; + break; + } + + world.setBlockState(pos, AllBlocks.FLUID_PIPE.get() + .updateBlockState(equivalentPipe, firstFound, null, world, pos)); return ActionResultType.SUCCESS; } + public static BlockState transferSixWayProperties(BlockState from, BlockState to) { + for (Direction d : Iterate.directions) { + BooleanProperty property = FACING_TO_PROPERTY_MAP.get(d); + to = to.with(property, from.get(property)); + } + return to; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index 56217071f..67a895eb2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -73,12 +73,9 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren BlockRayTraceResult hit) { if (!AllBlocks.COPPER_CASING.isIn(player.getHeldItem(hand))) return ActionResultType.PASS; - Axis axis = getAxis(world, pos, state); - if (axis == null) - return ActionResultType.PASS; if (!world.isRemote) - world.setBlockState(pos, AllBlocks.ENCASED_FLUID_PIPE.getDefaultState() - .with(EncasedPipeBlock.AXIS, axis)); + world.setBlockState(pos, + EncasedPipeBlock.transferSixWayProperties(state, AllBlocks.ENCASED_FLUID_PIPE.getDefaultState())); return ActionResultType.SUCCESS; } @@ -149,7 +146,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren || FluidPropagator.getStraightPipeAxis(neighbour) == blockFace.getAxis(); if (attachmentBehaviour == null) return false; - return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace); + return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace.getOpposite()); } public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java index 5b0ca5222..a90f4c92d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.fluids.pipes; import java.util.List; +import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour; import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; @@ -33,7 +34,8 @@ public class FluidPipeTileEntity extends SmartTileEntity { @Override public boolean isConnectedTo(BlockState state, Direction direction) { - return FluidPipeBlock.isPipe(state) && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction)); + return (FluidPipeBlock.isPipe(state) || state.getBlock() instanceof EncasedPipeBlock) + && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction)); } } @@ -48,6 +50,9 @@ public class FluidPipeTileEntity extends SmartTileEntity { public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) { AttachmentTypes attachment = super.getAttachment(world, pos, state, direction); + if (attachment == AttachmentTypes.RIM && AllBlocks.ENCASED_FLUID_PIPE.has(state)) + return AttachmentTypes.RIM; + BlockPos offsetPos = pos.offset(direction); if (!FluidPipeBlock.isPipe(world.getBlockState(offsetPos))) { FluidPipeAttachmentBehaviour attachmentBehaviour = diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java index 0411e7edf..802f39e49 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java @@ -18,6 +18,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.ILightReader; import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelDataMap.Builder; import net.minecraftforge.client.model.data.ModelProperty; public class FluidTankModel extends CTModel { @@ -35,14 +36,13 @@ public class FluidTankModel extends CTModel { private FluidTankModel(IBakedModel originalModel, CTSpriteShiftEntry side, CTSpriteShiftEntry top) { super(originalModel, new FluidTankCTBehaviour(side, top)); } - + @Override - public IModelData getModelData(ILightReader world, BlockPos pos, BlockState state, IModelData tileData) { + protected Builder gatherModelData(Builder builder, ILightReader world, BlockPos pos, BlockState state) { CullData cullData = new CullData(); for (Direction d : Iterate.horizontalDirections) cullData.setCulled(d, FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(d))); - return getCTDataMapBuilder(world, pos, state).withInitial(CULL_PROPERTY, cullData) - .build(); + return super.gatherModelData(builder, world, pos, state).withInitial(CULL_PROPERTY, cullData); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java index 57b284045..1592b93cf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java @@ -6,6 +6,7 @@ import com.simibubi.create.content.contraptions.base.CasingBlock; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.tterrag.registrate.util.entry.BlockEntry; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.item.ItemUseContext; import net.minecraft.tileentity.TileEntity; @@ -42,7 +43,7 @@ public class EncasedShaftBlock extends AbstractEncasedShaftBlock { public ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) { if (context.getWorld().isRemote) return ActionResultType.SUCCESS; - + context.getWorld().playEvent(2001, context.getPos(), Block.getStateId(state)); KineticTileEntity.switchToBlockState(context.getWorld(), context.getPos(), AllBlocks.SHAFT.getDefaultState().with(AXIS, state.get(AXIS))); return ActionResultType.SUCCESS; } diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/BakedModelWrapperWithData.java b/src/main/java/com/simibubi/create/foundation/block/connected/BakedModelWrapperWithData.java new file mode 100644 index 000000000..d012d0588 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/connected/BakedModelWrapperWithData.java @@ -0,0 +1,29 @@ +package com.simibubi.create.foundation.block.connected; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ILightReader; +import net.minecraftforge.client.model.BakedModelWrapper; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelDataMap; +import net.minecraftforge.client.model.data.ModelDataMap.Builder; + +public abstract class BakedModelWrapperWithData extends BakedModelWrapper { + + public BakedModelWrapperWithData(IBakedModel originalModel) { + super(originalModel); + } + + @Override + public final IModelData getModelData(ILightReader world, BlockPos pos, BlockState state, IModelData tileData) { + Builder builder = new ModelDataMap.Builder(); + if (originalModel instanceof BakedModelWrapperWithData) + ((BakedModelWrapperWithData) originalModel).gatherModelData(builder, world, pos, state); + return gatherModelData(builder, world, pos, state).build(); + } + + protected abstract ModelDataMap.Builder gatherModelData(ModelDataMap.Builder builder, ILightReader world, + BlockPos pos, BlockState state); + +} diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java index 6a76326b2..60c26a070 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java @@ -16,13 +16,11 @@ import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.ILightReader; -import net.minecraftforge.client.model.BakedModelWrapper; import net.minecraftforge.client.model.data.IModelData; -import net.minecraftforge.client.model.data.ModelDataMap; import net.minecraftforge.client.model.data.ModelDataMap.Builder; import net.minecraftforge.client.model.data.ModelProperty; -public class CTModel extends BakedModelWrapper { +public class CTModel extends BakedModelWrapperWithData { protected static ModelProperty CT_PROPERTY = new ModelProperty<>(); private ConnectedTextureBehaviour behaviour; @@ -43,19 +41,15 @@ public class CTModel extends BakedModelWrapper { return indices[face.getIndex()]; } } - + public CTModel(IBakedModel originalModel, ConnectedTextureBehaviour behaviour) { super(originalModel); this.behaviour = behaviour; } @Override - public IModelData getModelData(ILightReader world, BlockPos pos, BlockState state, IModelData tileData) { - return getCTDataMapBuilder(world, pos, state).build(); - } - - protected Builder getCTDataMapBuilder(ILightReader world, BlockPos pos, BlockState state) { - return new ModelDataMap.Builder().withInitial(CT_PROPERTY, createCTData(world, pos, state)); + protected Builder gatherModelData(Builder builder, ILightReader world, BlockPos pos, BlockState state) { + return builder.withInitial(CT_PROPERTY, createCTData(world, pos, state)); } protected CTData createCTData(ILightReader world, BlockPos pos, BlockState state) { diff --git a/src/main/java/com/simibubi/create/foundation/block/render/CustomBlockModels.java b/src/main/java/com/simibubi/create/foundation/block/render/CustomBlockModels.java index 0f3efbd4a..3653f4615 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/CustomBlockModels.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/CustomBlockModels.java @@ -28,7 +28,7 @@ public class CustomBlockModels { NonNullFunction behaviour) { registered.add(Pair.of(entry, behaviour)); } - + public void foreach(NonNullBiConsumer> consumer) { loadEntriesIfMissing(); customModels.forEach(consumer); @@ -41,8 +41,19 @@ public class CustomBlockModels { private void loadEntries() { customModels.clear(); - registered.forEach(p -> customModels.put(p.getKey() - .get(), p.getValue())); + registered.forEach(p -> { + Block key = p.getKey() + .get(); + + NonNullFunction existingModel = customModels.get(key); + if (existingModel != null) { + customModels.put(key, p.getValue() + .andThen(existingModel)); + return; + } + + customModels.put(key, p.getValue()); + }); } } diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 76874dc7c..ca4c81c04 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -19,6 +19,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.cha import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssembleRailType; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock; import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.EncasedPipeBlock; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.palettes.PavedBlock; @@ -340,6 +341,26 @@ public class BlockStateGen { }; } + public static

NonNullBiConsumer, RegistrateBlockstateProvider> encasedPipe() { + return (c, p) -> { + ModelFile open = AssetLookup.partialBaseModel(c, p, "open"); + ModelFile flat = AssetLookup.partialBaseModel(c, p, "flat"); + MultiPartBlockStateBuilder builder = p.getMultipartBuilder(c.get()); + for (boolean flatPass : Iterate.trueAndFalse) + for (Direction d : Iterate.directions) { + int verticalAngle = d == Direction.UP ? 90 : d == Direction.DOWN ? -90 : 0; + builder.part() + .modelFile(flatPass ? flat : open) + .rotationX(verticalAngle) + .rotationY((int) (d.getHorizontalAngle() + (d.getAxis() + .isVertical() ? 90 : 0)) % 360) + .addModel() + .condition(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(d), !flatPass) + .end(); + } + }; + } + public static

NonNullBiConsumer, RegistrateBlockstateProvider> pipe() { return (c, p) -> { String path = "block/" + c.getName(); diff --git a/src/main/resources/assets/create/models/block/encased_fluid_pipe/block_flat.json b/src/main/resources/assets/create/models/block/encased_fluid_pipe/block_flat.json new file mode 100644 index 000000000..d084586f1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_fluid_pipe/block_flat.json @@ -0,0 +1,16 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/copper_casing", + "particle": "create:block/copper_casing" + }, + "elements": [ + { + "from": [0, 0, 15], + "to": [16, 16, 16], + "faces": { + "south": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_fluid_pipe/block_open.json b/src/main/resources/assets/create/models/block/encased_fluid_pipe/block_open.json new file mode 100644 index 000000000..0d555e7e4 --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_fluid_pipe/block_open.json @@ -0,0 +1,16 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/encased_pipe", + "particle": "create:block/encased_pipe" + }, + "elements": [ + { + "from": [0, 0, 15], + "to": [16, 16, 16], + "faces": { + "south": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + } + ] +} \ No newline at end of file From 8ec74ee96ddca638d35de0071d8099f5d7801cb9 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 4 Dec 2020 00:21:30 +0100 Subject: [PATCH 5/5] Minor contraption annoyances - Fixed belts sometimes popping off when disassembling a contraption - Made Portable Storage Interfaces a little more lenient to engage at funny angles --- .../components/actors/PortableStorageInterfaceMovement.java | 2 +- .../components/structureMovement/StructureTransform.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java index bfb1fbca9..30f62fada 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java @@ -142,7 +142,7 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour { .getDirectionVec()); directionVec = context.rotation.apply(directionVec); Direction facingFromVector = Direction.getFacingFromVector(directionVec.x, directionVec.y, directionVec.z); - if (directionVec.distanceTo(new Vec3d(facingFromVector.getDirectionVec())) > 1 / 8f) + if (directionVec.distanceTo(new Vec3d(facingFromVector.getDirectionVec())) > 1 / 2f) return Optional.empty(); return Optional.of(facingFromVector); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java index 0e7470654..85adf5e0d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java @@ -250,6 +250,8 @@ public class StructureTransform { newDirection = direction; if (direction.getAxis() == rotationAxis) newSlope = BeltSlope.SIDEWAYS; + else if (direction.getAxis() != Axis.Z) + newDirection = direction.getOpposite(); } state = state.with(BeltBlock.HORIZONTAL_FACING, newDirection); @@ -332,8 +334,7 @@ public class StructureTransform { int readAngle = buffer.readInt(); int axisIndex = buffer.readVarInt(); int rotationIndex = buffer.readVarInt(); - return new StructureTransform(readBlockPos, readAngle, - axisIndex == -1 ? null : Axis.values()[axisIndex], + return new StructureTransform(readBlockPos, readAngle, axisIndex == -1 ? null : Axis.values()[axisIndex], rotationIndex == -1 ? null : Rotation.values()[rotationIndex]); }