From c7b0c11abc8fb09b38d423770dae35b4c1c3e826 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 19 Apr 2023 18:39:56 +0200 Subject: [PATCH] Playtest V - Reduced minimum break speed of drills on trains - Rollers no longer break blocks beneath the track when no pave material is set or present - Belts printed instantly or via cannon now retain the correct type of casing - Scheduled trains no longer slow down for slight ascends/descents on a straight track - Fixed saplings and other non-collidables sticking to chassis or super glue - Encased Fluid Pipes no longer z-fight on open pipe faces - Fixed brass encased cogwheels using andesite particle and gearbox texture - Fixed filter items having unusual item camera transforms - Tweaked placement assist of rollers and copycat steps to match shafts and piston poles - Valve handles now turn twice as quickly - Bearings no longer have the angle-indicating nook on their block - Steam engines no longer have their value input on all faces - Adjusted weighted ejector value slots to match the model - Depot hitbox is now a simple cuboid - Fixed Gearshift and Clutch models looking a little toasted - Fixed belts encased with andesite briefly showing brass textures --- src/generated/resources/.cache/cache | 50 ++++++------ .../block/andesite_encased_cogwheel.json | 2 + .../andesite_encased_cogwheel_bottom.json | 2 + .../block/andesite_encased_cogwheel_top.json | 2 + .../andesite_encased_cogwheel_top_bottom.json | 2 + .../andesite_encased_large_cogwheel.json | 2 + ...ndesite_encased_large_cogwheel_bottom.json | 2 + .../andesite_encased_large_cogwheel_top.json | 2 + ...ite_encased_large_cogwheel_top_bottom.json | 2 + .../models/block/brass_encased_cogwheel.json | 2 + .../block/brass_encased_cogwheel_bottom.json | 2 + .../block/brass_encased_cogwheel_top.json | 2 + .../brass_encased_cogwheel_top_bottom.json | 2 + .../block/brass_encased_large_cogwheel.json | 2 + .../brass_encased_large_cogwheel_bottom.json | 2 + .../brass_encased_large_cogwheel_top.json | 2 + ...ass_encased_large_cogwheel_top_bottom.json | 2 + .../models/block/clockwork_bearing.json | 1 - .../models/block/mechanical_bearing.json | 1 - .../create/models/block/windmill_bearing.json | 1 - .../item/andesite_encased_cogwheel.json | 1 + .../item/andesite_encased_large_cogwheel.json | 1 + .../create/models/item/attribute_filter.json | 6 ++ .../models/item/brass_encased_cogwheel.json | 1 + .../item/brass_encased_large_cogwheel.json | 1 + .../assets/create/models/item/filter.json | 6 ++ .../create/models/item/windmill_bearing.json | 2 +- .../java/com/simibubi/create/AllBlocks.java | 12 ++- .../java/com/simibubi/create/AllItems.java | 10 +-- .../BlockBreakingMovementBehaviour.java | 2 +- .../components/actors/RollerBlock.java | 69 ++--------------- .../actors/RollerMovementBehaviour.java | 25 +++++- .../components/crank/ValveHandleBlock.java | 6 +- .../crank/ValveHandleBlockEntity.java | 2 +- .../components/steam/SteamEngineValueBox.java | 34 +++++---- .../BlockMovementChecks.java | 12 +-- .../fluids/pipes/FluidPipeBlockEntity.java | 3 + .../contraptions/relays/belt/BeltBlock.java | 4 - .../relays/belt/BeltBlockEntity.java | 16 +++- .../curiosities/frames/CopycatStepBlock.java | 72 ++---------------- .../logistics/block/depot/DepotBlock.java | 3 +- .../logistics/block/depot/EjectorBlock.java | 2 +- .../block/depot/EjectorBlockEntity.java | 37 +++++---- .../logistics/trains/entity/Navigation.java | 19 ++++- .../schematics/block/LaunchedItem.java | 27 ++++++- .../block/SchematicannonBlockEntity.java | 60 ++++++++++----- .../foundation/data/BuilderTransformers.java | 11 +-- .../foundation/utility/BlockHelper.java | 7 +- .../create/models/block/bearing/block.json | 16 +--- .../create/models/block/bearing/top.json | 15 +--- .../models/block/bearing/top_wooden.json | 3 +- .../encased_large_cogwheel/block_bottom.json | 4 +- .../encased_large_cogwheel/block_top.json | 4 +- .../block_top_bottom.json | 6 +- .../create/models/block/gearshift/block.json | 27 +++---- .../create/models/item/attribute_filter.json | 7 -- .../assets/create/models/item/filter.json | 8 -- ...{brass_filter.png => attribute_filter.png} | Bin .../item/{andesite_filter.png => filter.png} | Bin 59 files changed, 307 insertions(+), 319 deletions(-) create mode 100644 src/generated/resources/assets/create/models/item/attribute_filter.json create mode 100644 src/generated/resources/assets/create/models/item/filter.json delete mode 100644 src/main/resources/assets/create/models/item/attribute_filter.json delete mode 100644 src/main/resources/assets/create/models/item/filter.json rename src/main/resources/assets/create/textures/item/{brass_filter.png => attribute_filter.png} (100%) rename src/main/resources/assets/create/textures/item/{andesite_filter.png => filter.png} (100%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 262b6d63f..5457f54ad 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -607,14 +607,14 @@ eddf206f5fffbf9446461538da9fea70f5d22f0e assets/create/models/block/andesite_bel 8d53939d0e5fbeaace7800ac055719fd24b8314f assets/create/models/block/andesite_cap.json d497453840a05b0b958890676b819215f3a118b3 assets/create/models/block/andesite_cap_alt.json 4e44ccdc5e396c4380a7e59408db50553fa25226 assets/create/models/block/andesite_casing.json -762509cfb8602c6d0d3f959c08ad4934c2b5d8fa assets/create/models/block/andesite_encased_cogwheel.json -314489582d1cde98bc5e4fd4d2f0c9ab3cb731d3 assets/create/models/block/andesite_encased_cogwheel_bottom.json -650fa63c126652c8501a657e1b89d0ef42a8b4be assets/create/models/block/andesite_encased_cogwheel_top.json -c8f215c191f46ff1ea6f098ab32c7d27d04cb017 assets/create/models/block/andesite_encased_cogwheel_top_bottom.json -41d4e8fd8ccdf915bd4d00b97cb87be87de33486 assets/create/models/block/andesite_encased_large_cogwheel.json -f8f131a53664faa5bd84b61e83d62ed5b367bf1d assets/create/models/block/andesite_encased_large_cogwheel_bottom.json -77b3bbcb47e83f985d68b0ed0344e9f79999e797 assets/create/models/block/andesite_encased_large_cogwheel_top.json -01189fb179863ce1ef524bd5ddd5b4bebd5bbc6b assets/create/models/block/andesite_encased_large_cogwheel_top_bottom.json +27d6d8f523a2f3bc4ee44c8529d7dff216ec6903 assets/create/models/block/andesite_encased_cogwheel.json +33e2a5d0e63bf02af40d4e4de75e907f40e21f3b assets/create/models/block/andesite_encased_cogwheel_bottom.json +73c54c91549d06ebf1fe766ad43b5bc22874f8d7 assets/create/models/block/andesite_encased_cogwheel_top.json +53a57b61452de201f27b5414584f79d77ddc7f63 assets/create/models/block/andesite_encased_cogwheel_top_bottom.json +692a529fd4aa2a5efa00461ea650ae92ceb6a994 assets/create/models/block/andesite_encased_large_cogwheel.json +62ec35ed30bff5be9897dbc09eb251aceddac708 assets/create/models/block/andesite_encased_large_cogwheel_bottom.json +4f220c0c6a904434a92816653217facea53ee8ed assets/create/models/block/andesite_encased_large_cogwheel_top.json +2d0a835ed0ad9f8cfc20c6c43eb3a0126e1817cb assets/create/models/block/andesite_encased_large_cogwheel_top_bottom.json a51ef8eb258251ecd4313d6997ce607b79a23850 assets/create/models/block/andesite_funnel_horizontal_pull_powered.json fd19670a4504617fcd0ee0a1fb6ebeca9b30cc82 assets/create/models/block/andesite_funnel_horizontal_pull_unpowered.json aa22be9799a91810fa0068e525dd6961d7af4900 assets/create/models/block/andesite_funnel_horizontal_push_powered.json @@ -678,14 +678,14 @@ e0958b94c40e4aabbcbabd70be8a368eb877dcf9 assets/create/models/block/brass_belt_f a094db3862d765e185c4849ce0a50967ee95d7c1 assets/create/models/block/brass_cap.json 2dbb68d4917cac90fd6fe05abf5f7432288fdbed assets/create/models/block/brass_cap_alt.json 2e67c147d7c69aabd9ab9f7aa80f60671d5a03aa assets/create/models/block/brass_casing.json -8cb0039684377c27a7fe20bdcacf24f871221478 assets/create/models/block/brass_encased_cogwheel.json -c735917634c87b3d289bd912c7ceb465a3cc65b6 assets/create/models/block/brass_encased_cogwheel_bottom.json -c2199a633597a73a1c2d508e5dfe0a7589b02329 assets/create/models/block/brass_encased_cogwheel_top.json -69ea566328350c282878de2ef6aa197037c5e5de assets/create/models/block/brass_encased_cogwheel_top_bottom.json -7ab46e52da9ef474f38e5b9eefbed9ba9dc53b78 assets/create/models/block/brass_encased_large_cogwheel.json -ed150a9e18889217b7f010412e4317af04af7dc1 assets/create/models/block/brass_encased_large_cogwheel_bottom.json -bb4155627c1f189e2e3bc07822d227bb0fc64bc4 assets/create/models/block/brass_encased_large_cogwheel_top.json -421cbc9bcb6511c66ff7122d1800bcd8ab866b2b assets/create/models/block/brass_encased_large_cogwheel_top_bottom.json +e174c6cafde3bee9722b5eb641951fa403e2aeec assets/create/models/block/brass_encased_cogwheel.json +056576d83c9948e48841dd8f0009f00012473826 assets/create/models/block/brass_encased_cogwheel_bottom.json +682fa110a8ba91952d070d7ef58289f7d9a9f7ca assets/create/models/block/brass_encased_cogwheel_top.json +439d3612159957f39de24d33b86edd32a0a4dc97 assets/create/models/block/brass_encased_cogwheel_top_bottom.json +78699147c95a250cf1d58b57823a53e84be79893 assets/create/models/block/brass_encased_large_cogwheel.json +675ca543c06b48de9d9b4cb43cfb937c6e1f2e4a assets/create/models/block/brass_encased_large_cogwheel_bottom.json +86f692c36bbf12b5f53178f0d761a5c4ba75656c assets/create/models/block/brass_encased_large_cogwheel_top.json +6d33641780f18d9915695e6e9789f7058b362aec assets/create/models/block/brass_encased_large_cogwheel_top_bottom.json 68f57bccd8a7ec0a997ab65aab74103338b0ade0 assets/create/models/block/brass_funnel_horizontal_pull_powered.json 327643126b6b4a93523354ac70b0148d36176c75 assets/create/models/block/brass_funnel_horizontal_pull_unpowered.json 49c2cf87fb273d7e557cfde908e319f7810e333d assets/create/models/block/brass_funnel_horizontal_push_powered.json @@ -709,7 +709,7 @@ a276726447e4c22a259d224f8124ea863cb36b3c assets/create/models/block/brass_scaffo 3fd5c08a6fe54d38383c8bd92ff7331218ca396c assets/create/models/block/calcite_pillar.json c4d1e1b6e195c0b71c0b96546978cd24c4a4bfc4 assets/create/models/block/calcite_pillar_horizontal.json 4156227e18c0896ce83f260f71b939abbbf4f01e assets/create/models/block/chocolate.json -30fe120af3cb32faf0729df4d2cdf868f804be17 assets/create/models/block/clockwork_bearing.json +f9a3f0939ea43b404eb2826b94211a25fca5ebc2 assets/create/models/block/clockwork_bearing.json 4db08101a5d03303506e89adc9ff394ed26cd2e6 assets/create/models/block/copper_cap.json 06447f3c1e3f6d53d3887cedc20c322b146bdb1f assets/create/models/block/copper_cap_alt.json 1f01a4b6608f75145734b60ddf4a33ce318425ff assets/create/models/block/copper_casing.json @@ -1176,7 +1176,7 @@ ec6b5f636e163ff5e361d486cf628ca1af4849a1 assets/create/models/block/magenta_sail cbee001cd1bb1125a97d1bb2d1e6e5a68f129303 assets/create/models/block/magenta_seat.json fa56f9bec902e6fea9cc25e6f474ee00c3dc558d assets/create/models/block/magenta_toolbox.json bc5a03a5552eb4a518abefe5e8615f14ee13ca29 assets/create/models/block/magenta_valve_handle.json -2e67f27a895c9163a5d1be62897d5e66b119767a assets/create/models/block/mechanical_bearing.json +0492070642fda75b943080022368505f2d065730 assets/create/models/block/mechanical_bearing.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/nixie_tube.json e3cd8b33b8c5f0543e4f6728a5b3e05642f9efe1 assets/create/models/block/oak_window.json 54a3b3158f8c914788812aa44515b798b2a9e2f3 assets/create/models/block/oak_window_pane_noside.json @@ -1652,7 +1652,7 @@ ef1e719dc94d0b3ab37239467631be3aa877173b assets/create/models/block/weathered_co 1377e12f56dce1466ce44078d7154870c5cf7b2a assets/create/models/block/white_seat.json 94f882c4bf1664a9acfe57e1eccfd8129134aaaa assets/create/models/block/white_toolbox.json 899f33d51cf36cb1c283bc7e6363f9d451e5736e assets/create/models/block/white_valve_handle.json -f2bee22fe03ac047fbe73ca2c5c759f09bf646df assets/create/models/block/windmill_bearing.json +0b9bfba48d1f249d70508df8c51fa9f9f3003dd7 assets/create/models/block/windmill_bearing.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/yellow_nixie_tube.json 071ca07daceea4d0db7ed41e815d47589fdb14b7 assets/create/models/block/yellow_sail.json 0a0e2cc973e35586ae00ed17b919383868e992e8 assets/create/models/block/yellow_seat.json @@ -1668,8 +1668,8 @@ e7759d9b3cd64d2719a58dc35fc75ca65b9e14fa assets/create/models/item/analog_lever. 2e7cf267efb66404721ac8bf08802de0eb134159 assets/create/models/item/andesite_alloy_block.json 946756a1a498ccd2e61b33ef317c5ec9e30afebf assets/create/models/item/andesite_bars.json 174c9705d25f149052835fdcf7c85626afead90b assets/create/models/item/andesite_casing.json -420020284d01c72a7fb3387750fe1dd2dcfb9550 assets/create/models/item/andesite_encased_cogwheel.json -6e246e91b4ebffd5c45311057feb5d26d1cb8aec assets/create/models/item/andesite_encased_large_cogwheel.json +7d421377a50b4986626bedbd517aebe39a81247d assets/create/models/item/andesite_encased_cogwheel.json +1a18f605be05b9031f3a4bdbd3de8103b2783e0c assets/create/models/item/andesite_encased_large_cogwheel.json bc6e7469744604e578200ea87690e4dd3b25e447 assets/create/models/item/andesite_encased_shaft.json 105a9946b9e4d5e949f6d557cfde750227463bff assets/create/models/item/andesite_funnel.json 4c9232a6249ad1ef51a7978a8e642a8c88dda0ab assets/create/models/item/andesite_ladder.json @@ -1678,6 +1678,7 @@ bc6e7469744604e578200ea87690e4dd3b25e447 assets/create/models/item/andesite_enca 473be56fe1f44809ffecbb3eb86107af3ca7a569 assets/create/models/item/andesite_tunnel.json bbe56a2eb84835f26ed3beb0313ddd8be7a53ead assets/create/models/item/asurine.json 840a34731a823e185a180bef029dd16ee3f78541 assets/create/models/item/asurine_pillar.json +c0beeec7ae0ac2f8dcef6c704935c9fef3c47836 assets/create/models/item/attribute_filter.json cf9e35bfea0b0a324e1c6384990425b3d359792c assets/create/models/item/bar_of_chocolate.json 421e481b7fbca4c4a1080ed703401eb25375e087 assets/create/models/item/basin.json ffdb36349fa2e50451c208585162b6a8386ec494 assets/create/models/item/belt_connector.json @@ -1695,8 +1696,8 @@ bec96ebf3369d3cffa9bb1b8bf9f2a5cd5d0ef96 assets/create/models/item/blue_valve_ha 5afa91abed387b3dfa39c39c7feae5f8f02a4bd9 assets/create/models/item/brass_bars.json 17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets/create/models/item/brass_block.json f5a18f4279c2e845a5967b1c2f9e807c2bb77afb assets/create/models/item/brass_casing.json -099179a466a2f370dd2c4fea0d841517fa3a558b assets/create/models/item/brass_encased_cogwheel.json -6e60b5939747835b2247cbc4907d633b017abc79 assets/create/models/item/brass_encased_large_cogwheel.json +e462012b46bb628a17874abc75282849f6511211 assets/create/models/item/brass_encased_cogwheel.json +4c3e5e94a4c4027246f09c5a0c7ed6d020cde565 assets/create/models/item/brass_encased_large_cogwheel.json c723011e09203821b6b59cff9de22454c5e4395a assets/create/models/item/brass_encased_shaft.json 8de90ceb9997f61efc544304fcd919a54db47d41 assets/create/models/item/brass_funnel.json 965f3f992fde899719506fd584f3fbbbf69af93c assets/create/models/item/brass_hand.json @@ -1913,6 +1914,7 @@ d455c713ef442632db1556a1c84d56b09b23754f assets/create/models/item/exposed_coppe 2b1de143ed0dfb42f4414d085ded1e0d3154866a assets/create/models/item/exposed_copper_tile_stairs.json 492e6b68180bc2a7be052b9a1acb2b685d8295aa assets/create/models/item/exposed_copper_tiles.json 68833e2a7836c73776551565783a1d175b715c66 assets/create/models/item/extendo_grip.json +088032cabf5f93606fbdf76625f16e4d5b0f166c assets/create/models/item/filter.json e5e6fb6eb182b85b977e1025a7fe84d46de59320 assets/create/models/item/fluid_pipe.json e7d2097256fed545064a37d233e7b810b04c26a4 assets/create/models/item/fluid_tank.json f4727119b75ab632c3ad295be4d398b1919d782f assets/create/models/item/fluid_valve.json @@ -2262,7 +2264,7 @@ c6253e0f8db3c3992d3f78fe5045e276d39d5b22 assets/create/models/item/white_sail.js 69328eb4f91c4407fbcad5e3c4b88363f1a9572c assets/create/models/item/white_seat.json 29d8e92edf11c79091e49689a97ab700121cdeb3 assets/create/models/item/white_toolbox.json be7a2d59d43083d7f2427193dcb9d68004224dd3 assets/create/models/item/white_valve_handle.json -d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bearing.json +49b0ba1bb71e244f7de23f3a6fb322c77cd3be03 assets/create/models/item/windmill_bearing.json 500abf752654a904d78a967f6c6d29a75a4821ab assets/create/models/item/wooden_bracket.json 2527b52413965a3e84b4718e08a9b8bb30a741ea assets/create/models/item/wrench.json 4b49bc2418410cded5f0b7da3430f1a22e049f18 assets/create/models/item/yellow_seat.json diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel.json b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel.json index a7a19bcdd..1b254a4fd 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_bottom.json b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_bottom.json index ecfe574ac..b98901fc6 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_bottom.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block_bottom", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top.json b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top.json index bf9533df3..0aef0307b 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block_top", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top_bottom.json b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top_bottom.json index f3523aaea..488c35540 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top_bottom.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_cogwheel_top_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block_top_bottom", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel.json b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel.json index dbabfdca6..1776aeef2 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_bottom.json b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_bottom.json index e29b6d37a..a0734bf1f 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_bottom.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block_bottom", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top.json b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top.json index 3115674e7..632b5afd1 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block_top", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top_bottom.json b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top_bottom.json index 45aa717ca..3c90be1d7 100644 --- a/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top_bottom.json +++ b/src/generated/resources/assets/create/models/block/andesite_encased_large_cogwheel_top_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block_top_bottom", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", + "4": "create:block/gearbox", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel.json b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel.json index ac524fa20..75b323ca9 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_bottom.json b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_bottom.json index f539444af..186084369 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_bottom.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block_bottom", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top.json b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top.json index bd1e4ee97..9280d9b5d 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block_top", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top_bottom.json b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top_bottom.json index 4a79cf7a9..4b713187e 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top_bottom.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_cogwheel_top_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_cogwheel/block_top_bottom", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel.json b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel.json index b3a3f5ea7..b7737d142 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_bottom.json b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_bottom.json index d6cf2a464..68401dd46 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_bottom.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block_bottom", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top.json b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top.json index 0ea843941..dc83b552d 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block_top", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top_bottom.json b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top_bottom.json index 2250120e8..1703adbc8 100644 --- a/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top_bottom.json +++ b/src/generated/resources/assets/create/models/block/brass_encased_large_cogwheel_top_bottom.json @@ -2,6 +2,8 @@ "parent": "create:block/encased_large_cogwheel/block_top_bottom", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", + "4": "create:block/brass_gearbox", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/block/clockwork_bearing.json b/src/generated/resources/assets/create/models/block/clockwork_bearing.json index 918f089a7..144a26a78 100644 --- a/src/generated/resources/assets/create/models/block/clockwork_bearing.json +++ b/src/generated/resources/assets/create/models/block/clockwork_bearing.json @@ -2,7 +2,6 @@ "parent": "create:block/bearing/block", "textures": { "side": "create:block/clockwork_bearing_side", - "nook": "create:block/brass_casing", "back": "create:block/brass_gearbox" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/mechanical_bearing.json b/src/generated/resources/assets/create/models/block/mechanical_bearing.json index 74a704e57..9e50b2ade 100644 --- a/src/generated/resources/assets/create/models/block/mechanical_bearing.json +++ b/src/generated/resources/assets/create/models/block/mechanical_bearing.json @@ -2,7 +2,6 @@ "parent": "create:block/bearing/block", "textures": { "side": "create:block/mechanical_bearing_side", - "nook": "create:block/brass_casing", "back": "create:block/gearbox" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/windmill_bearing.json b/src/generated/resources/assets/create/models/block/windmill_bearing.json index 1af6d6059..fb370406e 100644 --- a/src/generated/resources/assets/create/models/block/windmill_bearing.json +++ b/src/generated/resources/assets/create/models/block/windmill_bearing.json @@ -2,7 +2,6 @@ "parent": "create:block/bearing/block", "textures": { "side": "create:block/windmill_bearing_side", - "nook": "create:block/andesite_casing", "back": "create:block/gearbox" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/andesite_encased_cogwheel.json b/src/generated/resources/assets/create/models/item/andesite_encased_cogwheel.json index 7912bbab9..2c8048e5b 100644 --- a/src/generated/resources/assets/create/models/item/andesite_encased_cogwheel.json +++ b/src/generated/resources/assets/create/models/item/andesite_encased_cogwheel.json @@ -2,6 +2,7 @@ "parent": "create:block/encased_cogwheel/item", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/item/andesite_encased_large_cogwheel.json b/src/generated/resources/assets/create/models/item/andesite_encased_large_cogwheel.json index 14396af11..334464911 100644 --- a/src/generated/resources/assets/create/models/item/andesite_encased_large_cogwheel.json +++ b/src/generated/resources/assets/create/models/item/andesite_encased_large_cogwheel.json @@ -2,6 +2,7 @@ "parent": "create:block/encased_large_cogwheel/item", "textures": { "casing": "create:block/andesite_casing", + "particle": "create:block/andesite_casing", "1": "minecraft:block/stripped_spruce_log_top", "side": "create:block/andesite_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/item/attribute_filter.json b/src/generated/resources/assets/create/models/item/attribute_filter.json new file mode 100644 index 000000000..e20fe2e5f --- /dev/null +++ b/src/generated/resources/assets/create/models/item/attribute_filter.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "create:item/attribute_filter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/brass_encased_cogwheel.json b/src/generated/resources/assets/create/models/item/brass_encased_cogwheel.json index ca72d6475..1f5296ec8 100644 --- a/src/generated/resources/assets/create/models/item/brass_encased_cogwheel.json +++ b/src/generated/resources/assets/create/models/item/brass_encased_cogwheel.json @@ -2,6 +2,7 @@ "parent": "create:block/encased_cogwheel/item", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side" } diff --git a/src/generated/resources/assets/create/models/item/brass_encased_large_cogwheel.json b/src/generated/resources/assets/create/models/item/brass_encased_large_cogwheel.json index 0f81deda2..24da645e7 100644 --- a/src/generated/resources/assets/create/models/item/brass_encased_large_cogwheel.json +++ b/src/generated/resources/assets/create/models/item/brass_encased_large_cogwheel.json @@ -2,6 +2,7 @@ "parent": "create:block/encased_large_cogwheel/item", "textures": { "casing": "create:block/brass_casing", + "particle": "create:block/brass_casing", "1": "minecraft:block/stripped_dark_oak_log_top", "side": "create:block/brass_encased_cogwheel_side_connected" } diff --git a/src/generated/resources/assets/create/models/item/filter.json b/src/generated/resources/assets/create/models/item/filter.json new file mode 100644 index 000000000..584b3303f --- /dev/null +++ b/src/generated/resources/assets/create/models/item/filter.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "create:item/filter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/windmill_bearing.json b/src/generated/resources/assets/create/models/item/windmill_bearing.json index 434880d44..f9365a5a6 100644 --- a/src/generated/resources/assets/create/models/item/windmill_bearing.json +++ b/src/generated/resources/assets/create/models/item/windmill_bearing.json @@ -1,7 +1,7 @@ { "parent": "create:block/bearing/item", "textures": { - "top": "create:block/bearing_top_wooden", + "top": "create:block/bearing_top", "side": "create:block/windmill_bearing_side", "back": "create:block/gearbox" } diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index d24b2afd5..43f7b9aa3 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -443,9 +443,9 @@ public class AllBlocks { public static final BlockEntry CLUTCH = REGISTRATE.block("clutch", ClutchBlock::new) .initialProperties(SharedProperties::stone) - .addLayer(() -> RenderType::cutoutMipped) .properties(BlockBehaviour.Properties::noOcclusion) .properties(p -> p.color(MaterialColor.PODZOL)) + .addLayer(() -> RenderType::cutoutMipped) .transform(BlockStressDefaults.setNoImpact()) .transform(axeOrPickaxe()) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, AssetLookup.forPowered(c, p))) @@ -455,9 +455,9 @@ public class AllBlocks { public static final BlockEntry GEARSHIFT = REGISTRATE.block("gearshift", GearshiftBlock::new) .initialProperties(SharedProperties::stone) - .addLayer(() -> RenderType::cutoutMipped) .properties(BlockBehaviour.Properties::noOcclusion) .properties(p -> p.color(MaterialColor.PODZOL)) + .addLayer(() -> RenderType::cutoutMipped) .transform(BlockStressDefaults.setNoImpact()) .transform(axeOrPickaxe()) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, AssetLookup.forPowered(c, p))) @@ -467,7 +467,6 @@ public class AllBlocks { public static final BlockEntry ENCASED_CHAIN_DRIVE = REGISTRATE.block("encased_chain_drive", EncasedBeltBlock::new) - .addLayer(() -> RenderType::cutoutMipped) .initialProperties(SharedProperties::stone) .properties(BlockBehaviour.Properties::noOcclusion) .properties(p -> p.color(MaterialColor.PODZOL)) @@ -475,7 +474,6 @@ public class AllBlocks { .transform(axeOrPickaxe()) .blockstate((c, p) -> new EncasedBeltGenerator((state, suffix) -> p.models() .getExistingFile(p.modLoc("block/" + c.getName() + "/" + suffix))).generate(c, p)) - .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel()) .register(); @@ -1139,7 +1137,7 @@ public class AllBlocks { REGISTRATE.block("windmill_bearing", WindmillBearingBlock::new) .transform(axeOrPickaxe()) .properties(p -> p.color(MaterialColor.PODZOL)) - .transform(BuilderTransformers.bearing("windmill", "gearbox", true)) + .transform(BuilderTransformers.bearing("windmill", "gearbox")) .transform(BlockStressDefaults.setCapacity(512.0)) .transform(BlockStressDefaults.setGeneratorSpeed(WindmillBearingBlock::getSpeedRange)) .tag(AllBlockTags.SAFE_NBT.tag) @@ -1149,7 +1147,7 @@ public class AllBlocks { REGISTRATE.block("mechanical_bearing", MechanicalBearingBlock::new) .properties(p -> p.color(MaterialColor.PODZOL)) .transform(axeOrPickaxe()) - .transform(BuilderTransformers.bearing("mechanical", "gearbox", false)) + .transform(BuilderTransformers.bearing("mechanical", "gearbox")) .transform(BlockStressDefaults.setImpact(4.0)) .tag(AllBlockTags.SAFE_NBT.tag) .onRegister(movementBehaviour(new StabilizedBearingMovementBehaviour())) @@ -1159,7 +1157,7 @@ public class AllBlocks { REGISTRATE.block("clockwork_bearing", ClockworkBearingBlock::new) .properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN)) .transform(axeOrPickaxe()) - .transform(BuilderTransformers.bearing("clockwork", "brass_gearbox", false)) + .transform(BuilderTransformers.bearing("clockwork", "brass_gearbox")) .transform(BlockStressDefaults.setImpact(4.0)) .tag(AllBlockTags.SAFE_NBT.tag) .register(); diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 66717e1d0..c12c28aa3 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -340,13 +340,9 @@ public class AllItems { // Logistics public static final ItemEntry FILTER = REGISTRATE.item("filter", FilterItem::regular) - .model(AssetLookup.existingItemModel()) - .register(); - - public static final ItemEntry ATTRIBUTE_FILTER = - REGISTRATE.item("attribute_filter", FilterItem::attribute) - .model(AssetLookup.existingItemModel()) - .register(); + .register(), ATTRIBUTE_FILTER = + REGISTRATE.item("attribute_filter", FilterItem::attribute) + .register(); public static final ItemEntry SCHEDULE = REGISTRATE.item("schedule", ScheduleItem::new) .lang("Train Schedule") diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java index ea40a0a8c..c1f33f03f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java @@ -225,7 +225,7 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour { if (context.contraption instanceof MountedContraption) lowerLimit = 1f; if (context.contraption instanceof CarriageContraption) - lowerLimit = 4f; + lowerLimit = 2f; return Mth.clamp(Math.abs(context.getAnimationSpeed()) / 500f, lowerLimit, 16f); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerBlock.java index f444bcbf6..51d186cbb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerBlock.java @@ -5,12 +5,10 @@ import java.util.function.Predicate; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; -import com.simibubi.create.content.curiosities.tools.ExtendoGripItem; import com.simibubi.create.foundation.block.IBE; -import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.placement.IPlacementHelper; import com.simibubi.create.foundation.utility.placement.PlacementHelpers; -import com.simibubi.create.foundation.utility.placement.PlacementOffset; +import com.simibubi.create.foundation.utility.placement.util.PoleHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -18,7 +16,6 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; @@ -31,7 +28,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.common.ForgeMod; public class RollerBlock extends AttachedActorBlock implements IBE { @@ -93,68 +89,19 @@ public class RollerBlock extends AttachedActorBlock implements IBE { + + public PlacementHelper() { + super(AllBlocks.MECHANICAL_ROLLER::has, state -> state.getValue(FACING) + .getClockWise() + .getAxis(), FACING); + } @Override public Predicate getItemPredicate() { return AllBlocks.MECHANICAL_ROLLER::isIn; } - @Override - public Predicate getStatePredicate() { - return AllBlocks.MECHANICAL_ROLLER::has; - } - - public int attachedSteps(Level world, BlockPos pos, Direction direction) { - BlockPos checkPos = pos.relative(direction); - BlockState state = world.getBlockState(checkPos); - int count = 0; - while (getStatePredicate().test(state)) { - count++; - checkPos = checkPos.relative(direction); - state = world.getBlockState(checkPos); - } - return count; - } - - @Override - public PlacementOffset getOffset(Player player, Level world, BlockState state, BlockPos pos, - BlockHitResult ray) { - - Direction dir = null; - Direction facing = state.getValue(FACING); - - for (Direction nearest : Direction.orderedByNearest(player)) { - if (nearest.getAxis() != facing.getClockWise() - .getAxis()) - continue; - dir = nearest; - break; - } - - int range = AllConfigs.server().curiosities.placementAssistRange.get(); - if (player != null) { - AttributeInstance reach = player.getAttribute(ForgeMod.REACH_DISTANCE.get()); - if (reach != null && reach.hasModifier(ExtendoGripItem.singleRangeAttributeModifier)) - range += 4; - } - - int row = attachedSteps(world, pos, dir); - if (row >= range) - return PlacementOffset.fail(); - - BlockPos newPos = pos.relative(dir, row + 1); - BlockState newState = world.getBlockState(newPos); - - if (!state.canSurvive(world, newPos)) - return PlacementOffset.fail(); - - if (newState.getMaterial() - .isReplaceable()) - return PlacementOffset.success(newPos, bState -> bState.setValue(FACING, facing)); - return PlacementOffset.fail(); - } - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerMovementBehaviour.java index a5faa94a1..d1f29fdcc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/RollerMovementBehaviour.java @@ -127,7 +127,7 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { } BlockPos argMax = null; - double max = Double.MIN_VALUE; + double max = -1; for (BlockPos toBreak : positionsToBreak) { float hardness = context.world.getBlockState(toBreak) .getDestroySpeed(world, toBreak); @@ -136,6 +136,11 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { max = hardness; argMax = toBreak; } + + if (argMax == null) { + triggerPaver(context, pos); + return; + } context.data.put("ReferencePos", NbtUtils.writeBlockPos(pos)); context.data.put("BreakingPos", NbtUtils.writeBlockPos(argMax)); @@ -181,6 +186,16 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { if (mode != RollingMode.TUNNEL_PAVE) return positions; + int startingY = 1; + if (!getStateToPaveWith(context).isAir()) { + ItemStack filter = ItemStack.of(context.blockEntityData.getCompound("Filter")); + if (!ItemHelper + .extract(context.contraption.getSharedInventory(), + stack -> FilterItem.test(context.world, stack, filter), 1, true) + .isEmpty()) + startingY = 0; + } + // Train PaveTask profileForTracks = createHeightProfileForTracks(context); if (profileForTracks != null) { @@ -188,7 +203,11 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { float height = profileForTracks.get(coords); BlockPos targetPosition = new BlockPos(coords.getFirst(), height, coords.getSecond()); boolean shouldPlaceSlab = height > Math.floor(height) + .45; - for (int i = 0; i <= (shouldPlaceSlab ? 3 : 2); i++) + if (startingY == 1 && shouldPlaceSlab && context.world.getBlockState(targetPosition.above()) + .getOptionalValue(SlabBlock.TYPE) + .orElse(SlabType.DOUBLE) == SlabType.BOTTOM) + startingY = 2; + for (int i = startingY; i <= (shouldPlaceSlab ? 3 : 2); i++) if (testBreakerTarget(context, targetPosition.above(i), i)) positions.add(targetPosition.above(i)); } @@ -196,7 +215,7 @@ public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour { } // Otherwise - for (int i = 0; i <= 2; i++) + for (int i = startingY; i <= 2; i++) if (testBreakerTarget(context, visitedPos.above(i), i)) positions.add(visitedPos.above(i)); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java index 7653b7fa0..bf9d71170 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java @@ -89,7 +89,7 @@ public class ValveHandleBlock extends HandCrankBlock { } onBlockEntityUse(level, pos, - hcbe -> (hcbe instanceof ValveHandleBlockEntity vhbe) && vhbe.activate(player.isCrouching()) + hcbe -> (hcbe instanceof ValveHandleBlockEntity vhbe) && vhbe.activate(player.isSteppingCarefully()) ? InteractionResult.SUCCESS : InteractionResult.PASS); return true; @@ -115,11 +115,11 @@ public class ValveHandleBlock extends HandCrankBlock { @Override public int getRotationSpeed() { - return 16; + return 32; } public static Couple getSpeedRange() { - return Couple.create(16, 16); + return Couple.create(32, 32); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java index 34c083f59..03de0e9c8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java @@ -133,7 +133,7 @@ public class ValveHandleBlockEntity extends HandCrankBlockEntity { sequenceContext = SequenceContext.fromGearshift(SequencerInstructions.TURN_ANGLE, rotationSpeed, target); updateGeneratedRotation(); - cooldown = 5; + cooldown = 4; return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineValueBox.java b/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineValueBox.java index 0e591f358..600ea336a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineValueBox.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/steam/SteamEngineValueBox.java @@ -15,9 +15,24 @@ import net.minecraft.world.phys.Vec3; public class SteamEngineValueBox extends ValueBoxTransform.Sided { @Override - protected boolean isSideActive(BlockState state, Direction direction) { - return SteamEngineBlock.getFacing(state) - .getAxis() != direction.getAxis(); + protected boolean isSideActive(BlockState state, Direction side) { + Direction engineFacing = SteamEngineBlock.getFacing(state); + if (engineFacing.getAxis() == side.getAxis()) + return false; + + float roll = 0; + for (Pointing p : Pointing.values()) + if (p.getCombinedDirection(engineFacing) == side) + roll = p.getXRotation(); + if (engineFacing == Direction.UP) + roll += 180; + + boolean recessed = roll % 180 == 0; + if (engineFacing.getAxis() == Axis.Y) + recessed ^= state.getValue(SteamEngineBlock.FACING) + .getAxis() == Axis.X; + + return !recessed; } @Override @@ -26,21 +41,15 @@ public class SteamEngineValueBox extends ValueBoxTransform.Sided { Direction engineFacing = SteamEngineBlock.getFacing(state); float roll = 0; - for (Pointing p : Pointing.values()) { + for (Pointing p : Pointing.values()) if (p.getCombinedDirection(engineFacing) == side) roll = p.getXRotation(); - } if (engineFacing == Direction.UP) roll += 180; float horizontalAngle = AngleHelper.horizontalAngle(engineFacing); float verticalAngle = AngleHelper.verticalAngle(engineFacing); - - boolean recessed = roll % 180 == 0; - if (engineFacing.getAxis() == Axis.Y) - recessed ^= state.getValue(SteamEngineBlock.FACING).getAxis() == Axis.X; - - Vec3 local = VecHelper.voxelSpace(8, recessed ? 12.5 : 14.5, 9); + Vec3 local = VecHelper.voxelSpace(8, 14.5, 9); local = VecHelper.rotateCentered(local, roll, Axis.Z); local = VecHelper.rotateCentered(local, horizontalAngle, Axis.Y); @@ -59,10 +68,9 @@ public class SteamEngineValueBox extends ValueBoxTransform.Sided { } float roll = 0; - for (Pointing p : Pointing.values()) { + for (Pointing p : Pointing.values()) if (p.getCombinedDirection(facing) == getSide()) roll = p.getXRotation(); - } float yRot = AngleHelper.horizontalAngle(facing) + (facing == Direction.DOWN ? 180 : 0); TransformStack.cast(ms) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java index e0eddefec..d260e44a6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java @@ -173,13 +173,15 @@ public class BlockMovementChecks { private static boolean isMovementNecessaryFallback(BlockState state, Level world, BlockPos pos) { if (isBrittle(state)) return true; - if (!state.getMaterial() - .isReplaceable()) + if (AllBlockTags.MOVABLE_EMPTY_COLLIDER.matches(state)) return true; - if (!state.getCollisionShape(world, pos) + if (state.getCollisionShape(world, pos) .isEmpty()) - return true; - return AllBlockTags.MOVABLE_EMPTY_COLLIDER.matches(state); + return false; + if (state.getMaterial() + .isReplaceable()) + return false; + return true; } private static boolean isMovementAllowedFallback(BlockState state, Level world, BlockPos pos) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlockEntity.java index 4f9ac3d24..2d05a47ea 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlockEntity.java @@ -62,6 +62,9 @@ public class FluidPipeBlockEntity extends SmartBlockEntity implements ITransform BlockPos offsetPos = pos.relative(direction); BlockState otherState = world.getBlockState(offsetPos); + if (state.getBlock() instanceof EncasedPipeBlock && attachment != AttachmentTypes.DRAIN) + return AttachmentTypes.NONE; + if (attachment == AttachmentTypes.RIM && !FluidPipeBlock.isPipe(otherState) && !AllBlocks.MECHANICAL_PUMP.has(otherState) && !AllBlocks.ENCASED_FLUID_PIPE.has(otherState)) { FluidTransportBehaviour pipeBehaviour = 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 436e74a41..a53228325 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 @@ -298,15 +298,11 @@ public class BeltBlock extends HorizontalKineticBlock implements IBE be.setCasingType(CasingType.BRASS)); return InteractionResult.SUCCESS; } if (AllBlocks.ANDESITE_CASING.isIn(heldItem)) { - if (world.isClientSide) - return InteractionResult.SUCCESS; withBlockEntityDo(world, pos, be -> be.setCasingType(CasingType.ANDESITE)); return InteractionResult.SUCCESS; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlockEntity.java index 32d19648f..a00d0e858 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlockEntity.java @@ -429,16 +429,26 @@ public class BeltBlockEntity extends KineticBlockEntity { public void setCasingType(CasingType type) { if (casing == type) return; + + BlockState blockState = getBlockState(); + boolean shouldBlockHaveCasing = type != CasingType.NONE; + + if (level.isClientSide) { + casing = type; + level.setBlock(worldPosition, blockState.setValue(BeltBlock.CASING, shouldBlockHaveCasing), 0); + requestModelDataUpdate(); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 16); + return; + } + if (casing != CasingType.NONE) level.levelEvent(2001, worldPosition, Block.getId(casing == CasingType.ANDESITE ? AllBlocks.ANDESITE_CASING.getDefaultState() : AllBlocks.BRASS_CASING.getDefaultState())); - casing = type; - boolean shouldBlockHaveCasing = type != CasingType.NONE; - BlockState blockState = getBlockState(); if (blockState.getValue(BeltBlock.CASING) != shouldBlockHaveCasing) KineticBlockEntity.switchToBlockState(level, worldPosition, blockState.setValue(BeltBlock.CASING, shouldBlockHaveCasing)); + casing = type; setChanged(); sendData(); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/frames/CopycatStepBlock.java b/src/main/java/com/simibubi/create/content/curiosities/frames/CopycatStepBlock.java index 0e3fcda2e..375aa4061 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/frames/CopycatStepBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/frames/CopycatStepBlock.java @@ -4,20 +4,17 @@ import java.util.function.Predicate; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; -import com.simibubi.create.content.curiosities.tools.ExtendoGripItem; -import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VoxelShaper; import com.simibubi.create.foundation.utility.placement.IPlacementHelper; import com.simibubi.create.foundation.utility.placement.PlacementHelpers; -import com.simibubi.create.foundation.utility.placement.PlacementOffset; +import com.simibubi.create.foundation.utility.placement.util.PoleHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; @@ -38,7 +35,6 @@ import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.common.ForgeMod; public class CopycatStepBlock extends WaterloggedCopycatBlock { @@ -217,71 +213,19 @@ public class CopycatStepBlock extends WaterloggedCopycatBlock { return pState.rotate(pMirror.getRotation(pState.getValue(FACING))); } - private static class PlacementHelper implements IPlacementHelper { + private static class PlacementHelper extends PoleHelper { + + public PlacementHelper() { + super(AllBlocks.COPYCAT_STEP::has, state -> state.getValue(FACING) + .getClockWise() + .getAxis(), FACING); + } @Override public Predicate getItemPredicate() { return AllBlocks.COPYCAT_STEP::isIn; } - @Override - public Predicate getStatePredicate() { - return AllBlocks.COPYCAT_STEP::has; - } - - public int attachedSteps(Level world, BlockPos pos, Direction direction) { - BlockPos checkPos = pos.relative(direction); - BlockState state = world.getBlockState(checkPos); - int count = 0; - while (getStatePredicate().test(state)) { - count++; - checkPos = checkPos.relative(direction); - state = world.getBlockState(checkPos); - } - return count; - } - - @Override - public PlacementOffset getOffset(Player player, Level world, BlockState state, BlockPos pos, - BlockHitResult ray) { - - Direction dir = null; - Direction facing = state.getValue(FACING); - - for (Direction nearest : Direction.orderedByNearest(player)) { - if (nearest.getAxis() != facing.getClockWise() - .getAxis()) - continue; - dir = nearest; - break; - } - - int range = AllConfigs.server().curiosities.placementAssistRange.get(); - if (player != null) { - AttributeInstance reach = player.getAttribute(ForgeMod.REACH_DISTANCE.get()); - if (reach != null && reach.hasModifier(ExtendoGripItem.singleRangeAttributeModifier)) - range += 4; - } - - int row = attachedSteps(world, pos, dir); - if (row >= range) - return PlacementOffset.fail(); - - BlockPos newPos = pos.relative(dir, row + 1); - BlockState newState = world.getBlockState(newPos); - - if (!state.canSurvive(world, newPos)) - return PlacementOffset.fail(); - - if (newState.getMaterial() - .isReplaceable()) - return PlacementOffset.success(newPos, bState -> { - return bState.setValue(FACING, facing) - .setValue(HALF, state.getValue(HALF)); - }); - return PlacementOffset.fail(); - } - } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java index d9f3c04bb..07cb3d6b6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java @@ -9,6 +9,7 @@ import com.simibubi.create.foundation.block.IBE; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; @@ -34,7 +35,7 @@ public class DepotBlock extends Block implements IBE, IWrencha @Override public VoxelShape getShape(BlockState p_220053_1_, BlockGetter p_220053_2_, BlockPos p_220053_3_, CollisionContext p_220053_4_) { - return AllShapes.DEPOT; + return AllShapes.CASING_13PX.get(Direction.UP); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java index f55f02348..d8b9e7008 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java @@ -42,7 +42,7 @@ public class EjectorBlock extends HorizontalKineticBlock implements IBE i == 0 ? "*" : String.valueOf(i)) - .onlyActiveWhen(() -> state == State.CHARGED); + maxStackSize = + new ScrollValueBehaviour(Lang.translateDirect("weighted_ejector.stack_size"), this, new EjectorSlot()) + .between(0, 64) + .withFormatter(i -> i == 0 ? "*" : String.valueOf(i)); behaviours.add(maxStackSize); depotBehaviour.maxStackSize = () -> maxStackSize.getValue(); @@ -167,7 +167,8 @@ public class EjectorBlockEntity extends KineticBlockEntity { if (launcher.getHorizontalDistance() * launcher.getHorizontalDistance() + launcher.getVerticalDistance() * launcher.getVerticalDistance() >= 25 * 25) - AllPackets.getChannel().sendToServer(new EjectorAwardPacket(worldPosition)); + AllPackets.getChannel() + .sendToServer(new EjectorAwardPacket(worldPosition)); if (!(playerEntity.getItemBySlot(EquipmentSlot.CHEST) .getItem() instanceof ElytraItem)) @@ -178,7 +179,8 @@ public class EjectorBlockEntity extends KineticBlockEntity { playerEntity.setDeltaMovement(playerEntity.getDeltaMovement() .scale(.75f)); deployElytra(playerEntity); - AllPackets.getChannel().sendToServer(new EjectorElytraPacket(worldPosition)); + AllPackets.getChannel() + .sendToServer(new EjectorElytraPacket(worldPosition)); } if (doLogic) { @@ -469,7 +471,7 @@ public class EjectorBlockEntity extends KineticBlockEntity { return launcher.getGlobalVelocity(time, getFacing().getOpposite(), worldPosition) .scale(.5f); } - + @Override public void destroy() { super.destroy(); @@ -613,15 +615,21 @@ public class EjectorBlockEntity extends KineticBlockEntity { } - private static class EjectorSlot extends ValueBoxTransform.Sided { + private class EjectorSlot extends ValueBoxTransform.Sided { @Override protected Vec3 getLocalOffset(BlockState state) { - return new Vec3(.5, 13 / 16f, .5).add(VecHelper.rotate(new Vec3(0, 0, -.3), angle(state), Axis.Y)); + if (direction != Direction.UP) + return super.getLocalOffset(state); + return new Vec3(.5, 10.5 / 16f, .5).add(VecHelper.rotate(VecHelper.voxelSpace(0, 0, -5), angle(state), Axis.Y)); } @Override protected void rotate(BlockState state, PoseStack ms) { + if (direction != Direction.UP) { + super.rotate(state, ms); + return; + } TransformStack.cast(ms) .rotateY(angle(state)) .rotateX(90); @@ -636,17 +644,14 @@ public class EjectorBlockEntity extends KineticBlockEntity { @Override protected boolean isSideActive(BlockState state, Direction direction) { - return direction == Direction.UP; - } - - @Override - protected float getScale() { - return 0.2f; + return direction.getAxis() == state.getValue(EjectorBlock.HORIZONTAL_FACING) + .getAxis() + || direction == Direction.UP && EjectorBlockEntity.this.state != EjectorBlockEntity.State.CHARGED; } @Override protected Vec3 getSouthLocation() { - return Vec3.ZERO; + return direction == Direction.UP ? Vec3.ZERO : VecHelper.voxelSpace(8, 6, 15.5); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java index 258bc4da1..6797b063d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java @@ -18,6 +18,7 @@ import org.apache.commons.lang3.mutable.MutableDouble; import org.apache.commons.lang3.mutable.MutableObject; import com.simibubi.create.Create; +import com.simibubi.create.content.logistics.trains.BezierConnection; import com.simibubi.create.content.logistics.trains.DimensionPalette; import com.simibubi.create.content.logistics.trains.TrackEdge; import com.simibubi.create.content.logistics.trains.TrackGraph; @@ -200,6 +201,20 @@ public class Navigation { return false; }, (distance, edge) -> { + BezierConnection turn = edge.getTurn(); + double vDistance = Math.abs(turn.starts.getFirst().y - turn.starts.getSecond().y); + + // ignore turn if its a straight & mild slope + if (turn != null && vDistance > 1 / 16f) { + if (turn.axes.getFirst() + .multiply(1, 0, 1) + .distanceTo(turn.axes.getSecond() + .multiply(1, 0, 1) + .scale(-1)) < 1 / 64f + && vDistance / turn.getLength() < .225f) + return; + } + float current = curveDistanceTracker.floatValue(); if (current == -1 || distance < current) curveDistanceTracker.setValue(distance); @@ -251,7 +266,7 @@ public class Navigation { return; } } - + topSpeed *= train.throttle; double turnTopSpeed = Math.min(topSpeed, train.maxTurnSpeed()); @@ -579,7 +594,7 @@ public class Navigation { .get(initialNode2); if (initialEdge == null) return; - + double distanceToNode2 = forward ? initialEdge.getLength() - startingPoint.position : startingPoint.position; frontier.add(new FrontierEntry(distanceToNode2, 0, initialNode1, initialNode2, initialEdge)); diff --git a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java index 3990f5794..4223da307 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java @@ -1,9 +1,12 @@ package com.simibubi.create.content.schematics.block; +import java.util.Arrays; import java.util.Optional; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; +import com.simibubi.create.content.contraptions.relays.belt.BeltBlockEntity; +import com.simibubi.create.content.contraptions.relays.belt.BeltBlockEntity.CasingType; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem; @@ -15,6 +18,7 @@ import net.minecraft.core.Direction.Axis; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.ItemStack; @@ -126,6 +130,7 @@ public abstract class LaunchedItem { public static class ForBelt extends ForBlockState { public int length; + public CasingType[] casings; public ForBelt() {} @@ -133,18 +138,27 @@ public abstract class LaunchedItem { public CompoundTag serializeNBT() { CompoundTag serializeNBT = super.serializeNBT(); serializeNBT.putInt("Length", length); + serializeNBT.putIntArray("Casing", Arrays.stream(casings) + .map(CasingType::ordinal) + .toList()); return serializeNBT; } @Override void readNBT(CompoundTag nbt) { length = nbt.getInt("Length"); + int[] intArray = nbt.getIntArray("Casing"); + casings = new CasingType[length]; + for (int i = 0; i < casings.length; i++) + casings[i] = i >= intArray.length ? CasingType.NONE + : CasingType.values()[Mth.clamp(intArray[i], 0, CasingType.values().length - 1)]; super.readNBT(nbt); } - public ForBelt(BlockPos start, BlockPos target, ItemStack stack, BlockState state, int length) { + public ForBelt(BlockPos start, BlockPos target, ItemStack stack, BlockState state, CasingType[] casings) { super(start, target, stack, state, null); - this.length = length; + this.casings = casings; + this.length = casings.length; } @Override @@ -160,6 +174,15 @@ public abstract class LaunchedItem { .setValue(AbstractSimpleShaftBlock.AXIS, axis)); BeltConnectorItem.createBelts(world, target, target.offset(offset.getX() * i, offset.getY() * i, offset.getZ() * i)); + + for (int segment = 0; segment < length; segment++) { + if (casings[segment] == CasingType.NONE) + continue; + BlockPos casingTarget = + target.offset(offset.getX() * segment, offset.getY() * segment, offset.getZ() * segment); + if (world.getBlockEntity(casingTarget) instanceof BeltBlockEntity bbe) + bbe.setCasingType(casings[segment]); + } } } diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlockEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlockEntity.java index 33e94bf4f..9bc633855 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlockEntity.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.schematics.block; +import java.util.Arrays; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -12,6 +13,8 @@ import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltBlockEntity; +import com.simibubi.create.content.contraptions.relays.belt.BeltBlockEntity.CasingType; +import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; import com.simibubi.create.content.contraptions.relays.elementary.AbstractSimpleShaftBlock; @@ -741,38 +744,55 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP return blockState; return AllBlocks.SHAFT.getDefaultState() - .setValue(AbstractSimpleShaftBlock.AXIS, slope == BeltSlope.SIDEWAYS ? Axis.Y : - facing.getClockWise() + .setValue(AbstractSimpleShaftBlock.AXIS, slope == BeltSlope.SIDEWAYS ? Axis.Y + : facing.getClockWise() .getAxis()); } protected void launchBlockOrBelt(BlockPos target, ItemStack icon, BlockState blockState, BlockEntity blockEntity) { if (AllBlocks.BELT.has(blockState)) { blockState = stripBeltIfNotLast(blockState); - if (blockEntity instanceof BeltBlockEntity && AllBlocks.BELT.has(blockState)) - launchBelt(target, blockState, ((BeltBlockEntity) blockEntity).beltLength); - else if (blockState != Blocks.AIR.defaultBlockState()) - launchBlock(target, icon, blockState, null); - } else { - CompoundTag data = null; - if (blockEntity != null) { - if (AllBlockTags.SAFE_NBT.matches(blockState)) { - data = blockEntity.saveWithFullMetadata(); - data = NBTProcessors.process(blockEntity, data, true); - } else if (blockEntity instanceof IPartialSafeNBT) { - data = new CompoundTag(); - ((IPartialSafeNBT) blockEntity).writeSafe(data); - data = NBTProcessors.process(blockEntity, data, true); + if (blockEntity instanceof BeltBlockEntity bbe && AllBlocks.BELT.has(blockState)) { + CasingType[] casings = new CasingType[bbe.beltLength]; + Arrays.fill(casings, CasingType.NONE); + BlockPos currentPos = target; + for (int i = 0; i < bbe.beltLength; i++) { + BlockState currentState = bbe.getLevel() + .getBlockState(currentPos); + if (!(currentState.getBlock() instanceof BeltBlock)) + break; + if (!(bbe.getLevel() + .getBlockEntity(currentPos) instanceof BeltBlockEntity beltAtSegment)) + break; + casings[i] = beltAtSegment.casing; + currentPos = BeltBlock.nextSegmentPosition(currentState, currentPos, + blockState.getValue(BeltBlock.PART) != BeltPart.END); } - } - launchBlock(target, icon, blockState, data); + launchBelt(target, blockState, bbe.beltLength, casings); + } else if (blockState != Blocks.AIR.defaultBlockState()) + launchBlock(target, icon, blockState, null); + return; } + + CompoundTag data = null; + if (blockEntity != null) { + if (AllBlockTags.SAFE_NBT.matches(blockState)) { + data = blockEntity.saveWithFullMetadata(); + data = NBTProcessors.process(blockEntity, data, true); + } else if (blockEntity instanceof IPartialSafeNBT) { + data = new CompoundTag(); + ((IPartialSafeNBT) blockEntity).writeSafe(data); + data = NBTProcessors.process(blockEntity, data, true); + } + } + + launchBlock(target, icon, blockState, data); } - protected void launchBelt(BlockPos target, BlockState state, int length) { + protected void launchBelt(BlockPos target, BlockState state, int length, CasingType[] casings) { blocksPlaced++; ItemStack connector = AllItems.BELT_CONNECTOR.asStack(); - flyingBlocks.add(new LaunchedItem.ForBelt(this.getBlockPos(), target, connector, state, length)); + flyingBlocks.add(new LaunchedItem.ForBelt(this.getBlockPos(), target, connector, state, casings)); playFiringSound(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index 69daac06b..279c4c661 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -180,6 +180,7 @@ public class BuilderTransformers { String encasedSuffix = "_encased_cogwheel_side" + (large ? "_connected" : ""); String blockFolder = large ? "encased_large_cogwheel" : "encased_cogwheel"; String wood = casing.equals("brass") ? "dark_oak" : "spruce"; + String gearbox = casing.equals("brass") ? "brass_gearbox" : "gearbox"; return encasedBase(b, drop).addLayer(() -> RenderType::cutoutMipped) .onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, casingShift.get(), (s, f) -> f.getAxis() == s.getValue(EncasedCogwheelBlock.AXIS) @@ -192,12 +193,15 @@ public class BuilderTransformers { return p.models() .withExistingParent(modelName, p.modLoc("block/" + blockFolder + "/block" + suffix)) .texture("casing", Create.asResource("block/" + casing + "_casing")) + .texture("particle", Create.asResource("block/" + casing + "_casing")) + .texture("4", Create.asResource("block/" + gearbox)) .texture("1", new ResourceLocation("block/stripped_" + wood + "_log_top")) .texture("side", Create.asResource("block/" + casing + encasedSuffix)); }, false)) .item() .model((c, p) -> p.withExistingParent(c.getName(), p.modLoc("block/" + blockFolder + "/item")) .texture("casing", Create.asResource("block/" + casing + "_casing")) + .texture("particle", Create.asResource("block/" + casing + "_casing")) .texture("1", new ResourceLocation("block/stripped_" + wood + "_log_top")) .texture("side", Create.asResource("block/" + casing + encasedSuffix))) .build(); @@ -365,12 +369,10 @@ public class BuilderTransformers { } public static NonNullUnaryOperator> bearing(String prefix, - String backTexture, boolean woodenTop) { + String backTexture) { ResourceLocation baseBlockModelLocation = Create.asResource("block/bearing/block"); ResourceLocation baseItemModelLocation = Create.asResource("block/bearing/item"); - ResourceLocation topTextureLocation = Create.asResource("block/bearing_top" + (woodenTop ? "_wooden" : "")); - ResourceLocation nookTextureLocation = - Create.asResource("block/" + (woodenTop ? "andesite" : "brass") + "_casing"); + ResourceLocation topTextureLocation = Create.asResource("block/bearing_top"); ResourceLocation sideTextureLocation = Create.asResource("block/" + prefix + "_bearing_side"); ResourceLocation backTextureLocation = Create.asResource("block/" + backTexture); return b -> b.initialProperties(SharedProperties::stone) @@ -378,7 +380,6 @@ public class BuilderTransformers { .blockstate((c, p) -> p.directionalBlock(c.get(), p.models() .withExistingParent(c.getName(), baseBlockModelLocation) .texture("side", sideTextureLocation) - .texture("nook", nookTextureLocation) .texture("back", backTextureLocation))) .item() .model((c, p) -> p.withExistingParent(c.getName(), baseItemModelLocation) diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index b093f4f30..9e5ce909d 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -245,10 +245,7 @@ public class BlockHelper { if (state.hasProperty(BlockStateProperties.WATERLOGGED)) state = state.setValue(BlockStateProperties.WATERLOGGED, Boolean.FALSE); - if (AllBlocks.BELT.has(state)) { - world.setBlock(target, state, 2); - return; - } else if (state.getBlock() == Blocks.COMPOSTER) + if (state.getBlock() == Blocks.COMPOSTER) state = Blocks.COMPOSTER.defaultBlockState(); else if (state.getBlock() != Blocks.SEA_PICKLE && state.getBlock() instanceof IPlantable) state = ((IPlantable) state.getBlock()).getPlant(world, target); @@ -273,6 +270,8 @@ public class BlockHelper { if (state.getBlock() instanceof BaseRailBlock) { placeRailWithoutUpdate(world, state, target); + } else if (AllBlocks.BELT.has(state)) { + world.setBlock(target, state, 2); } else { world.setBlock(target, state, 18); } diff --git a/src/main/resources/assets/create/models/block/bearing/block.json b/src/main/resources/assets/create/models/block/bearing/block.json index 2aad3bb42..15d53e03e 100644 --- a/src/main/resources/assets/create/models/block/bearing/block.json +++ b/src/main/resources/assets/create/models/block/bearing/block.json @@ -2,23 +2,9 @@ "textures": { "particle": "#side", "gearbox": "#back", - "bearing_side": "#side", - "brass_casing": "#nook" + "bearing_side": "#side" }, "elements": [ - { - "name": "Indicator", - "from": [ 6, 10, 16 ], - "to": [ 10, 12, 17 ], - "faces": { - "north": { "texture": "#brass_casing", "uv": [ 3, 0, 7, 2 ] }, - "east": { "texture": "#brass_casing", "uv": [ 7, 14, 8, 16 ] }, - "south": { "texture": "#brass_casing", "uv": [ 6, 14, 10, 16 ] }, - "west": { "texture": "#brass_casing", "uv": [ 8, 14, 9, 16 ] }, - "up": { "texture": "#brass_casing", "uv": [ 6, 1, 10, 2 ] }, - "down": { "texture": "#brass_casing", "uv": [ 6, 0, 10, 1 ] } - } - }, { "name": "Side", "from": [ 0, 0, 0 ], diff --git a/src/main/resources/assets/create/models/block/bearing/top.json b/src/main/resources/assets/create/models/block/bearing/top.json index fe1c7ecf9..aa004a1ae 100644 --- a/src/main/resources/assets/create/models/block/bearing/top.json +++ b/src/main/resources/assets/create/models/block/bearing/top.json @@ -3,22 +3,9 @@ "textures": { "bearing_top": "create:block/bearing_top", "particle": "create:block/mechanical_bearing_side", - "bearing_side": "create:block/mechanical_bearing_side", - "brass_casing": "create:block/brass_block" + "bearing_side": "create:block/mechanical_bearing_side" }, "elements": [ - { - "name": "Cube", - "from": [6, 12, 16], - "to": [10, 14, 17], - "faces": { - "east": {"uv": [10, 9, 11, 11], "texture": "#brass_casing"}, - "south": {"uv": [6, 9, 10, 11], "texture": "#brass_casing"}, - "west": {"uv": [5, 9, 6, 11], "texture": "#brass_casing"}, - "up": {"uv": [6, 8, 10, 9], "texture": "#brass_casing"}, - "down": {"uv": [6, 11, 10, 12], "texture": "#brass_casing"} - } - }, { "name": "Top", "from": [0, 12, 0], diff --git a/src/main/resources/assets/create/models/block/bearing/top_wooden.json b/src/main/resources/assets/create/models/block/bearing/top_wooden.json index 33dddb511..715500cd1 100644 --- a/src/main/resources/assets/create/models/block/bearing/top_wooden.json +++ b/src/main/resources/assets/create/models/block/bearing/top_wooden.json @@ -4,7 +4,6 @@ "textures": { "bearing_top": "create:block/bearing_top", "particle": "create:block/windmill_bearing_side", - "bearing_side": "create:block/windmill_bearing_side", - "brass_casing": "create:block/andesite_casing" + "bearing_side": "create:block/windmill_bearing_side" } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_bottom.json b/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_bottom.json index b5e0f0eeb..60a48f04a 100644 --- a/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_bottom.json +++ b/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_bottom.json @@ -2,7 +2,7 @@ "credit": "Made with Blockbench", "textures": { "1": "block/stripped_spruce_log_top", - "3": "create:block/gearbox", + "4": "create:block/gearbox", "particle": "create:block/andesite_casing", "casing": "create:block/andesite_casing", "side": "create:block/andesite_encased_cogwheel_side_connected" @@ -17,7 +17,7 @@ "south": {"uv": [8, 13, 16, 15.5], "texture": "#side"}, "west": {"uv": [8, 13, 16, 15.5], "texture": "#side"}, "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#3"} + "down": {"uv": [0, 0, 16, 16], "texture": "#4"} } }, { diff --git a/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top.json b/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top.json index a0cee6cf3..50ada7d7b 100644 --- a/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top.json +++ b/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top.json @@ -2,7 +2,7 @@ "credit": "Made with Blockbench", "textures": { "1": "block/stripped_spruce_log_top", - "3": "create:block/gearbox", + "4": "create:block/gearbox", "particle": "create:block/andesite_casing", "casing": "create:block/andesite_casing", "side": "create:block/andesite_encased_cogwheel_side_connected" @@ -28,7 +28,7 @@ "east": {"uv": [8, 8.5, 16, 11], "texture": "#side"}, "south": {"uv": [8, 8.5, 16, 11], "texture": "#side"}, "west": {"uv": [8, 8.5, 16, 11], "texture": "#side"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#4"}, "down": {"uv": [0, 0, 16, 16], "texture": "#1"} } }, diff --git a/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top_bottom.json b/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top_bottom.json index 59bab6609..ce7c72f33 100644 --- a/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top_bottom.json +++ b/src/main/resources/assets/create/models/block/encased_large_cogwheel/block_top_bottom.json @@ -2,7 +2,7 @@ "credit": "Made with Blockbench", "textures": { "1": "block/stripped_spruce_log_top", - "3": "create:block/gearbox", + "4": "create:block/gearbox", "particle": "create:block/andesite_casing", "casing": "create:block/andesite_casing", "side": "create:block/andesite_encased_cogwheel_side_connected" @@ -17,7 +17,7 @@ "south": {"uv": [8, 13, 16, 15.5], "texture": "#side"}, "west": {"uv": [8, 13, 16, 15.5], "texture": "#side"}, "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#3"} + "down": {"uv": [0, 0, 16, 16], "texture": "#4"} } }, { @@ -28,7 +28,7 @@ "east": {"uv": [8, 8.5, 16, 11], "texture": "#side"}, "south": {"uv": [8, 8.5, 16, 11], "texture": "#side"}, "west": {"uv": [8, 8.5, 16, 11], "texture": "#side"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#4"}, "down": {"uv": [0, 0, 16, 16], "texture": "#1"} } }, diff --git a/src/main/resources/assets/create/models/block/gearshift/block.json b/src/main/resources/assets/create/models/block/gearshift/block.json index 3f47d4486..32c841b6c 100644 --- a/src/main/resources/assets/create/models/block/gearshift/block.json +++ b/src/main/resources/assets/create/models/block/gearshift/block.json @@ -8,10 +8,21 @@ "particle": "create:block/gearshift_off" }, "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, { "from": [1.95, 16, 1.95], "to": [14.05, 15, 14.05], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [2, 15, 14, 16], "texture": "#1"}, "east": {"uv": [0, 2, 1, 14], "rotation": 270, "texture": "#1"}, @@ -23,7 +34,6 @@ { "from": [1.95, 1, 1.95], "to": [14.05, 0, 14.05], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [2, 15, 14, 16], "rotation": 180, "texture": "#1"}, "east": {"uv": [15, 2, 16, 14], "rotation": 270, "texture": "#1"}, @@ -31,19 +41,6 @@ "west": {"uv": [0, 2, 1, 14], "rotation": 90, "texture": "#1"}, "down": {"uv": [2, 2, 14, 14], "texture": "#1"} } - }, - { - "from": [0, 0, 0], - "to": [16, 16, 16], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, - "east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, - "south": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, - "west": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#2"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#2"} - } } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/attribute_filter.json b/src/main/resources/assets/create/models/item/attribute_filter.json deleted file mode 100644 index 455e07022..000000000 --- a/src/main/resources/assets/create/models/item/attribute_filter.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "create:item/filter", - "textures": { - "layer0": "create:item/brass_filter", - "particle": "create:item/brass_filter" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/filter.json b/src/main/resources/assets/create/models/item/filter.json deleted file mode 100644 index b9cd9695f..000000000 --- a/src/main/resources/assets/create/models/item/filter.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "builtin/generated", - "textures": { - "particle": "create:item/andesite_filter", - "layer0": "create:item/andesite_filter" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/item/brass_filter.png b/src/main/resources/assets/create/textures/item/attribute_filter.png similarity index 100% rename from src/main/resources/assets/create/textures/item/brass_filter.png rename to src/main/resources/assets/create/textures/item/attribute_filter.png diff --git a/src/main/resources/assets/create/textures/item/andesite_filter.png b/src/main/resources/assets/create/textures/item/filter.png similarity index 100% rename from src/main/resources/assets/create/textures/item/andesite_filter.png rename to src/main/resources/assets/create/textures/item/filter.png