Merge branch 'mc1.15/dev' into mc1.16/dev

This commit is contained in:
simibubi 2020-12-12 17:42:12 +01:00
commit 7760db875c
35 changed files with 313 additions and 95 deletions

View file

@ -337,7 +337,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json
ab2a1bf8f37f1c64d00538867f4c3a97195bd3c4 assets/create/blockstates/radial_chassis.json
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
@ -1639,20 +1639,20 @@ db8786e15e2ff39523705f4dd2ee4fb2e04d934b data/create/advancements/mechanical_saw
2e253226c408dffb9dfb828b846f70ebd1cfb16e data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_immersiveengineering.json
3f022f89aeb5034f2292ca71daa9f311e8af40ff data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_immersiveengineering.json
b7232d0e659de3f227289a5275f76a5a2ec578bb data/create/advancements/recipes/building_blocks/blasting/ingot_nickel_compat_immersiveengineering.json
1f527bbe24e79f3f149c06dd8be7016eea42b4e9 data/create/advancements/recipes/building_blocks/blasting/ingot_osmium_compat_mekanism.json
bf68b12cf828b64f5bb407bba6cf6ced8578327c data/create/advancements/recipes/building_blocks/blasting/ingot_silver_compat_immersiveengineering.json
fc07b75f81782fa06990c7eb7febc635621df91a data/create/advancements/recipes/building_blocks/blasting/ingot_tin_compat_mekanism.json
84963b1e8eb81dd20df6a9680028f8b76fef2bae data/create/advancements/recipes/building_blocks/blasting/ingot_uranium_compat_immersiveengineering.json
744d8831fde05ee2598ccde10f9289512c45d55b data/create/advancements/recipes/building_blocks/blasting/lead_ingot_compat_mysticalworld.json
4ef0ac97acddee1c49a0deb402b43feb40af1dc6 data/create/advancements/recipes/building_blocks/blasting/lead_ingot_compat_silents_mechanisms.json
25c6e6736da3a529c4cfb384a2dba707f946ce22 data/create/advancements/recipes/building_blocks/blasting/lead_ingot_compat_thermal.json
6a7c767957b8c1827ad58210b37321a2a6bb4018 data/create/advancements/recipes/building_blocks/blasting/nickel_ingot_compat_silents_mechanisms.json
e2475d1fad9aaa82e99415a2a5d07a2343ce84a6 data/create/advancements/recipes/building_blocks/blasting/nickel_ingot_compat_thermal.json
075d793d172da2500e591af050176b1d3a0d26aa data/create/advancements/recipes/building_blocks/blasting/osmium_ingot_compat_mekanism.json
f994f545e3a1990448e852c556d94f7eaf9954a0 data/create/advancements/recipes/building_blocks/blasting/platinum_ingot_compat_silents_mechanisms.json
85b1a8c173ca7e5421f9d2bd0f3f997c8431d15c data/create/advancements/recipes/building_blocks/blasting/quicksilver_ingot_compat_mysticalworld.json
9b48187d487ddabcad4f4e4f75b67813f26a746d data/create/advancements/recipes/building_blocks/blasting/silver_ingot_compat_mysticalworld.json
96bf046af4d23dddcca5915cfbfc04a46b0d2912 data/create/advancements/recipes/building_blocks/blasting/silver_ingot_compat_silents_mechanisms.json
96a3efecf663433123861136467d9fa28ea26a1e data/create/advancements/recipes/building_blocks/blasting/silver_ingot_compat_thermal.json
0c12fee4021c8095385f3df008bd187dd0baea0e data/create/advancements/recipes/building_blocks/blasting/tin_ingot_compat_mekanism.json
506ade70e5bcc111323823f195c3abe4869d4c69 data/create/advancements/recipes/building_blocks/blasting/tin_ingot_compat_mysticalworld.json
a75f1162ac89cd50a1ca8e525dd059fb359a6550 data/create/advancements/recipes/building_blocks/blasting/tin_ingot_compat_silents_mechanisms.json
230c3da350aa45524712d5dd28b84aa59b2883e9 data/create/advancements/recipes/building_blocks/blasting/tin_ingot_compat_thermal.json
@ -1665,20 +1665,20 @@ d192e3f2185ad3cd8cd64f639dd6395aaec89563 data/create/advancements/recipes/buildi
43d3d2c952f54fdf73e4df422554451ceff899d3 data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_immersiveengineering.json
48439dd60a0a79f0ab6accc3773a3a8b64b7396e data/create/advancements/recipes/building_blocks/smelting/ingot_lead_compat_immersiveengineering.json
7d8325768f249a1ac5d79d60eb58b6eb32c51234 data/create/advancements/recipes/building_blocks/smelting/ingot_nickel_compat_immersiveengineering.json
c2a565459bc3a2b6aa1770e36295373f886b27b3 data/create/advancements/recipes/building_blocks/smelting/ingot_osmium_compat_mekanism.json
d192714def52e54a58ae96f7592055e925d88bb8 data/create/advancements/recipes/building_blocks/smelting/ingot_silver_compat_immersiveengineering.json
e922be59fa4cb031020041f54d06d361f090e6a8 data/create/advancements/recipes/building_blocks/smelting/ingot_tin_compat_mekanism.json
6f0b67b3f49da5c3102a48e68e6c4f834d08b0e2 data/create/advancements/recipes/building_blocks/smelting/ingot_uranium_compat_immersiveengineering.json
847dc1a0bd2275a11ff02624b98cf7fdf0d8f47b data/create/advancements/recipes/building_blocks/smelting/lead_ingot_compat_mysticalworld.json
79d5f852e9e48e9e8ff5cd42890fbc9ad29e9712 data/create/advancements/recipes/building_blocks/smelting/lead_ingot_compat_silents_mechanisms.json
cdf4697b74e4a6add2ea41825733f4d9ff2b83e6 data/create/advancements/recipes/building_blocks/smelting/lead_ingot_compat_thermal.json
2be47fb3a33a7e92705767eb255d7586de56f4a5 data/create/advancements/recipes/building_blocks/smelting/nickel_ingot_compat_silents_mechanisms.json
6dff1a0b51d7a81d6a4e8f4fd8fa558f9befea1b data/create/advancements/recipes/building_blocks/smelting/nickel_ingot_compat_thermal.json
1cebfdc52bfa34515144e651ba5a6d65e97a57a9 data/create/advancements/recipes/building_blocks/smelting/osmium_ingot_compat_mekanism.json
70d98f34671f09331f6765447b95cd00c3b8d4e5 data/create/advancements/recipes/building_blocks/smelting/platinum_ingot_compat_silents_mechanisms.json
8e5beb04ea241145f4e34320cba1745fd9d386e6 data/create/advancements/recipes/building_blocks/smelting/quicksilver_ingot_compat_mysticalworld.json
60fd25d05bfe101d83e3a13678cca9940665771c data/create/advancements/recipes/building_blocks/smelting/silver_ingot_compat_mysticalworld.json
29685c6f05455faa657cb51433352d005b798cf4 data/create/advancements/recipes/building_blocks/smelting/silver_ingot_compat_silents_mechanisms.json
05b68914ac2fb0da7609a32369bf739e28256e41 data/create/advancements/recipes/building_blocks/smelting/silver_ingot_compat_thermal.json
787158553e0eac72dffffed787d2a2529754e8b0 data/create/advancements/recipes/building_blocks/smelting/tin_ingot_compat_mekanism.json
7677ff00e70a92e9c4b9035b0d706e0c255b7e26 data/create/advancements/recipes/building_blocks/smelting/tin_ingot_compat_mysticalworld.json
e98e6372bb065a0d82f44bea7169e8f40bd40920 data/create/advancements/recipes/building_blocks/smelting/tin_ingot_compat_silents_mechanisms.json
c33e122c534a7a134f69faa36446ce7564d8a705 data/create/advancements/recipes/building_blocks/smelting/tin_ingot_compat_thermal.json
@ -2704,7 +2704,9 @@ d9021504be855cd2d4d91503a82b84233052adb0 data/create/recipes/blasting/gold_ingot
f2307aa01ddf7accb3fe19c4d3f9b46dec1acf97 data/create/recipes/blasting/ingot_aluminum_compat_immersiveengineering.json
8315c188802bd64f7226a9e942be45173112c7ac data/create/recipes/blasting/ingot_lead_compat_immersiveengineering.json
368fd45a8e9d5d2fc0e1f8af1ffb48984b85601c data/create/recipes/blasting/ingot_nickel_compat_immersiveengineering.json
d167828a4fe3a20d765831c1df433fc3c8efeab8 data/create/recipes/blasting/ingot_osmium_compat_mekanism.json
9b5a388f0f8a3a8fae9e6bbf6460913b7c1f6fe7 data/create/recipes/blasting/ingot_silver_compat_immersiveengineering.json
7997e66e5e7aebe2c6da764902d78e3bf5f4c530 data/create/recipes/blasting/ingot_tin_compat_mekanism.json
ba7498521a1e07b9bd46ec230d952fb232eaaba0 data/create/recipes/blasting/ingot_uranium_compat_immersiveengineering.json
69cda0f54c47cd44c296608cc379db855602410f data/create/recipes/blasting/iron_ingot_from_crushed.json
65a44735ffa0c3e471a1df30b987d8c3cf1764fc data/create/recipes/blasting/lead_ingot_compat_mysticalworld.json
@ -2712,13 +2714,11 @@ aeb345e5b4c266ac9e2ef6929b153cb535468d01 data/create/recipes/blasting/lead_ingot
606b46f5af59d7bd71462807ceb95edebb09a07e data/create/recipes/blasting/lead_ingot_compat_thermal.json
91691cb14043e8222c38a18bb103f874b39d30b1 data/create/recipes/blasting/nickel_ingot_compat_silents_mechanisms.json
bd26be2cc7044537628e10ff057a7ce78b720025 data/create/recipes/blasting/nickel_ingot_compat_thermal.json
453a6602d70bbd30e13033565eb6ce6fa8fde194 data/create/recipes/blasting/osmium_ingot_compat_mekanism.json
a99be7aae1706cce96a3b6fadd38295bb53d10b7 data/create/recipes/blasting/platinum_ingot_compat_silents_mechanisms.json
3419a88787e331d59e0da8b9084d8c8a72a84ec0 data/create/recipes/blasting/quicksilver_ingot_compat_mysticalworld.json
84b73c8ef561ab0ecc2954cd86160595975811d6 data/create/recipes/blasting/silver_ingot_compat_mysticalworld.json
3ce20049c90fc3ce446efac1d166b5e1b2855980 data/create/recipes/blasting/silver_ingot_compat_silents_mechanisms.json
c49e88f38ad624a56865bb293e2b81da09ebdf37 data/create/recipes/blasting/silver_ingot_compat_thermal.json
3d0c3e23be0d237a37a1c9945a7d0021248ffc50 data/create/recipes/blasting/tin_ingot_compat_mekanism.json
44a31af2877854f1b22691eb9b0dd831f80628f0 data/create/recipes/blasting/tin_ingot_compat_mysticalworld.json
dd44cf0e09b1b34b4d2c254ab3d10d05a02717aa data/create/recipes/blasting/tin_ingot_compat_silents_mechanisms.json
539c30c3c06489815b0a356735a0dd42ac432b26 data/create/recipes/blasting/tin_ingot_compat_thermal.json
@ -3399,7 +3399,9 @@ b032c79090adad2262ae94609e0b3747327d51a2 data/create/recipes/smelting/gold_ingot
5cd79470a32c77fc7347a04ad2096df08769a59f data/create/recipes/smelting/ingot_aluminum_compat_immersiveengineering.json
ce34f496dca15378b5e4b21c70505e9d1184848d data/create/recipes/smelting/ingot_lead_compat_immersiveengineering.json
428b3981a13c63381115384496d89375e3d20837 data/create/recipes/smelting/ingot_nickel_compat_immersiveengineering.json
36a8f88fe3a9b09674bbba99a8f41c8ac5542cdb data/create/recipes/smelting/ingot_osmium_compat_mekanism.json
456ec25989f6d882fc931764341d8217386cf9ab data/create/recipes/smelting/ingot_silver_compat_immersiveengineering.json
d2ab440819e4534f717315b7a737bcc2883072ed data/create/recipes/smelting/ingot_tin_compat_mekanism.json
7ca0d75c667e171f2abc5faeb96ef17282b130ac data/create/recipes/smelting/ingot_uranium_compat_immersiveengineering.json
fe3e4c244c34aa6948243fabd6b42f04f80d4992 data/create/recipes/smelting/iron_ingot_from_crushed.json
4a1e8041f44bb36d29ec624fc78bdfd0ac875953 data/create/recipes/smelting/lead_ingot_compat_mysticalworld.json
@ -3408,7 +3410,6 @@ fe3e4c244c34aa6948243fabd6b42f04f80d4992 data/create/recipes/smelting/iron_ingot
bf0e5df5a88e583e39a4e14b006cbf33b99611e1 data/create/recipes/smelting/limestone.json
6a9ef35f3e5fc37602d887687924547ea77bffcd data/create/recipes/smelting/nickel_ingot_compat_silents_mechanisms.json
76b02e4111687e1013a2ae0d171fb01f5787626f data/create/recipes/smelting/nickel_ingot_compat_thermal.json
18d0f016d3dfa08789438e074626258932404898 data/create/recipes/smelting/osmium_ingot_compat_mekanism.json
86725fc9711c6e7971a4b396aa089ad191089bb3 data/create/recipes/smelting/platinum_ingot_compat_silents_mechanisms.json
92c308baf81fe2c8a63c90b0dfc7cf8cc2183c4b data/create/recipes/smelting/quicksilver_ingot_compat_mysticalworld.json
2c230522bb0946bde6a51442cb15c5efeea99b15 data/create/recipes/smelting/scoria.json
@ -3416,7 +3417,6 @@ f5317c85a9e10a5f9346e13aef8bb364a5203346 data/create/recipes/smelting/scoria_fro
96c2b799b812e469bb1785200d68c1e8f8cfacf7 data/create/recipes/smelting/silver_ingot_compat_mysticalworld.json
21c5fbce648ca8812d4c75e3c71934bc269e2216 data/create/recipes/smelting/silver_ingot_compat_silents_mechanisms.json
c01f5fdef7419a2da5e0f24d61637ec35a006fd1 data/create/recipes/smelting/silver_ingot_compat_thermal.json
85116bc01ff8513f9e3122af0dcd32fbcd645828 data/create/recipes/smelting/tin_ingot_compat_mekanism.json
3e977195d8c825365753eb609e3bccca3302a0a3 data/create/recipes/smelting/tin_ingot_compat_mysticalworld.json
07bc2816c79de888e8f8f5954c6f917f6ab37176 data/create/recipes/smelting/tin_ingot_compat_silents_mechanisms.json
8d6139a5463119f2930476c429c175e14c7c7a58 data/create/recipes/smelting/tin_ingot_compat_thermal.json
@ -3448,8 +3448,8 @@ a43d7c9a6369a48ef7d1396f2c11dc1f3704a61e data/create/recipes/splashing/lime_conc
67d97de29a9075a7ba8edb6e47c997b02600557e data/create/recipes/splashing/limestone.json
862f7b68bb107d7c4ecc82ddd10c788eb0a07b03 data/create/recipes/splashing/magenta_concrete_powder.json
004e05fed3684de8603905d9c9381cbbd789a882 data/create/recipes/splashing/magma_block.json
11e61710da12d73aa86660c1ea208f9533a7882c data/create/recipes/splashing/mekanism/crushed_osmium_ore.json
370c28fb8f2da4fbbb498ee3de11d1d21252957b data/create/recipes/splashing/mekanism/crushed_tin_ore.json
f627573eefe0353b32d7c48abd7dcbcf13613004 data/create/recipes/splashing/mekanism/crushed_osmium_ore.json
a1828cb3c934c4146008d1d10d04adb80a80ac94 data/create/recipes/splashing/mekanism/crushed_tin_ore.json
ea4a295149091e3b4b8388cb9d4dd2ab509d666e data/create/recipes/splashing/mysticalworld/crushed_lead_ore.json
1ecac82da1ccc381e303dc64e8033c13cf66fb59 data/create/recipes/splashing/mysticalworld/crushed_quicksilver_ore.json
fd1751c804bfc156c7bd97955fabb19f9a4b94ec data/create/recipes/splashing/mysticalworld/crushed_silver_ore.json
@ -3506,6 +3506,7 @@ eedf31af7134d03656c5fa57229982f9c5bed07c data/create/tags/blocks/brittle.json
13b55d6e905a02403d2e95e9ba2357f99c5f2241 data/create/tags/blocks/fan_heaters.json
3bc64e3a1e7980237435b1770a9ba2102d57fcd4 data/create/tags/blocks/fan_transparent.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/non_movable.json
c5439249176a869a6d1537da46922d6f6c0c2186 data/create/tags/blocks/safe_nbt.json
c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json

