From c63d0980ed9c44dacba49253047c6f76ac71d490 Mon Sep 17 00:00:00 2001 From: Lucas Barcellos Date: Wed, 28 Oct 2020 22:21:03 -0300 Subject: [PATCH 1/3] Update assets for Cinderflour and Blaze Cake --- .../assets/create/textures/item/blaze_cake.png | Bin 441 -> 436 bytes .../create/textures/item/cinder_flour.png | Bin 246 -> 389 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/item/blaze_cake.png b/src/main/resources/assets/create/textures/item/blaze_cake.png index 91a6e3d4a0898e8099721faca35c7273f36162eb..14c6ab057a6c36cd9e9f00217038946ac9f616ac 100644 GIT binary patch delta 421 zcmV;W0b2gK1GEE>8Gi-<001BJ|6u?C00DDSM?wIu&K&6g00C}EL_t(Ijm?ogPr^_X zhMz)_q)CPFQ3Mh+x)@muabR(PK_?SuHh+YZjQSHCoY)u~Obn9_Ft|7v;^N1m2`oVQ zNU=!=0qa28(3V}_@!b17=bU@tuOlogJ{@eE%j$dg@1FaPf`0`{xhcxgI?+s#VY?21 zT5Dl6MUO~Wgx#Q8YuWN-JOV(cKf-8=wnT8l{zsioe?&4KVV0LYvSd8skoXo?uwcLe z`yX{1p5svnVzBqjz(NI-E0Jta?&7r1IiWvZG9j@9_ z07NrI0NySu7=KNXt2S(;Qk>Q6b3s8-%#*br9=>D9l4OhAsSYG`!(e}9K&9)Wp{jyt z9o`Isl(X>KZBrd&h=#)sc&KUYPTTBcVw}GOfr;}Q3yNZf0s%G?2}&^oDK~WpjHXC+ zAo1DjF`i6lsH)%)SQ3CxAV6H6?=MU9vHQBtcrx#5!5$ugTjb6n_NS%Li00G|+7ApLNP|FvSJs|Cu(ojEVWikuA>dNj-GW`psSEUCNwo+sS7j=OQ) zs8BiX%yHU}_d=}D_ z&DASC!s|YeL>`wY=Wp={s-B_ZiIjA}P7x`PZjh4BM@F zcot7`%la)L%Mezvk3qNRTI7M1v1jZUie&r@4UhQPwLF+xR@pkU!$xr5M5zrrTMU$* tZmE+}*4456cxSeipTTgxWr0D$L4<0|ALz<(7&y)>JMrG&*8bV9B| zYJi{4Cg=D{)AH>Sqylh-P-&LIrWC6@hfOH}z+&twL^}_Y!9b0>U99pPv6L`5$LD^J zhgJ)7&np*nLU1e!ETTxOB-kVgW>=0076LsGM+r9u`rg>4d0N zo@4HLSP}w@F>VB5SQ-GpW2b|U?Y7>*)N#~gIKC^#vYwfNfk8u;KNv_c76-XIF|0c$^AgBmNq6*hWMJ6X&;2Kn708ze@Ck7R z(lPS#GXwov938zyMRRm?3|K*unYoo0ffPqckYDhB2w=F^yf+dk##!JISAd9 From 5abfc15e9ee7925beb67459d0c35a9802c578fc3 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 30 Oct 2020 02:16:08 +0100 Subject: [PATCH 2/3] Destroyer of Lakes - Added the hose pulley - Added creative tanks - Fixed sails not getting consumed when placed against each other - Items can now be inserted onto belts regardless of it moving or not - Fixed item duplication on stopped belts - Refactored fluid block rendering in JEI - Reworked model of the schematic table --- src/generated/resources/.cache/cache | 57 ++- .../blockstates/creative_fluid_tank.json | 76 ++++ .../create/blockstates/hose_pulley.json | 19 + .../assets/create/blockstates/item_drain.json | 7 + .../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 +- .../create/models/block/creative_bottom.json | 10 + .../models/block/creative_bottom_window.json | 10 + .../block/creative_bottom_window_ne.json | 10 + .../block/creative_bottom_window_nw.json | 10 + .../block/creative_bottom_window_se.json | 10 + .../block/creative_bottom_window_sw.json | 10 + .../create/models/block/creative_middle.json | 10 + .../models/block/creative_middle_window.json | 10 + .../block/creative_middle_window_ne.json | 10 + .../block/creative_middle_window_nw.json | 10 + .../block/creative_middle_window_se.json | 10 + .../block/creative_middle_window_sw.json | 10 + .../create/models/block/creative_single.json | 10 + .../models/block/creative_single_window.json | 10 + .../block/creative_single_window_ne.json | 10 + .../block/creative_single_window_nw.json | 10 + .../block/creative_single_window_se.json | 10 + .../block/creative_single_window_sw.json | 10 + .../create/models/block/creative_top.json | 10 + .../models/block/creative_top_window.json | 10 + .../models/block/creative_top_window_ne.json | 10 + .../models/block/creative_top_window_nw.json | 10 + .../models/block/creative_top_window_se.json | 10 + .../models/block/creative_top_window_sw.json | 10 + .../models/item/creative_fluid_tank.json | 8 + .../create/models/item/hose_pulley.json | 3 + .../assets/create/models/item/item_drain.json | 3 + .../crafting/kinetics/hose_pulley.json | 32 ++ .../blocks/creative_fluid_tank.json | 19 + .../loot_tables/blocks/hose_pulley.json | 19 + .../create/loot_tables/blocks/item_drain.json | 19 + .../crafting/kinetics/hose_pulley.json | 28 ++ .../com/simibubi/create/AllBlockPartials.java | 14 +- .../java/com/simibubi/create/AllBlocks.java | 38 +- .../java/com/simibubi/create/AllShapes.java | 13 +- .../com/simibubi/create/AllSpriteShifts.java | 6 +- .../com/simibubi/create/AllTileEntities.java | 22 +- .../base/HorizontalKineticBlock.java | 18 +- .../structureMovement/ContraptionEntity.java | 2 +- .../structureMovement/bearing/SailBlock.java | 5 +- .../pulley/PulleyRenderer.java | 24 +- .../content/contraptions/fluids/FluidFX.java | 51 +++ .../fluids/FluidPipeAttachmentBehaviour.java | 4 +- .../fluids/actors/FluidDrainingBehaviour.java | 347 ++++++++++++++++ .../fluids/actors/FluidFillingBehaviour.java | 265 ++++++++++++ .../actors/FluidManipulationBehaviour.java | 222 ++++++++++ .../fluids/actors/FluidSplashPacket.java | 49 +++ .../fluids/actors/HosePulleyBlock.java | 107 +++++ .../fluids/actors/HosePulleyFluidHandler.java | 123 ++++++ .../fluids/actors/HosePulleyRenderer.java | 70 ++++ .../fluids/actors/HosePulleyTileEntity.java | 171 ++++++++ .../fluids/actors/ItemDrainBlock.java | 31 ++ .../tank/CreativeFluidTankTileEntity.java | 56 +++ .../fluids/tank/FluidTankBlock.java | 82 ++-- .../tank/FluidTankConnectivityHandler.java | 35 +- .../fluids/tank/FluidTankGenerator.java | 24 +- .../fluids/tank/FluidTankItem.java | 10 +- .../fluids/tank/FluidTankModel.java | 9 +- .../fluids/tank/FluidTankRenderer.java | 3 + .../fluids/tank/FluidTankTileEntity.java | 26 +- .../contraptions/processing/BasinBlock.java | 84 +--- .../contraptions/relays/belt/BeltBlock.java | 2 +- .../relays/belt/BeltTileEntity.java | 5 +- .../relays/belt/transport/BeltInventory.java | 19 +- .../data/recipe/StandardRecipeGen.java | 11 + .../create/foundation/fluid/FluidHelper.java | 85 +++- .../create/foundation/gui/GuiGameElement.java | 70 +--- .../foundation/networking/AllPackets.java | 27 +- .../resources/META-INF/accesstransformer.cfg | 4 + .../block/fluid_tank/block_single_window.json | 2 +- .../models/block/hose_pulley/block.json | 271 +++++++++++++ .../block/hose_pulley/copper_pulley.bbmodel | 1 + .../hose_pulley/copper_pulley_rope.bbmodel | 1 + .../create/models/block/hose_pulley/item.json | 381 ++++++++++++++++++ .../block/hose_pulley/pulley_magnet.json | 101 +++++ .../create/models/block/hose_pulley/rope.json | 7 + .../models/block/hose_pulley/rope_coil.json | 49 +++ .../models/block/hose_pulley/rope_half.json | 7 + .../block/hose_pulley/rope_half_magnet.json | 101 +++++ .../create/models/block/item_drain.json | 79 ++++ .../models/block/rope_pulley/block.json | 14 +- .../create/models/block/rope_pulley/item.json | 18 +- .../create/models/block/schematic_table.json | 129 +++--- .../create/textures/block/copper_gearbox.png | Bin 0 -> 367 bytes .../create/textures/block/crate_creative.png | Bin 1004 -> 821 bytes .../textures/block/crate_creative_side.png | Bin 1238 -> 794 bytes .../create/textures/block/creative_casing.png | Bin 437 -> 326 bytes .../block/creative_casing_connected.png | Bin 0 -> 726 bytes .../textures/block/creative_fluid_tank.png | Bin 0 -> 375 bytes .../block/creative_fluid_tank_connected.png | Bin 0 -> 1060 bytes .../block/creative_fluid_tank_window.png | Bin 0 -> 258 bytes .../creative_fluid_tank_window_single.png | Bin 0 -> 205 bytes .../create/textures/block/creative_motor.png | Bin 583 -> 558 bytes .../textures/block/hose_pulley_magnet.png | Bin 0 -> 2025 bytes .../textures/block/hose_pulley_rope.png | Bin 0 -> 1196 bytes .../create/textures/block/item_drain_side.png | Bin 0 -> 1991 bytes .../create/textures/block/item_drain_top.png | Bin 0 -> 291 bytes .../textures/block/schematic_table_side.png | Bin 440 -> 422 bytes .../textures/block/schematic_table_top.png | Bin 328 -> 432 bytes 114 files changed, 3509 insertions(+), 367 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/creative_fluid_tank.json create mode 100644 src/generated/resources/assets/create/blockstates/hose_pulley.json create mode 100644 src/generated/resources/assets/create/blockstates/item_drain.json create mode 100644 src/generated/resources/assets/create/models/block/creative_bottom.json create mode 100644 src/generated/resources/assets/create/models/block/creative_bottom_window.json create mode 100644 src/generated/resources/assets/create/models/block/creative_bottom_window_ne.json create mode 100644 src/generated/resources/assets/create/models/block/creative_bottom_window_nw.json create mode 100644 src/generated/resources/assets/create/models/block/creative_bottom_window_se.json create mode 100644 src/generated/resources/assets/create/models/block/creative_bottom_window_sw.json create mode 100644 src/generated/resources/assets/create/models/block/creative_middle.json create mode 100644 src/generated/resources/assets/create/models/block/creative_middle_window.json create mode 100644 src/generated/resources/assets/create/models/block/creative_middle_window_ne.json create mode 100644 src/generated/resources/assets/create/models/block/creative_middle_window_nw.json create mode 100644 src/generated/resources/assets/create/models/block/creative_middle_window_se.json create mode 100644 src/generated/resources/assets/create/models/block/creative_middle_window_sw.json create mode 100644 src/generated/resources/assets/create/models/block/creative_single.json create mode 100644 src/generated/resources/assets/create/models/block/creative_single_window.json create mode 100644 src/generated/resources/assets/create/models/block/creative_single_window_ne.json create mode 100644 src/generated/resources/assets/create/models/block/creative_single_window_nw.json create mode 100644 src/generated/resources/assets/create/models/block/creative_single_window_se.json create mode 100644 src/generated/resources/assets/create/models/block/creative_single_window_sw.json create mode 100644 src/generated/resources/assets/create/models/block/creative_top.json create mode 100644 src/generated/resources/assets/create/models/block/creative_top_window.json create mode 100644 src/generated/resources/assets/create/models/block/creative_top_window_ne.json create mode 100644 src/generated/resources/assets/create/models/block/creative_top_window_nw.json create mode 100644 src/generated/resources/assets/create/models/block/creative_top_window_se.json create mode 100644 src/generated/resources/assets/create/models/block/creative_top_window_sw.json create mode 100644 src/generated/resources/assets/create/models/item/creative_fluid_tank.json create mode 100644 src/generated/resources/assets/create/models/item/hose_pulley.json create mode 100644 src/generated/resources/assets/create/models/item/item_drain.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/creative_fluid_tank.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/hose_pulley.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/item_drain.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/hose_pulley.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyRenderer.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyTileEntity.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/block.json create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/copper_pulley.bbmodel create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/copper_pulley_rope.bbmodel create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/item.json create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/pulley_magnet.json create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/rope.json create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/rope_half.json create mode 100644 src/main/resources/assets/create/models/block/hose_pulley/rope_half_magnet.json create mode 100644 src/main/resources/assets/create/models/block/item_drain.json create mode 100644 src/main/resources/assets/create/textures/block/copper_gearbox.png create mode 100644 src/main/resources/assets/create/textures/block/creative_casing_connected.png create mode 100644 src/main/resources/assets/create/textures/block/creative_fluid_tank.png create mode 100644 src/main/resources/assets/create/textures/block/creative_fluid_tank_connected.png create mode 100644 src/main/resources/assets/create/textures/block/creative_fluid_tank_window.png create mode 100644 src/main/resources/assets/create/textures/block/creative_fluid_tank_window_single.png create mode 100644 src/main/resources/assets/create/textures/block/hose_pulley_magnet.png create mode 100644 src/main/resources/assets/create/textures/block/hose_pulley_rope.png create mode 100644 src/main/resources/assets/create/textures/block/item_drain_side.png create mode 100644 src/main/resources/assets/create/textures/block/item_drain_top.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 471841780..c1a39e1d7 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -56,6 +56,7 @@ dc76bca1fdd41c8e6ada27fd59a2b73d7adc9596 assets/create/blockstates/copper_shingl ecf4a72411870bfdbf8a59469b114cd77621c343 assets/create/blockstates/copper_tiles.json 890be245b914c1a9f29f48a8c5d325640b5be160 assets/create/blockstates/copper_valve_handle.json 3df0d5d5170a2f6cbab0f8a9bc8f2d64229589af assets/create/blockstates/creative_crate.json +da3f1203dd0b0096ce19e09705060a0ed0478bee assets/create/blockstates/creative_fluid_tank.json f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_motor.json fe2f78b94c20944399101e7369e2d43324297fb6 assets/create/blockstates/crushing_wheel.json a1dd6cb3daa97ea871290ef7b178d28b564ee2a2 assets/create/blockstates/crushing_wheel_controller.json @@ -174,6 +175,8 @@ f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_h 6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.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 +6651c84ea621777d572a3d7aa13b75d9f061191b assets/create/blockstates/item_drain.json 5d851c90d23de5087ce546d4bbe509e112b84c49 assets/create/blockstates/jungle_window.json b15bea757ef981e0ca60f740ca234ee2014eb7b7 assets/create/blockstates/jungle_window_pane.json f651091db216b009b3379b2f48d56d03481c8675 assets/create/blockstates/large_cogwheel.json @@ -386,17 +389,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 -ad168f04d430ebd783a845e5928c3273da3f0074 assets/create/lang/en_ud.json -25b02b7b025f988b0cda9655b2c586c82dfd369c assets/create/lang/en_us.json -cf9075cacdbd171b33fa0b6cb68365e2c3614b40 assets/create/lang/unfinished/de_de.json -87ea3d2da2863fa61c5d5b9f535aac8c1703be28 assets/create/lang/unfinished/fr_fr.json -3349f2726256c99abd7e5268faa806b628d91e4d assets/create/lang/unfinished/it_it.json -3cf205e25543b7860d6b00f2f91dd799333b9d74 assets/create/lang/unfinished/ja_jp.json -d112e8b804ca16511c4096b328f3635b4c84a3e9 assets/create/lang/unfinished/ko_kr.json -78791855041e56a27fb3520b289ca8a144de98ad assets/create/lang/unfinished/nl_nl.json -d92ac1ec1ebbad873dd6563509767428603b6ba2 assets/create/lang/unfinished/pt_br.json -5d4f30e05fea3bec9c6c85a5f7767eb3dd0a7dfe assets/create/lang/unfinished/ru_ru.json -46996569e164858a5f9dc7f60731707d3517b888 assets/create/lang/unfinished/zh_cn.json +6fe6c50ae75a9c89c90d3423bc74f3e628bc213a assets/create/lang/en_ud.json +b054eb6cf72ac04fbb2512569effa84768adef74 assets/create/lang/en_us.json +cf432c7dcf9b91769a570242a59c12ecca79a091 assets/create/lang/unfinished/de_de.json +5a2e2499696f45b1f95feeaa702119b8e1b371eb assets/create/lang/unfinished/fr_fr.json +12ac01a6f21c536aa09599c36139f593cbbf7d1f assets/create/lang/unfinished/it_it.json +3e65e163c658e4f34124807716b009e1907187cc assets/create/lang/unfinished/ja_jp.json +4dfeba1d56d8ad688442d2ca026dfa16147178ef assets/create/lang/unfinished/ko_kr.json +3d114a874d1c198ecf0978fd13b98249536cc684 assets/create/lang/unfinished/nl_nl.json +3434f2d429bdf64dcbc915c0365e20250b64d819 assets/create/lang/unfinished/pt_br.json +0bfd9476411fc565a3011ffc43eecaca3f0e53ff assets/create/lang/unfinished/ru_ru.json +d7150e9c65d74f41e2dc65daadf003dc200e512c 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 @@ -503,6 +506,30 @@ a09f639bde4c61d68592eb06c807e7a6791ff950 assets/create/models/block/crate/brass/ 7635211e4d833748acaea37ea48b1f749c32ea5f assets/create/models/block/crate/creative/right.json a123e3c8a9e2ea1665f268cf3991aa7e4b3119c6 assets/create/models/block/crate/creative/single.json 29ab5cfe7aed1271ede125e91bf78c1372b5f96e assets/create/models/block/crate/creative/top.json +e04c4987746379ec24c63929abf0df4e41e13e6a assets/create/models/block/creative_bottom.json +5b1f6d98adf1e92f678a59b7eef720deeeda2795 assets/create/models/block/creative_bottom_window.json +6dd1cf78624d5ce69259fc723e9700bd842c94c8 assets/create/models/block/creative_bottom_window_ne.json +c0dfda633c3158633814e9a6cd4f4dba793ad4c8 assets/create/models/block/creative_bottom_window_nw.json +e30b13d2ae9a437664792c16be537cea73552cf8 assets/create/models/block/creative_bottom_window_se.json +8d68f53dfa4d17f8193cd8df693e340ac7a1b92e assets/create/models/block/creative_bottom_window_sw.json +77a84b8ca790ddef80e792beb79c2ae0db78005b assets/create/models/block/creative_middle.json +179f6208a04832141d83f9a6bef96334cf4fe4aa assets/create/models/block/creative_middle_window.json +cadd6df93f6ba708a3c92a958e88531cbc1d6ebf assets/create/models/block/creative_middle_window_ne.json +75b37b07555312798a519bea3325d4af6a57eb86 assets/create/models/block/creative_middle_window_nw.json +d9d6b61ba21270c83361b3ee2391161125dfc6f0 assets/create/models/block/creative_middle_window_se.json +73696b00c063cdf6c5a492eac7e5e06062abad88 assets/create/models/block/creative_middle_window_sw.json +3af304cfaa0cdba11c120e85cea88d96c986eebc assets/create/models/block/creative_single.json +feed58a4ad7d7a9e855f0cd7b3fc720616120b4b assets/create/models/block/creative_single_window.json +4f8753ba3a04853fb006be37e15d760cc154d937 assets/create/models/block/creative_single_window_ne.json +39ee24e3b1e06d38bfa4ef36aa4f89577c7f6eab assets/create/models/block/creative_single_window_nw.json +81250161ba79b846614859fe8c991c9e18bf77ba assets/create/models/block/creative_single_window_se.json +0fdca0706c76794586199287f1e29c8e87ef6385 assets/create/models/block/creative_single_window_sw.json +873b263b688f191a927a63b2d873a797eab801e1 assets/create/models/block/creative_top.json +723c5db04011eeb1f2e0483f3466bf05432c5f4c assets/create/models/block/creative_top_window.json +0994ef30adac0d9faa19d06fd933eb16b11d1ef3 assets/create/models/block/creative_top_window_ne.json +59c43cc18525792ca96026c966076f52cf7ebef7 assets/create/models/block/creative_top_window_nw.json +a6eea01609266b757342984889af16234ecd5189 assets/create/models/block/creative_top_window_se.json +6e1d2fb66291f2a3e3a213f43b47fb9760cb959f assets/create/models/block/creative_top_window_sw.json 68843a02a32c156afad85830877b83f9b51c5147 assets/create/models/block/cyan_sail.json 6704782830b3d872321e895b6903709c18e3778f assets/create/models/block/cyan_seat.json f45ef4a5f0aa8482d493661673b1c0ab6d061157 assets/create/models/block/cyan_valve_handle.json @@ -1124,6 +1151,7 @@ f56bf22324faf8958eaef4d94b958f1108d52e5a assets/create/models/item/copper_tiles. 5583368909c319acfcf0f7a419bedf23272fe613 assets/create/models/item/copper_valve_handle.json 4e9126b349d55c65aa5407f05700579e52101c1f assets/create/models/item/crafter_slot_cover.json 7b333dea353afaa27b182aedc647c9e9e34e92ef assets/create/models/item/creative_crate.json +f7d06c52c3ca8c22ad67f5741471f06ac22e7fcb assets/create/models/item/creative_fluid_tank.json 5b39403f6c81f05e566b621b62e267267de47c41 assets/create/models/item/creative_motor.json 19c8492ced64a872a040005dd212a9a14e20477c assets/create/models/item/crushed_brass.json 8167f2a6d05d65a4ebd809b9c114027862afb38e assets/create/models/item/crushed_copper_ore.json @@ -1250,8 +1278,10 @@ cfab82a2cf7495d21778c1de9730a26afbdd523d assets/create/models/item/handheld_bloc dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.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 771d439eac70b52f593fa7381f2c48729fbdaec7 assets/create/models/item/integrated_circuit.json d254f47bc185f2a2f01608a875aa63ed2c4ceb0f assets/create/models/item/iron_sheet.json +52e435014cb03e93411666c4799ebff206e55fc9 assets/create/models/item/item_drain.json 83fa8699318e51f838b483b40b3e897c34ed53d1 assets/create/models/item/jungle_window.json 34dc05da3edef554dad1cfde834773aecd861293 assets/create/models/item/jungle_window_pane.json 0c9b16c3f5f0a5f77110b3fc2467bde8c1b288b7 assets/create/models/item/lapis_sheet.json @@ -1566,6 +1596,7 @@ c023b9221d7983487d21e5ecc7d92246cfc7e791 data/create/advancements/recipes/create 2ba23f019a110a3e035a49e56ee8156fc11d74c0 data/create/advancements/recipes/create.base/crafting/kinetics/green_seat_from_other_seat.json 9af3d92d11c3f520df3e22f3069042bf34585010 data/create/advancements/recipes/create.base/crafting/kinetics/green_valve_handle_from_other_valve_handle.json dbb96a4db4ef8172af73a626bed9727278d804bd data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json +21cd686e1f3a4004d8e9bd3d92675bd61fb2b4db data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json a71b626b6ee58a4eabee56f67c48f041a1323506 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json eb007bb079bbe6b6aaad2ca90f5af84261e3f8ea data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json 571da50fbf5f2fcd3363b3dab91e7233e0ebffa0 data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json @@ -2147,6 +2178,7 @@ a5a7ba88a1d38da83b37bbe842dc7cc0544f37be data/create/loot_tables/blocks/copper_s c013613df278f6e8b4c9dad5f16e0ec6c3e992e3 data/create/loot_tables/blocks/copper_tiles.json 5c15f22db359a2af8efa18561e080cdf361a0100 data/create/loot_tables/blocks/copper_valve_handle.json b160899aa785dc54d8c6cc095337f70b81f3e44f data/create/loot_tables/blocks/creative_crate.json +51d66e32581b87beb871d99b93cb45d45eada8dd data/create/loot_tables/blocks/creative_fluid_tank.json d8f2f8921b9200b1d9476a77ee1be32c25308ac3 data/create/loot_tables/blocks/creative_motor.json c28fa42746a4d5ca2f824001b67e58673810169e data/create/loot_tables/blocks/crushing_wheel.json 205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/crushing_wheel_controller.json @@ -2265,6 +2297,8 @@ a71599eecd3f1179e3d0367623460e798828aa6d data/create/loot_tables/blocks/green_se 9bdc47ea3ffc52f037f12f40f387e6b72a352c4e data/create/loot_tables/blocks/hand_crank.json 22012e7759f1dbccbb06bcaf0311a54190270825 data/create/loot_tables/blocks/horizontal_framed_glass.json 5d3f585539942f13bbc458a0a002849c1f034fc1 data/create/loot_tables/blocks/horizontal_framed_glass_pane.json +1b28cc5e1e535aa0c62d4a75ad76fcb40bf6232c data/create/loot_tables/blocks/hose_pulley.json +ef3890c4fa262959cf31a0063fd21919da86eda1 data/create/loot_tables/blocks/item_drain.json cf2bfae903e7f8510962e672b6266c0e74176aae data/create/loot_tables/blocks/jungle_window.json 1a3a19517f95fc632286d3cc693bfee4a59dfa0a data/create/loot_tables/blocks/jungle_window_pane.json 4d948f80fb7a8b6b99897544681f43fe3d2058f0 data/create/loot_tables/blocks/large_cogwheel.json @@ -2567,6 +2601,7 @@ b7fa20d10c0e0e7270b1c0d6f3881b8e25b39bea data/create/recipes/crafting/kinetics/g 6f65a84e00f25d956a6ae834678ff781569b243a data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json 63edaccace961a65aa7bd406d36894c7ca4816b8 data/create/recipes/crafting/kinetics/green_valve_handle_from_other_valve_handle.json 9f08bdaeec88e04a43c2dc103869f9648deee079 data/create/recipes/crafting/kinetics/hand_crank.json +d10639b0c3999481531fe0a9383a1bb4af60225e data/create/recipes/crafting/kinetics/hose_pulley.json 237541c1c318b8426734c1c43be31fbd01413d39 data/create/recipes/crafting/kinetics/large_cogwheel.json a33e3301fc6d3a446e61a1c4b8a93aff079baeba data/create/recipes/crafting/kinetics/light_blue_seat.json 958bb5d3aeb8d8e5dbf5d97cf5fd9ff5151575dc data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json diff --git a/src/generated/resources/assets/create/blockstates/creative_fluid_tank.json b/src/generated/resources/assets/create/blockstates/creative_fluid_tank.json new file mode 100644 index 000000000..45118d24e --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/creative_fluid_tank.json @@ -0,0 +1,76 @@ +{ + "variants": { + "bottom=false,shape=plain,top=false": { + "model": "create:block/creative_middle" + }, + "bottom=true,shape=plain,top=false": { + "model": "create:block/creative_bottom" + }, + "bottom=false,shape=window,top=false": { + "model": "create:block/creative_middle_window" + }, + "bottom=true,shape=window,top=false": { + "model": "create:block/creative_bottom_window" + }, + "bottom=false,shape=window_nw,top=false": { + "model": "create:block/creative_middle_window_nw" + }, + "bottom=true,shape=window_nw,top=false": { + "model": "create:block/creative_bottom_window_nw" + }, + "bottom=false,shape=window_sw,top=false": { + "model": "create:block/creative_middle_window_sw" + }, + "bottom=true,shape=window_sw,top=false": { + "model": "create:block/creative_bottom_window_sw" + }, + "bottom=false,shape=window_ne,top=false": { + "model": "create:block/creative_middle_window_ne" + }, + "bottom=true,shape=window_ne,top=false": { + "model": "create:block/creative_bottom_window_ne" + }, + "bottom=false,shape=window_se,top=false": { + "model": "create:block/creative_middle_window_se" + }, + "bottom=true,shape=window_se,top=false": { + "model": "create:block/creative_bottom_window_se" + }, + "bottom=false,shape=plain,top=true": { + "model": "create:block/creative_top" + }, + "bottom=true,shape=plain,top=true": { + "model": "create:block/creative_single" + }, + "bottom=false,shape=window,top=true": { + "model": "create:block/creative_top_window" + }, + "bottom=true,shape=window,top=true": { + "model": "create:block/creative_single_window" + }, + "bottom=false,shape=window_nw,top=true": { + "model": "create:block/creative_top_window_nw" + }, + "bottom=true,shape=window_nw,top=true": { + "model": "create:block/creative_single_window_nw" + }, + "bottom=false,shape=window_sw,top=true": { + "model": "create:block/creative_top_window_sw" + }, + "bottom=true,shape=window_sw,top=true": { + "model": "create:block/creative_single_window_sw" + }, + "bottom=false,shape=window_ne,top=true": { + "model": "create:block/creative_top_window_ne" + }, + "bottom=true,shape=window_ne,top=true": { + "model": "create:block/creative_single_window_ne" + }, + "bottom=false,shape=window_se,top=true": { + "model": "create:block/creative_top_window_se" + }, + "bottom=true,shape=window_se,top=true": { + "model": "create:block/creative_single_window_se" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/hose_pulley.json b/src/generated/resources/assets/create/blockstates/hose_pulley.json new file mode 100644 index 000000000..b69e3b7db --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/hose_pulley.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "create:block/hose_pulley/block" + }, + "facing=south": { + "model": "create:block/hose_pulley/block", + "y": 180 + }, + "facing=west": { + "model": "create:block/hose_pulley/block", + "y": 270 + }, + "facing=east": { + "model": "create:block/hose_pulley/block", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/item_drain.json b/src/generated/resources/assets/create/blockstates/item_drain.json new file mode 100644 index 000000000..139085ae4 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/item_drain.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/item_drain" + } + } +} \ 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 337d05b48..bd2daac3a 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -57,6 +57,7 @@ "block.create.copper_tiles": "s\u01DD\u05DF\u0131\u27D8 \u0279\u01DDddo\u0186", "block.create.copper_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u0279\u01DDddo\u0186", "block.create.creative_crate": "\u01DD\u0287\u0250\u0279\u0186 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", + "block.create.creative_fluid_tank": "\u029Eu\u0250\u27D8 p\u0131n\u05DF\u2132 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "block.create.creative_motor": "\u0279o\u0287oW \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "block.create.crushing_wheel": "\u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", "block.create.crushing_wheel_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 \u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", @@ -175,6 +176,8 @@ "block.create.hand_crank": "\u029Eu\u0250\u0279\u0186 pu\u0250H", "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", + "block.create.item_drain": "u\u0131\u0250\u0279\u15E1 \u026F\u01DD\u0287I", "block.create.jungle_window": "\u028Dopu\u0131M \u01DD\u05DFbun\u017F", "block.create.jungle_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u01DD\u05DFbun\u017F", "block.create.large_cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186 \u01DDb\u0279\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 059d2b99f..371acaa8d 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -60,6 +60,7 @@ "block.create.copper_tiles": "Copper Tiles", "block.create.copper_valve_handle": "Copper Valve Handle", "block.create.creative_crate": "Creative Crate", + "block.create.creative_fluid_tank": "Creative Fluid Tank", "block.create.creative_motor": "Creative Motor", "block.create.crushing_wheel": "Crushing Wheel", "block.create.crushing_wheel_controller": "Crushing Wheel Controller", @@ -178,6 +179,8 @@ "block.create.hand_crank": "Hand Crank", "block.create.horizontal_framed_glass": "Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "Horizontal Framed Glass Pane", + "block.create.hose_pulley": "Hose Pulley", + "block.create.item_drain": "Item Drain", "block.create.jungle_window": "Jungle Window", "block.create.jungle_window_pane": "Jungle Window Pane", "block.create.large_cogwheel": "Large Cogwheel", 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 237637680..3983b7fa6 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: 1021", + "_": "Missing Localizations: 1024", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Bauplankanonenmacher", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Mahlwerkrad", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "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", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Großes Zahnrad", 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 58317000e..8e8f1a140 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: 650", + "_": "Missing Localizations: 653", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Créateur de schémacanon", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "Moteur", "block.create.crushing_wheel": "Roue de concassage", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "Manivelle", "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", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Grande roue dentée", 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 cb9b93d62..826981954 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: 634", + "_": "Missing Localizations: 637", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Creatore Cannoneschematico", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "Motore", "block.create.crushing_wheel": "Ruota di Frantumazione", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "Manovella", "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", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Ruota Dentata Grande", 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 c26b4361c..e3ac8dfe3 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: 633", + "_": "Missing Localizations: 636", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "概略図砲クリエティフィアー", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "モーター", "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "ハンドクランク", "block.create.horizontal_framed_glass": "横型ガラス窓", "block.create.horizontal_framed_glass_pane": "横型ガラス窓板", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "大きな歯車", 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 8e7131853..a2f0c077e 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: 634", + "_": "Missing Localizations: 637", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "청사진 대포 지원기", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "모터", "block.create.crushing_wheel": "분쇄 휠", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "핸드 크랭크", "block.create.horizontal_framed_glass": "수평 유리", "block.create.horizontal_framed_glass_pane": "수평 유리판", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "큰 톱니바퀴", 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 7cea32d18..634c6597a 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: 962", + "_": "Missing Localizations: 965", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Bouwtekeningkannon Creatiefeerder", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Verpulveraar", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "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", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Groot Tandwiel", 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 75331efd4..cc6f316b1 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: 1028", + "_": "Missing Localizations: 1031", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Criativador Esquemaannon", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Roda de Moer", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "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", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Roda Dentada Grande", 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 b421ad0f6..2a67cb74f 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: 303", + "_": "Missing Localizations: 306", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Творческий ящик", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "Творческий мотор", "block.create.crushing_wheel": "Колесо дробления", "block.create.crushing_wheel_controller": "Контроллер колеса дробления", @@ -179,6 +180,8 @@ "block.create.hand_crank": "Рукоятка", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "Окно из тропического дерева", "block.create.jungle_window_pane": "Панель окна из тропического дерева", "block.create.large_cogwheel": "Большая шестерня", 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 0370fa797..76108fbca 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: 316", + "_": "Missing Localizations: 319", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "创造板条箱", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "创造马达", "block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel_controller": "粉碎轮控制器", @@ -179,6 +180,8 @@ "block.create.hand_crank": "手摇曲柄", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "丛林窗户", "block.create.jungle_window_pane": "丛林窗户板", "block.create.large_cogwheel": "大齿轮", diff --git a/src/generated/resources/assets/create/models/block/creative_bottom.json b/src/generated/resources/assets/create/models/block/creative_bottom.json new file mode 100644 index 000000000..f78fb4955 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window.json b/src/generated/resources/assets/create/models/block/creative_bottom_window.json new file mode 100644 index 000000000..2e1ca750d --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_ne.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_ne.json new file mode 100644 index 000000000..2deff3002 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_nw.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_nw.json new file mode 100644 index 000000000..0731ad052 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_se.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_se.json new file mode 100644 index 000000000..d96fd2319 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_sw.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_sw.json new file mode 100644 index 000000000..5dc3463d8 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle.json b/src/generated/resources/assets/create/models/block/creative_middle.json new file mode 100644 index 000000000..71eca1c08 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window.json b/src/generated/resources/assets/create/models/block/creative_middle_window.json new file mode 100644 index 000000000..21ce237ea --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_ne.json b/src/generated/resources/assets/create/models/block/creative_middle_window_ne.json new file mode 100644 index 000000000..9e320a620 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_nw.json b/src/generated/resources/assets/create/models/block/creative_middle_window_nw.json new file mode 100644 index 000000000..020d67af6 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_se.json b/src/generated/resources/assets/create/models/block/creative_middle_window_se.json new file mode 100644 index 000000000..d93c8f60b --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_sw.json b/src/generated/resources/assets/create/models/block/creative_middle_window_sw.json new file mode 100644 index 000000000..b1616aea4 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single.json b/src/generated/resources/assets/create/models/block/creative_single.json new file mode 100644 index 000000000..e4ddf2442 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window.json b/src/generated/resources/assets/create/models/block/creative_single_window.json new file mode 100644 index 000000000..48f6d55f6 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_ne.json b/src/generated/resources/assets/create/models/block/creative_single_window_ne.json new file mode 100644 index 000000000..04e396d6d --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_nw.json b/src/generated/resources/assets/create/models/block/creative_single_window_nw.json new file mode 100644 index 000000000..95627be45 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_se.json b/src/generated/resources/assets/create/models/block/creative_single_window_se.json new file mode 100644 index 000000000..6298b347c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_sw.json b/src/generated/resources/assets/create/models/block/creative_single_window_sw.json new file mode 100644 index 000000000..2922d5194 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top.json b/src/generated/resources/assets/create/models/block/creative_top.json new file mode 100644 index 000000000..df3680697 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window.json b/src/generated/resources/assets/create/models/block/creative_top_window.json new file mode 100644 index 000000000..a04004a03 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_ne.json b/src/generated/resources/assets/create/models/block/creative_top_window_ne.json new file mode 100644 index 000000000..9d23dea7c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_nw.json b/src/generated/resources/assets/create/models/block/creative_top_window_nw.json new file mode 100644 index 000000000..adbfc257c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_se.json b/src/generated/resources/assets/create/models/block/creative_top_window_se.json new file mode 100644 index 000000000..01f3e593c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_sw.json b/src/generated/resources/assets/create/models/block/creative_top_window_sw.json new file mode 100644 index 000000000..cc741f226 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/creative_fluid_tank.json b/src/generated/resources/assets/create/models/item/creative_fluid_tank.json new file mode 100644 index 000000000..d021bc2a6 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/creative_fluid_tank.json @@ -0,0 +1,8 @@ +{ + "parent": "create:block/fluid_tank/block_single_window", + "textures": { + "5": "create:block/creative_fluid_tank_window_single", + "1": "create:block/creative_fluid_tank", + "0": "create:block/creative_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/hose_pulley.json b/src/generated/resources/assets/create/models/item/hose_pulley.json new file mode 100644 index 000000000..234080247 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/hose_pulley.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/hose_pulley/item" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/item_drain.json b/src/generated/resources/assets/create/models/item/item_drain.json new file mode 100644 index 000000000..9490da25f --- /dev/null +++ b/src/generated/resources/assets/create/models/item/item_drain.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/item_drain" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json new file mode 100644 index 000000000..bf53aa381 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/hose_pulley" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/hose_pulley" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/creative_fluid_tank.json b/src/generated/resources/data/create/loot_tables/blocks/creative_fluid_tank.json new file mode 100644 index 000000000..0135c3367 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/creative_fluid_tank.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:creative_fluid_tank" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/hose_pulley.json b/src/generated/resources/data/create/loot_tables/blocks/hose_pulley.json new file mode 100644 index 000000000..7be8a0b31 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/hose_pulley.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:hose_pulley" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/item_drain.json b/src/generated/resources/data/create/loot_tables/blocks/item_drain.json new file mode 100644 index 000000000..08949a5af --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/item_drain.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:item_drain" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/hose_pulley.json b/src/generated/resources/data/create/recipes/crafting/kinetics/hose_pulley.json new file mode 100644 index 000000000..ae6b27994 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/hose_pulley.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCP", + " I " + ], + "key": { + "S": { + "item": "create:shaft" + }, + "P": { + "item": "create:fluid_pipe" + }, + "B": { + "item": "create:copper_casing" + }, + "C": { + "item": "minecraft:dried_kelp" + }, + "I": { + "tag": "forge:plates/copper" + } + }, + "result": { + "item": "create:hose_pulley" + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index cfbf8af94..4cfe13d22 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -68,8 +68,18 @@ public class AllBlockPartials { FURNACE_GENERATOR_FRAME = get("furnace_engine/frame"), CUCKOO_MINUTE_HAND = get("cuckoo_clock/minute_hand"), CUCKOO_HOUR_HAND = get("cuckoo_clock/hour_hand"), CUCKOO_LEFT_DOOR = get("cuckoo_clock/left_door"), CUCKOO_RIGHT_DOOR = get("cuckoo_clock/right_door"), CUCKOO_PIG = get("cuckoo_clock/pig"), - CUCKOO_CREEPER = get("cuckoo_clock/creeper"), ROPE_COIL = get("rope_pulley/rope_coil"), - ROPE_HALF = get("rope_pulley/rope_half"), ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"), + CUCKOO_CREEPER = get("cuckoo_clock/creeper"), + + ROPE_COIL = get("rope_pulley/rope_coil"), + ROPE_HALF = get("rope_pulley/rope_half"), + ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"), + + HOSE_COIL = get("hose_pulley/rope_coil"), + HOSE = get("hose_pulley/rope"), + HOSE_MAGNET = get("hose_pulley/pulley_magnet"), + HOSE_HALF = get("hose_pulley/rope_half"), + HOSE_HALF_MAGNET = get("hose_pulley/rope_half_magnet"), + MILLSTONE_COG = get("millstone/inner"), SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 3ebd6e98b..b7f73ff3f 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -65,6 +65,8 @@ import com.simibubi.create.content.contraptions.components.turntable.TurntableBl import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock; import com.simibubi.create.content.contraptions.fluids.PipeAttachmentModel; import com.simibubi.create.content.contraptions.fluids.PumpBlock; +import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyBlock; +import com.simibubi.create.content.contraptions.fluids.actors.ItemDrainBlock; import com.simibubi.create.content.contraptions.fluids.actors.SpoutBlock; import com.simibubi.create.content.contraptions.fluids.pipes.EncasedPipeBlock; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; @@ -548,17 +550,49 @@ public class AllBlocks { } } - public static final BlockEntry FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::new) + public static final BlockEntry FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::regular) .initialProperties(SharedProperties::softMetal) .properties(Block.Properties::nonOpaque) .blockstate(new FluidTankGenerator()::generate) - .onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::new)) + .onRegister(CreateRegistrate + .blockModel(() -> m -> new FluidTankModel(m, AllSpriteShifts.FLUID_TANK, AllSpriteShifts.COPPER_CASING))) .addLayer(() -> RenderType::getCutoutMipped) .item(FluidTankItem::new) .model(AssetLookup.customItemModel("_", "block_single_window")) .build() .register(); + public static final BlockEntry CREATIVE_FLUID_TANK = + REGISTRATE.block("creative_fluid_tank", FluidTankBlock::creative) + .initialProperties(SharedProperties::softMetal) + .properties(Block.Properties::nonOpaque) + .blockstate(new FluidTankGenerator("creative_")::generate) + .onRegister(CreateRegistrate.blockModel( + () -> m -> new FluidTankModel(m, AllSpriteShifts.CREATIVE_FLUID_TANK, AllSpriteShifts.CREATIVE_CASING))) + .addLayer(() -> RenderType::getCutoutMipped) + .item(FluidTankItem::new) + .model((c, p) -> p.withExistingParent(c.getName(), p.modLoc("block/fluid_tank/block_single_window")) + .texture("5", p.modLoc("block/creative_fluid_tank_window_single")) + .texture("1", p.modLoc("block/creative_fluid_tank")) + .texture("0", p.modLoc("block/creative_casing"))) + .build() + .register(); + + public static final BlockEntry HOSE_PULLEY = REGISTRATE.block("hose_pulley", HosePulleyBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate(BlockStateGen.horizontalBlockProvider(true)) + .transform(StressConfigDefaults.setImpact(4.0)) + .item() + .transform(customItemModel()) + .register(); + + public static final BlockEntry ITEM_DRAIN = REGISTRATE.block("item_drain", ItemDrainBlock::new) + .initialProperties(SharedProperties::softMetal) + .addLayer(() -> RenderType::getCutoutMipped) + .blockstate((c, p) -> p.simpleBlock(c.get(), AssetLookup.standardModel(c, p))) + .simpleItem() + .register(); + public static final BlockEntry SPOUT = REGISTRATE.block("spout", SpoutBlock::new) .initialProperties(SharedProperties::softMetal) .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov))) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 186426e85..60f71a3e8 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -25,6 +25,7 @@ public class AllShapes { public static final VoxelShaper CASING_14PX = shape(0, 0, 0, 16, 14, 16).forDirectional(), + CASING_13PX = shape(0, 0, 0, 16, 13, 16).forDirectional(), CASING_12PX = shape(0, 0, 0, 16, 12, 16).forDirectional(), CASING_11PX = shape(0, 0, 0, 16, 11, 16).forDirectional(), MOTOR_BLOCK = shape(3, 0, 3, 13, 14, 13).forDirectional(), @@ -34,11 +35,12 @@ public class AllShapes { .forHorizontal(Direction.SOUTH), PORTABLE_STORAGE_INTERFACE = shape(0, 0, 0, 16, 14, 16).forDirectional(), PULLEY = shape(0, 0, 0, 16, 16, 2).add(1, 1, 2, 15, 15, 14) + .add(2, 13, 2, 14, 16, 14) .add(0, 0, 14, 16, 16, 16) .forHorizontalAxis(), - SAIL_FRAME_COLLISION = shape(0, 5, 0, 16, 9, 16).erase(2, 0, 2, 14, 16, 14).forDirectional(), - SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), - SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(), + SAIL_FRAME_COLLISION = shape(0, 5, 0, 16, 9, 16).erase(2, 0, 2, 14, 16, 14) + .forDirectional(), + SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(), SPEED_CONTROLLER = shape(0, 0, 0, 16, 2, 16).add(1, 1, 1, 15, 15, 15) .erase(0, 8, 5, 16, 16, 11) .add(2, 9, 2, 14, 14, 14) @@ -121,9 +123,6 @@ public class AllShapes { LOGISTICS_TABLE_SLOPE = shape(0, 10, 15, 16, 14, 10.667).add(0, 12, 10.667, 16, 16, 6.333) .add(0, 14, 6.333, 16, 18, 2) .build(), - SCHEMATICS_TABLE_SLOPE = shape(0, 10, 16, 16, 14, 11).add(0, 12, 11, 16, 16, 6) - .add(0, 14, 6, 16, 18, 1) - .build(), TANK_BOTTOM_LID = shape(0, 0, 0, 16, 4, 16).build(), TANK_TOP_LID = shape(0, 12, 0, 16, 16, 16).build() ; @@ -196,7 +195,7 @@ public class AllShapes { .withVerticalShapes(LOGISTICAL_CONTROLLER.get(UP)), LOGISTICS_TABLE = shape(TABLE_POLE_SHAPE).add(LOGISTICS_TABLE_SLOPE) .forHorizontal(SOUTH), - SCHEMATICS_TABLE = shape(TABLE_POLE_SHAPE).add(SCHEMATICS_TABLE_SLOPE) + SCHEMATICS_TABLE = shape(4, 0, 4, 12, 12, 12).add(0, 11, 2, 16, 14, 14) .forDirectional(SOUTH), CHUTE_SLOPE = shape(ChuteShapes.createSlope()).forHorizontal(SOUTH) diff --git a/src/main/java/com/simibubi/create/AllSpriteShifts.java b/src/main/java/com/simibubi/create/AllSpriteShifts.java index 5fa92ea72..9d8fee9b0 100644 --- a/src/main/java/com/simibubi/create/AllSpriteShifts.java +++ b/src/main/java/com/simibubi/create/AllSpriteShifts.java @@ -42,7 +42,8 @@ public class AllSpriteShifts { BRASS_CASING = omni("brass_casing"), COPPER_CASING = omni("copper_casing"), SHADOW_STEEL_CASING = omni("shadow_steel_casing"), - REFINED_RADIANCE_CASING = omni("refined_radiance_casing"); + REFINED_RADIANCE_CASING = omni("refined_radiance_casing"), + CREATIVE_CASING = getCT(CTType.CROSS, "creative_casing"); public static final CTSpriteShiftEntry CHASSIS = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end"), @@ -50,7 +51,8 @@ public class AllSpriteShifts { public static final CTSpriteShiftEntry BRASS_TUNNEL_TOP = vertical("brass_tunnel_top"), - FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"); + FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"), + CREATIVE_FLUID_TANK = getCT(CTType.CROSS, "creative_fluid_tank"); public static final SpriteShiftEntry BELT = SpriteShifter.get("block/belt", "block/belt_animated"), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index f4eb24b27..e9fe27c1f 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -48,6 +48,8 @@ import com.simibubi.create.content.contraptions.components.turntable.TurntableTi import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; +import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyRenderer; +import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyTileEntity; import com.simibubi.create.content.contraptions.fluids.actors.SpoutRenderer; import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeTileEntity; @@ -56,6 +58,7 @@ import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveTileEntit import com.simibubi.create.content.contraptions.fluids.pipes.SmartFluidPipeTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.StraightPipeTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.TransparentStraightPipeRenderer; +import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankRenderer; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity; import com.simibubi.create.content.contraptions.processing.BasinRenderer; @@ -120,7 +123,6 @@ public class AllTileEntities { public static final TileEntityEntry SCHEMATIC_TABLE = Create.registrate() .tileEntity("schematic_table", SchematicTableTileEntity::new) .validBlocks(AllBlocks.SCHEMATIC_TABLE) - // .renderer(() -> renderer) .register(); // Kinetics @@ -202,7 +204,7 @@ public class AllTileEntities { .validBlocks(AllBlocks.MECHANICAL_PUMP) .renderer(() -> PumpRenderer::new) .register(); - + public static final TileEntityEntry SMART_FLUID_PIPE = Create.registrate() .tileEntity("smart_fluid_pipe", SmartFluidPipeTileEntity::new) .validBlocks(AllBlocks.SMART_FLUID_PIPE) @@ -224,7 +226,7 @@ public class AllTileEntities { .validBlocks(AllBlocks.GLASS_FLUID_PIPE) .renderer(() -> TransparentStraightPipeRenderer::new) .register(); - + public static final TileEntityEntry FLUID_VALVE = Create.registrate() .tileEntity("fluid_valve", FluidValveTileEntity::new) .validBlocks(AllBlocks.FLUID_VALVE) @@ -237,6 +239,18 @@ public class AllTileEntities { .renderer(() -> FluidTankRenderer::new) .register(); + public static final TileEntityEntry CREATIVE_FLUID_TANK = Create.registrate() + .tileEntity("creative_fluid_tank", CreativeFluidTankTileEntity::new) + .validBlocks(AllBlocks.CREATIVE_FLUID_TANK) + .renderer(() -> FluidTankRenderer::new) + .register(); + + public static final TileEntityEntry HOSE_PULLEY = Create.registrate() + .tileEntity("hose_pulley", HosePulleyTileEntity::new) + .validBlocks(AllBlocks.HOSE_PULLEY) + .renderer(() -> HosePulleyRenderer::new) + .register(); + public static final TileEntityEntry SPOUT = Create.registrate() .tileEntity("spout", SpoutTileEntity::new) .validBlocks(AllBlocks.SPOUT) @@ -284,7 +298,7 @@ public class AllTileEntities { .validBlocks(AllBlocks.WINDMILL_BEARING) .renderer(() -> BearingRenderer::new) .register(); - + public static final TileEntityEntry MECHANICAL_BEARING = Create.registrate() .tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_BEARING) diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java index 0de1bc213..dad00ef95 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.contraptions.base; +import com.simibubi.create.foundation.utility.Iterate; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.item.BlockItemUseContext; @@ -26,18 +28,20 @@ public abstract class HorizontalKineticBlock extends KineticBlock { @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return this.getDefaultState().with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing().getOpposite()); + return this.getDefaultState() + .with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing() + .getOpposite()); } public Direction getPreferredHorizontalFacing(BlockItemUseContext context) { Direction prefferedSide = null; - for (Direction side : Direction.values()) { - if (side.getAxis().isVertical()) - continue; - BlockState blockState = context.getWorld().getBlockState(context.getPos().offset(side)); + for (Direction side : Iterate.horizontalDirections) { + BlockState blockState = context.getWorld() + .getBlockState(context.getPos() + .offset(side)); if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos().offset(side), - blockState, side.getOpposite())) + if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos() + .offset(side), blockState, side.getOpposite())) if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { prefferedSide = null; break; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index ea4a3e165..80abce264 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -1020,5 +1020,5 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD public boolean isOnePlayerRiding() { return false; } - + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java index 6496c6095..2fb7a5ed1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java @@ -72,8 +72,11 @@ public class SailBlock extends ProperDirectionalBlock { BlockPos offsetPos = pos.offset(offset); if (!world.isRemote && world.getBlockState(offsetPos) .getMaterial() - .isReplaceable()) + .isReplaceable()) { world.setBlockState(offsetPos, blockState); + if (!player.isCreative()) + heldItem.shrink(1); + } return ActionResultType.SUCCESS; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java index 6365ac1ae..7fb9d23a4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java @@ -20,6 +20,7 @@ import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.IWorld; +import net.minecraft.world.World; public class PulleyRenderer extends KineticTileEntityRenderer { @@ -38,6 +39,7 @@ public class PulleyRenderer extends KineticTileEntityRenderer { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); PulleyTileEntity pulley = (PulleyTileEntity) te; + World world = te.getWorld(); BlockState blockState = te.getBlockState(); BlockPos pos = te.getPos(); @@ -46,7 +48,8 @@ public class PulleyRenderer extends KineticTileEntityRenderer { SuperByteBuffer magnet = CreateClient.bufferCache.renderBlock(AllBlocks.PULLEY_MAGNET.getDefaultState()); SuperByteBuffer rope = CreateClient.bufferCache.renderBlock(AllBlocks.ROPE.getDefaultState()); - boolean moving = pulley.running && (pulley.movedContraption == null || !pulley.movedContraption.isStalled()); + boolean running = pulley.running; + boolean moving = running && (pulley.movedContraption == null || !pulley.movedContraption.isStalled()); float offset = pulley.getInterpolatedOffset(moving ? partialTicks : 0.5f); if (pulley.movedContraption != null) { @@ -56,23 +59,28 @@ public class PulleyRenderer extends KineticTileEntityRenderer { offset = (float) -(entityPos - c.getAnchor().getY() - c.initialOffset); } + renderPulleyRope(ms, buffer, world, pos, halfMagnet, halfRope, magnet, rope, running, offset); + } + + public static void renderPulleyRope(MatrixStack ms, IRenderTypeBuffer buffer, World world, BlockPos pos, + SuperByteBuffer halfMagnet, SuperByteBuffer halfRope, SuperByteBuffer magnet, SuperByteBuffer rope, + boolean running, float offset) { IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); - - if (pulley.running || pulley.offset == 0) - renderAt(te.getWorld(), offset > .25f ? magnet : halfMagnet, offset, pos, ms, vb); + if (running || offset == 0) + renderAt(world, offset > .25f ? magnet : halfMagnet, offset, pos, ms, vb); float f = offset % 1; if (offset > .75f && (f < .25f || f > .75f)) - renderAt(te.getWorld(), halfRope, f > .75f ? f - 1 : f, pos, ms, vb); + renderAt(world, halfRope, f > .75f ? f - 1 : f, pos, ms, vb); - if (!pulley.running) + if (!running) return; for (int i = 0; i < offset - 1.25f; i++) - renderAt(te.getWorld(), rope, offset - i - 1, pos, ms, vb); + renderAt(world, rope, offset - i - 1, pos, ms, vb); } - public void renderAt(IWorld world, SuperByteBuffer partial, float offset, BlockPos pulleyPos, + public static void renderAt(IWorld world, SuperByteBuffer partial, float offset, BlockPos pulleyPos, MatrixStack ms, IVertexBuilder buffer) { BlockPos actualPos = pulleyPos.down((int) offset); int light = WorldRenderer.getLightmapCoordinates(world, world.getBlockState(actualPos), actualPos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java new file mode 100644 index 000000000..8cf78dbd7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java @@ -0,0 +1,51 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.util.Random; + +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.client.Minecraft; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.fluid.IFluidState; +import net.minecraft.particles.BlockParticleData; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public class FluidFX { + + static Random r = new Random(); + + public static void splash(BlockPos pos, FluidStack fluidStack) { + Fluid fluid = fluidStack.getFluid(); + if (fluid == Fluids.EMPTY) + return; + + IFluidState defaultState = fluid.getDefaultState(); + if (defaultState == null || defaultState.isEmpty()) { + return; + } + + BlockParticleData blockParticleData = new BlockParticleData(ParticleTypes.BLOCK, defaultState.getBlockState()); + Vec3d center = VecHelper.getCenterOf(pos); + + for (int i = 0; i < 20; i++) { + Vec3d v = VecHelper.offsetRandomly(Vec3d.ZERO, r, .25f); + particle(blockParticleData, center.add(v), v); + } + + } + + private static void particle(IParticleData data, Vec3d pos, Vec3d motion) { + world().addParticle(data, pos.x, pos.y, pos.z, motion.x, motion.y, motion.z); + } + + private static World world() { + return Minecraft.getInstance().world; + } + +} 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 0edd0cfd0..07cd96b44 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 @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.fluids; +import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; @@ -24,7 +25,8 @@ public class FluidPipeAttachmentBehaviour extends TileEntityBehaviour { .getAxis() == direction.getAxis()) return AttachmentTypes.NONE; - if (FluidPropagator.hasFluidCapability(facingState, world, offsetPos, direction)) + if (FluidPropagator.hasFluidCapability(facingState, world, offsetPos, direction) + && !AllBlocks.HOSE_PULLEY.has(facingState)) return AttachmentTypes.DRAIN; return AttachmentTypes.RIM; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java new file mode 100644 index 000000000..f2fff1737 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java @@ -0,0 +1,347 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import javax.annotation.Nullable; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; +import com.simibubi.create.foundation.utility.Debug; + +import it.unimi.dsi.fastutil.PriorityQueue; +import it.unimi.dsi.fastutil.objects.ObjectHeapPriorityQueue; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public class FluidDrainingBehaviour extends FluidManipulationBehaviour { + + Fluid fluid; + + // Execution + Set validationSet; + PriorityQueue queue; + boolean isValid; + + // Validation + List validationFrontier; + Set validationVisited; + Set newValidationSet; + + public FluidDrainingBehaviour(SmartTileEntity te) { + super(te); + validationVisited = new HashSet<>(); + validationFrontier = new ArrayList<>(); + validationSet = new HashSet<>(); + newValidationSet = new HashSet<>(); + queue = new ObjectHeapPriorityQueue<>(this::comparePositions); + } + + @Nullable + public boolean pullNext(BlockPos root, boolean simulate) { + if (!frontier.isEmpty()) + return false; + if (!Objects.equals(root, rootPos)) { + rebuildContext(root); + return false; + } + + if (counterpartActed) { + Debug.debugChat(" Counterpart acted"); + counterpartActed = false; + softReset(root); + return false; + } + + if (affectedArea == null) + affectedArea = new MutableBoundingBox(root, root); + + World world = getWorld(); + if (!queue.isEmpty() && !isValid) { + rebuildContext(root); + return false; + } + + if (validationFrontier.isEmpty() && !queue.isEmpty() && !simulate && revalidateIn == 0) + revalidate(root); + + while (!queue.isEmpty()) { + // Dont dequeue here, so we can decide not to dequeue a valid entry when + // simulating + BlockPos currentPos = queue.first().pos; + BlockState blockState = world.getBlockState(currentPos); + BlockState emptied = blockState; + Fluid fluid = Fluids.EMPTY; + + if (blockState.has(BlockStateProperties.WATERLOGGED) && blockState.get(BlockStateProperties.WATERLOGGED)) { + emptied = blockState.with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(false)); + fluid = Fluids.WATER; + } else if (blockState.getBlock() instanceof FlowingFluidBlock) { + FlowingFluidBlock flowingFluid = (FlowingFluidBlock) blockState.getBlock(); + emptied = Blocks.AIR.getDefaultState(); + if (blockState.get(FlowingFluidBlock.LEVEL) == 0) + fluid = flowingFluid.getFluid(); + else { + affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + world.setBlockState(currentPos, emptied, 2 | 16); + queue.dequeue(); + if (queue.isEmpty()) { + isValid = checkValid(world, rootPos); + reset(); + } + continue; + } + } else if (blockState.getFluidState() + .getFluid() != Fluids.EMPTY + && blockState.getCollisionShape(world, currentPos, ISelectionContext.dummy()) + .isEmpty()) { + fluid = blockState.getFluidState() + .getFluid(); + emptied = Blocks.AIR.getDefaultState(); + } + + if (this.fluid == null) + this.fluid = fluid; + + if (!this.fluid.isEquivalentTo(fluid)) { + queue.dequeue(); + if (queue.isEmpty()) { + isValid = checkValid(world, rootPos); + reset(); + } + continue; + } + + if (simulate) + return true; + + playEffect(world, currentPos, fluid, true); + + if (infinite) + return true; + + world.setBlockState(currentPos, emptied, 2 | 16); + affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + + queue.dequeue(); + if (queue.isEmpty()) { + isValid = checkValid(world, rootPos); + reset(); + } else if (!validationSet.contains(currentPos)) { + Debug.debugChat(" Drained unreachable fluid - rebuilding"); + reset(); + } + return true; + } + + if (rootPos == null) + return false; + + if (isValid) + rebuildContext(root); + + return false; + } + + protected void softReset(BlockPos root) { + queue.clear(); + validationSet.clear(); + newValidationSet.clear(); + validationFrontier.clear(); + validationVisited.clear(); + visited.clear(); + infinite = false; + setValidationTimer(); + frontier.add(new BlockPosEntry(root, 0)); + } + + protected boolean checkValid(World world, BlockPos root) { + BlockPos currentPos = root; + for (int timeout = 1000; timeout > 0 && !root.equals(tileEntity.getPos()); timeout--) { + FluidBlockType canPullFluidsFrom = canPullFluidsFrom(world.getBlockState(currentPos), currentPos); + if (canPullFluidsFrom == FluidBlockType.FLOWING) { + currentPos = currentPos.up(); + continue; + } + if (canPullFluidsFrom == FluidBlockType.SOURCE) + return true; + break; + } + return false; + } + + enum FluidBlockType { + NONE, SOURCE, FLOWING; + } + + @Override + public void read(CompoundNBT nbt, boolean clientPacket) { + super.read(nbt, clientPacket); + if (!clientPacket && affectedArea != null) + frontier.add(new BlockPosEntry(rootPos, 0)); + } + + protected FluidBlockType canPullFluidsFrom(BlockState blockState, BlockPos pos) { + if (blockState.has(BlockStateProperties.WATERLOGGED) && blockState.get(BlockStateProperties.WATERLOGGED)) + return FluidBlockType.SOURCE; + if (blockState.getBlock() instanceof FlowingFluidBlock) + return blockState.get(FlowingFluidBlock.LEVEL) == 0 ? FluidBlockType.SOURCE : FluidBlockType.FLOWING; + if (blockState.getFluidState() + .getFluid() != Fluids.EMPTY && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.dummy()) + .isEmpty()) + return FluidBlockType.SOURCE; + return FluidBlockType.NONE; + } + + @Override + public void tick() { + super.tick(); + if (rootPos != null) + isValid = checkValid(getWorld(), rootPos); + if (!frontier.isEmpty()) { + continueSearch(); + return; + } + if (!validationFrontier.isEmpty()) { + continueValidation(); + return; + } + if (revalidateIn > 0) + revalidateIn--; + } + + @Override + public void lazyTick() { + super.lazyTick(); + } + + public void rebuildContext(BlockPos root) { + reset(); + Debug.debugChat("Rebuilding!"); + rootPos = root; + affectedArea = new MutableBoundingBox(rootPos, rootPos); + if (isValid) + frontier.add(new BlockPosEntry(root, 0)); + } + + public void revalidate(BlockPos root) { + Debug.debugChat("Revalidating!"); + validationFrontier.clear(); + validationVisited.clear(); + newValidationSet.clear(); + validationFrontier.add(new BlockPosEntry(root, 0)); + setValidationTimer(); + } + + private void continueSearch() { + search(fluid, frontier, visited, (e, d) -> { + queue.enqueue(new BlockPosEntry(e, d)); + validationSet.add(e); + }, false); + Debug.debugChat("<...> Building - queue size " + queue.size()); + + World world = getWorld(); + int maxBlocks = maxBlocks(); + if (visited.size() > maxBlocks) { + infinite = true; + // Find first block with valid fluid + while (true) { + BlockPos first = queue.first().pos; + if (canPullFluidsFrom(world.getBlockState(first), first) != FluidBlockType.SOURCE) { + queue.dequeue(); + continue; + } + break; + } + BlockPos firstValid = queue.first().pos; + frontier.clear(); + visited.clear(); + queue.clear(); + queue.enqueue(new BlockPosEntry(firstValid, 0)); + tileEntity.sendData(); + Debug.debugChat(" Build complete - infinite"); + return; + } + + if (!frontier.isEmpty()) + return; + + Debug.debugChat(" Build complete - queue size " + queue.size()); + tileEntity.sendData(); + visited.clear(); + } + + private void continueValidation() { + search(fluid, validationFrontier, validationVisited, (e, d) -> newValidationSet.add(e), false); + Debug.debugChat("<...> Validating - set size " + newValidationSet.size()); + + int maxBlocks = maxBlocks(); + if (validationVisited.size() > maxBlocks) { + if (!infinite) { + Debug.debugChat(" Validation complete - now infinite"); + reset(); + } + Debug.debugChat("Validation complete - still infinite"); + validationFrontier.clear(); + setLongValidationTimer(); + return; + } + + if (!validationFrontier.isEmpty()) + return; + if (infinite) { + Debug.debugChat(" Validation complete - no longer infinite"); + reset(); + return; + } + + Debug.debugChat("Validation complete - set size " + newValidationSet.size()); + validationSet = newValidationSet; + newValidationSet = new HashSet<>(); + validationVisited.clear(); + } + + @Override + public void reset() { + Debug.debugChat(" RESET"); + super.reset(); + + fluid = null; + rootPos = null; + queue.clear(); + validationSet.clear(); + newValidationSet.clear(); + validationFrontier.clear(); + validationVisited.clear(); + } + + public static BehaviourType TYPE = new BehaviourType<>(); + + @Override + public BehaviourType getType() { + return TYPE; + } + + protected boolean isSearching() { + return !frontier.isEmpty(); + } + + public FluidStack getDrainableFluid(BlockPos rootPos) { + return fluid == null || isSearching() || !pullNext(rootPos, true) ? FluidStack.EMPTY + : new FluidStack(fluid, 1000); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java new file mode 100644 index 000000000..f9254dbac --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java @@ -0,0 +1,265 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; +import com.simibubi.create.foundation.utility.Debug; +import com.simibubi.create.foundation.utility.Iterate; + +import it.unimi.dsi.fastutil.PriorityQueue; +import it.unimi.dsi.fastutil.objects.ObjectHeapPriorityQueue; +import net.minecraft.block.BlockState; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.fluid.IFluidState; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.world.ITickList; +import net.minecraft.world.NextTickListEntry; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerTickList; + +public class FluidFillingBehaviour extends FluidManipulationBehaviour { + + PriorityQueue queue; + + List infinityCheckFrontier; + Set infinityCheckVisited; + + public FluidFillingBehaviour(SmartTileEntity te) { + super(te); + queue = new ObjectHeapPriorityQueue<>((p, p2) -> -comparePositions(p, p2)); + revalidateIn = 1; + infinityCheckFrontier = new ArrayList<>(); + infinityCheckVisited = new HashSet<>(); + } + + @Override + public void tick() { + super.tick(); + if (!infinityCheckFrontier.isEmpty() && rootPos != null) { + Fluid fluid = getWorld().getFluidState(rootPos) + .getFluid(); + if (fluid != Fluids.EMPTY) + continueValidation(fluid); + } + if (revalidateIn > 0) + revalidateIn--; + } + + protected void continueValidation(Fluid fluid) { + search(fluid, infinityCheckFrontier, infinityCheckVisited, + (p, d) -> infinityCheckFrontier.add(new BlockPosEntry(p, d)), true); + int maxBlocks = maxBlocks(); + + if (infinityCheckVisited.size() > maxBlocks) { + if (!infinite) { + Debug.debugChat(" Filler Validation complete - now infinite"); + reset(); + infinite = true; + } + Debug.debugChat("Filler Validation complete - still infinite"); + infinityCheckFrontier.clear(); + setLongValidationTimer(); + return; + } + + if (!infinityCheckFrontier.isEmpty()) + return; + if (infinite) { + Debug.debugChat(" Filler Validation complete - no longer infinite"); + reset(); + return; + } + + infinityCheckVisited.clear(); + } + + public boolean tryDeposit(Fluid fluid, BlockPos root, boolean simulate) { + if (!Objects.equals(root, rootPos)) { + reset(); + rootPos = root; + queue.enqueue(new BlockPosEntry(root, 0)); + affectedArea = new MutableBoundingBox(rootPos, rootPos); + return false; + } + + if (counterpartActed) { + Debug.debugChat(" Counterpart acted"); + counterpartActed = false; + softReset(root); + return false; + } + + if (affectedArea == null) + affectedArea = new MutableBoundingBox(root, root); + + if (revalidateIn == 0) { + visited.clear(); + infinityCheckFrontier.clear(); + infinityCheckVisited.clear(); + infinityCheckFrontier.add(new BlockPosEntry(root, 0)); + setValidationTimer(); + softReset(root); + } + + World world = getWorld(); + int maxRange = maxRange(); + int maxRangeSq = maxRange * maxRange; + int maxBlocks = maxBlocks(); + + if (infinite) { + IFluidState fluidState = world.getFluidState(rootPos); + boolean equivalentTo = fluidState.getFluid() + .isEquivalentTo(fluid); + if (!equivalentTo) + return false; + if (simulate) + return true; + playEffect(world, BlockPos.ZERO, fluid, false); + return true; + } + + boolean success = false; + for (int i = 0; !success && !queue.isEmpty() && i < searchedPerTick; i++) { + BlockPosEntry entry = queue.first(); + BlockPos currentPos = entry.pos; + + if (visited.contains(currentPos)) { + queue.dequeue(); + continue; + } + + if (!simulate) + visited.add(currentPos); + + if (visited.size() >= maxBlocks) { + Debug.debugChat(" Search exceeded - now infinite"); + infinite = true; + visited.clear(); + queue.clear(); + return false; + } + + SpaceType spaceType = getAtPos(world, currentPos, fluid); + if (spaceType == SpaceType.BLOCKING) + continue; + if (spaceType == SpaceType.FILLABLE) { + success = true; + if (!simulate) { + playEffect(world, currentPos, fluid, false); + + BlockState blockState = world.getBlockState(currentPos); + if (blockState.has(BlockStateProperties.WATERLOGGED) && fluid.isEquivalentTo(Fluids.WATER)) { + world.setBlockState(currentPos, blockState.with(BlockStateProperties.WATERLOGGED, true), + 2 | 16); + } else { + world.setBlockState(currentPos, fluid.getDefaultState() + .getBlockState(), 2 | 16); + } + + ITickList pendingFluidTicks = world.getPendingFluidTicks(); + if (pendingFluidTicks instanceof ServerTickList) { + ServerTickList serverTickList = (ServerTickList) pendingFluidTicks; + NextTickListEntry removedEntry = null; + for (NextTickListEntry nextTickListEntry : serverTickList.pendingTickListEntriesHashSet) { + if (nextTickListEntry.position.equals(currentPos)) { + removedEntry = nextTickListEntry; + break; + } + } + if (removedEntry != null) { + serverTickList.pendingTickListEntriesHashSet.remove(removedEntry); + serverTickList.pendingTickListEntriesTreeSet.remove(removedEntry); + } + } + + affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + } + } + + if (simulate && success) + return true; + + visited.add(currentPos); + queue.dequeue(); + + for (Direction side : Iterate.directions) { + if (side == Direction.UP) + continue; + + BlockPos offsetPos = currentPos.offset(side); + if (visited.contains(offsetPos)) + continue; + if (offsetPos.distanceSq(rootPos) > maxRangeSq) + continue; + + SpaceType nextSpaceType = getAtPos(world, offsetPos, fluid); + if (nextSpaceType != SpaceType.BLOCKING) + queue.enqueue(new BlockPosEntry(offsetPos, entry.distance + 1)); + } + } + + return success; + } + + protected void softReset(BlockPos root) { + visited.clear(); + queue.clear(); + queue.enqueue(new BlockPosEntry(root, 0)); + infinite = false; + setValidationTimer(); + } + + enum SpaceType { + FILLABLE, FILLED, BLOCKING + } + + protected SpaceType getAtPos(World world, BlockPos pos, Fluid toFill) { + BlockState blockState = world.getBlockState(pos); + IFluidState fluidState = blockState.getFluidState(); + + if (blockState.has(BlockStateProperties.WATERLOGGED)) + return toFill.isEquivalentTo(Fluids.WATER) + ? blockState.get(BlockStateProperties.WATERLOGGED) ? SpaceType.FILLED : SpaceType.FILLABLE + : SpaceType.BLOCKING; + + if (blockState.getBlock() instanceof FlowingFluidBlock) + return blockState.get(FlowingFluidBlock.LEVEL) == 0 + ? toFill.isEquivalentTo(fluidState.getFluid()) ? SpaceType.FILLED : SpaceType.BLOCKING + : SpaceType.FILLABLE; + + if (fluidState.getFluid() != Fluids.EMPTY + && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.dummy()) + .isEmpty()) + return toFill.isEquivalentTo(fluidState.getFluid()) ? SpaceType.FILLED : SpaceType.BLOCKING; + + return blockState.getMaterial() + .isReplaceable() ? SpaceType.FILLABLE : SpaceType.BLOCKING; + } + + @Override + public void reset() { + super.reset(); + queue.clear(); + infinityCheckFrontier.clear(); + infinityCheckVisited.clear(); + } + + public static BehaviourType TYPE = new BehaviourType<>(); + + @Override + public BehaviourType getType() { + return TYPE; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java new file mode 100644 index 000000000..3150c6011 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java @@ -0,0 +1,222 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; + +import com.simibubi.create.foundation.fluid.FluidHelper; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.IFluidState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fluids.FluidStack; + +public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { + + protected static class BlockPosEntry { + public BlockPos pos; + public int distance; + + public BlockPosEntry(BlockPos pos, int distance) { + this.pos = pos; + this.distance = distance; + } + } + + MutableBoundingBox affectedArea; + BlockPos rootPos; + boolean infinite; + protected boolean counterpartActed; + + // Search + static final int searchedPerTick = 256; + List frontier; + Set visited; + + static final int validationTimer = 160; + int revalidateIn; + + public FluidManipulationBehaviour(SmartTileEntity te) { + super(te); + setValidationTimer(); + infinite = false; + visited = new HashSet<>(); + frontier = new ArrayList<>(); + } + + public void counterpartActed() { + counterpartActed = true; + } + + protected int setValidationTimer() { + return revalidateIn = validationTimer; + } + + protected int setLongValidationTimer() { + return revalidateIn = validationTimer * 2; + } + + protected int maxRange() { + return 128; + } + + protected int maxBlocks() { + return 10000; + } + + public void reset() { + if (affectedArea != null) + scheduleUpdatesInAffectedArea(); + affectedArea = null; + setValidationTimer(); + frontier.clear(); + visited.clear(); + infinite = false; + } + + @Override + public void destroy() { + reset(); + super.destroy(); + } + + protected void scheduleUpdatesInAffectedArea() { + World world = getWorld(); + affectedArea = new MutableBoundingBox(affectedArea.minX - 1, affectedArea.minY - 1, affectedArea.minZ - 1, + affectedArea.maxX + 1, affectedArea.maxY + 1, affectedArea.maxZ + 1); + BlockPos.func_229383_a_(affectedArea) + .forEach(pos -> { + IFluidState nextFluidState = world.getFluidState(pos); + if (nextFluidState.isEmpty()) + return; + world.getPendingFluidTicks() + .scheduleTick(pos, nextFluidState.getFluid(), world.getRandom() + .nextInt(5)); + }); + } + + protected int comparePositions(BlockPosEntry e1, BlockPosEntry e2) { + Vec3d centerOfRoot = VecHelper.getCenterOf(rootPos); + BlockPos pos2 = e2.pos; + BlockPos pos1 = e1.pos; + if (pos1.getY() != pos2.getY()) + return Integer.compare(pos2.getY(), pos1.getY()); + int compareDistance = Integer.compare(e2.distance, e1.distance); + if (compareDistance != 0) + return compareDistance; + return Double.compare(VecHelper.getCenterOf(pos2) + .squareDistanceTo(centerOfRoot), + VecHelper.getCenterOf(pos1) + .squareDistanceTo(centerOfRoot)); + } + + protected void search(Fluid fluid, List frontier, Set visited, + BiConsumer add, boolean searchDownward) { + World world = getWorld(); + int maxBlocks = maxBlocks(); + int maxRange = maxRange(); + int maxRangeSq = maxRange * maxRange; + int i; + + for (i = 0; i < searchedPerTick && !frontier.isEmpty() && visited.size() <= maxBlocks; i++) { + BlockPosEntry entry = frontier.remove(0); + BlockPos currentPos = entry.pos; + if (visited.contains(currentPos)) + continue; + visited.add(currentPos); + + IFluidState fluidState = world.getFluidState(currentPos); + if (fluidState.isEmpty()) + continue; + + Fluid currentFluid = FluidHelper.convertToStill(fluidState.getFluid()); + if (fluid == null) + fluid = currentFluid; + if (!currentFluid.isEquivalentTo(fluid)) + continue; + + add.accept(currentPos, entry.distance); + + for (Direction side : Iterate.directions) { + if (!searchDownward && side == Direction.DOWN) + continue; + + BlockPos offsetPos = currentPos.offset(side); + if (visited.contains(offsetPos)) + continue; + if (offsetPos.distanceSq(rootPos) > maxRangeSq) + continue; + + IFluidState nextFluidState = world.getFluidState(offsetPos); + if (nextFluidState.isEmpty()) + continue; + Fluid nextFluid = nextFluidState.getFluid(); + if (nextFluid == FluidHelper.convertToFlowing(nextFluid) && side == Direction.UP + && !VecHelper.onSameAxis(rootPos, offsetPos, Axis.Y)) + continue; + + frontier.add(new BlockPosEntry(offsetPos, entry.distance + 1)); + } + } + } + + protected void playEffect(World world, BlockPos pos, Fluid fluid, boolean fillSound) { + BlockPos splooshPos = infinite ? tileEntity.getPos() : pos; + + SoundEvent soundevent = fillSound ? fluid.getAttributes() + .getFillSound() + : fluid.getAttributes() + .getEmptySound(); + if (soundevent == null) + soundevent = fluid.isIn(FluidTags.LAVA) + ? fillSound ? SoundEvents.ITEM_BUCKET_FILL_LAVA : SoundEvents.ITEM_BUCKET_EMPTY_LAVA + : fillSound ? SoundEvents.ITEM_BUCKET_FILL : SoundEvents.ITEM_BUCKET_EMPTY; + + world.playSound(null, splooshPos, soundevent, SoundCategory.BLOCKS, 0.3F, 1.0F); + if (world instanceof ServerWorld) + AllPackets.sendToNear(world, splooshPos, 10, new FluidSplashPacket(splooshPos, new FluidStack(fluid, 1))); + } + + @Override + public void write(CompoundNBT nbt, boolean clientPacket) { + if (rootPos != null) + nbt.put("LastPos", NBTUtil.writeBlockPos(rootPos)); + if (affectedArea != null) { + nbt.put("AffectedAreaFrom", + NBTUtil.writeBlockPos(new BlockPos(affectedArea.minX, affectedArea.minY, affectedArea.minZ))); + nbt.put("AffectedAreaTo", + NBTUtil.writeBlockPos(new BlockPos(affectedArea.maxX, affectedArea.maxY, affectedArea.maxZ))); + } + super.write(nbt, clientPacket); + } + + @Override + public void read(CompoundNBT nbt, boolean clientPacket) { + if (nbt.contains("LastPos")) + rootPos = NBTUtil.readBlockPos(nbt.getCompound("LastPos")); + if (nbt.contains("AffectedAreaFrom") && nbt.contains("AffectedAreaTo")) + affectedArea = new MutableBoundingBox(NBTUtil.readBlockPos(nbt.getCompound("AffectedAreaFrom")), + NBTUtil.readBlockPos(nbt.getCompound("AffectedAreaTo"))); + super.read(nbt, clientPacket); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java new file mode 100644 index 000000000..1489e52b7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java @@ -0,0 +1,49 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.function.Supplier; + +import com.simibubi.create.content.contraptions.fluids.FluidFX; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public class FluidSplashPacket extends SimplePacketBase { + + private BlockPos pos; + private FluidStack fluid; + + public FluidSplashPacket(BlockPos pos, FluidStack fluid) { + this.pos = pos; + this.fluid = fluid; + } + + public FluidSplashPacket(PacketBuffer buffer) { + pos = buffer.readBlockPos(); + fluid = buffer.readFluidStack(); + } + + public void write(PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeFluidStack(fluid); + } + + public void handle(Supplier ctx) { + ctx.get() + .enqueueWork(() -> DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { + if (Minecraft.getInstance().player.getPositionVector() + .distanceTo(new Vec3d(pos)) > 100) + return; + FluidFX.splash(pos, fluid); + })); + ctx.get() + .setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java new file mode 100644 index 000000000..7ec814a63 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java @@ -0,0 +1,107 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; +import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; + +public class HosePulleyBlock extends HorizontalKineticBlock implements ITE { + + public HosePulleyBlock(Properties properties) { + super(properties); + } + + @Override + public Axis getRotationAxis(BlockState state) { + return state.get(HORIZONTAL_FACING) + .rotateY() + .getAxis(); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + Direction preferredHorizontalFacing = getPreferredHorizontalFacing(context); + return this.getDefaultState() + .with(HORIZONTAL_FACING, + preferredHorizontalFacing != null ? preferredHorizontalFacing.rotateYCCW() + : context.getPlacementHorizontalFacing() + .getOpposite()); + } + + @Override + public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { + return state.get(HORIZONTAL_FACING) + .rotateY() == face; + } + + public static boolean hasPipeTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { + return state.get(HORIZONTAL_FACING) + .rotateYCCW() == face; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.HOSE_PULLEY.create(); + } + + @Override + public Direction getPreferredHorizontalFacing(BlockItemUseContext context) { + Direction fromParent = super.getPreferredHorizontalFacing(context); + if (fromParent != null) + return fromParent; + + Direction prefferedSide = null; + for (Direction facing : Iterate.horizontalDirections) { + BlockPos pos = context.getPos() + .offset(facing); + BlockState blockState = context.getWorld() + .getBlockState(pos); + if (FluidPipeBlock.canConnectTo(context.getWorld(), pos, blockState, facing)) + if (prefferedSide != null && prefferedSide.getAxis() != facing.getAxis()) { + prefferedSide = null; + break; + } else + prefferedSide = facing; + } + return prefferedSide == null ? null : prefferedSide.getOpposite(); + } + + @Override + public void onReplaced(BlockState p_196243_1_, World world, BlockPos pos, BlockState p_196243_4_, + boolean p_196243_5_) { + if (p_196243_1_.hasTileEntity() + && (p_196243_1_.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasTileEntity())) { + TileEntityBehaviour.destroy(world, pos, FluidDrainingBehaviour.TYPE); + TileEntityBehaviour.destroy(world, pos, FluidFillingBehaviour.TYPE); + world.removeTileEntity(pos); + } + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return AllShapes.PULLEY.get(state.get(HORIZONTAL_FACING) + .rotateY() + .getAxis()); + } + + @Override + public Class getTileEntityClass() { + return HosePulleyTileEntity.class; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java new file mode 100644 index 000000000..043c23985 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java @@ -0,0 +1,123 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import com.simibubi.create.foundation.fluid.SmartFluidTank; + +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class HosePulleyFluidHandler implements IFluidHandler { + + // The dynamic interface + + @Override + public int fill(FluidStack resource, FluidAction action) { + if (!internalTank.isEmpty() && !resource.isFluidEqual(internalTank.getFluid())) + return 0; + + int diff = resource.getAmount(); + int totalAmountAfterFill = diff + internalTank.getFluidAmount(); + FluidStack remaining = resource.copy(); + + if (predicate.get() && totalAmountAfterFill >= 1000) { + if (filler.tryDeposit(resource.getFluid(), rootPosGetter.get(), action.simulate())) { + drainer.counterpartActed(); + remaining.shrink(1000); + diff -= 1000; + } + } + + if (action.simulate()) + return diff <= 0 ? resource.getAmount() : internalTank.fill(remaining, action); + if (diff <= 0) { + internalTank.drain(-diff, FluidAction.EXECUTE); + return resource.getAmount(); + } + + return internalTank.fill(remaining, action); + } + + @Override + public FluidStack getFluidInTank(int tank) { + if (internalTank.isEmpty()) + return drainer.getDrainableFluid(rootPosGetter.get()); + return internalTank.getFluidInTank(tank); + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + return drainInternal(resource.getAmount(), resource, action); + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + return drainInternal(maxDrain, null, action); + } + + private FluidStack drainInternal(int maxDrain, @Nullable FluidStack resource, FluidAction action) { + if (resource != null && !internalTank.isEmpty() && !resource.isFluidEqual(internalTank.getFluid())) + return FluidStack.EMPTY; + if (internalTank.getFluidAmount() >= 1000) + return internalTank.drain(maxDrain, action); + BlockPos pos = rootPosGetter.get(); + FluidStack returned = drainer.getDrainableFluid(pos); + if (!predicate.get() || !drainer.pullNext(pos, action.simulate())) + return internalTank.drain(maxDrain, action); + + filler.counterpartActed(); + FluidStack leftover = returned.copy(); + int available = 1000 + internalTank.getFluidAmount(); + int drained; + + if (!internalTank.isEmpty() && !internalTank.getFluid() + .isFluidEqual(returned) || returned.isEmpty()) + return internalTank.drain(maxDrain, action); + + if (resource != null && !returned.isFluidEqual(resource)) + return FluidStack.EMPTY; + + drained = Math.min(maxDrain, available); + returned.setAmount(drained); + leftover.setAmount(available - drained); + if (action.execute() && !leftover.isEmpty()) + internalTank.setFluid(leftover); + return returned; + } + + // + + private SmartFluidTank internalTank; + private FluidFillingBehaviour filler; + private FluidDrainingBehaviour drainer; + private Supplier rootPosGetter; + private Supplier predicate; + + public HosePulleyFluidHandler(SmartFluidTank internalTank, FluidFillingBehaviour filler, + FluidDrainingBehaviour drainer, Supplier rootPosGetter, Supplier predicate) { + this.internalTank = internalTank; + this.filler = filler; + this.drainer = drainer; + this.rootPosGetter = rootPosGetter; + this.predicate = predicate; + } + + @Override + public int getTanks() { + return internalTank.getTanks(); + } + + @Override + public int getTankCapacity(int tank) { + return internalTank.getTankCapacity(tank); + } + + @Override + public boolean isFluidValid(int tank, FluidStack stack) { + return internalTank.isFluidValid(tank, stack); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyRenderer.java new file mode 100644 index 000000000..2fc5797bf --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyRenderer.java @@ -0,0 +1,70 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.content.contraptions.base.IRotate; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; +import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyRenderer; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.SuperByteBuffer; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class HosePulleyRenderer extends KineticTileEntityRenderer { + + public HosePulleyRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + public boolean isGlobalRenderer(KineticTileEntity p_188185_1_) { + return true; + } + + @Override + protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + super.renderSafe(te, partialTicks, ms, buffer, light, overlay); + HosePulleyTileEntity pulley = (HosePulleyTileEntity) te; + float offset = pulley.getInterpolatedOffset(partialTicks); + + Axis rotationAxis = ((IRotate) te.getBlockState() + .getBlock()).getRotationAxis(te.getBlockState()); + kineticRotationTransform(getRotatedCoil(te), te, rotationAxis, AngleHelper.rad(offset * 180), light).renderInto(ms, + buffer.getBuffer(RenderType.getSolid())); + + World world = te.getWorld(); + BlockState blockState = te.getBlockState(); + BlockPos pos = te.getPos(); + + SuperByteBuffer halfMagnet = AllBlockPartials.HOSE_HALF_MAGNET.renderOn(blockState); + SuperByteBuffer halfRope = AllBlockPartials.HOSE_HALF.renderOn(blockState); + SuperByteBuffer magnet = AllBlockPartials.HOSE_MAGNET.renderOn(blockState); + SuperByteBuffer rope = AllBlockPartials.HOSE.renderOn(blockState); + + PulleyRenderer.renderPulleyRope(ms, buffer, world, pos, halfMagnet, halfRope, magnet, rope, true, offset); + } + + @Override + protected BlockState getRenderedBlockState(KineticTileEntity te) { + return shaft(te.getBlockState() + .get(HosePulleyBlock.HORIZONTAL_FACING) + .rotateY() + .getAxis()); + } + + protected SuperByteBuffer getRotatedCoil(KineticTileEntity te) { + BlockState blockState = te.getBlockState(); + return AllBlockPartials.HOSE_COIL.renderOnDirectionalSouth(blockState, + blockState.get(HosePulleyBlock.HORIZONTAL_FACING) + .rotateY()); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyTileEntity.java new file mode 100644 index 000000000..b53a36bff --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyTileEntity.java @@ -0,0 +1,171 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.List; + +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.foundation.fluid.SmartFluidTank; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.ServerSpeedProvider; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class HosePulleyTileEntity extends KineticTileEntity { + + LerpedFloat offset; + boolean isMoving; + + private SmartFluidTank internalTank; + private LazyOptional capability; + private FluidDrainingBehaviour drainer; + private FluidFillingBehaviour filler; + + public HosePulleyTileEntity(TileEntityType typeIn) { + super(typeIn); + offset = LerpedFloat.linear() + .startWithValue(0); + isMoving = true; + internalTank = new SmartFluidTank(1500, this::onTankContentsChanged); + IFluidHandler handler = new HosePulleyFluidHandler(internalTank, filler, drainer, + () -> pos.down((int) Math.ceil(offset.getValue())), () -> !this.isMoving); + capability = LazyOptional.of(() -> handler); + } + + @Override + public void addBehaviours(List behaviours) { + drainer = new FluidDrainingBehaviour(this); + filler = new FluidFillingBehaviour(this); + behaviours.add(drainer); + behaviours.add(filler); + super.addBehaviours(behaviours); + } + + protected void onTankContentsChanged(FluidStack contents) {} + + @Override + public void onSpeedChanged(float previousSpeed) { + isMoving = true; + if (getSpeed() == 0) { + offset.forceNextSync(); + offset.setValue(Math.round(offset.getValue())); + isMoving = false; + } + + if (isMoving) { + float newOffset = offset.getValue() + getMovementSpeed(); + if (newOffset < 0) + isMoving = false; + if (!world.getBlockState(pos.down((int) Math.ceil(newOffset))) + .getMaterial() + .isReplaceable()) { + isMoving = false; + } + if (isMoving) { + drainer.reset(); + filler.reset(); + } + } + + super.onSpeedChanged(previousSpeed); + } + + @Override + @OnlyIn(Dist.CLIENT) + public AxisAlignedBB getRenderBoundingBox() { + return super.getRenderBoundingBox().expand(0, -offset.getValue(), 0); + } + + @Override + @OnlyIn(Dist.CLIENT) + public double getMaxRenderDistanceSquared() { + return super.getMaxRenderDistanceSquared() + offset.getValue() * offset.getValue(); + } + + @Override + public void tick() { + super.tick(); + float newOffset = offset.getValue() + getMovementSpeed(); + if (newOffset < 0) { + newOffset = 0; + isMoving = false; + } + if (!world.getBlockState(pos.down((int) Math.ceil(newOffset))) + .getMaterial() + .isReplaceable()) { + newOffset = (int) newOffset; + isMoving = false; + } + if (getSpeed() == 0) + isMoving = false; + + offset.setValue(newOffset); + } + + @Override + public void lazyTick() { + super.lazyTick(); + if (world.isRemote) + return; + if (isMoving) + return; + + int ceil = (int) Math.ceil(offset.getValue() + getMovementSpeed()); + if (getMovementSpeed() > 0 && world.getBlockState(pos.down(ceil)) + .getMaterial() + .isReplaceable()) { + isMoving = true; + drainer.reset(); + filler.reset(); + return; + } + } + + @Override + protected void write(CompoundNBT compound, boolean clientPacket) { + compound.put("Offset", offset.writeNBT()); + compound.put("Tank", internalTank.writeToNBT(new CompoundNBT())); + super.write(compound, clientPacket); + } + + @Override + protected void read(CompoundNBT compound, boolean clientPacket) { + offset.readNBT(compound.getCompound("Offset"), clientPacket); + internalTank.readFromNBT(compound.getCompound("Tank")); + super.read(compound, clientPacket); + } + + @Override + public void remove() { + super.remove(); + capability.invalidate(); + } + + public float getMovementSpeed() { + float movementSpeed = getSpeed() / 512f; + if (world.isRemote) + movementSpeed *= ServerSpeedProvider.get(); + return movementSpeed; + } + + public float getInterpolatedOffset(float pt) { + return offset.getValue(pt); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + if (isFluidHandlerCap(cap) + && (side == null || HosePulleyBlock.hasPipeTowards(world, pos, getBlockState(), side))) + return this.capability.cast(); + return super.getCapability(cap, side); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java new file mode 100644 index 000000000..9ea0ab495 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java @@ -0,0 +1,31 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.simibubi.create.AllShapes; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; + +public class ItemDrainBlock extends Block { + + public ItemDrainBlock(Properties p_i48440_1_) { + super(p_i48440_1_); + } + + @Override + public VoxelShape getShape(BlockState p_220053_1_, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.CASING_13PX.get(Direction.UP); + } + + @Override + public void fillItemGroup(ItemGroup p_149666_1_, NonNullList p_149666_2_) {} + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java new file mode 100644 index 000000000..aeb03c5f5 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java @@ -0,0 +1,56 @@ +package com.simibubi.create.content.contraptions.fluids.tank; + +import java.util.function.Consumer; + +import com.simibubi.create.foundation.fluid.SmartFluidTank; + +import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.fluids.FluidStack; + +public class CreativeFluidTankTileEntity extends FluidTankTileEntity { + + public CreativeFluidTankTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + } + + @Override + protected SmartFluidTank createInventory() { + return new CreativeSmartFluidTank(getCapacityMultiplier(), this::onFluidStackChanged); + } + + class CreativeSmartFluidTank extends SmartFluidTank { + + public CreativeSmartFluidTank(int capacity, Consumer updateCallback) { + super(capacity, updateCallback); + } + + @Override + public int getFluidAmount() { + return getFluid().isEmpty() ? 0 : getTankCapacity(0); + } + + public void setContainedFluid(FluidStack fluidStack) { + fluid = fluidStack.copy(); + if (!fluidStack.isEmpty()) + fluid.setAmount(getTankCapacity(0)); + notifyUpdate(); + } + + @Override + public int fill(FluidStack resource, FluidAction action) { + return resource.getAmount(); + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + return super.drain(resource, FluidAction.SIMULATE); + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + return super.drain(maxDrain, FluidAction.SIMULATE); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index f761f9d5a..c77744f36 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -1,6 +1,9 @@ package com.simibubi.create.content.contraptions.fluids.tank; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling; +import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity.CreativeSmartFluidTank; +import com.simibubi.create.content.contraptions.processing.EmptyingByBasin; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.fluid.FluidHelper; @@ -38,9 +41,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; public class FluidTankBlock extends Block implements IWrenchable, ITE { @@ -48,8 +49,19 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE SHAPE = EnumProperty.create("shape", Shape.class); - public FluidTankBlock(Properties p_i48440_1_) { + private boolean creative; + + public static FluidTankBlock regular(Properties p_i48440_1_) { + return new FluidTankBlock(p_i48440_1_, false); + } + + public static FluidTankBlock creative(Properties p_i48440_1_) { + return new FluidTankBlock(p_i48440_1_, true); + } + + protected FluidTankBlock(Properties p_i48440_1_, boolean creative) { super(p_i48440_1_); + this.creative = creative; setDefaultState(getDefaultState().with(TOP, true) .with(BOTTOM, true) .with(SHAPE, Shape.WINDOW)); @@ -73,7 +85,7 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE capability = - copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); - if (!capability.isPresent()) - return ActionResultType.PASS; - - if (!player.isCreative()) - return ActionResultType.FAIL; - - TileEntity te = world.getTileEntity(pos); - LazyOptional tankCapability = - te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, ray.getFace()); - if (!tankCapability.isPresent()) - return ActionResultType.PASS; boolean onClient = world.isRemote; - IFluidHandlerItem fluidItem = capability.orElse(null); + if (heldItem.isEmpty()) + return ActionResultType.PASS; + if (!player.isCreative()) + return ActionResultType.PASS; + + FluidExchange exchange = null; + FluidTankTileEntity te = FluidTankConnectivityHandler.anyTankAt(world, pos); + if (te == null) + return ActionResultType.FAIL; + + LazyOptional tankCapability = te.fluidCapability; + if (!tankCapability.isPresent()) + return ActionResultType.PASS; IFluidHandler fluidTank = tankCapability.orElse(null); FluidStack prevFluidInTank = fluidTank.getFluidInTank(0) .copy(); - FluidExchange exchange = FluidHelper.exchange(fluidTank, fluidItem, FluidExchange.TANK_TO_ITEM, 1000); + if (FluidHelper.tryEmptyItemIntoTE(world, player, hand, heldItem, te)) + exchange = FluidExchange.ITEM_TO_TANK; + else if (FluidHelper.tryFillItemFromTE(world, player, hand, heldItem, te)) + exchange = FluidExchange.TANK_TO_ITEM; - FluidStack fluidInTank = fluidTank.getFluidInTank(0); - if (!player.isCreative() && !onClient) { - if (heldItem.getCount() > 1) { - heldItem.shrink(1); - player.addItemStackToInventory(fluidItem.getContainer()); - } else { - player.setHeldItem(hand, fluidItem.getContainer()); - } + if (exchange == null) { + if (EmptyingByBasin.canItemBeEmptied(world, heldItem) + || GenericItemFilling.canItemBeFilled(world, heldItem)) + return ActionResultType.SUCCESS; + return ActionResultType.PASS; } SoundEvent soundevent = null; BlockState fluidState = null; + FluidStack fluidInTank = tankCapability.map(fh -> fh.getFluidInTank(0)) + .orElse(FluidStack.EMPTY); if (exchange == FluidExchange.ITEM_TO_TANK) { + if (creative && !onClient) { + FluidStack fluidInItem = EmptyingByBasin.emptyItem(world, heldItem, true).getFirst(); + if (!fluidInItem.isEmpty() && fluidTank instanceof CreativeSmartFluidTank) + ((CreativeSmartFluidTank) fluidTank).setContainedFluid(fluidInItem); + } + Fluid fluid = fluidInTank.getFluid(); fluidState = fluid.getDefaultState() .getBlockState(); @@ -141,6 +157,10 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE frontier = new ArrayList<>(); frontier.add(te); - formTanks(te.getWorld(), cache, frontier); + formTanks(te.getType(), te.getWorld(), cache, frontier); } - private static void formTanks(IBlockReader world, TankSearchCache cache, List frontier) { + private static void formTanks(TileEntityType type, IBlockReader world, TankSearchCache cache, + List frontier) { PriorityQueue> creationQueue = makeCreationQueue(); Set visited = new HashSet<>(); @@ -70,7 +72,7 @@ public class FluidTankConnectivityHandler { continue; if (visited.contains(next)) continue; - FluidTankTileEntity nextTank = tankAt(world, next); + FluidTankTileEntity nextTank = tankAt(type, world, next); if (nextTank == null) continue; if (nextTank.isRemoved()) @@ -142,6 +144,7 @@ public class FluidTankConnectivityHandler { boolean simulate) { int amount = 0; int height = 0; + TileEntityType type = te.getType(); World world = te.getWorld(); BlockPos origin = te.getPos(); FluidStack fluid = te.getTankInventory() @@ -154,7 +157,7 @@ public class FluidTankConnectivityHandler { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = origin.add(xOffset, yOffset, zOffset); - Optional tank = cache.getOrCache(world, pos); + Optional tank = cache.getOrCache(type, world, pos); if (!tank.isPresent()) break Search; @@ -194,15 +197,15 @@ public class FluidTankConnectivityHandler { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = origin.add(xOffset, yOffset, zOffset); - FluidTankTileEntity tank = tankAt(world, pos); + FluidTankTileEntity tank = tankAt(type, world, pos); if (tank == te) continue; - + if (tank.isController()) { te.tankInventory.fill(tank.tankInventory.getFluid(), FluidAction.EXECUTE); tank.tankInventory.setFluid(FluidStack.EMPTY); } - + splitTankAndInvalidate(tank, cache, false); tank.setController(origin); tank.updateConnectivity = false; @@ -248,7 +251,7 @@ public class FluidTankConnectivityHandler { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = origin.add(xOffset, yOffset, zOffset); - FluidTankTileEntity tankAt = tankAt(world, pos); + FluidTankTileEntity tankAt = tankAt(te.getType(), world, pos); if (tankAt == null) continue; if (!tankAt.getController() @@ -278,7 +281,7 @@ public class FluidTankConnectivityHandler { te.fluidCapability.invalidate(); if (tryReconnect) - formTanks(world, cache == null ? new TankSearchCache() : cache, frontier); + formTanks(te.getType(), world, cache == null ? new TankSearchCache() : cache, frontier); } private static PriorityQueue> makeCreationQueue() { @@ -291,7 +294,15 @@ public class FluidTankConnectivityHandler { } @Nullable - public static FluidTankTileEntity tankAt(IBlockReader world, BlockPos pos) { + public static FluidTankTileEntity tankAt(TileEntityType type, IBlockReader world, BlockPos pos) { + TileEntity te = world.getTileEntity(pos); + if (te instanceof FluidTankTileEntity && te.getType() == type) + return (FluidTankTileEntity) te; + return null; + } + + @Nullable + public static FluidTankTileEntity anyTankAt(IBlockReader world, BlockPos pos) { TileEntity te = world.getTileEntity(pos); if (te instanceof FluidTankTileEntity) return (FluidTankTileEntity) te; @@ -317,10 +328,10 @@ public class FluidTankConnectivityHandler { return controllerMap.containsKey(pos); } - Optional getOrCache(IBlockReader world, BlockPos pos) { + Optional getOrCache(TileEntityType type, IBlockReader world, BlockPos pos) { if (hasVisited(pos)) return controllerMap.get(pos); - FluidTankTileEntity tankAt = tankAt(world, pos); + FluidTankTileEntity tankAt = tankAt(type, world, pos); if (tankAt == null) { putEmpty(pos); return Optional.empty(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java index 70fdd24b3..f8f589966 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java @@ -12,6 +12,16 @@ import net.minecraftforge.client.model.generators.ModelFile; public class FluidTankGenerator extends SpecialBlockStateGen { + private String prefix; + + public FluidTankGenerator() { + this(""); + } + + public FluidTankGenerator(String prefix) { + this.prefix = prefix; + } + @Override protected int getXRotation(BlockState state) { return 0; @@ -37,8 +47,18 @@ public class FluidTankGenerator extends SpecialBlockStateGen { else if (bottom) shapeName = "bottom"; - return AssetLookup.partialBaseModel(ctx, prov, - shapeName + (shape == Shape.PLAIN ? "" : "_" + shape.getName())); + String modelName = shapeName + (shape == Shape.PLAIN ? "" : "_" + shape.getName()); + + if (!prefix.isEmpty()) + return prov.models() + .withExistingParent(prefix + modelName, prov.modLoc("block/fluid_tank/block_" + modelName)) + .texture("0", prov.modLoc("block/" + prefix + "casing")) + .texture("1", prov.modLoc("block/" + prefix + "fluid_tank")) + .texture("3", prov.modLoc("block/" + prefix + "fluid_tank_window")) + .texture("4", prov.modLoc("block/" + prefix + "fluid_tank_window_single")) + .texture("particle", prov.modLoc("block/" + prefix + "fluid_tank")); + + return AssetLookup.partialBaseModel(ctx, prov, modelName); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java index 9205c1be9..9dfc502dc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java @@ -44,7 +44,7 @@ public class FluidTankItem extends BlockItem { if (!FluidTankBlock.isTank(placedOnState)) return; - FluidTankTileEntity tankAt = FluidTankConnectivityHandler.tankAt(world, placedOnPos); + FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, placedOnPos); if (tankAt == null) return; FluidTankTileEntity controllerTE = tankAt.getControllerTE(); @@ -60,7 +60,7 @@ public class FluidTankItem extends BlockItem { .down() : controllerTE.getPos() .up(controllerTE.height); - + if (startPos.getY() != pos.getY()) return; @@ -87,9 +87,11 @@ public class FluidTankItem extends BlockItem { if (FluidTankBlock.isTank(blockState)) continue; BlockItemUseContext context = BlockItemUseContext.func_221536_a(ctx, offsetPos, face); - player.getPersistentData().putBoolean("SilenceTankSound", true); + player.getPersistentData() + .putBoolean("SilenceTankSound", true); super.tryPlace(context); - player.getPersistentData().remove("SilenceTankSound"); + player.getPersistentData() + .remove("SilenceTankSound"); } } } 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 bad2f0500..93fda0b22 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 @@ -6,9 +6,8 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import com.simibubi.create.AllSpriteShifts; import com.simibubi.create.foundation.block.connected.CTModel; -import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; +import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.block.BlockState; @@ -23,11 +22,9 @@ import net.minecraftforge.client.model.data.ModelProperty; public class FluidTankModel extends CTModel { protected static ModelProperty CULL_PROPERTY = new ModelProperty<>(); - static ConnectedTextureBehaviour CT_BEHAVIOUR = - new FluidTankCTBehaviour(AllSpriteShifts.FLUID_TANK, AllSpriteShifts.COPPER_CASING); - public FluidTankModel(IBakedModel originalModel) { - super(originalModel, CT_BEHAVIOUR); + public FluidTankModel(IBakedModel originalModel, CTSpriteShiftEntry side, CTSpriteShiftEntry top) { + super(originalModel, new FluidTankCTBehaviour(side, top)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java index f5f35b886..25531875b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java @@ -42,6 +42,9 @@ public class FluidTankRenderer extends SafeTileEntityRenderer tileEntityTypeIn) { super(tileEntityTypeIn); - tankInventory = new SmartFluidTank(getCapacityMultiplier(), this::onFluidStackChanged); + tankInventory = createInventory(); fluidCapability = LazyOptional.of(() -> tankInventory); forceFluidLevelUpdate = true; updateConnectivity = false; @@ -67,6 +67,10 @@ public class FluidTankTileEntity extends SmartTileEntity { refreshCapability(); } + protected SmartFluidTank createInventory() { + return new SmartFluidTank(getCapacityMultiplier(), this::onFluidStackChanged); + } + protected void updateConnectivity() { updateConnectivity = false; if (world.isRemote) @@ -117,7 +121,7 @@ public class FluidTankTileEntity extends SmartTileEntity { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = this.pos.add(xOffset, yOffset, zOffset); - FluidTankTileEntity tankAt = FluidTankConnectivityHandler.tankAt(world, pos); + FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, pos); if (tankAt == null) continue; if (tankAt.luminosity == actualLuminosity) @@ -279,12 +283,12 @@ public class FluidTankTileEntity extends SmartTileEntity { @Override protected void read(CompoundNBT compound, boolean clientPacket) { super.read(compound, clientPacket); - + BlockPos controllerBefore = controller; int prevSize = width; int prevHeight = height; int prevLum = luminosity; - + updateConnectivity = compound.contains("Uninitialized"); luminosity = compound.getInt("Luminosity"); controller = null; @@ -305,10 +309,10 @@ public class FluidTankTileEntity extends SmartTileEntity { if (compound.contains("ForceFluidLevel") || fluidLevel == null) fluidLevel = new InterpolatedChasingValue().start(getFillState()) .withSpeed(1 / 2f); - + if (!clientPacket) return; - + boolean changeOfController = controllerBefore == null ? controller != null : !controllerBefore.equals(controller); if (changeOfController || prevSize != width || prevHeight != height) { @@ -325,9 +329,9 @@ public class FluidTankTileEntity extends SmartTileEntity { } if (luminosity != prevLum && hasWorld()) world.getChunkProvider() - .getLightManager() - .checkBlock(pos); - + .getLightManager() + .checkBlock(pos); + if (compound.contains("LazySync")) fluidLevel.withSpeed(compound.contains("LazySync") ? 1 / 8f : 1 / 2f); } @@ -350,7 +354,7 @@ public class FluidTankTileEntity extends SmartTileEntity { } compound.putInt("Luminosity", luminosity); super.write(compound, clientPacket); - + if (!clientPacket) return; if (forceFluidLevelUpdate) @@ -365,7 +369,7 @@ public class FluidTankTileEntity extends SmartTileEntity { public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { if (!fluidCapability.isPresent()) refreshCapability(); - if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) return fluidCapability.cast(); return super.getCapability(cap, side); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index 2189fdb7e..afbbde0fa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -7,11 +7,11 @@ import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.Pair; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -34,11 +34,6 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; @@ -80,9 +75,9 @@ public class BasinBlock extends Block implements ITE, IWrenchab try { BasinTileEntity te = getTileEntity(worldIn, pos); if (!heldItem.isEmpty()) { - if (tryEmptyItemIntoBasin(worldIn, player, handIn, heldItem, te)) + if (FluidHelper.tryEmptyItemIntoTE(worldIn, player, handIn, heldItem, te)) return ActionResultType.SUCCESS; - if (tryFillItemFromBasin(worldIn, player, handIn, heldItem, te)) + if (FluidHelper.tryFillItemFromTE(worldIn, player, handIn, heldItem, te)) return ActionResultType.SUCCESS; if (EmptyingByBasin.canItemBeEmptied(worldIn, heldItem) @@ -103,77 +98,6 @@ public class BasinBlock extends Block implements ITE, IWrenchab return ActionResultType.SUCCESS; } - protected boolean tryEmptyItemIntoBasin(World worldIn, PlayerEntity player, Hand handIn, ItemStack heldItem, - BasinTileEntity te) { - if (!EmptyingByBasin.canItemBeEmptied(worldIn, heldItem)) - return false; - - Pair emptyingResult = EmptyingByBasin.emptyItem(worldIn, heldItem, true); - LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); - IFluidHandler tank = capability.orElse(null); - FluidStack fluidStack = emptyingResult.getFirst(); - - if (tank == null || fluidStack.getAmount() != tank.fill(fluidStack, FluidAction.SIMULATE)) - return false; - if (worldIn.isRemote) - return true; - - ItemStack copyOfHeld = heldItem.copy(); - emptyingResult = EmptyingByBasin.emptyItem(worldIn, copyOfHeld, false); - tank.fill(fluidStack, FluidAction.EXECUTE); - - if (!player.isCreative()) { - if (copyOfHeld.isEmpty()) - player.setHeldItem(handIn, emptyingResult.getSecond()); - else { - player.setHeldItem(handIn, copyOfHeld); - player.inventory.placeItemBackInInventory(worldIn, emptyingResult.getSecond()); - } - } - return true; - } - - protected boolean tryFillItemFromBasin(World world, PlayerEntity player, Hand handIn, ItemStack heldItem, - BasinTileEntity te) { - if (!GenericItemFilling.canItemBeFilled(world, heldItem)) - return false; - - LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); - IFluidHandler tank = capability.orElse(null); - - if (tank == null) - return false; - - for (int i = 0; i < tank.getTanks(); i++) { - FluidStack fluid = tank.getFluidInTank(i); - if (fluid.isEmpty()) - continue; - int requiredAmountForItem = GenericItemFilling.getRequiredAmountForItem(world, heldItem, fluid.copy()); - if (requiredAmountForItem == -1) - continue; - if (requiredAmountForItem > fluid.getAmount()) - continue; - - if (world.isRemote) - return true; - - if (player.isCreative()) - heldItem = heldItem.copy(); - ItemStack out = GenericItemFilling.fillItem(world, requiredAmountForItem, heldItem, fluid.copy()); - - FluidStack copy = fluid.copy(); - copy.setAmount(requiredAmountForItem); - tank.drain(copy, FluidAction.EXECUTE); - - if (!player.isCreative()) - player.inventory.placeItemBackInInventory(world, out); - te.notifyUpdate(); - return true; - } - - return false; - } - @Override public void onLanded(IBlockReader worldIn, Entity entityIn) { super.onLanded(worldIn, entityIn); @@ -203,7 +127,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab public VoxelShape getRaytraceShape(BlockState p_199600_1_, IBlockReader p_199600_2_, BlockPos p_199600_3_) { return AllShapes.BASIN_RAYTRACE_SHAPE; } - + @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return AllShapes.BASIN_BLOCK_SHAPE; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 586082bdb..bcc525775 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -170,7 +170,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE 0) { - beltMovementPositive = !beltMovementPositive; - Collections.reverse(items); - belt.markDirty(); - belt.sendData(); - } - // Added/Removed items from previous cycle if (!toInsert.isEmpty() || !toRemove.isEmpty()) { toInsert.forEach(this::insert); @@ -67,6 +59,17 @@ public class BeltInventory { belt.markDirty(); belt.sendData(); } + + if (belt.getSpeed() == 0) + return; + + // Reverse item collection if belt just reversed + if (beltMovementPositive != belt.getDirectionAwareBeltMovementSpeed() > 0) { + beltMovementPositive = !beltMovementPositive; + Collections.reverse(items); + belt.markDirty(); + belt.sendData(); + } // Assuming the first entry is furthest on the belt TransportedItemStack stackInFront = null; diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index e3e1d7b78..d9bc7d81d 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -492,6 +492,17 @@ public class StandardRecipeGen extends CreateRecipeProvider { .patternLine("SCS") .patternLine(" I ")), + HOSE_PULLEY = create(AllBlocks.HOSE_PULLEY).unlockedByTag(I::copper) + .viaShaped(b -> b + .key('S', I.shaft()) + .key('P', AllBlocks.FLUID_PIPE.get()) + .key('B', I.copperCasing()) + .key('C', Items.DRIED_KELP) + .key('I', I.copperSheet()) + .patternLine(" B ") + .patternLine("SCP") + .patternLine(" I ")), + EMPTY_BLAZE_BURNER = create(AllItems.EMPTY_BLAZE_BURNER).unlockedByTag(I::iron) .viaShaped(b -> b.key('A', Blocks.IRON_BARS) .key('I', I.ironSheet()) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java index 581e9c087..d740798a3 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java @@ -7,14 +7,24 @@ import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling; +import com.simibubi.create.content.contraptions.processing.EmptyingByBasin; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.utility.Pair; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.JsonToNBT; +import net.minecraft.util.Hand; import net.minecraft.util.JSONUtils; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.fluids.capability.IFluidHandlerItem; @@ -74,9 +84,9 @@ public class FluidHelper { int amount = JSONUtils.getInt(json, "amount"); FluidStack stack = new FluidStack(fluid, amount); - if (!json.has("nbt")) + if (!json.has("nbt")) return stack; - + try { JsonElement element = json.get("nbt"); stack.setTag(JsonToNBT.getTagFromJson( @@ -89,6 +99,77 @@ public class FluidHelper { return stack; } + public static boolean tryEmptyItemIntoTE(World worldIn, PlayerEntity player, Hand handIn, ItemStack heldItem, + SmartTileEntity te) { + if (!EmptyingByBasin.canItemBeEmptied(worldIn, heldItem)) + return false; + + Pair emptyingResult = EmptyingByBasin.emptyItem(worldIn, heldItem, true); + LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); + IFluidHandler tank = capability.orElse(null); + FluidStack fluidStack = emptyingResult.getFirst(); + + if (tank == null || fluidStack.getAmount() != tank.fill(fluidStack, FluidAction.SIMULATE)) + return false; + if (worldIn.isRemote) + return true; + + ItemStack copyOfHeld = heldItem.copy(); + emptyingResult = EmptyingByBasin.emptyItem(worldIn, copyOfHeld, false); + tank.fill(fluidStack, FluidAction.EXECUTE); + + if (!player.isCreative()) { + if (copyOfHeld.isEmpty()) + player.setHeldItem(handIn, emptyingResult.getSecond()); + else { + player.setHeldItem(handIn, copyOfHeld); + player.inventory.placeItemBackInInventory(worldIn, emptyingResult.getSecond()); + } + } + return true; + } + + public static boolean tryFillItemFromTE(World world, PlayerEntity player, Hand handIn, ItemStack heldItem, + SmartTileEntity te) { + if (!GenericItemFilling.canItemBeFilled(world, heldItem)) + return false; + + LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); + IFluidHandler tank = capability.orElse(null); + + if (tank == null) + return false; + + for (int i = 0; i < tank.getTanks(); i++) { + FluidStack fluid = tank.getFluidInTank(i); + if (fluid.isEmpty()) + continue; + int requiredAmountForItem = GenericItemFilling.getRequiredAmountForItem(world, heldItem, fluid.copy()); + if (requiredAmountForItem == -1) + continue; + if (requiredAmountForItem > fluid.getAmount()) + continue; + + if (world.isRemote) + return true; + + if (player.isCreative()) + heldItem = heldItem.copy(); + ItemStack out = GenericItemFilling.fillItem(world, requiredAmountForItem, heldItem, fluid.copy()); + + FluidStack copy = fluid.copy(); + copy.setAmount(requiredAmountForItem); + tank.drain(copy, FluidAction.EXECUTE); + + if (!player.isCreative()) + player.inventory.placeItemBackInInventory(world, out); + te.notifyUpdate(); + return true; + } + + return false; + } + @Nullable public static FluidExchange exchange(IFluidHandler fluidTank, IFluidHandlerItem fluidItem, FluidExchange preferred, int maxAmount) { diff --git a/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java index 6c23fa6d3..bffc55da2 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java @@ -8,11 +8,9 @@ import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; -import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.utility.ColorHelper; -import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VecHelper; -import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -27,18 +25,14 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderTypeLookup; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.world.ClientWorld; import net.minecraft.fluid.Fluid; import net.minecraft.inventory.container.PlayerContainer; import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.IItemProvider; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.LightType; -import net.minecraft.world.World; import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.fluids.FluidStack; public class GuiGameElement { @@ -212,36 +206,13 @@ public class GuiGameElement { .isEmpty()) return; - for (RenderType type : RenderType.getBlockLayers()) { - if (!RenderTypeLookup.canRenderInLayer(blockState.getFluidState(), type)) - continue; - - RenderSystem.pushMatrix(); - RenderHelper.disableStandardItemLighting(); - - ClientWorld world = Minecraft.getInstance().world; - if (renderWorld == null || renderWorld.getWorld() != world) - renderWorld = new FluidRenderWorld(world); - - for (Direction d : Iterate.directions) { - vb = buffer.getBuffer(type); - if (d.getAxisDirection() == AxisDirection.POSITIVE) - continue; - - RenderSystem.pushMatrix(); - RenderSystem.translated(.5, .5, .5); - RenderSystem.rotatef(AngleHelper.horizontalAngle(d), 0, 1, 0); - RenderSystem.rotatef(AngleHelper.verticalAngle(d) - 90, 0, 0, 1); - RenderSystem.translated(-.5, -.5, -.5); - blockRenderer.renderFluid(new BlockPos(0, 1, 0), renderWorld, vb, blockState.getFluidState()); - buffer.draw(type); - RenderSystem.popMatrix(); - } - - RenderHelper.enable(); - RenderSystem.popMatrix(); - break; - } + RenderSystem.pushMatrix(); + RenderHelper.disableStandardItemLighting(); + FluidRenderer.renderTiledFluidBB(new FluidStack(blockState.getFluidState() + .getFluid(), 1000), 0, 0, 0, 1.0001f, 1.0001f, 1.0001f, buffer, ms, 0xf000f0, true); + buffer.draw(RenderType.getTranslucent()); + RenderHelper.enable(); + RenderSystem.popMatrix(); } } @@ -271,29 +242,12 @@ public class GuiGameElement { transform(); RenderSystem.scaled(1, -1, 1); RenderSystem.translated(0, 0, -75); - Minecraft.getInstance().getItemRenderer().renderItemIntoGUI(stack, 0, 0); + Minecraft.getInstance() + .getItemRenderer() + .renderItemIntoGUI(stack, 0, 0); cleanUp(); } } - private static FluidRenderWorld renderWorld; - - private static class FluidRenderWorld extends WrappedWorld { - - public FluidRenderWorld(World world) { - super(world); - } - - @Override - public int getLightLevel(LightType p_226658_1_, BlockPos p_226658_2_) { - return 15; - } - - @Override - public BlockState getBlockState(BlockPos pos) { - return Blocks.AIR.getDefaultState(); - } - - } } diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index 6f59dd299..f1dad8e0e 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -13,6 +13,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.syn import com.simibubi.create.content.contraptions.components.structureMovement.sync.LimbSwingUpdatePacket; import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingCreationPacket; import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartControllerUpdatePacket; +import com.simibubi.create.content.contraptions.fluids.actors.FluidSplashPacket; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket; import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket; import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket; @@ -32,8 +33,12 @@ import com.simibubi.create.foundation.utility.ServerSpeedProvider; import net.minecraft.network.PacketBuffer; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkEvent.Context; import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.network.PacketDistributor; +import net.minecraftforge.fml.network.PacketDistributor.TargetPoint; import net.minecraftforge.fml.network.simple.SimpleChannel; public enum AllPackets { @@ -66,7 +71,8 @@ public enum AllPackets { CONTRAPTION_SEAT_MAPPING(ContraptionSeatMappingPacket.class, ContraptionSeatMappingPacket::new), LIMBSWING_UPDATE(LimbSwingUpdatePacket.class, LimbSwingUpdatePacket::new), MINECART_CONTROLLER(MinecartControllerUpdatePacket.class, MinecartControllerUpdatePacket::new), - + FLUID_SPLASH(FluidSplashPacket.class, FluidSplashPacket::new), + ; public static final ResourceLocation CHANNEL_NAME = new ResourceLocation(Create.ID, "network"); @@ -80,11 +86,20 @@ public enum AllPackets { } public static void registerPackets() { - channel = NetworkRegistry.ChannelBuilder.named(CHANNEL_NAME).serverAcceptedVersions(s -> true) - .clientAcceptedVersions(s -> true).networkProtocolVersion(() -> NETWORK_VERSION).simpleChannel(); + channel = NetworkRegistry.ChannelBuilder.named(CHANNEL_NAME) + .serverAcceptedVersions(s -> true) + .clientAcceptedVersions(s -> true) + .networkProtocolVersion(() -> NETWORK_VERSION) + .simpleChannel(); for (AllPackets packet : values()) packet.packet.register(); + } + public static void sendToNear(World world, BlockPos pos, int range, Object message) { + channel.send( + PacketDistributor.NEAR.with(TargetPoint.p(pos.getX(), pos.getY(), pos.getZ(), range, world.getDimension() + .getType())), + message); } private static class LoadedPacket { @@ -102,7 +117,11 @@ public enum AllPackets { } private void register() { - channel.messageBuilder(type, index++).encoder(encoder).decoder(decoder).consumer(handler).add(); + channel.messageBuilder(type, index++) + .encoder(encoder) + .decoder(decoder) + .consumer(handler) + .add(); } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index b8f87e003..98de531a9 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -20,3 +20,7 @@ public net.minecraft.potion.PotionBrewing field_185215_c # POTION_ITEMS # Beacon public net.minecraft.tileentity.BeaconTileEntity field_174909_f # beamSegments + +# Server Tick List (For stopping placed fluids from spilling) +public net.minecraft.world.server.ServerTickList field_205374_d # pendingTickListEntriesHashSet +public net.minecraft.world.server.ServerTickList field_205375_e # pendingTickListEntriesTreeSet \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json b/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json index 10732b44a..fb5f533ee 100644 --- a/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json +++ b/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json @@ -5,7 +5,7 @@ "0": "create:block/copper_casing", "1": "create:block/fluid_tank", "5": "create:block/fluid_tank_window_single", - "particle": "create:block/fluid_tank" + "particle": "#1" }, "elements": [ { diff --git a/src/main/resources/assets/create/models/block/hose_pulley/block.json b/src/main/resources/assets/create/models/block/hose_pulley/block.json new file mode 100644 index 000000000..4e251b554 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/block.json @@ -0,0 +1,271 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "4": "create:block/copper_gearbox", + "8": "create:block/oxidized/copper_block_0", + "9": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "side", + "from": [14, 2, 2], + "to": [15, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "east": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "west": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "down": {"uv": [2, 11, 14, 12], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "side", + "from": [1, 2, 2], + "to": [2, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "east": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "west": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "down": {"uv": [2, 12, 14, 11], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "side", + "from": [-1.1, 2.9, 2.9], + "to": [1, 13.1, 13.1], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -7, 7]}, + "faces": { + "north": {"uv": [11, 5, 6, 6], "rotation": 90, "texture": "#9"}, + "south": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"}, + "west": {"uv": [11, 0, 6, 5], "texture": "#9"}, + "up": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"}, + "down": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 14], + "to": [16, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "east": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "south": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "west": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 14, 2, 16], "rotation": 270, "texture": "#8"}, + "down": {"uv": [0, 0, 2, 2], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 14], + "to": [2, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "east": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "south": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "west": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "up": {"uv": [0, 16, 2, 14], "rotation": 270, "texture": "#8"}, + "down": {"uv": [0, 2, 2, 0], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 0], + "to": [16, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "east": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "south": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "west": {"uv": [2, 2, 0, 14], "rotation": 180, "texture": "#8"}, + "up": {"uv": [2, 14, 0, 16], "rotation": 270, "texture": "#8"}, + "down": {"uv": [2, 0, 0, 2], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 0], + "to": [2, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "east": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#8"}, + "south": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "west": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "up": {"uv": [2, 16, 0, 14], "rotation": 270, "texture": "#8"}, + "down": {"uv": [2, 2, 0, 0], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 0, 0], + "to": [16, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#8"}, + "east": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#8"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "up": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 14, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 16, 2, 14], "texture": "#8"}, + "east": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "south": {"uv": [14, 16, 16, 14], "texture": "#8"}, + "west": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [0, 16, 16, 14], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 0, 0], + "to": [2, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [2, 14, 0, 16], "texture": "#8"}, + "east": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "south": {"uv": [16, 14, 14, 16], "texture": "#8"}, + "west": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 14, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [2, 16, 0, 14], "texture": "#8"}, + "east": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "south": {"uv": [16, 16, 14, 14], "texture": "#8"}, + "west": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 270, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 1, 13], + "to": [14, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [2, 14, 14, 16], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#8"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 1, 1], + "to": [14, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [14, 14, 2, 16], "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [14, 14, 2, 16], "rotation": 180, "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 0], "texture": "#8"}, + "down": {"uv": [2, 16, 14, 14], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 13, 1], + "to": [14, 15, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [14, 16, 2, 14], "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [14, 2, 2, 0], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [14, 15, 2, 13], "texture": "#8"}, + "down": {"uv": [14, 2, 2, 0], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 13, 13], + "to": [14, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [2, 2, 14, 0], "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [2, 16, 14, 14], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [14, 13, 2, 15], "texture": "#8"}, + "down": {"uv": [14, 0, 2, 2], "texture": "#8"} + } + }, + { + "name": "top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [2, 13, 14, 15], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#8"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 180, "texture": "#8"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + { + "name": "shaft", + "origin": [8, 8, 8], + "children": [] + }, + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [] + }, 15] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley.bbmodel b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley.bbmodel new file mode 100644 index 000000000..341190326 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"item","parent":"block/block","ambientocclusion":true,"resolution":{"width":16,"height":16},"elements":[{"name":"coil","from":[4,4,2],"to":[12,12,14],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8,8,-10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[2,1,14,9],"texture":3},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[2,1,14,9],"rotation":180,"texture":3},"up":{"uv":[2,1,14,9],"rotation":270,"texture":3},"down":{"uv":[2,1,14,9],"rotation":90,"texture":3}},"uuid":"c6880831-d683-f703-04a3-fd39148ebb5c"},{"name":"coil","from":[3.5,3.5,3],"to":[12.5,12.5,7],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8,8,-10],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,3,4,12],"rotation":180,"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,3,4,12],"texture":3},"up":{"uv":[0,3,4,12],"rotation":90,"texture":3},"down":{"uv":[0,3,4,12],"rotation":270,"texture":3}},"uuid":"d93793b9-dd62-5818-2564-da40eed87601"},{"name":"side","from":[2,2,14],"to":[14,14,15],"autouv":0,"color":2,"origin":[8,-8,8],"faces":{"north":{"uv":[2,2,14,14],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[2,2,14,14],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,1,12],"rotation":270},"down":{"uv":[2,11,14,12],"texture":2}},"uuid":"50235661-64a5-c971-c6e6-0975baa71d99"},{"name":"side","from":[2,2,1],"to":[14,14,2],"autouv":0,"color":3,"origin":[8,-8,8],"faces":{"north":{"uv":[14,2,2,14],"texture":5},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[14,2,2,14],"texture":5},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[1,0,0,12],"rotation":270},"down":{"uv":[2,12,14,11],"texture":2}},"uuid":"f16b6f4f-7c00-62c6-e29b-a9d790a92d84"},{"name":"side_frame","from":[0,2,14],"to":[2,14,16],"autouv":0,"color":3,"origin":[8,1,8],"faces":{"north":{"uv":[14,2,16,14],"texture":5},"east":{"uv":[0,2,2,14],"texture":5},"south":{"uv":[14,2,16,14],"rotation":180,"texture":5},"west":{"uv":[14,2,16,14],"texture":5},"up":{"uv":[0,14,2,16],"texture":5},"down":{"uv":[0,0,2,2],"texture":5}},"uuid":"8e0b92f4-fea1-c76e-eec7-fa197247034b"},{"name":"side_frame","from":[0,2,0],"to":[2,14,2],"autouv":0,"color":6,"origin":[8,1,8],"faces":{"north":{"uv":[16,2,14,14],"rotation":180,"texture":5},"east":{"uv":[2,2,0,14],"texture":5},"south":{"uv":[16,2,14,14],"texture":5},"west":{"uv":[16,2,14,14],"texture":5},"up":{"uv":[0,16,2,14],"texture":5},"down":{"uv":[0,2,2,0],"texture":5}},"uuid":"c6e4de46-37af-8304-d04a-e3a06202a6d1"},{"name":"side_frame","from":[14,2,14],"to":[16,14,16],"autouv":0,"color":7,"origin":[8,1,8],"faces":{"north":{"uv":[2,2,0,14],"rotation":180,"texture":5},"east":{"uv":[16,2,14,14],"texture":5},"south":{"uv":[16,2,14,14],"rotation":180,"texture":5},"west":{"uv":[2,2,0,14],"texture":5},"up":{"uv":[2,14,0,16],"texture":5},"down":{"uv":[2,0,0,2],"texture":5}},"uuid":"22157158-613c-9abb-d3b9-2a2d576e1f98"},{"name":"side_frame","from":[14,2,0],"to":[16,14,2],"autouv":0,"color":5,"origin":[8,1,8],"faces":{"north":{"uv":[14,2,16,14],"rotation":180,"texture":5},"east":{"uv":[14,2,16,14],"texture":5},"south":{"uv":[0,2,2,14],"rotation":180,"texture":5},"west":{"uv":[0,2,2,14],"texture":5},"up":{"uv":[2,16,0,14],"texture":5},"down":{"uv":[2,2,0,0],"texture":5}},"uuid":"82c9a138-92db-c34a-f8e7-45283db7413d"},{"name":"side_frame","from":[0,0,14],"to":[16,2,16],"autouv":0,"color":3,"origin":[8,1,8],"faces":{"north":{"uv":[0,14,16,16],"texture":5},"east":{"uv":[0,14,2,16],"texture":5},"south":{"uv":[0,14,16,16],"texture":5},"west":{"uv":[14,14,16,16],"texture":5},"up":{"uv":[0,14,16,16],"rotation":180,"texture":5},"down":{"uv":[0,14,16,16],"rotation":180,"texture":5}},"uuid":"6965d55e-49aa-ab6d-4568-5de4c1501c57"},{"name":"side_frame","from":[0,14,14],"to":[16,16,16],"autouv":0,"color":2,"origin":[8,15,8],"faces":{"north":{"uv":[0,16,16,14],"texture":5},"east":{"uv":[0,16,2,14],"texture":5},"south":{"uv":[0,16,16,14],"texture":5},"west":{"uv":[14,16,16,14],"texture":5},"up":{"uv":[0,16,16,14],"rotation":180,"texture":5},"down":{"uv":[0,16,16,14],"rotation":180,"texture":5}},"uuid":"639134c9-125c-c945-7ece-ee0b946543c7"},{"name":"side_frame","from":[0,0,0],"to":[16,2,2],"autouv":0,"color":2,"origin":[8,1,8],"faces":{"north":{"uv":[16,14,0,16],"texture":5},"east":{"uv":[2,14,0,16],"texture":5},"south":{"uv":[16,14,0,16],"texture":5},"west":{"uv":[16,14,14,16],"texture":5},"up":{"uv":[0,16,16,14],"rotation":180,"texture":5},"down":{"uv":[0,14,16,16],"texture":5}},"uuid":"b27e1c88-26b6-190b-f005-a259810655a1"},{"name":"side_frame","from":[0,14,0],"to":[16,16,2],"autouv":0,"color":6,"origin":[8,15,8],"faces":{"north":{"uv":[16,16,0,14],"texture":5},"east":{"uv":[2,16,0,14],"texture":5},"south":{"uv":[16,16,0,14],"texture":5},"west":{"uv":[16,16,14,14],"texture":5},"up":{"uv":[0,16,16,14],"texture":5},"down":{"uv":[0,14,16,16],"rotation":180,"texture":5}},"uuid":"e06d0f90-92de-1302-190a-fbd10c267e74"},{"name":"front","from":[1,1,2],"to":[3,3,14],"autouv":0,"color":1,"origin":[8,-8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[2,14,14,16],"rotation":180,"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[2,14,14,16],"texture":5},"up":{"uv":[2,0,14,2],"rotation":270,"texture":5},"down":{"uv":[2,14,14,16],"rotation":90,"texture":5}},"uuid":"8f39075d-3ce3-b4f6-6ef0-6bb131af4333"},{"name":"front","from":[13,1,2],"to":[15,3,14],"autouv":0,"color":1,"origin":[8,-8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[14,14,2,16],"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[14,14,2,16],"rotation":180,"texture":5},"up":{"uv":[2,2,14,0],"rotation":90,"texture":5},"down":{"uv":[2,16,14,14],"rotation":90,"texture":5}},"uuid":"4af7b711-49e2-96cc-804f-025c079ee52f"},{"name":"front","from":[13,13,2],"to":[15,15,14],"autouv":0,"color":1,"origin":[8,10,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[14,16,2,14],"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[14,2,2,0],"texture":5},"up":{"uv":[14,15,2,13],"rotation":90,"texture":5},"down":{"uv":[14,2,2,0],"rotation":90,"texture":5}},"uuid":"ecde023c-1297-0247-44c2-571ac0de9df1"},{"name":"front","from":[1,13,2],"to":[3,15,14],"autouv":0,"color":0,"origin":[8,10,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[2,2,14,0],"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[2,16,14,14],"texture":5},"up":{"uv":[14,13,2,15],"rotation":90,"texture":5},"down":{"uv":[14,0,2,2],"rotation":270,"texture":5}},"uuid":"b062f25c-f8f3-548b-2f46-fc6bb96083b3"},{"name":"Axis","from":[6,6,8],"to":[10,10,16],"autouv":0,"color":5,"origin":[8,1,16],"faces":{"north":{"uv":[0,0,0,0],"rotation":180,"texture":null},"east":{"uv":[6,8,10,16],"rotation":90,"texture":0},"south":{"uv":[6,6,10,10],"texture":1},"west":{"uv":[6,8,10,16],"rotation":270,"texture":0},"up":{"uv":[6,8,10,16],"texture":0},"down":{"uv":[6,8,10,16],"rotation":180,"texture":0}},"uuid":"e3b9c976-9f92-23c7-9744-b6d5f4bca3b8"},{"name":"rope","from":[6,2,6],"to":[10,8,10],"autouv":0,"color":6,"origin":[7.75,13,8],"faces":{"north":{"uv":[12,10,16,16],"texture":4},"east":{"uv":[12,10,16,16],"texture":4},"south":{"uv":[12,10,16,16],"texture":4},"west":{"uv":[12,10,16,16],"texture":4},"up":{"uv":[12,0,16,4],"rotation":90,"texture":4},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"ffe805a0-fba3-54be-ff6f-ea4d1c3bd848"},{"name":"top","from":[2,14,2],"to":[14,16,14],"autouv":0,"color":6,"origin":[8,10,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[2,1,14,3],"rotation":180,"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[2,13,14,15],"texture":5},"up":{"uv":[2,2,14,14],"rotation":90,"texture":5},"down":{"uv":[2,2,14,14],"rotation":90,"texture":5}},"uuid":"06ae5406-365f-7935-e0d8-7832b0a3aaf9"},{"name":"coil","from":[3.5,3.5,9],"to":[12.5,12.5,13],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8,8,-4],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,3,4,12],"rotation":180,"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,3,4,12],"texture":3},"up":{"uv":[0,3,4,12],"rotation":90,"texture":3},"down":{"uv":[0,3,4,12],"rotation":270,"texture":3}},"uuid":"4a787d9b-a04d-eafd-9dc3-ae1b61869b56"},{"name":"side","from":[3,3,-1],"to":[13,13,1],"autouv":0,"color":3,"origin":[9,-7,7],"faces":{"north":{"uv":[11,0,6,5],"texture":6},"east":{"uv":[11,5,6,6],"rotation":90,"texture":6},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[11,5,6,6],"rotation":270,"texture":6},"up":{"uv":[11,5,6,6],"texture":6},"down":{"uv":[11,5,6,6],"rotation":180,"texture":6}},"uuid":"79d24535-547d-b692-62e2-bcb231a40b02"},{"name":"drain 1","from":[4.5,0,4.5],"to":[11.5,2,11.5],"autouv":0,"color":6,"origin":[6.75,14,6],"faces":{"north":{"uv":[0,0,7,2],"texture":4},"east":{"uv":[0,0,7,2],"texture":4},"south":{"uv":[0,0,7,2],"texture":4},"west":{"uv":[0,0,7,2],"texture":4},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,2,7,9],"texture":4}},"uuid":"6bb4086f-6bf3-c374-3149-743ee69bfa01"},{"name":"drain 2","from":[4.5,2,4.5],"to":[11.5,3,11.5],"autouv":0,"color":6,"origin":[6.75,16,6],"faces":{"north":{"uv":[0,1,7,2],"texture":4},"east":{"uv":[0,1,7,2],"texture":4},"south":{"uv":[0,1,7,2],"texture":4},"west":{"uv":[0,1,7,2],"texture":4},"up":{"uv":[0,2,7,9],"rotation":90,"texture":4},"down":{"uv":[0,9,7,16],"texture":4}},"uuid":"fb8d9297-4cd4-2fe4-bca4-663c7a4bdb9d"},{"name":"drain 3","from":[5.5,2,5.5],"to":[10.5,5,10.5],"autouv":0,"color":6,"origin":[7.75,16,7],"faces":{"north":{"uv":[7,2,10,7],"rotation":270,"texture":4},"east":{"uv":[7,2,10,7],"rotation":270,"texture":4},"south":{"uv":[7,2,10,7],"rotation":270,"texture":4},"west":{"uv":[7,2,10,7],"rotation":270,"texture":4},"up":{"uv":[1,3,6,8],"rotation":90,"texture":4},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"f725e5f1-25eb-7f7a-da81-22f68d165e4b"}],"outliner":["c6880831-d683-f703-04a3-fd39148ebb5c","d93793b9-dd62-5818-2564-da40eed87601","4a787d9b-a04d-eafd-9dc3-ae1b61869b56","50235661-64a5-c971-c6e6-0975baa71d99","f16b6f4f-7c00-62c6-e29b-a9d790a92d84","79d24535-547d-b692-62e2-bcb231a40b02","8e0b92f4-fea1-c76e-eec7-fa197247034b","c6e4de46-37af-8304-d04a-e3a06202a6d1","22157158-613c-9abb-d3b9-2a2d576e1f98","82c9a138-92db-c34a-f8e7-45283db7413d","6965d55e-49aa-ab6d-4568-5de4c1501c57","639134c9-125c-c945-7ece-ee0b946543c7","b27e1c88-26b6-190b-f005-a259810655a1","e06d0f90-92de-1302-190a-fbd10c267e74","8f39075d-3ce3-b4f6-6ef0-6bb131af4333","4af7b711-49e2-96cc-804f-025c079ee52f","ecde023c-1297-0247-44c2-571ac0de9df1","b062f25c-f8f3-548b-2f46-fc6bb96083b3",{"name":"shaft","uuid":"93605e08-38e8-a8a7-4837-dba968998c73","export":true,"isOpen":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["e3b9c976-9f92-23c7-9744-b6d5f4bca3b8"]},{"name":"rope_half_magnet","uuid":"4fe97f9a-28c6-d38d-a405-2cdf8eca9b88","export":true,"isOpen":true,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["ffe805a0-fba3-54be-ff6f-ea4d1c3bd848","6bb4086f-6bf3-c374-3149-743ee69bfa01","fb8d9297-4cd4-2fe4-bca4-663c7a4bdb9d","f725e5f1-25eb-7f7a-da81-22f68d165e4b"]},"06ae5406-365f-7935-e0d8-7832b0a3aaf9"],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\axis.png","name":"axis.png","folder":"block","namespace":"create","id":"0","particle":false,"mode":"bitmap","saved":true,"uuid":"3faf49c5-68db-fed3-b4ca-030214e86e3e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAo0lEQVQ4T6WTIQ4EIQxFO4IRIECAgLshMBwKO+fCggWDZVOSSVbMJjulkpTH/+X3gB/lvZ/WWhhjQO8drus6nlofD7ExhDCFEOsOGcAYA+cc5JzfK4gxTnxdKQW1VhrgPE/QWu8pQAulFEgpvRvit4XWGg2AFjjnQAJgDqSUawYkC3eQUAEJgEEyxiwLpBxsA/AXMERYW0FCCyTAvUxkwL/r/AGRGnYRGJZooQAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\axis_top.png","name":"axis_top.png","folder":"block","namespace":"create","id":"1","particle":false,"mode":"bitmap","saved":true,"uuid":"8065816d-f585-f9e5-bf22-5659e0bd657b","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAaklEQVQ4T+2SMQ4AERBFv16h5W5atcohVGrXJBOhmL3A2rBa089L/ssTODxx+I8LwNyBc46VUui9g4iQc371NZXovWdjDFprqLUixrgHCCGwlBJjDJRSkFLaA1hrWWv9f8JqYDekj5BWJT4NbygR50R18wAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\copper_gearbox.png","name":"copper_gearbox.png","folder":"block","namespace":"create","id":"4","particle":false,"mode":"bitmap","saved":true,"uuid":"374c5dbd-5856-5c1a-324e-d8464907f61e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB/0lEQVQ4T42TQWsTQRTH/7PpbjRxd000TVYaIghWWSjSetBDLdSoICzaDyPevflJ/AA59eihkiiIRCSoBLu6dtNsm6VJU7JJN5GZYbKbhoBzmXnvzfzm/+bNI29flieIjeBsjGRKmnqoTUfcJ4I0Rt483Z7sWGtxBlufDLozvvA4YHbiWpLNnd8+9hpdDth+chOVXRurGYXfphA2B0MuTtiCWD8M2N5Gux8B7C8tFm96gzk1wkHTWEnzSyh8CthaN+D88dnhfj9E08ih5bpQFAWaroMQgkQigVuuh2xOxt2iCudvgF/HpyCvy48nz+8XpoDq0iV28GOthsN2m92WX16GUSiw9YtcBvdWdQawu0EEaHfO0Ng/wR6R8bVex4HrzqRywzBgmiY2pTEDHLUG+O4P5xV8TmmoVCoIw3AGQFOwLAsPcYoHd/JoNjscIKrg/vSZgv8FfPvh8xQEgFbB6Q9RJSpq1erCFMpXwBRQAHvEi4BPS1dx4DjYt+2ZR1zf2MCR52HHUOcBooxUQccb4f35ALIsI5PNQpIkVsbRaATT76GUT8O8nYkU0DJaz0oQH4lCxFAl/mniQ78MrBRjAJoCVfDug43NogY1m4SeTi38jTRA965d16KPVNJ4g/TG0e3Ujiu4GKOd2AvOQV5tPWId05vwtmUHCW/nuG+RpH+o0xp0yccJugAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\hose_pulley_rope.png","name":"hose_pulley_rope.png","folder":"block","namespace":"create","id":"5","particle":false,"mode":"bitmap","saved":true,"uuid":"36d79924-56fb-920d-44b5-79ac193e75bc","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAX0lEQVQ4T2M00tP4z8fLwfDp8w+GX7//MLCxsjCQwmfU0VT5r6IgwfDh0xe4IaTwGUddwEB5GLS1tf2Xl5dn0NDQYLhx4wbDw4cPGUjhMy5duvQ/uZpBlo2mgz/DIQwAKD7WmGK5ZIUAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\hose_pulley_magnet.png","name":"hose_pulley_magnet.png","folder":"block","namespace":"create","id":"6","particle":false,"mode":"bitmap","saved":true,"uuid":"e708a585-d298-4e3f-e1a3-6fe62e93581b","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABTElEQVQ4T2NkYGBgSLC2+r/g6DFGdBokhw6M9DT+8/FyMHz6/IPh1+8/DIwHK6L/f/z6jYGfm4uBWZid4e/bnwwwvn3HUkZ0A3Q0Vf6rKEgwfPj0BWwIXgNABl46/oJBVISdIXTWerBhGC7YlBv4/8nTnwwczP8Z2NkYGX7++s/w4y8jg4w0O4OQnCDYABDbbzLEAKwuuHv3HYOyshDcCzA+SAOILSLBATcAwwVHupP+P7zwgkHeQIKBn4OP4f6thwyf3/0E80HhATMMFh54XQALPHQXgFwHM4CkMID5GzkmSIoFbNFI/XQAisYLNz8yLD95CO7SSHM7BgN1fnjII3sBqwsypq/ESLIzMsPhAYcs2dbW9l9eXp5BQ0OD4caNGwyMoGhMbVmEYcDsmjgGm9J5GEl56dKl/2GaHz58CEnKpLgAIxaoEgaU5EYA9eFAmHAG4o8AAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\oxidized\\copper_block_0.png","name":"copper_block_0.png","folder":"block/oxidized","namespace":"create","id":"8","particle":true,"mode":"bitmap","saved":true,"uuid":"7dd1a067-4a71-cdfe-245e-baad08910bcc","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB9ElEQVQ4T22TXUsbURCG31VIaswmTRS/SKqInxRikF4UwQ9sqlAQWuhfKb3vXf+GNyJ4pwiCiFD0SsEWNK0aNDGtaRqzJtss2dQYmTk9m93EuTl75uw8552ZM8rnt7EabGYa93B7WiwP7cnsPnlIZ8qnhfnau6WIncHfhXLR4avemLxv7XDzmk9p2IsXBWD+9QDWt5IYDbjEbS6FV7MixMm9JH77bfK/8WypDkgeZfg88afcpEY6KI1Qu7iE4BZgdrIX6SuNgyd6vA5Au8fJO8wYGA+rSP80cXHzF8rH2Kvamxc9DsDZrYHpaBB6VqhRu57gy1Ee72PPsLxxieionwHJolkHZPMG4pcFTA16OaB6+w9GpcrfQ9Fe6Gkdv841bH8vMCCXKeOHVmlWQACPq9UK7u704vwkZ/kohZdj3Ugk8gIgu3B9prECqgHlTZC+oQC+HuR4T0oItrqTYsDxqSZSkADqQrpUwZjPwwFkJQOOYPLZAVzExwBUxOGnAiRvXttOcREfBcg2koK5SJClcvVDqqOHVMjN3QyejwQ4BauNS4v9kA+JINLUFvFo7OZvA0JhG4BSIAUr+0lMh31Qg274G19PA4T+jXT66gr6fWJA9Pv67ZyCTUHjGU2ibt5B+TA7wxOj18TYcqAixtnua8rlv+MBPoIXdEHcqvMAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\fluid_pipe.png","name":"fluid_pipe.png","folder":"block","namespace":"create","id":"9","particle":false,"mode":"bitmap","saved":true,"uuid":"e238433b-c06e-b068-b8f7-ba0f778775f1","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE+ElEQVRYR5VX32scVRT+NunubHa7s9lJtj/MtrEGk0o1KkitaCu0WjAPIkKRUuiDoNT+A30pPkgffBdUFAQLoRSxfRAUFPpgHqxvsiBitPRHNk3MZnfNrpNkdpOMfHd6pncn093Z+3KzM3fu+c4533fOSeyjk8ddeysGrnSfq3ZZ8lx+b7VaeK6wE4m0oR4Z3oZsOqX2peqq2pu2g5U1IDvw8C7+Pn/te8+QtmIEUMgaMBKxtosdx7uIiwYbtXX8sWTj8MSQMmztz6l3mxXvDFf/kIHqvRrk28kj4yjenIXsZ6YfAWAsn8RtewM3654HiUTc86TZUvsRM4UD6R34rfSfArD3yRxu/HQHV379uc2b0y8ew/HXH8fCXzUFPmMZKM07KIwYaFQddARw+V4V6fQAjHgcZsZEvVFXlzutFmx7DWf3W5iZq2Pq2bwK+bnPrgajqX5/efGsH4XysoPJl/ag+Msi8sMGTn1xPTwFjMCVhToy6RSq/9bx/NNPobbSwJ25EqxBEw17FVODJorL0QEQDL0XAIzCm5+EALjw2gl3creBbytryvvRwggcp4lBM4M1x8Hd0rwCcHqv6UeA+X/v0uXQCHz+wTtYsb1ULi+uY2zMwq1bVQzvSYYDOHfsFffEwTy+/ruMYSsHI2Egl82oCDhNB47j+ADIgaOTQ4qA3QAwTTQsALi/+vH09hQQwOHdGVyrNNpSsFhexsI/ZT8F7x/KY6ZYUSQ8+Mworn9X7EjCXVZEAEzBRC6Bq4s1xOM7lAKYCiEgldBqbfgkZLQowwPjo6jOl335ZZMmVtbrPgEJ4PfZms+BQ+O58AgQwAtPmPhzycZMxWM+gXDRMNfLAymQqFTB0X2mqgsEQb3rxYiFSGoHv4skQ4lAKKO0h/dbmyhVV3sCEKkQkQPdjOvvC1YKVp8XIZZap+l9vr4ZQ7LfVXt1a0OdiVSKP317yuWHmVyyDQdLLy8L1u/pM1NulF4QVvXCHFW9oC/leSSe0QOurdUNfPjjjW3S6SVi3c7Geo1Atwt7fa8AsE6TzdJWeQkZzVoe1kJ7NdLpfOyrU2+4bMWUjN5iowKQFDJ9TN1j8X7fHjnERY7JEpJKin0AJBaLhzWSx+3Zu0rjUSIQNk+IMdYEUYlOcnlOaSsA/IDNgingUMF+zkUlvPvNDx1JSAAsUoygkuaD6UgakjzjvRxe5DnnA05JoRxg+GmcqxuAIIdoKGyxVEvpJgiJsALAglHYl1Pey4jFThYFACPI8DJ9QeM0ysUewXv194wyndwGgB/wcFQShgHQjYlDNC4NS+73AVCGQkC9o0UhoZ4CURGdkOGUf4vEBQRTIQ4qEjKEeovVc9StDgQBCNFkMqYKgikiOE5LlKRPQk66QhRRgsz3uo51PSuGD3hju3BAQi4eyvlgLZDnbQAk/4o4D5hKEDSga1r/HyIYYrmjNFdTMpNCpH8jd/kR0FWgE0WACFpqnMBk13XPv4XljIIOgPezTujf+XXg0lsn3Yld6TYZ6fIJapqXs1qKtHTDQZaTxFzBXtNWB3QSSiXUjYqkJLdiXD8T1LsY4JjH3iAk1KPnk5AR4L9deimVg+IdWauHWy/XusREftwlxEJUPQWiEFWKCYAoSRIuIZxMPeKpPmzKM5FY2Bm+Y7NhlwxOXG0k7NRO9TBLaw3KSp8F5Z0+UQ3v9Ea9R8nwf4KEhTJhQYO9AAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"thirdperson_lefthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"firstperson_righthand":{"rotation":[0,45,0],"scale":[0.4,0.4,0.4]},"firstperson_lefthand":{"rotation":[0,225,0],"scale":[0.4,0.4,0.4]},"ground":{"translation":[0,3,0],"scale":[0.25,0.25,0.25]},"gui":{"rotation":[30,225,0],"scale":[0.625,0.625,0.625]},"fixed":{"scale":[0.5,0.5,0.5]}}} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley_rope.bbmodel b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley_rope.bbmodel new file mode 100644 index 000000000..38a0b1b92 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley_rope.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"rope","parent":"block/block","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"rope","from":[6,0,6],"to":[10,16,10],"autouv":0,"color":6,"locked":false,"origin":[7.75,0,8],"faces":{"north":{"uv":[0,0,4,16],"texture":0},"east":{"uv":[0,0,4,16],"texture":0},"south":{"uv":[0,0,4,16],"texture":0},"west":{"uv":[0,0,4,16],"texture":0},"up":{"uv":[0,0,4,4],"rotation":90,"texture":0},"down":{"uv":[0,0,4,4],"texture":0}},"uuid":"3f245b42-dde8-d34f-9f25-ae6eb2f322ae"}],"outliner":["3f245b42-dde8-d34f-9f25-ae6eb2f322ae"],"textures":[{"path":"C:\\Users\\krypp\\Documents\\Pixel Art\\Create Mod\\Pulley Pump\\copper_pulley_rope.png","name":"copper_pulley_rope.png","folder":"Pulley Pump","namespace":"create","id":"5","particle":true,"mode":"bitmap","saved":true,"uuid":"8ffc2f62-b5b6-1af9-ecc1-e22a9ae075aa","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAX0lEQVQ4T2M00tP4z8fLwfDp8w+GX7//MLCxsjCQwmfU0VT5r6IgwfDh0xe4IaTwGUddwEB5GLS1tf2Xl5dn0NDQYLhx4wbDw4cPGUjhMy5duvQ/uZpBlo2mgz/DIQwAKD7WmGK5ZIUAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/item.json b/src/main/resources/assets/create/models/block/hose_pulley/item.json new file mode 100644 index 000000000..b8c30a0cd --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/item.json @@ -0,0 +1,381 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/axis", + "1": "create:block/axis_top", + "4": "create:block/copper_gearbox", + "5": "create:block/hose_pulley_rope", + "6": "create:block/hose_pulley_magnet", + "8": "create:block/oxidized/copper_block_0", + "9": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "coil", + "from": [4, 4, 2], + "to": [12, 12, 14], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "east": {"uv": [2, 1, 14, 9], "texture": "#5"}, + "west": {"uv": [2, 1, 14, 9], "rotation": 180, "texture": "#5"}, + "up": {"uv": [2, 1, 14, 9], "rotation": 270, "texture": "#5"}, + "down": {"uv": [2, 1, 14, 9], "rotation": 90, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 3], + "to": [12.5, 12.5, 7], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 9], + "to": [12.5, 12.5, 13], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -4]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + }, + { + "name": "side", + "from": [2, 2, 14], + "to": [14, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "south": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "down": {"uv": [2, 11, 14, 12], "texture": "#4"} + } + }, + { + "name": "side", + "from": [2, 2, 1], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "south": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "down": {"uv": [2, 12, 14, 11], "texture": "#4"} + } + }, + { + "name": "side", + "from": [3, 3, -1], + "to": [13, 13, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [9, -7, 7]}, + "faces": { + "north": {"uv": [11, 0, 6, 5], "texture": "#9"}, + "east": {"uv": [11, 5, 6, 6], "rotation": 90, "texture": "#9"}, + "west": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"}, + "up": {"uv": [11, 5, 6, 6], "texture": "#9"}, + "down": {"uv": [11, 5, 6, 6], "rotation": 180, "texture": "#9"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 14], + "to": [2, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "east": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "south": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "west": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 14, 2, 16], "texture": "#8"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 0], + "to": [2, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "east": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "south": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "west": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 2, 14], "texture": "#8"}, + "down": {"uv": [0, 2, 2, 0], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 14], + "to": [16, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [2, 2, 0, 14], "rotation": 180, "texture": "#8"}, + "east": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "south": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "west": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "up": {"uv": [2, 14, 0, 16], "texture": "#8"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 0], + "to": [16, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "east": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "south": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#8"}, + "west": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "up": {"uv": [2, 16, 0, 14], "texture": "#8"}, + "down": {"uv": [2, 2, 0, 0], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 0, 14], + "to": [16, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#8"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "west": {"uv": [14, 14, 16, 16], "texture": "#8"}, + "up": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 14, 14], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "east": {"uv": [0, 16, 2, 14], "texture": "#8"}, + "south": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "west": {"uv": [14, 16, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 180, "texture": "#8"}, + "down": {"uv": [0, 16, 16, 14], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 0, 0], + "to": [16, 2, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "east": {"uv": [2, 14, 0, 16], "texture": "#8"}, + "south": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "west": {"uv": [16, 14, 14, 16], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 180, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 14, 0], + "to": [16, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "east": {"uv": [2, 16, 0, 14], "texture": "#8"}, + "south": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "west": {"uv": [16, 16, 14, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [1, 1, 2], + "to": [3, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [2, 14, 14, 16], "texture": "#8"}, + "up": {"uv": [2, 0, 14, 2], "rotation": 270, "texture": "#8"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "front", + "from": [13, 1, 2], + "to": [15, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [14, 14, 2, 16], "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [14, 14, 2, 16], "rotation": 180, "texture": "#8"}, + "up": {"uv": [2, 2, 14, 0], "rotation": 90, "texture": "#8"}, + "down": {"uv": [2, 16, 14, 14], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "front", + "from": [13, 13, 2], + "to": [15, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [14, 16, 2, 14], "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [14, 2, 2, 0], "texture": "#8"}, + "up": {"uv": [14, 15, 2, 13], "rotation": 90, "texture": "#8"}, + "down": {"uv": [14, 2, 2, 0], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "front", + "from": [1, 13, 2], + "to": [3, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [2, 2, 14, 0], "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [2, 16, 14, 14], "texture": "#8"}, + "up": {"uv": [14, 13, 2, 15], "rotation": 90, "texture": "#8"}, + "down": {"uv": [14, 0, 2, 2], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "Axis", + "from": [6, 6, 8], + "to": [10, 10, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 16]}, + "faces": { + "east": {"uv": [6, 8, 10, 16], "rotation": 90, "texture": "#0"}, + "south": {"uv": [6, 6, 10, 10], "texture": "#1"}, + "west": {"uv": [6, 8, 10, 16], "rotation": 270, "texture": "#0"}, + "up": {"uv": [6, 8, 10, 16], "texture": "#0"}, + "down": {"uv": [6, 8, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "rope", + "from": [6, 2, 6], + "to": [10, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 13, 8]}, + "faces": { + "north": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "east": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "south": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "west": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "up": {"uv": [12, 0, 16, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "drain 1", + "from": [4.5, 0, 4.5], + "to": [11.5, 2, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 14, 6]}, + "faces": { + "north": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "down": {"uv": [0, 2, 7, 9], "texture": "#6"} + } + }, + { + "name": "drain 2", + "from": [4.5, 2, 4.5], + "to": [11.5, 3, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 16, 6]}, + "faces": { + "north": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "up": {"uv": [0, 2, 7, 9], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 9, 7, 16], "texture": "#6"} + } + }, + { + "name": "drain 3", + "from": [5.5, 2, 5.5], + "to": [10.5, 5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 16, 7]}, + "faces": { + "north": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "up": {"uv": [1, 3, 6, 8], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [2, 13, 14, 15], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + { + "name": "shaft", + "origin": [8, 8, 8], + "children": [18] + }, + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [19, 20, 21, 22] + }, 23] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/pulley_magnet.json b/src/main/resources/assets/create/models/block/hose_pulley/pulley_magnet.json new file mode 100644 index 000000000..65a249d9c --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/pulley_magnet.json @@ -0,0 +1,101 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "6": "create:block/hose_pulley_magnet", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "rope", + "from": [6, 2, 6], + "to": [10, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 13, 8]}, + "faces": { + "north": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "east": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "south": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "west": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "up": {"uv": [12, 0, 16, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "drain 1", + "from": [4.5, 0, 4.5], + "to": [11.5, 2, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 14, 6]}, + "faces": { + "north": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "down": {"uv": [0, 2, 7, 9], "texture": "#6"} + } + }, + { + "name": "drain 2", + "from": [4.5, 2, 4.5], + "to": [11.5, 3, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 16, 6]}, + "faces": { + "north": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "up": {"uv": [0, 2, 7, 9], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 9, 7, 16], "texture": "#6"} + } + }, + { + "name": "drain 3", + "from": [5.5, 2, 5.5], + "to": [10.5, 5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 16, 7]}, + "faces": { + "north": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "up": {"uv": [1, 3, 6, 8], "rotation": 90, "texture": "#6"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope.json b/src/main/resources/assets/create/models/block/hose_pulley/rope.json new file mode 100644 index 000000000..2995519fd --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/rope_pulley/rope", + "textures": { + "5": "create:block/hose_pulley_rope", + "particle": "create:block/hose_pulley_rope" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json b/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json new file mode 100644 index 000000000..f4d01993a --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json @@ -0,0 +1,49 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "5": "create:block/hose_pulley_rope" + }, + "elements": [ + { + "name": "coil", + "from": [4, 4, 2], + "to": [12, 12, 14], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "east": {"uv": [2, 1, 14, 9], "texture": "#5"}, + "west": {"uv": [2, 1, 14, 9], "rotation": 180, "texture": "#5"}, + "up": {"uv": [2, 1, 14, 9], "rotation": 270, "texture": "#5"}, + "down": {"uv": [2, 1, 14, 9], "rotation": 90, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 3], + "to": [12.5, 12.5, 7], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 9], + "to": [12.5, 12.5, 13], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -4]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope_half.json b/src/main/resources/assets/create/models/block/hose_pulley/rope_half.json new file mode 100644 index 000000000..facd4b8b8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope_half.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/rope_pulley/rope_half", + "textures": { + "5": "create:block/hose_pulley_rope", + "particle": "create:block/hose_pulley_rope" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope_half_magnet.json b/src/main/resources/assets/create/models/block/hose_pulley/rope_half_magnet.json new file mode 100644 index 000000000..665d0ab7e --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope_half_magnet.json @@ -0,0 +1,101 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "6": "create:block/hose_pulley_magnet", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "rope", + "from": [6, 2, 6], + "to": [10, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 13, 8]}, + "faces": { + "north": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "east": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "south": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "west": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "up": {"uv": [12, 0, 16, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "drain 1", + "from": [4.5, 0, 4.5], + "to": [11.5, 2, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 14, 6]}, + "faces": { + "north": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "down": {"uv": [0, 2, 7, 9], "texture": "#6"} + } + }, + { + "name": "drain 2", + "from": [4.5, 2, 4.5], + "to": [11.5, 3, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 16, 6]}, + "faces": { + "north": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "up": {"uv": [0, 2, 7, 9], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 9, 7, 16], "texture": "#6"} + } + }, + { + "name": "drain 3", + "from": [5.5, 2, 5.5], + "to": [10.5, 5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 16, 7]}, + "faces": { + "north": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "up": {"uv": [1, 3, 6, 8], "rotation": 90, "texture": "#6"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/item_drain.json b/src/main/resources/assets/create/models/block/item_drain.json new file mode 100644 index 000000000..60751792d --- /dev/null +++ b/src/main/resources/assets/create/models/block/item_drain.json @@ -0,0 +1,79 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/item_drain_side", + "1": "create:block/item_drain_top", + "2": "create:block/copper_casing", + "3": "create:block/pump", + "particle": "create:block/item_drain_side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "from": [0, 2, 0], + "to": [16, 13, 2], + "faces": { + "north": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "east": {"uv": [14, 3, 16, 14], "texture": "#0"}, + "south": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "west": {"uv": [0, 3, 2, 14], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 2], "texture": "#1"} + } + }, + { + "from": [0, 2, 14], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "east": {"uv": [0, 3, 2, 14], "texture": "#0"}, + "south": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "west": {"uv": [14, 3, 16, 14], "texture": "#0"}, + "up": {"uv": [0, 14, 16, 16], "texture": "#1"} + } + }, + { + "from": [14, 2, 2], + "to": [16, 13, 14], + "faces": { + "east": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "west": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "up": {"uv": [14, 2, 16, 14], "texture": "#1"} + } + }, + { + "from": [0, 2, 2], + "to": [2, 13, 14], + "faces": { + "east": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "west": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "up": {"uv": [0, 2, 2, 14], "texture": "#1"} + } + }, + { + "from": [2, 12, 2], + "to": [14, 13, 14], + "faces": { + "up": {"uv": [2, 2, 14, 14], "texture": "#1"} + } + }, + { + "from": [2, 4, 2], + "to": [14, 5, 14], + "faces": { + "up": {"uv": [0, 0, 12, 12], "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/rope_pulley/block.json b/src/main/resources/assets/create/models/block/rope_pulley/block.json index 11317a92c..a7d302af7 100644 --- a/src/main/resources/assets/create/models/block/rope_pulley/block.json +++ b/src/main/resources/assets/create/models/block/rope_pulley/block.json @@ -4,7 +4,7 @@ "textures": { "3": "create:block/gearbox_top", "4": "create:block/gearbox", - "5": "create:block/andesite_casing_short", + "6": "create:block/andesite_casing", "particle": "create:block/pulley_rope" }, "elements": [ @@ -194,14 +194,14 @@ }, { "name": "top", - "from": [3, 14, 2], - "to": [13, 16, 14], + "from": [2, 14, 2], + "to": [14, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, "faces": { - "east": {"uv": [2, 14, 14, 16], "texture": "#3"}, - "west": {"uv": [2, 14, 14, 16], "texture": "#3"}, - "up": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#5"}, - "down": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#5"} + "east": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 13, 14, 15], "texture": "#6"}, + "up": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#6"} } } ] diff --git a/src/main/resources/assets/create/models/block/rope_pulley/item.json b/src/main/resources/assets/create/models/block/rope_pulley/item.json index 0127c7ca6..d0d9994c9 100644 --- a/src/main/resources/assets/create/models/block/rope_pulley/item.json +++ b/src/main/resources/assets/create/models/block/rope_pulley/item.json @@ -8,8 +8,8 @@ "4": "create:block/gearbox", "5": "create:block/pulley_rope", "6": "create:block/pulley_magnet", - "7": "create:block/andesite_casing_short", - "particle": "create:block/pulley_magnet" + "8": "create:block/andesite_casing", + "particle": "create:block/andesite_casing" }, "elements": [ { @@ -279,16 +279,14 @@ }, { "name": "top", - "from": [3, 14, 2], - "to": [13, 16, 14], + "from": [2, 14, 2], + "to": [14, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#7"}, - "east": {"uv": [2, 14, 14, 16], "texture": "#7"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#7"}, - "west": {"uv": [2, 14, 14, 16], "texture": "#7"}, - "up": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#7"}, - "down": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#7"} + "east": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#8"}, + "west": {"uv": [2, 13, 14, 15], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"} } } ], diff --git a/src/main/resources/assets/create/models/block/schematic_table.json b/src/main/resources/assets/create/models/block/schematic_table.json index 70f25af30..e41f18686 100644 --- a/src/main/resources/assets/create/models/block/schematic_table.json +++ b/src/main/resources/assets/create/models/block/schematic_table.json @@ -1,77 +1,60 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", + "credit": "Made with Blockbench", "parent": "block/block", - "textures": { - "0": "create:block/schematic_table_side", - "1": "create:block/schematic_table_top", + "textures": { + "0": "create:block/schematic_table_side", + "1": "create:block/schematic_table_top", "particle": "create:block/schematic_table_side" - }, - "elements": [ - { - "name": "base", - "from": [ 5.0, 0.0, 5.0 ], - "to": [ 11.0, 12.0, 11.0 ], - "faces": { - "north": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "east": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "south": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "west": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, - "down": { "texture": "#0", "uv": [ 5.0, 6.0, 11.0, 12.0 ] } - } - }, - { - "name": "Top", - "from": [ 0.0, 12.0, -2.0 ], - "to": [ 16.0, 15.0, 14.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 22.5 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } - } - }, - { - "name": "Cube", - "from": [ 4.0, 11.0, 4.0 ], - "to": [ 12.0, 14.0, 11.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 4.0, 1.0, 12.0, 4.0 ] }, - "east": { "texture": "#1", "uv": [ 4.0, 1.0, 11.0, 4.0 ] }, - "south": { "texture": "#1", "uv": [ 4.0, 1.0, 12.0, 4.0 ] }, - "west": { "texture": "#1", "uv": [ 4.0, 1.0, 11.0, 4.0 ] }, - "down": { "texture": "#1", "uv": [ 4.0, 4.0, 12.0, 11.0 ] } - } - }, - { - "name": "Cube", - "from": [ 1.0, 12.0, 15.0 ], - "to": [ 15.0, 13.0, 16.0 ], - "rotation": { "origin": [ 8.0, 14.0, 16.0 ], "axis": "x", "angle": 22.5 }, - "faces": { - "north": { "texture": "#0", "uv": [ 1.0, 12.0, 15.0, 13.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 14.0, 7.0, 15.0 ] }, - "south": { "texture": "#0", "uv": [ 1.0, 14.0, 15.0, 15.0 ] }, - "west": { "texture": "#0", "uv": [ 7.0, 14.0, 8.0, 15.0 ] }, - "up": { "texture": "#0", "uv": [ 1.0, 13.0, 15.0, 14.0 ] }, - "down": { "texture": "#0", "uv": [ 1.0, 14.0, 15.0, 15.0 ] } - } - }, - { - "name": "Cube", - "from": [ 4.0, 0.0, 4.0 ], - "to": [ 12.0, 2.0, 12.0 ], - "faces": { - "north": { "texture": "#0", "uv": [ 5.0, 14.0, 13.0, 16.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 14.0, 14.0, 16.0 ] }, - "south": { "texture": "#0", "uv": [ 1.0, 14.0, 9.0, 16.0 ] }, - "west": { "texture": "#0", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 5.0, 8.0, 13.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 5.0, 12.0, 13.0 ] } - } - } - ] + }, + "elements": [ + { + "name": "base", + "from": [5, 0, 5], + "to": [11, 12, 11], + "faces": { + "north": {"uv": [0, 3, 6, 15], "texture": "#0"}, + "east": {"uv": [0, 3, 6, 15], "texture": "#0"}, + "south": {"uv": [0, 3, 6, 15], "texture": "#0"}, + "west": {"uv": [0, 3, 6, 15], "texture": "#0"} + } + }, + { + "name": "Top", + "from": [0, 11, 2], + "to": [16, 14, 14], + "faces": { + "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 12, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 12, 3], "texture": "#0"}, + "up": {"uv": [0, 2, 16, 14], "texture": "#1"}, + "down": {"uv": [0, 2, 16, 14], "texture": "#1"} + } + }, + { + "name": "Cube", + "from": [4, 9, 4], + "to": [12, 11, 12], + "faces": { + "north": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "east": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "south": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "west": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + }, + { + "name": "Cube", + "from": [4, 0, 4], + "to": [12, 2, 12], + "faces": { + "north": {"uv": [5, 14, 13, 16], "texture": "#0"}, + "east": {"uv": [6, 14, 14, 16], "texture": "#0"}, + "south": {"uv": [1, 14, 9, 16], "texture": "#0"}, + "west": {"uv": [4, 14, 12, 16], "texture": "#0"}, + "up": {"uv": [6, 5, 14, 13], "texture": "#0"}, + "down": {"uv": [6, 5, 14, 13], "texture": "#0"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/copper_gearbox.png b/src/main/resources/assets/create/textures/block/copper_gearbox.png new file mode 100644 index 0000000000000000000000000000000000000000..458265dd3aeff47e5816d33c82465a0b16647c07 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Li60G|-o&H$GtH>b;!3yyRr9ju7nlp9#?;yf?Zb7{0!sl8pfwS7oPh>f+i zlcQrmKtNz%;ItqwAdr%jWM*bIHZ)wF7U=Ho4m8Zw#l_0P!pFzQ!ra`}#>UUjFT>8} za`^=@pd4p`M`SSr1K%MKW)#)%Y5)q(_H=O!(FpeKzbSNBfx~rSUPjc`StXuP|Nk3T zdw#lL%=}o!u|?$Cg(dF$G}t1tdp;jI)~>Kf@sV?jz(eMy_6>(Jcik(RDYR4Sr1PEP z*L%+z?|!8yR<}hxL%+Le9Z2?hf7%PajG8BnGBw;elF{r5}E)4 CA%CF& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/crate_creative.png b/src/main/resources/assets/create/textures/block/crate_creative.png index 18803da2651a9c138b7204d80cf6cd749c568c93..45bf70fcbac217e89826e9cb643270c8a6e08fd7 100644 GIT binary patch literal 821 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCim71o(uw0%;>@8y5}#5WUz~)6A)X)8@y{-;lRrTF`W7b-#Hr^91-+G*m5w z1XRUDH5nO1Sy?2dBy{DZ^@DX|*5@u)S22?m(_&!Y6BX9rQs-<(89|(c|NjSC$8=6q#*0d6V19YY7)yRhqY0ubQbfVW;PY*=Catd+*+Ew|0T%^ke?} zD+CL=BpY@FZkIegDuupb88Nje? z*~6~aJB{0nv=~l3X-(49I6rObBT0tYGxr9knlad)XJAMzcq(r!;C_H<{^w`Bp>`pw zxUU{v>Xo~5naFvDh@V%YzC=vjWEDN_M&B>S^(B$YulO7OSo<(Ny&)8>^7uf=nM9@^ zllUcyQcc&iXTR>+k>VgyIceWpCFW>l!zo&&|Qw_s{7}mr~S!dceMd@jJADWQ* dH)>8j)8+XkH;+3Or~spY!PC{xWt~$(69BAnYhVBX delta 965 zcmV;$13LV*2J8or83+ad0047(di0SYAb$yPNLh0L01mu=-A#7JUd zaAhzOjSEqOB7sr?NtIvQ!In=8LdUt+&iGoe4wYEX=JdWhuXEnq``$YyMNv>ruz!FP zM^7n@+qd$-d}@(dge=SO`~A6SElSNl=(=NK0jE!1Q1)$UMnz>Mva74P^iSBWHl&v_ zxo9m)&A;e>j;F6WP3Bz8FTZ~O213DV%)}B1)&$n@)J%L+@@J2q%e_^7Z;pB87E2Yv zkr9}y%orIPXQtR@voT99=ceSvuYaryAo#r=csw3vx67r+lH18_w_7(QPsnCW%q)PK zgh1-(D`@J8HPv>j1>sLa%*FCX=8IqfT89>@Cw4gO@OiyzPJ-7HWGE349S(c3#i>2#IE`#3i0S!C#(Srj!DVRO@2nW zZwM0;6BrmALOdSF@bEBV@dQ5ff8=ou8}$<+xCD=buQ4?p!=>mMc&rj8KYqonY!^Z< zp`Ip{-MM;Js`Z?UqkjX}_)iM`#LD*-okc&8Uiyt67z{^P@qvc@IJB<~J9q5V>#41T zm}2p67eU=_WDYSstAPb*%H>%Z=LasUpZJ4bKjPojQv_`_BXfwwZOH=YVN%?lyvYi$ zF5hGRQ#}h|WX`&N!0mG6-QD6!irwvnFfwP|9vF&53hwSNhBCZ?hK>3O5oJ4y^ZWo^ nCb@COM(%UsQvJk#;0J&oU0Ls!vPKcF00000NkvXXu0mjfbz8;9 diff --git a/src/main/resources/assets/create/textures/block/crate_creative_side.png b/src/main/resources/assets/create/textures/block/crate_creative_side.png index ba4103477a060858d9e09c52ce43df85ae2ae2ef..00018a60dbff9a92c048985f3461904d0c28e8c4 100644 GIT binary patch literal 794 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCily2Ka=yg4AmGhv>z|nr6j4mIqJTJGLyo??npS-fX z0W*`xY}3h`+*V#oxY#OJ+auR}IB4fw)yb!WkIYt{xY=suGX1&d!jI1~owU(rdACaQ z7VA|rwI=NJ+;G@?_jbFr3pA%6^WQ()Y*K|_L6>C1j^GWGBs)3<>t`rUZs)I^DAC?6 z+R`Xfp`~smB%nG)wR^t$Q~`b!4OI(922n9l&65H94|;58Ws#JU(3O+cU!*l-vUI1q zikYmmfuxug0|TF^um&fG3=@;6xTqErleoN$0Xv%vGn2T4xHdbRw5ozJ(5HK>l8*x^ z|B@iT;Qv$w47On#HUo|3Ebxdd2D;`T2s7@OnEe(Q3DKS|jv*HQtwEhZhYUoPWUgMj z$U*y2<5xW`xdoZ4BUt$b0zdzs|M+y|vuhSJ$E}_L)6}j9EW(;%AmDAlBTHfx} zxM9z6`|ROs7e98MS#HCm@XqC6WQ|<8-mdB4*JEeqSFkv&m%nrG;ga+D{ccxPB^WZr z?%Jnl-f^5}=d^78n<9n>Pc$pV`VDp$v0QOx=wY+0XE68w`tIq}q63G`KZ||*S)1j#?LVOc`tG5Ll;xGEI#{Q6fXMGZf>K}#g`9&B0G(0buP$#fIwMgU70k>H) zTbP0 Hl+XkK+XPz_ delta 1201 zcmV;i1Wx;!2G$9X83+ad0047(di0SYAb$yPNLh0L01mWK7_J|tKob}T`#W7V!;fx1E}Z1@3ekPw0e z`$j@SVuh%>KuAD~LLZ79y`J`k#b7qdeIe+JP zW^9ZxyhsQF@4j_Ium~tV>{hB`p&i9y5s^qld?ufE^z!dUd%OhMe*9&@CJ20eYk}?6 z_OM&4;-J}Vx%7a|2EVtHfMdh~pU2zMOjPSNA)QVq_V#vB+pi0~8=rplfl1)Ze!OZQ$Q#-X!qN)i0PH zj^X7~GlJQ7cNXA=3)e1RMKZe#TFb9)V{Yyu78ma$uE+6&XErmF!2Okbeb?`;{EmyK zFZHxv|LsGYoxZTVwF6c?zz;uvkCk*vkO&5XsMc!M8lm1gT8G1dMx(*?`hSt@{MHV& z3mg42o)mD9X(BO|z@OQNn7=ZQyLawlzf^}&H`iF5;b}98Qo%rVuZjkLEA{YS4R04i+ z0)jv&6hcG|p;#*7{l_2U!NUham-eu#3KuvUf}AH)z~gEWrz(!oQlCClCzy;P?9ltI=q*BYz9BcT4FvXk3Wb z0k2092Ov(sZr7NuC79i=vojMHnAO=EVv8KT7eN zuf5&T5)bOFD$xUWPiOb+_N8^QN!brS{c+nQ@FMYC2+T}hW5rSh(THjlqFz$hc++b6 zt!3AFsn41xaFTgILVxyi`fRtw*jPM{jm=GH+9>jQqeGTTI|%a*NxJl#96yD%^+l5a zJwmZ-3nzI*B*W@7YcIbt>t5xz{WOy4Urhpi=Ya~Befl{Opr2OupIpzZ+vS)Z1Np^c z8aB4qc?l@nL^u3o><08i*E|q4=YgecsV3Q3oKUauE+ z$B2j(Z(xvlfPWqm^>f-}m^W~&d7xiECk)e!jx`VT?dKdrzXAFJ%JNqEOOf4Yjck2sOCIl7o1APQxo!IoJ|XlQ0^O5S P00000NkvXXu0mjfMw&!P diff --git a/src/main/resources/assets/create/textures/block/creative_casing.png b/src/main/resources/assets/create/textures/block/creative_casing.png index 7ce4d7a7441e9551054e6aebb9e56cb2dc261639..30257a61cabd78ae5227aed5fc8d9a5c067356dd 100644 GIT binary patch delta 282 zcmV+#0p za8GX}MUar>V g0L$NT^ZCFVyiW@4xwXYw00000Ne4wvM6N<$f*Dw3p8x;= delta 393 zcmV;40e1ez0<{B>83+OZ005AYXf}}{Ab$yPNLh0L01m?d01m?e$8V@)0003>Nkl4H8-8WwZ!G9ovKSO_pf5zdXZxcirQv_vwo0{8no*pMRS> z#^UzUM>R1A$1bkU18ndeDv7jAA;nQ#=m4tVmE6ai4 zMNvEs@2G@20G3N3rPNAhX$t(pMaIKG!fi3}d^86J0VEmRKLlZL+aFjC6e-6|+>RP$ z=F=!3@U1*BN#a~7Aukk4<>*zKwvhT-t@1lX$5R}ui-u7wuk?H nzV2nW4xq<|;pK_^XpDUVysN+JimdS?00000NkvXXu0mjf4^^rZ diff --git a/src/main/resources/assets/create/textures/block/creative_casing_connected.png b/src/main/resources/assets/create/textures/block/creative_casing_connected.png new file mode 100644 index 0000000000000000000000000000000000000000..6c9e526b577685a7667483f6a0479e293afee969 GIT binary patch literal 726 zcmV;{0xA88P)Px#1ZP1_K>z@;j|==^1poj5MNmvsMKT*aL?};GE?r$UX;Up+uWhFe3my;;Bq${~ z000fJZm5+}mY-dpmQt4h000&hDFFZ#000p~Cr+MRo?J9&000C91Q|}~G#vl{010qN zS#tmY4#EHc4#EKyC`y0;00J6GL_t(oN8OfflbbLMgk_uLitD>vTGIdjQ@e6rSP4&z z`P8X*VCI=60x1YfL_&x$VZ|7N$aFe?{CH~4vG4yZB|lavpAz%e<@>2?PV(9DfBl}% zt4dh%{JO!%Ij2zG`x46a74Y&^Ldwh<;Jv@e$#cx_eV-G4Fvj9@@|-%p_?$)=0ZdM~ zV2lyqcKP!Z{?`sK-bWElPAJkCBY?>X7rf)s=LO*?z;)I?&!kKl*ZwD}EGIOH9=fzyJo62kHJIX(^mw+bXUe!;gVzUS ziIW~??}PgO`U$H~Z}vW@>)ZKYKAXJ{vh%^#xAOsH_CBcR+xYdEj>S+^qr61G+r>_rSB6 z2lV8*TZ8*mI6eBEf>-r?o)2ojQ}C+0Raet@^TBLO46&zTPi4P(2W0n!1G4kM0om{V z0sR9t;P?87{)ZZH@3+MHwq)i3U7qP?O__N>Po6p7tuEhx0Szvz9G5`uasU7T07*qo IM6N<$g2B8>ng9R* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/creative_fluid_tank.png b/src/main/resources/assets/create/textures/block/creative_fluid_tank.png new file mode 100644 index 0000000000000000000000000000000000000000..10e0a6f2eaf5d9e345d9c7a8d5b49a2f287d6cc5 GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh<0G|-o68oBILDT2Q&fk!?!bsZ2MZ-TtFE-XRGux_IRaifXA*xNGZm!{! zxvG;-2OpWOJaMzt%4Pa<&xIeKWjbl1RL5kQo@9ooa?ZRt>XQz8@7`{=c7f*fWB&VR zn@#E#Y3dPe^LW{56j$?g=apP@9loxgUXM0>YrOQTFh8AE;oL-d2CZt_6Ka29w( z7BevL9R^{> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/creative_fluid_tank_connected.png b/src/main/resources/assets/create/textures/block/creative_fluid_tank_connected.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6877624ecfa0c8c2bcc507e0981eb4421902db GIT binary patch literal 1060 zcmV+<1l#+GP)Px#1ZP1_K>z@;j|==^1poj5mQYMoMRY%WmQt6WU7xUSs4^QoL?};GE?sLnb6quQ zB@-`V09uA1ew{Itoh6gYQ^cDik+V9frZ1h&SI3$)l93vSlN^j=09tnmZk#8Q!%Mrj zKCPfBm&Q-On>Lb*6oQNug-QTHV*p!q1Z#;Af0!bZhYx*`7>A1$gn=A*b^vc+09%Vi zjC??RfI5H?U9LtU3v8-S*7NX8sYv9inN{=1C+KC|@%TE%6%3wu> zK9?Y};_g^(gV+YG9x@5cSe-t5e)i)0<;APlc)odiDj7kW^(a|gzI%W6;r!#(r_XqP z`Fbh2JA&(P-+%0X-rVl*@ci}rT5?`C`k_Ht#>@|iK|SP#n`Bx`o>hUlA+GaL{P>+X zjaK^*ti{Xw;7xD=9hhCuugF7A4GRKiVue4k0^x4ap9G@62>7-_?4jpZ(T*Qhjh1aE zdsy;s>Jg;+5s9}_fFlqxliw{1U__n;att&YL_gYOt~&r{0rU{3RF5DUm`R}K;;#hC z6ac|EXGSxQQIO_bGYMoy5aZ|!^FcB-pgHqWmVJ;}apsr&mz*1rs+d9wB4>Wdf5}w? zD}oqV-K5Mf`7e3afJealAO(?vhpUdkjF$v>A0&aeQL1E-TnQ}4K{z@+24xCGpm5p;GFcXqCoWr_bLK3VzEpV+ z&|a6EcV3=zW){#75GX@tfjQ?Rtz1}QYDaf0vbkK+ucU!Fl_y^HuL<-xm2s|FVUc#!b*iTPDXyw e{lCe?Jm`PdUE!N2ejM=t0000NS%G|&0G|-oJhvKe^N0|eq$HQZ?t^E6!WUk>Tyf!M^}6jV(^l^++X@tUeQvQ5 zkm4x`@(cct01QI+&z%E`a~60+7BevL9R^{>E{-7@!AtwS`5Fv3Smozm z2zp;1Z^)7z_1MjfM>vjyp`(-GqVg#gpR}_b`Hd|*0}WjFFL=9Xk^aQcKRZ4NYMzig lzbh-eK1NVp`I(5C`a%@e^|pvBe5fYTd_%!f zA>lx~G!8`SFdJjERPAug`i* vJbU*pnT7iSL(hU03s`!N9WpRzXk=vI%FUaelBMMVw2i^j)z4*}Q$iB}!k<9# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/creative_motor.png b/src/main/resources/assets/create/textures/block/creative_motor.png index 897bf9e1ddff0e17a99957700e74115af66ad956..dcb6c401a8b2be9d4772785fb36fddb7a0c1e4f1 100644 GIT binary patch literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LiR0X`wFM$$Ge8vY@Av92yI=4NItE-v2Q-ctjo&5xbGA#cUBpy{rzu8Il@ z%*@P^5)u|>X3pw<^J3-+@T;h+m}#h52nnb9F_i?RIMyXih)ozkiZsN25%|45i8K{IwG$+Pg(tfY!yP{#gN}Y)gXt zg8x$h7&!IU!~+fDEbxdd272HS2s4Umcr^e8w|lxchG+!G_I2|$8SuF7=G?XLbK@Qs z(W#A1TwVGB|Nig3<7RTqY-jGRWzU%yoFtT0X7w#AcYP`7q^ZdEg}sN@-C*8~;LDqI zn`EBtI>YF)XXbNuJI5;P16L-on;pG1XXDWzo%x delta 541 zcmV+&0^nubnQhcx^CllLn98nU9`yw|%5zlpW)E0DqtcFJY!S1RmF#N&9L$v`E8 zk{7-$A{jSvRBs@ac#2y6SOkq=ZhD>*dZIWb6BBCnI$q}UkjbFVx)wrdXPbFhvwvsIK8llXgCak}rHHyVc&&kz zu(|v2aEw`hH^{MjtrGM9r+&~GSJzkjPawbrd>u%v+mOwrnFAB7eOUH>RDVjC$h^VU z)}~N8g+G5!kjv$<@pC=kA0KS015yANkvXXu0mjf!}a{q diff --git a/src/main/resources/assets/create/textures/block/hose_pulley_magnet.png b/src/main/resources/assets/create/textures/block/hose_pulley_magnet.png new file mode 100644 index 0000000000000000000000000000000000000000..34bed613cf99cfd68917bd9d744cffa20752d6f8 GIT binary patch literal 2025 zcmV zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvmg6=I{O2ih1Ogzq9Ea_wt85Bz(%>LTngKg36|4!& ze8)m--n8bc6ftun^kjlF!iZl^^UnB_^L8}GlrE8tH&%#?r=}6cWNu#33xv=(nCilJ zo#sI|_JLRdgSudjSYWngyC_N@+LFbypr2Z2>`n~|?Kl8Lm|GDH2^g@RM9Gs4C>BJ( zF@m3r$XOg0FhHu@$P92J$b`U==iC?*X!T{~ZANJU5h`8+s7aDRmU9aI1Q(&9tfJ1S zs@I@VlV&g8dG+20KWkJD5?s*WLkKaXkfTHwHToE0j49^CNl?Nx`4miwDW#k-X@={J z(HT8*E?lIzqQ#d`Vo4=e$fvrh)z?sCO*J=e(vbemw_sXqspU=`QtGa2_dWF3Q_llh z8#3I`;YS#8q>*pd4y(_s(F=3GXN?YPlQFmYg%8$X4&ib^vz+MU42-cOFdilY5HwHD zY$WG+GB-K1iIEh_V2yN=(`YgV23;rCK{t0F%>9-(qwbG*ByS z8`fH0JBloVW)@CNtqc@4)cu(8K^5DL>V|WrIVGokh$uEF-8K|4_$ndXMV{E~A9( zIXz1Y+c>z6Oe+HO5(4*)<=i%81(R#5Uo5M7)T247RZRyZZ$&EYsfSunZkM}=eSGXy z%I$!`hwC3>6bfQ!`M!X@=3D>!UktX(a^N1Btxxhgh(QzEe zKX&PM_X)X&IxaOBg1)c$n*C75UQv$jK$T(~@U!($rXG6Oa_o_@K$G`FctY<(6N21X zgR@1_A7LTIZse}t&Fr8@>Dcw{$%Yo7n|S3;FWYmi7p*S(k5EwymaT43JE`A$MTIXvsV!^OLXgsWw4IMNozAe1a@l6-ara2CIuq&07LceKN2mFTnk zvpmhSK7TGx^Q_NLv5Dft}W*CWE0005ZNklBgaYRgV*U51hnHy`3%uFlapSI;@`Q5uZ~-Z+q#`}dTcpFeW15CVWSO=-8= z092n;WMS80GEJCWU8BEzRFGk$<2piWwF+5~%5eV^x=lB-u7zpn zs9BJb&Lmlo^6jgS>)4BUo!0Ik$rSqiF~U?B{YpqOg)oYF`+2IAN+sTR2HSVQ!42ko z2VoTBIyR-!9+qWoC)j4=U@*Wi3=G5AOb|vfpT2~gc0MeMTD3aIM_`&JK<bvJkDOGS42M3dn!mND&z@5*m#I`L^m;w?WxJN8d4g`YyOLjS_I)3HlU zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YulH@83{MRYw2uMOK$H5B`?*{MqlVHkSi)*^< zZWFe#NF>M^eg^uI^&jkxE;=)zkLK5 zi@~1?$*QalPiawfy9@4wCu;zRRZ;i-Dayy((O!KbZ?8RZ=gP3_BNgPr0E8!whMn!n zu6r1HR_zw~p~1Y1?*6*tuGS^hx^A;8K7gq}V^X)N^csK@sMOvqphVn;dh8{mBusIJ zVhhxqP-f!H0=6rAUbt}OwZCVcF+?w`M7%|2u-t4(qhy)2N#I-IDp9j81a(AbsHQN> zJ{InAbB{N3Lga;k6oxZKkC#G6#w%raRBKCJW|wxZFfM61jbSw9+7l=U!gX+Jo!?&Q zE^pkOunGmO)0{BD;-<~TWc-y|+I3do%z1L#(%`rZ2cQVC4TE8Y0xqx`2X;{;GK0qi zeF{b{>SclgY$gj+g*J+n5G6^AjXse(R!lZCwiXCs8Z<(htOa6uZ^)nM6LP4SVm~so zV9}CgD?x(~7D9-j?NKFa^wDC7F{YSfNt%4J6jDqnQH07zxNT1oyHitRRY0h(5WYGo7e+f&ZB`tX=E3ZhU)vvaOHLhvR zYpKY!s?}Gkp~jkOu4PwksQRcHKPmTb)p)4Z6!RSyzf^-c#+wUn+le*JpqO}u;;|`! zgqEh6OYFTg<(g(L3l@b5RAX!6EZh`>f_`PO%DZ-7%KcL}GJi@pd8ZsT>3%~wYSInm zUUfTAZ7Kak(JoM1g^g3E6&qWXwMZ(6E{N)lJ($jZP0bpxQhIAnZK<@@UmGB#OT@B>Dum z;^b*{&;D%!(DkkC(IZ{m9G}-MU0-UCD7tp|yslgN`6}By(=Tj}-6NepFOC-^oj)&* zQFQ*iI8GA!h0U>hr1R&+ai-7@en1{abpE_J9zR{Av5DY67Gv5!40001ENklXw z($nDM<@ogZ$FJXi*jQNzvRQup{v*K0!@$4*;S*#t%Seg+XZQy5gR2u;1rM1Y@pm?|d0000< KMNUMnLSTa0#Wx24 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/item_drain_side.png b/src/main/resources/assets/create/textures/block/item_drain_side.png new file mode 100644 index 0000000000000000000000000000000000000000..bd768538d0946d6a9f4bcce4c800ab49744ed62d GIT binary patch literal 1991 zcmV;&2RQhNP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+T~YUmMbR={AU$e0uqSFa(JGT9c1|_K;0gDJaZ>E z`HOq(1_6?&k_2PMUw=;X2R=-hjhC204#DE%v(H@6NcMcro2=iz+Ob#TNp9`|hREUV zPB#plUm%yqg6LIVpXDYt)ss}wrCAlaWtq{?c}W#HK628&$-1ui58Kgijw;i!*S?Pc zqYLyoHar|Ti(g(=-1(Lz!!J8tlh7;Zr!8^su`_q`1-!fUf}JfYch6858+1Z=!ARvK z@3Gqmy|8v!ej13`M*H#e0lPVSnsc1p6(4|9FuJL0E4zh>6;K{D0-lJkpdI&<@g!`q zfw2xYE1qU369d^vo;nqpH1@kugNvRAN4%LE5MQ$7B4=)Zo}6C~O^z@ZKPHyZ8~yD9)guq|+g92l^HoKPSenIjQ! zOyH-$b9SC97$6buWG1+AE`XfG%Qn_T+H+a>h*4TVgt*`$sL8H?Ebj&J6MaGq6>;K? zhy;m}Bufb{_#h#K7*>rc(M2C6h8SatIhN#-Pm)54DW#lB=Il_yB!?VLPC4gNV6;GW z!Rmq;rBtr2`YJWlSX0flG=xv{O4TRG0Lq-^Jq>)FN zh_&gapEARYGtE59&6=|M%o@Eg_dRQ*tS!d;o);giK^)_yf>t?^#Tgi5PhdPQ1`yD^ zIJ1eo=f&LO%x07*Ck)m|7CD_3V_?t^VwrSv_h9Z@-i-Kv#2bIboLSWU7tEPOoig{C zw>PZyvQHGZ30hgWFtu)?uwhc+gg?~d-+!BbtKk2x$c>nGv$pC+vZHP}_(f>8T6Skj z8&4-Z+|y_Jz_o$Nj*+vKVzCg>JkoqizquDbw^yc3%((BmTM-J zW_v>!IevOHIqbzqc|K}NOAp!W{#kaz6kO8yOiJY*e52qYbM->5q1p0LR3nZ9cl_z8 z`95`LfELHZ*-CX8N8}kG7btHS9Jko_{!(Jow3)x6?g7S|^$!=!H$J4(MwyhlRp9>6 zQCZySgxq|XTcxyOLJ{@Z6E3%VsrT8Pu)uX~sP*zG%G@#3VX=x)w^>!^l$t6osih}x z^MSQi!~w_M&X)SIX{7n(aQ_9cC2h z-SRN64ulaB7H+9+$5Q~WgUPs`!2E-tFz=({i=Zg+*bjnZM_uu>VKUFL!dVf@oDPb( zyef+!@a@|A7a(dW@UFBWMn{Ij){f=Mc8nvQ&aROwe*CIvXHr|acl<-8$rt?@|B1Y& z*p>F-E>!)*Ao*~Zm5SeXrg?+&@+?6aaL?{uj5k1B6q3TOXc0+i(QtYLtYwrv-Cx8F z4+rdF&V#vAvnu{kN_WD4Q6+Fcx{E_AmupM8x)X2-$r=g(z99s)EWwmkQE~s5WSNuq3Tq_7`u;=3Y%Nr*cqSQZ6J#>zfaxC<3ee*o;(j z9Adg`f7t4)>TloXn+ew~;H{N7ai7e%Jp2u&5gcVm2SdF8000SaNLh0L01m$Z01m$a zI0aKA00007bV*G`2jmJC6$lqEB#nXq00Fy6L_t(I%cYY)kJCU9#ea4dud(BcNOYX& z5Pyo3kf4F$J^?MFrlq7o;;YcmQ6WS}MT>MoP|(mN7n;*qBq$--th2i~w-mmZL?NQc zG&{39?`hr}ZQ#9Umk8N0b|whkK7Hix-?_r;cYTg8$3#*B;H=%6AI%L<9^c^0w=u$L z%UN&Ctn?hs4Kp>TDT0cAZU`iJTjjIT(-Z--(sR}uB}vo(AZtt1$P%RzDWR1nHNgOIShBVxR}KJUO2Rl68^)}H z8y(4DR3O&}B8eKru^=?2-0EuYj=K!N}m{#vk<(w$mv1LrchaKCESxuH9?9JXVODH;C!4S>kfs!?f= z)0V^QEu^fbS!!>k34>9=O&Q>{MQIOv6-EF&eD;95$9-PDIU!36HaDZ{wJGg+@%$d@ zRB`gYUlDwK^%-5jt^Ed9_nQASY%rbCNNS%G}r0G|-o)oFnbCM7l7JNWziM@B@vU6@=Z|9Vr zmv%dUz#oy4p_5B4*#;WZ17_QXM Q0@}ym>FVdQ&MBb@04FbLNB{r; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/schematic_table_side.png b/src/main/resources/assets/create/textures/block/schematic_table_side.png index 08468449c5b99ad8b6fb149cd49cbf2901115505..739e96a144d096ce16df4ec7a29f527dcd4cf378 100644 GIT binary patch delta 378 zcmdnNyo`B*BnLAC1A~SxfAB;_h5FI}pAgq5d*vKI-Kr>)rbMfX2(yA9y;M&PM_th% zTa`p_y(kxzP%C*Ka~V4gAsOaK3;kjj&l3O8J`ay3GlQ(nn>RN%H|OW)mzS6K_Vxme zo;GdTEalo5!~B*m#DI7jxhu1G zSqn;Xnv~7riQ4j;Z}I1Qk>01yvHvgRn>b}I|K~ThN}9iSb|{}w{8U|DA?>t;%W%?# qO%4$=Q++i*rf^74_SVZu{mmqORZL=;k(M6NO$?r{elF{r5}E)B`>GfK delta 396 zcmV;70dxMQ1Goc_83+OZ005AYXf}}{Ab$yPNLh0L01m?d01m?e$8V@)0000ObVXQn zQ*UN;cVTj60B~VxZgehgWpp4kE-@}P{Z0w!0003gNklR`%L<8bNun+`6P$P6%DELD?Gj~#_qKC)Jo%`m_B!4mO z?au4fCjD2<&2Wk~NB86C`u*f-ayFXo4?m;9$Kl-=y?gm~aPx(rwCB9}?mth>u(vkY zTc$3ym*`rmhmJI5xaHw=o&J(;NK1rHsLk=#3RT9d|A~3YF-_A%QPg+z9MXVhB;+G( zpe)OxDCkfH$jP#dsWuR^0T#I7KzTyAl!r@fz#mvu;n-WqKUQ;;AK{?b$KH5`RbQ4~I;pU^F-WCTGR3{JOlOo6yZR~Vr;}oId zhNFFr5fg+OQXj4@ew!s;egB^Pzn81OetmyCx0?C)Z_!}KTlPFa*D`pz`njxgN@xNA DZ%Lo+ delta 284 zcmV+%0ptF#1IPl983+OZ005AYXf}}{Ab$yPNLh0L01m?d01m?e$8V@)0000ObVXQn zQ*UN;cVTj60B~VxZgehgWpp4kE-@}P{Z0w!0002FNkloU%_@h_^L#z+9)Fkp zYGK3N0*LqhNE(zRuYGJSfQEsd{#9v<01N1{00Jfv8F`@-a3(T>Bw~X^0H&!rs2Yn4 zh`iufha7aYAt0-P Date: Fri, 30 Oct 2020 02:17:58 +0100 Subject: [PATCH 3/3] Silence! - Removed leftovers from debugging --- .../fluids/actors/FluidDrainingBehaviour.java | 14 -------------- .../fluids/actors/FluidFillingBehaviour.java | 6 ------ 2 files changed, 20 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java index f2fff1737..6a44ca97a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java @@ -10,7 +10,6 @@ import javax.annotation.Nullable; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; -import com.simibubi.create.foundation.utility.Debug; import it.unimi.dsi.fastutil.PriorityQueue; import it.unimi.dsi.fastutil.objects.ObjectHeapPriorityQueue; @@ -60,7 +59,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { } if (counterpartActed) { - Debug.debugChat(" Counterpart acted"); counterpartActed = false; softReset(root); return false; @@ -141,7 +139,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { isValid = checkValid(world, rootPos); reset(); } else if (!validationSet.contains(currentPos)) { - Debug.debugChat(" Drained unreachable fluid - rebuilding"); reset(); } return true; @@ -230,7 +227,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { public void rebuildContext(BlockPos root) { reset(); - Debug.debugChat("Rebuilding!"); rootPos = root; affectedArea = new MutableBoundingBox(rootPos, rootPos); if (isValid) @@ -238,7 +234,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { } public void revalidate(BlockPos root) { - Debug.debugChat("Revalidating!"); validationFrontier.clear(); validationVisited.clear(); newValidationSet.clear(); @@ -251,7 +246,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { queue.enqueue(new BlockPosEntry(e, d)); validationSet.add(e); }, false); - Debug.debugChat("<...> Building - queue size " + queue.size()); World world = getWorld(); int maxBlocks = maxBlocks(); @@ -272,29 +266,24 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { queue.clear(); queue.enqueue(new BlockPosEntry(firstValid, 0)); tileEntity.sendData(); - Debug.debugChat(" Build complete - infinite"); return; } if (!frontier.isEmpty()) return; - Debug.debugChat(" Build complete - queue size " + queue.size()); tileEntity.sendData(); visited.clear(); } private void continueValidation() { search(fluid, validationFrontier, validationVisited, (e, d) -> newValidationSet.add(e), false); - Debug.debugChat("<...> Validating - set size " + newValidationSet.size()); int maxBlocks = maxBlocks(); if (validationVisited.size() > maxBlocks) { if (!infinite) { - Debug.debugChat(" Validation complete - now infinite"); reset(); } - Debug.debugChat("Validation complete - still infinite"); validationFrontier.clear(); setLongValidationTimer(); return; @@ -303,12 +292,10 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { if (!validationFrontier.isEmpty()) return; if (infinite) { - Debug.debugChat(" Validation complete - no longer infinite"); reset(); return; } - Debug.debugChat("Validation complete - set size " + newValidationSet.size()); validationSet = newValidationSet; newValidationSet = new HashSet<>(); validationVisited.clear(); @@ -316,7 +303,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { @Override public void reset() { - Debug.debugChat(" RESET"); super.reset(); fluid = null; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java index f9254dbac..7764001a0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java @@ -8,7 +8,6 @@ import java.util.Set; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; -import com.simibubi.create.foundation.utility.Debug; import com.simibubi.create.foundation.utility.Iterate; import it.unimi.dsi.fastutil.PriorityQueue; @@ -63,11 +62,9 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { if (infinityCheckVisited.size() > maxBlocks) { if (!infinite) { - Debug.debugChat(" Filler Validation complete - now infinite"); reset(); infinite = true; } - Debug.debugChat("Filler Validation complete - still infinite"); infinityCheckFrontier.clear(); setLongValidationTimer(); return; @@ -76,7 +73,6 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { if (!infinityCheckFrontier.isEmpty()) return; if (infinite) { - Debug.debugChat(" Filler Validation complete - no longer infinite"); reset(); return; } @@ -94,7 +90,6 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { } if (counterpartActed) { - Debug.debugChat(" Counterpart acted"); counterpartActed = false; softReset(root); return false; @@ -143,7 +138,6 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { visited.add(currentPos); if (visited.size() >= maxBlocks) { - Debug.debugChat(" Search exceeded - now infinite"); infinite = true; visited.clear(); queue.clear();