View file

@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:blasting/osmium_ingot_compat_mekanism"
"create:blasting/ingot_osmium_compat_mekanism"
]
},
"criteria": {
@ -19,7 +19,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:blasting/osmium_ingot_compat_mekanism"
"recipe": "create:blasting/ingot_osmium_compat_mekanism"
}
}
},

View file

@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:blasting/tin_ingot_compat_mekanism"
"create:blasting/ingot_tin_compat_mekanism"
]
},
"criteria": {
@ -19,7 +19,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:blasting/tin_ingot_compat_mekanism"
"recipe": "create:blasting/ingot_tin_compat_mekanism"
}
}
},

View file

@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:smelting/osmium_ingot_compat_mekanism"
"create:smelting/ingot_osmium_compat_mekanism"
]
},
"criteria": {
@ -19,7 +19,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:smelting/osmium_ingot_compat_mekanism"
"recipe": "create:smelting/ingot_osmium_compat_mekanism"
}
}
},

View file

@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:smelting/tin_ingot_compat_mekanism"
"create:smelting/ingot_tin_compat_mekanism"
]
},
"criteria": {
@ -19,7 +19,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:smelting/tin_ingot_compat_mekanism"
"recipe": "create:smelting/ingot_tin_compat_mekanism"
}
}
},

View file

@ -3,7 +3,7 @@
"ingredient": {
"item": "create:crushed_osmium_ore"
},
"result": "mekanism:osmium_ingot",
"result": "mekanism:ingot_osmium",
"experience": 0.1,
"cookingtime": 100,
"conditions": [

View file

@ -3,7 +3,7 @@
"ingredient": {
"item": "create:crushed_tin_ore"
},
"result": "mekanism:tin_ingot",
"result": "mekanism:ingot_tin",
"experience": 0.1,
"cookingtime": 100,
"conditions": [

View file

@ -3,7 +3,7 @@
"ingredient": {
"item": "create:crushed_osmium_ore"
},
"result": "mekanism:osmium_ingot",
"result": "mekanism:ingot_osmium",
"experience": 0.1,
"cookingtime": 200,
"conditions": [

View file

@ -3,7 +3,7 @@
"ingredient": {
"item": "create:crushed_tin_ore"
},
"result": "mekanism:tin_ingot",
"result": "mekanism:ingot_tin",
"experience": 0.1,
"cookingtime": 200,
"conditions": [

View file

@ -7,11 +7,11 @@
],
"results": [
{
"item": "mekanism:osmium_nugget",
"item": "mekanism:nugget_osmium",
"count": 10
},
{
"item": "mekanism:osmium_nugget",
"item": "mekanism:nugget_osmium",
"count": 5,
"chance": 0.5
}

View file

@ -7,11 +7,11 @@
],
"results": [
{
"item": "mekanism:tin_nugget",
"item": "mekanism:nugget_tin",
"count": 10
},
{
"item": "mekanism:tin_nugget",
"item": "mekanism:nugget_tin",
"count": 5,
"chance": 0.5
}

View file

@ -0,0 +1,29 @@
{
"replace": false,
"values": [
"create:creative_motor",
"create:creative_fluid_tank",
"create:mechanical_piston",
"create:sticky_mechanical_piston",
"create:mechanical_piston_head",
"create:windmill_bearing",
"create:mechanical_bearing",
"create:clockwork_bearing",
"create:rope_pulley",
"create:cart_assembler",
"create:linear_chassis",
"create:secondary_linear_chassis",
"create:radial_chassis",
"create:sequenced_gearshift",
"create:rotation_speed_controller",
"create:andesite_funnel",
"create:andesite_belt_funnel",
"create:brass_funnel",
"create:brass_belt_funnel",
"create:creative_crate",
"create:redstone_link",
"create:analog_lever",
"create:adjustable_repeater",
"create:adjustable_pulse_repeater"
]
}

View file

@ -321,6 +321,7 @@ public class AllBlocks {
public static final BlockEntry<CreativeMotorBlock> CREATIVE_MOTOR =
REGISTRATE.block("creative_motor", CreativeMotorBlock::new)
.initialProperties(SharedProperties::stone)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(new CreativeMotorGenerator()::generate)
.transform(StressConfigDefaults.setCapacity(16384.0))
.item()
@ -605,6 +606,7 @@ public class AllBlocks {
public static final BlockEntry<FluidTankBlock> CREATIVE_FLUID_TANK =
REGISTRATE.block("creative_fluid_tank", FluidTankBlock::creative)
.initialProperties(SharedProperties::softMetal)
.tag(AllBlockTags.SAFE_NBT.tag)
.properties(Block.Properties::nonOpaque)
.blockstate(new FluidTankGenerator("creative_")::generate)
.onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::creative))
@ -654,11 +656,13 @@ public class AllBlocks {
public static final BlockEntry<MechanicalPistonBlock> MECHANICAL_PISTON =
REGISTRATE.block("mechanical_piston", MechanicalPistonBlock::normal)
.transform(BuilderTransformers.mechanicalPiston(PistonType.DEFAULT))
.tag(AllBlockTags.SAFE_NBT.tag)
.register();
public static final BlockEntry<MechanicalPistonBlock> STICKY_MECHANICAL_PISTON =
REGISTRATE.block("sticky_mechanical_piston", MechanicalPistonBlock::sticky)
.transform(BuilderTransformers.mechanicalPiston(PistonType.STICKY))
.tag(AllBlockTags.SAFE_NBT.tag)
.register();
public static final BlockEntry<PistonExtensionPoleBlock> PISTON_EXTENSION_POLE =
@ -671,6 +675,7 @@ public class AllBlocks {
public static final BlockEntry<MechanicalPistonHeadBlock> MECHANICAL_PISTON_HEAD =
REGISTRATE.block("mechanical_piston_head", MechanicalPistonHeadBlock::new)
.initialProperties(() -> Blocks.PISTON_HEAD)
.tag(AllBlockTags.SAFE_NBT.tag)
.loot((p, b) -> p.registerDropping(b, PISTON_EXTENSION_POLE.get()))
.blockstate((c, p) -> BlockStateGen.directionalBlockIgnoresWaterlogged(c, p, state -> p.models()
.getExistingFile(p.modLoc("block/mechanical_piston/" + state.get(MechanicalPistonHeadBlock.TYPE)
@ -681,12 +686,14 @@ public class AllBlocks {
REGISTRATE.block("windmill_bearing", WindmillBearingBlock::new)
.transform(BuilderTransformers.bearing("windmill", "gearbox", true))
.transform(StressConfigDefaults.setCapacity(512.0))
.tag(AllBlockTags.SAFE_NBT.tag)
.register();
public static final BlockEntry<MechanicalBearingBlock> MECHANICAL_BEARING =
REGISTRATE.block("mechanical_bearing", MechanicalBearingBlock::new)
.transform(BuilderTransformers.bearing("mechanical", "gearbox", false))
.transform(StressConfigDefaults.setImpact(4.0))
.tag(AllBlockTags.SAFE_NBT.tag)
.onRegister(addMovementBehaviour(new StabilizedBearingMovementBehaviour()))
.register();
@ -694,10 +701,12 @@ public class AllBlocks {
REGISTRATE.block("clockwork_bearing", ClockworkBearingBlock::new)
.transform(BuilderTransformers.bearing("clockwork", "brass_gearbox", false))
.transform(StressConfigDefaults.setImpact(4.0))
.tag(AllBlockTags.SAFE_NBT.tag)
.register();
public static final BlockEntry<PulleyBlock> ROPE_PULLEY = REGISTRATE.block("rope_pulley", PulleyBlock::new)
.initialProperties(SharedProperties::stone)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.horizontalAxisBlockProvider(true))
.transform(StressConfigDefaults.setImpact(4.0))
.item()
@ -726,7 +735,7 @@ public class AllBlocks {
.properties(AbstractBlock.Properties::nonOpaque)
.blockstate(BlockStateGen.cartAssembler())
.addLayer(() -> RenderType::getCutoutMipped)
.tag(BlockTags.RAILS)
.tag(BlockTags.RAILS, AllBlockTags.SAFE_NBT.tag)
.item(CartAssemblerBlockItem::new)
.transform(customItemModel())
.register();
@ -766,6 +775,7 @@ public class AllBlocks {
public static final BlockEntry<LinearChassisBlock> LINEAR_CHASSIS =
REGISTRATE.block("linear_chassis", LinearChassisBlock::new)
.initialProperties(SharedProperties::wooden)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.linearChassis())
.onRegister(connectedTextures(new ChassisCTBehaviour()))
.lang("Linear Chassis")
@ -775,6 +785,7 @@ public class AllBlocks {
public static final BlockEntry<LinearChassisBlock> SECONDARY_LINEAR_CHASSIS =
REGISTRATE.block("secondary_linear_chassis", LinearChassisBlock::new)
.initialProperties(SharedProperties::wooden)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.linearChassis())
.onRegister(connectedTextures(new ChassisCTBehaviour()))
.simpleItem()
@ -783,6 +794,7 @@ public class AllBlocks {
public static final BlockEntry<RadialChassisBlock> RADIAL_CHASSIS =
REGISTRATE.block("radial_chassis", RadialChassisBlock::new)
.initialProperties(SharedProperties::wooden)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.radialChassis())
.item()
.model((c, p) -> {
@ -969,6 +981,7 @@ public class AllBlocks {
public static final BlockEntry<SequencedGearshiftBlock> SEQUENCED_GEARSHIFT =
REGISTRATE.block("sequenced_gearshift", SequencedGearshiftBlock::new)
.initialProperties(SharedProperties::stone)
.tag(AllBlockTags.SAFE_NBT.tag)
.properties(AbstractBlock.Properties::nonOpaque)
.transform(StressConfigDefaults.setNoImpact())
.blockstate(new SequencedGearshiftGenerator()::generate)
@ -998,6 +1011,7 @@ public class AllBlocks {
public static final BlockEntry<SpeedControllerBlock> ROTATION_SPEED_CONTROLLER =
REGISTRATE.block("rotation_speed_controller", SpeedControllerBlock::new)
.initialProperties(SharedProperties::softMetal)
.tag(AllBlockTags.SAFE_NBT.tag)
.transform(StressConfigDefaults.setNoImpact())
.blockstate(BlockStateGen.horizontalAxisBlockProvider(true))
.item()
@ -1025,6 +1039,7 @@ public class AllBlocks {
public static final BlockEntry<AndesiteFunnelBlock> ANDESITE_FUNNEL =
REGISTRATE.block("andesite_funnel", AndesiteFunnelBlock::new)
.initialProperties(SharedProperties::stone)
.tag(AllBlockTags.SAFE_NBT.tag)
.onRegister(addMovementBehaviour(FunnelMovementBehaviour.andesite()))
.transform(BuilderTransformers.funnel("andesite", Create.asResource("block/andesite_casing")))
.register();
@ -1032,6 +1047,7 @@ public class AllBlocks {
public static final BlockEntry<AndesiteBeltFunnelBlock> ANDESITE_BELT_FUNNEL =
REGISTRATE.block("andesite_belt_funnel", AndesiteBeltFunnelBlock::new)
.initialProperties(SharedProperties::stone)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(new BeltFunnelGenerator("andesite", new ResourceLocation("block/polished_andesite"))::generate)
.loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get()))
.register();
@ -1039,6 +1055,7 @@ public class AllBlocks {
public static final BlockEntry<BrassFunnelBlock> BRASS_FUNNEL =
REGISTRATE.block("brass_funnel", BrassFunnelBlock::new)
.initialProperties(SharedProperties::softMetal)
.tag(AllBlockTags.SAFE_NBT.tag)
.onRegister(addMovementBehaviour(FunnelMovementBehaviour.brass()))
.transform(BuilderTransformers.funnel("brass", Create.asResource("block/brass_casing")))
.register();
@ -1046,6 +1063,7 @@ public class AllBlocks {
public static final BlockEntry<BrassBeltFunnelBlock> BRASS_BELT_FUNNEL =
REGISTRATE.block("brass_belt_funnel", BrassBeltFunnelBlock::new)
.initialProperties(SharedProperties::softMetal)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(new BeltFunnelGenerator("brass", Create.asResource("block/brass_block"))::generate)
.loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get()))
.register();
@ -1094,6 +1112,7 @@ public class AllBlocks {
public static final BlockEntry<CreativeCrateBlock> CREATIVE_CRATE =
REGISTRATE.block("creative_crate", CreativeCrateBlock::new)
.transform(BuilderTransformers.crate("creative"))
.tag(AllBlockTags.SAFE_NBT.tag)
.register();
public static final BlockEntry<NixieTubeBlock> NIXIE_TUBE = REGISTRATE.block("nixie_tube", NixieTubeBlock::new)
@ -1108,7 +1127,7 @@ public class AllBlocks {
public static final BlockEntry<RedstoneLinkBlock> REDSTONE_LINK =
REGISTRATE.block("redstone_link", RedstoneLinkBlock::new)
.initialProperties(SharedProperties::wooden)
.tag(AllBlockTags.BRITTLE.tag)
.tag(AllBlockTags.BRITTLE.tag, AllBlockTags.SAFE_NBT.tag)
.blockstate(new RedstoneLinkGenerator()::generate)
.addLayer(() -> RenderType::getCutoutMipped)
.item()
@ -1118,6 +1137,7 @@ public class AllBlocks {
public static final BlockEntry<AnalogLeverBlock> ANALOG_LEVER =
REGISTRATE.block("analog_lever", AnalogLeverBlock::new)
.initialProperties(() -> Blocks.LEVER)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate((c, p) -> p.horizontalFaceBlock(c.get(), AssetLookup.partialBaseModel(c, p)))
.item()
.transform(customItemModel())
@ -1135,6 +1155,7 @@ public class AllBlocks {
public static final BlockEntry<AdjustableRepeaterBlock> ADJUSTABLE_REPEATER =
REGISTRATE.block("adjustable_repeater", AdjustableRepeaterBlock::new)
.initialProperties(() -> Blocks.REPEATER)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(new AdjustableRepeaterGenerator()::generate)
.item()
.model(AbstractDiodeGenerator.diodeItemModel(true))
@ -1144,6 +1165,7 @@ public class AllBlocks {
public static final BlockEntry<AdjustableRepeaterBlock> ADJUSTABLE_PULSE_REPEATER =
REGISTRATE.block("adjustable_pulse_repeater", AdjustableRepeaterBlock::new)
.initialProperties(() -> Blocks.REPEATER)
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(new AdjustableRepeaterGenerator()::generate)
.addLayer(() -> RenderType::getCutoutMipped)
.item()

View file

@ -1,9 +1,9 @@
package com.simibubi.create;
import static com.simibubi.create.AllTags.NameSpace.FORGE;
import static com.simibubi.create.AllTags.NameSpace.MC;
import static com.simibubi.create.AllTags.NameSpace.MOD;
import static com.simibubi.create.AllTags.NameSpace.TIC;
import static com.simibubi.create.AllTags.NameSpace.MC;
import java.util.function.Function;
@ -24,8 +24,8 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ITag;
import net.minecraft.tags.FluidTags;
import net.minecraft.tags.ITag;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.ModList;
@ -115,7 +115,7 @@ public class AllTags {
}
public static enum AllBlockTags {
WINDMILL_SAILS, FAN_HEATERS, WINDOWABLE, NON_MOVABLE, BRITTLE, SEATS, SAILS, VALVE_HANDLES, FAN_TRANSPARENT, SLIMY_LOGS(TIC), BEACON_BASE_BLOCKS(MC)
WINDMILL_SAILS, FAN_HEATERS, WINDOWABLE, NON_MOVABLE, BRITTLE, SEATS, SAILS, VALVE_HANDLES, FAN_TRANSPARENT, SAFE_NBT, SLIMY_LOGS(TIC), BEACON_BASE_BLOCKS(MC)
;

View file

@ -75,7 +75,7 @@ public class BlockMovementTraits {
return true;
if (blockState.getBlockHardness(world, pos) == -1)
return false;
if (AllBlockTags.NON_MOVABLE.tag.contains(block))
if (AllBlockTags.NON_MOVABLE.matches(blockState))
return false;
// Move controllers only when they aren't moving

View file

@ -6,7 +6,6 @@ import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes;
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
import net.minecraft.client.renderer.FaceDirection;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;

View file

@ -3,8 +3,6 @@ package com.simibubi.create.content.contraptions.fluids.recipe;
import java.util.ArrayList;
import java.util.List;
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
import net.minecraft.client.resources.ReloadListener;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

View file

@ -156,8 +156,8 @@ public class ProcessingRecipeBuilder<T extends ProcessingRecipe<?>> {
return this;
}
public ProcessingRecipeBuilder<T> output(float chance, String modId, String registryName, int amount) {
params.results.add(new ProcessingOutput(Pair.of(new ResourceLocation(modId, registryName), amount), chance));
public ProcessingRecipeBuilder<T> output(float chance, ResourceLocation registryName, int amount) {
params.results.add(new ProcessingOutput(Pair.of(registryName, amount), chance));
return this;
}

View file

@ -8,7 +8,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.function.Function;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.BeltSlope;

View file

@ -1,8 +1,9 @@
package com.simibubi.create.content.curiosities.zapper;
import java.util.Objects;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.networking.NbtPacket;
import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.foundation.utility.BlockHelper;
import net.minecraft.block.BlockState;
@ -12,8 +13,8 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.StairsShape;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
@ -21,30 +22,21 @@ import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceContext.BlockMode;
import net.minecraft.util.math.RayTraceContext.FluidMode;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber(value = Dist.CLIENT)
@EventBusSubscriber
public class ZapperInteractionHandler {
@SubscribeEvent
public static void leftClickingTheZapperSelectsANewBlock(PlayerInteractEvent.LeftClickEmpty event) {
ItemStack heldItem = event.getPlayer()
.getHeldItemMainhand();
if (heldItem.getItem() instanceof ZapperItem && trySelect(heldItem, event.getPlayer()))
AllPackets.channel.sendToServer(new NbtPacket(heldItem, Hand.MAIN_HAND));
}
@SubscribeEvent
public static void leftClickingBlocksWithTheZapperSelectsTheBlock(PlayerInteractEvent.LeftClickBlock event) {
ItemStack heldItem = event.getPlayer()
.getHeldItemMainhand();
if (event.getWorld().isRemote)
return;
ItemStack heldItem = event.getPlayer().getHeldItemMainhand();
if (heldItem.getItem() instanceof ZapperItem && trySelect(heldItem, event.getPlayer())) {
event.setCancellationResult(ActionResultType.FAIL);
event.setCanceled(true);
AllPackets.channel.sendToServer(new NbtPacket(heldItem, Hand.MAIN_HAND));
}
}
@ -68,7 +60,7 @@ public class ZapperInteractionHandler {
if (BlockHelper.getRequiredItem(newState)
.isEmpty())
return false;
if (player.world.getTileEntity(pos) != null)
if (newState.hasTileEntity() && !AllBlockTags.SAFE_NBT.matches(newState))
return false;
if (BlockHelper.hasBlockStateProperty(newState, BlockStateProperties.DOUBLE_BLOCK_HALF))
return false;
@ -85,14 +77,31 @@ public class ZapperInteractionHandler {
if (BlockHelper.hasBlockStateProperty(newState, BlockStateProperties.WATERLOGGED))
newState = newState.with(BlockStateProperties.WATERLOGGED, false);
CompoundNBT data = null;
TileEntity tile = player.world.getTileEntity(pos);
if (tile != null) {
data = tile.write(new CompoundNBT());
data.remove("x");
data.remove("y");
data.remove("z");
data.remove("id");
}
CompoundNBT tag = stack.getOrCreateTag();
if (tag.contains("BlockUsed") && NBTUtil.readBlockState(stack.getTag()
.getCompound("BlockUsed")) == newState)
if (tag.contains("BlockUsed")
&& NBTUtil.readBlockState(
stack.getTag().getCompound("BlockUsed")) == newState
&& Objects.equals(data, tag.get("BlockData"))) {
return false;
}
tag.put("BlockUsed", NBTUtil.writeBlockState(newState));
player.world.playSound(player, player.getBlockPos(), AllSoundEvents.BLOCKZAPPER_CONFIRM.get(),
if (data == null)
tag.remove("BlockData");
else
tag.put("BlockData", data);
player.world.playSound(null, player.getBlockPos(), AllSoundEvents.BLOCKZAPPER_CONFIRM.get(),
SoundCategory.BLOCKS, 0.5f, 0.8f);
return true;
}

View file

@ -5,6 +5,7 @@ import java.util.List;
import javax.annotation.Nonnull;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.BlockHelper;
@ -23,6 +24,7 @@ import net.minecraft.item.Rarity;
import net.minecraft.item.UseAction;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
@ -40,6 +42,7 @@ import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.util.Constants.NBT;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.network.PacketDistributor;
@ -150,6 +153,10 @@ public abstract class ZapperItem extends Item {
if (nbt.contains("BlockUsed"))
stateToUse = NBTUtil.readBlockState(nbt.getCompound("BlockUsed"));
stateToUse = BlockHelper.setZeroAge(stateToUse);
CompoundNBT data = null;
if (AllBlockTags.SAFE_NBT.matches(stateToUse) && nbt.contains("BlockData", NBT.TAG_COMPOUND)) {
data = nbt.getCompound("BlockData");
}
// Raytrace - Find the target
Vector3d start = player.getPositionVec()
@ -182,7 +189,7 @@ public abstract class ZapperItem extends Item {
}
// Server side
if (activate(world, player, item, stateToUse, raytrace)) {
if (activate(world, player, item, stateToUse, raytrace, data)) {
applyCooldown(player, item, gunInOtherHand);
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> player),
new ZapperBeamPacket(barrelPos, raytrace.getHitVec(), hand, false));
@ -201,7 +208,7 @@ public abstract class ZapperItem extends Item {
}
protected abstract boolean activate(World world, PlayerEntity player, ItemStack item, BlockState stateToUse,
BlockRayTraceResult raytrace);
BlockRayTraceResult raytrace, CompoundNBT data);
@OnlyIn(Dist.CLIENT)
protected abstract void openHandgunGUI(ItemStack item, boolean b);
@ -235,4 +242,16 @@ public abstract class ZapperItem extends Item {
return UseAction.NONE;
}
public static void setTileData(World world, BlockPos pos, CompoundNBT data) {
if (data != null) {
TileEntity tile = world.getTileEntity(pos);
if (tile != null && !tile.onlyOpsCanSetNbt()) {
data.putInt("x", pos.getX());
data.putInt("y", pos.getY());
data.putInt("z", pos.getZ());
tile.read(data);
}
}
}
}

View file

@ -96,7 +96,7 @@ public class BlockzapperItem extends ZapperItem {
@Override
protected boolean activate(World world, PlayerEntity player, ItemStack stack, BlockState selectedState,
BlockRayTraceResult raytrace) {
BlockRayTraceResult raytrace, CompoundNBT data) {
CompoundNBT nbt = stack.getOrCreateTag();
boolean replace = nbt.contains("Replace") && nbt.getBoolean("Replace");
@ -135,6 +135,7 @@ public class BlockzapperItem extends ZapperItem {
blocksnapshot.restore(true, false);
return false;
}
setTileData(world, placed, data);
if (player instanceof ServerPlayerEntity && world instanceof ServerWorld) {
ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player;

View file

@ -4,11 +4,13 @@ import java.util.List;
import javax.annotation.Nullable;
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@ -34,7 +36,7 @@ public enum TerrainTools {
return this != Clear && this != Flatten;
}
public void run(World world, List<BlockPos> targetPositions, Direction facing, @Nullable BlockState paintedState) {
public void run(World world, List<BlockPos> targetPositions, Direction facing, @Nullable BlockState paintedState, @Nullable CompoundNBT data) {
switch (this) {
case Clear:
targetPositions.forEach(p -> world.setBlockState(p, Blocks.AIR.getDefaultState()));
@ -45,6 +47,7 @@ public enum TerrainTools {
if (!isReplaceable(toReplace))
return;
world.setBlockState(p, paintedState);
ZapperItem.setTileData(world, p, data);
});
break;
case Flatten:
@ -64,11 +67,13 @@ public enum TerrainTools {
if (!isReplaceable(toReplace))
return;
world.setBlockState(p, paintedState);
ZapperItem.setTileData(world, p, data);
});
break;
case Place:
targetPositions.forEach(p -> {
world.setBlockState(p, paintedState);
ZapperItem.setTileData(world, p, data);
});
break;
case Replace:
@ -77,6 +82,7 @@ public enum TerrainTools {
if (isReplaceable(toReplace))
return;
world.setBlockState(p, paintedState);
ZapperItem.setTileData(world, p, data);
});
break;
}

View file

@ -60,7 +60,7 @@ public class WorldshaperItem extends ZapperItem {
@Override
protected boolean activate(World world, PlayerEntity player, ItemStack stack, BlockState stateToUse,
BlockRayTraceResult raytrace) {
BlockRayTraceResult raytrace, CompoundNBT data) {
BlockPos targetPos = raytrace.getPos();
List<BlockPos> affectedPositions = new ArrayList<>();
@ -77,7 +77,7 @@ public class WorldshaperItem extends ZapperItem {
for (BlockPos blockPos : brush.getIncludedPositions())
affectedPositions.add(targetPos.add(blockPos));
PlacementPatterns.applyPattern(affectedPositions, stack);
tool.run(world, affectedPositions, raytrace.getFace(), stateToUse);
tool.run(world, affectedPositions, raytrace.getFace(), stateToUse, data);
return true;
}

View file

@ -20,6 +20,7 @@ import net.minecraft.nbt.NBTUtil;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tags.FluidTags;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
@ -27,6 +28,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.Constants;
public abstract class LaunchedItem {
@ -91,18 +93,27 @@ public abstract class LaunchedItem {
public static class ForBlockState extends LaunchedItem {
public BlockState state;
public CompoundNBT data;
ForBlockState() {}
public ForBlockState(BlockPos start, BlockPos target, ItemStack stack, BlockState state) {
public ForBlockState(BlockPos start, BlockPos target, ItemStack stack, BlockState state, CompoundNBT data) {
super(start, target, stack);
this.state = state;
this.data = data;
}
@Override
public CompoundNBT serializeNBT() {
CompoundNBT serializeNBT = super.serializeNBT();
serializeNBT.put("BlockState", NBTUtil.writeBlockState(state));
if (data != null) {
data.remove("x");
data.remove("y");
data.remove("z");
data.remove("id");
serializeNBT.put("Data", data);
}
return serializeNBT;
}
@ -110,6 +121,9 @@ public abstract class LaunchedItem {
void readNBT(CompoundNBT nbt) {
super.readNBT(nbt);
state = NBTUtil.readBlockState(nbt.getCompound("BlockState"));
if (nbt.contains("Data", Constants.NBT.TAG_COMPOUND)) {
data = nbt.getCompound("Data");
}
}
@Override
@ -142,6 +156,15 @@ public abstract class LaunchedItem {
return;
}
world.setBlockState(target, state, 18);
if (data != null) {
TileEntity tile = world.getTileEntity(target);
if (tile != null) {
data.putInt("x", target.getX());
data.putInt("y", target.getY());
data.putInt("z", target.getZ());
tile.read(data);
}
}
state.getBlock().onBlockPlacedBy(world, target, state, null, stack);
}
@ -166,7 +189,7 @@ public abstract class LaunchedItem {
}
public ForBelt(BlockPos start, BlockPos target, ItemStack stack, BlockState state, int length) {
super(start, target, stack, state);
super(start, target, stack, state, null);
this.length = length;
}

View file

@ -4,9 +4,12 @@ import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
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.BeltPart;
import com.simibubi.create.content.contraptions.relays.belt.BeltSlope;
@ -459,9 +462,17 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
if (te instanceof BeltTileEntity && AllBlocks.BELT.has(blockState))
launchBelt(target, blockState, ((BeltTileEntity) te).beltLength);
else
launchBlock(target, icon, blockState);
} else
launchBlock(target, icon, blockState);
launchBlock(target, icon, blockState, null);
} else {
CompoundNBT data = null;
if (AllBlockTags.SAFE_NBT.matches(blockState)) {
TileEntity tile = blockReader.getTileEntity(target);
if (tile != null && !tile.onlyOpsCanSetNbt()) {
data = tile.write(new CompoundNBT());
}
}
launchBlock(target, icon, blockState, data);
}
printerCooldown = config().schematicannonDelay.get();
fuelLevel -= getFuelUsageRate();
@ -693,7 +704,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
if (world == null)
return false;
BlockState toReplace = world.getBlockState(pos);
boolean placingAir = state.getBlock() == Blocks.AIR;
boolean placingAir = state.getBlock().isAir(state, world, pos);
BlockState toReplaceOther = null;
if (BlockHelper.hasBlockStateProperty(state, BlockStateProperties.BED_PART) && BlockHelper.hasBlockStateProperty(state, BlockStateProperties.HORIZONTAL_FACING) && state.get(BlockStateProperties.BED_PART) == BedPart.FOOT)
@ -829,10 +840,10 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
playFiringSound();
}
protected void launchBlock(BlockPos target, ItemStack stack, BlockState state) {
if (state.getBlock() != Blocks.AIR)
protected void launchBlock(BlockPos target, ItemStack stack, BlockState state, @Nullable CompoundNBT data) {
if (state.getBlock().isAir(state, world, target))
blocksPlaced++;
flyingBlocks.add(new LaunchedItem.ForBlockState(this.getPos(), target, stack, state));
flyingBlocks.add(new LaunchedItem.ForBlockState(this.getPos(), target, stack, state, data));
playFiringSound();
}

View file

@ -19,6 +19,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra
import com.simibubi.create.content.contraptions.components.turntable.TurntableHandler;
import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler;
import com.simibubi.create.content.curiosities.tools.ExtendoGripRenderHandler;
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler;
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperRenderHandler;
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperRenderHandler;
@ -26,6 +27,8 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionP
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.gui.ScreenOpener;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.networking.LeftClickPacket;
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
import com.simibubi.create.foundation.tileEntity.behaviour.edgeInteraction.EdgeInteractionRenderer;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
@ -53,6 +56,7 @@ import net.minecraftforge.event.TickEvent.ClientTickEvent;
import net.minecraftforge.event.TickEvent.Phase;
import net.minecraftforge.event.TickEvent.RenderTickEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@ -216,4 +220,12 @@ public class ClientEvents {
}
}
@SubscribeEvent
public static void leftClickEmpty(PlayerInteractEvent.LeftClickEmpty event) {
ItemStack stack = event.getItemStack();
if (stack.getItem() instanceof ZapperItem) {
AllPackets.channel.sendToServer(new LeftClickPacket());
}
}
}

View file

@ -8,6 +8,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra
import com.simibubi.create.content.contraptions.fluids.recipe.FluidTransferRecipes;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.wrench.WrenchItem;
import com.simibubi.create.content.curiosities.zapper.ZapperInteractionHandler;
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
import com.simibubi.create.content.schematics.ServerSchematicLoader;
import com.simibubi.create.foundation.command.AllCommands;
import com.simibubi.create.foundation.fluid.FluidHelper;
@ -19,7 +21,9 @@ import com.simibubi.create.foundation.utility.recipe.RecipeFinder;
import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.fluid.FluidState;
import net.minecraft.item.ItemStack;
import net.minecraft.tags.FluidTags;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
@ -156,4 +160,11 @@ public class CommonEvents {
CapabilityMinecartController.startTracking(event);
}
public static void leftClickEmpty(ServerPlayerEntity player) {
ItemStack stack = player.getHeldItemMainhand();
if (stack.getItem() instanceof ZapperItem) {
ZapperInteractionHandler.trySelect(stack, player);
}
}
}

View file

@ -20,8 +20,6 @@ import net.minecraftforge.common.Tags;
public abstract class CreateRecipeProvider extends RecipeProvider {
public final String MEK = "mekanism", TH = "thermal", MW = "mysticalworld", SM = "silents_mechanisms", IE = "immersiveengineering";
final List<GeneratedRecipe> all = new ArrayList<>();
public CreateRecipeProvider(DataGenerator p_i48262_1_) {

View file

@ -0,0 +1,34 @@
package com.simibubi.create.foundation.data.recipe;
import net.minecraft.util.ResourceLocation;
public enum Mods {
MEK("mekanism", true),
TH("thermal", false),
MW("mysticalworld", false),
SM("silents_mechanisms", false),
IE("immersiveengineering", true)
;
private String id;
private boolean reversedPrefix;
private Mods(String id, boolean reversedPrefix) {
this.id = id;
this.reversedPrefix = reversedPrefix;}
public ResourceLocation ingotOf(String type) {
return new ResourceLocation(id, reversedPrefix ? "ingot_" + type : type + "_ingot");
}
public ResourceLocation nuggetOf(String type) {
return new ResourceLocation(id, reversedPrefix ? "nugget_" + type : type + "_nugget");
}
public String getId() {
return id;
}
}

View file

@ -1,5 +1,11 @@
package com.simibubi.create.foundation.data.recipe;
import static com.simibubi.create.foundation.data.recipe.Mods.IE;
import static com.simibubi.create.foundation.data.recipe.Mods.MEK;
import static com.simibubi.create.foundation.data.recipe.Mods.MW;
import static com.simibubi.create.foundation.data.recipe.Mods.SM;
import static com.simibubi.create.foundation.data.recipe.Mods.TH;
import java.util.ArrayList;
import java.util.List;
import java.util.function.UnaryOperator;
@ -994,10 +1000,11 @@ public class StandardRecipeGen extends CreateRecipeProvider {
.inBlastFurnace();
}
GeneratedRecipe blastModdedCrushedMetal(ItemEntry<? extends Item> ingredient, String metalName, String... mods) {
for (String modId : mods) {
String ingot = modId.equals(IE) ? "ingot_" + metalName : metalName + "_ingot";
create(new ResourceLocation(modId, ingot)).withSuffix("_compat_" + modId)
GeneratedRecipe blastModdedCrushedMetal(ItemEntry<? extends Item> ingredient, String metalName, Mods... mods) {
for (Mods mod : mods) {
ResourceLocation ingot = mod.ingotOf(metalName);
String modId = mod.getId();
create(ingot).withSuffix("_compat_" + modId)
.whenModLoaded(modId)
.viaCooking(ingredient::get)
.rewardXP(.1f)

View file

@ -1,5 +1,11 @@
package com.simibubi.create.foundation.data.recipe;
import static com.simibubi.create.foundation.data.recipe.Mods.IE;
import static com.simibubi.create.foundation.data.recipe.Mods.MEK;
import static com.simibubi.create.foundation.data.recipe.Mods.MW;
import static com.simibubi.create.foundation.data.recipe.Mods.SM;
import static com.simibubi.create.foundation.data.recipe.Mods.TH;
import java.util.function.Supplier;
import com.simibubi.create.AllItems;
@ -15,6 +21,7 @@ import net.minecraft.item.Items;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.Tags;
public class WashingRecipeGen extends ProcessingRecipeGen {
@ -86,15 +93,15 @@ public class WashingRecipeGen extends ProcessingRecipeGen {
.output(.5f, nugget.get(), 5));
}
public GeneratedRecipe moddedCrushedOre(ItemEntry<? extends Item> crushed, String metalName, String... mods) {
for (String modId : mods) {
String nugget = modId.equals(IE) ? "nugget_" + metalName : metalName + "_nugget";
create(modId + "/" + crushed.getId()
public GeneratedRecipe moddedCrushedOre(ItemEntry<? extends Item> crushed, String metalName, Mods... mods) {
for (Mods mod : mods) {
ResourceLocation nugget = mod.nuggetOf(metalName);
create(mod.getId() + "/" + crushed.getId()
.getPath(),
b -> b.withItemIngredients(Ingredient.fromItems(crushed::get))
.output(1, modId, nugget, 10)
.output(.5f, modId, nugget, 5)
.whenModLoaded(modId));
.output(1, nugget, 10)
.output(.5f, nugget, 5)
.whenModLoaded(mod.getId()));
}
return null;
}

View file

@ -64,6 +64,7 @@ public enum AllPackets {
MINECART_COUPLING_CREATION(CouplingCreationPacket.class, CouplingCreationPacket::new),
INSTANT_SCHEMATIC(InstantSchematicPacket.class, InstantSchematicPacket::new),
SYNC_SCHEMATIC(SchematicSyncPacket.class, SchematicSyncPacket::new),
LEFT_CLICK(LeftClickPacket.class, LeftClickPacket::new),
// Server to Client
SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new),

View file

@ -0,0 +1,32 @@
package com.simibubi.create.foundation.networking;
import java.util.function.Supplier;
import com.simibubi.create.events.CommonEvents;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.network.NetworkDirection;
import net.minecraftforge.fml.network.NetworkEvent.Context;
public class LeftClickPacket extends SimplePacketBase {
public LeftClickPacket() {
}
LeftClickPacket(PacketBuffer buffer) {
}
@Override
public void write(PacketBuffer buffer) {
}
@Override
public void handle(Supplier<Context> context) {
Context ctx = context.get();
if (ctx.getDirection() != NetworkDirection.PLAY_TO_SERVER)
return;
ctx.enqueueWork(() -> CommonEvents.leftClickEmpty(ctx.getSender()));
ctx.setPacketHandled(true);
}
}

View file

@ -1,9 +1,8 @@
package com.simibubi.create.foundation.tileEntity.behaviour.linked;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.IntConsumer;
import java.util.function.IntSupplier;
import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.Create;
@ -35,8 +34,8 @@ public class LinkBehaviour extends TileEntityBehaviour {
public boolean newPosition;
private Mode mode;
private Supplier<Integer> transmission;
private Consumer<Integer> signalCallback;
private IntSupplier transmission;
private IntConsumer signalCallback;
protected LinkBehaviour(SmartTileEntity te, Pair<ValueBoxTransform, ValueBoxTransform> slots) {
super(te);
@ -49,7 +48,7 @@ public class LinkBehaviour extends TileEntityBehaviour {
}
public static LinkBehaviour receiver(SmartTileEntity te, Pair<ValueBoxTransform, ValueBoxTransform> slots,
Consumer<Integer> signalCallback) {
IntConsumer signalCallback) {
LinkBehaviour behaviour = new LinkBehaviour(te, slots);
behaviour.signalCallback = signalCallback;
behaviour.mode = Mode.RECEIVE;
@ -57,7 +56,7 @@ public class LinkBehaviour extends TileEntityBehaviour {
}
public static LinkBehaviour transmitter(SmartTileEntity te, Pair<ValueBoxTransform, ValueBoxTransform> slots,
Supplier<Integer> transmission) {
IntSupplier transmission) {
LinkBehaviour behaviour = new LinkBehaviour(te, slots);
behaviour.transmission = transmission;
behaviour.mode = Mode.TRANSMIT;
@ -81,7 +80,7 @@ public class LinkBehaviour extends TileEntityBehaviour {
}
public int getTransmittedStrength() {
return mode == Mode.TRANSMIT ? transmission.get() : 0;
return mode == Mode.TRANSMIT ? transmission.getAsInt() : 0;
}
public void updateReceiver(int networkPower) {