mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-16 03:13:43 +01:00
Merge remote-tracking branch 'origin/mc1.16/dev' into mc1.16/chromatic-projector
# Conflicts: # src/generated/resources/assets/create/lang/en_us.json # src/main/java/com/simibubi/create/AllBlocks.java # src/main/java/com/simibubi/create/AllTileEntities.java # src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java # src/main/java/com/simibubi/create/foundation/gui/AllIcons.java # src/main/java/com/simibubi/create/foundation/networking/AllPackets.java # src/main/resources/assets/create/textures/gui/icons.png # src/main/resources/create.mixins.json
This commit is contained in:
commit
341a385628
954 changed files with 6641 additions and 1097 deletions
|
@ -16,6 +16,7 @@ indent_size = 2
|
|||
|
||||
[*.java]
|
||||
indent_style = tab
|
||||
ij_continuation_indent_size = 8
|
||||
ij_java_class_count_to_use_import_on_demand = 99
|
||||
ij_java_names_count_to_use_import_on_demand = 99
|
||||
ij_java_imports_layout = $*,|,java.**,|,javax.**,|,org.**,|,com.**,|,*
|
||||
ij_java_imports_layout = $*,|,java.**,|,javax.**,|,org.**,|,com.**,|,*
|
||||
|
|
|
@ -116,7 +116,7 @@ configurations {
|
|||
dependencies {
|
||||
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
||||
|
||||
def registrate = "com.tterrag.registrate:Registrate:MC1.16.2-${registrate_version}"
|
||||
def registrate = "com.tterrag.registrate:Registrate:MC1.16.5-${registrate_version}"
|
||||
implementation fg.deobf(registrate)
|
||||
shade registrate
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ minecraft_version=1.16.5
|
|||
forge_version=36.0.42
|
||||
|
||||
# dependency versions
|
||||
registrate_version=1.0.0-beta.33
|
||||
registrate_version=1.0.4
|
||||
jei_version=7.6.1.71
|
||||
|
||||
# curseforge information
|
||||
|
|
|
@ -53,6 +53,7 @@ b59324f051f21d8ce1a48a08f4721a61a3c414d6 assets/create/blockstates/chute.json
|
|||
e5e3757e99c139d67b2a70288466d8a74d818841 assets/create/blockstates/cogwheel.json
|
||||
36f54136a7756c97f71bc6b47ef4e8e575e72879 assets/create/blockstates/content_observer.json
|
||||
cfea7283f0ebd2432d67e80a523f2a12e24c0bd5 assets/create/blockstates/controller_rail.json
|
||||
961b615124ea9a5a5735e8a79f81a702de7da2cf assets/create/blockstates/copper_backtank.json
|
||||
f8eff64c75fc599e9a44a003f54ae9931cd8ce7c assets/create/blockstates/copper_block.json
|
||||
cabf6b8c59eb0e3d56a0a5a856ca058bb3200882 assets/create/blockstates/copper_casing.json
|
||||
3355a852cdc717e257ca19b3db836068964733e3 assets/create/blockstates/copper_ore.json
|
||||
|
@ -406,21 +407,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
|||
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
0e10e87986a76f18efeb1255f2c025d1aad8f8fa assets/create/lang/en_ud.json
|
||||
949bac58ef9534024eac6d9082f5d241ce5b91f3 assets/create/lang/en_us.json
|
||||
26ab60b925659e6daac2e449267d202c68cafe94 assets/create/lang/unfinished/de_de.json
|
||||
78086e1c23ce96db3a9ec3d304d7418f39ed96fa assets/create/lang/unfinished/es_es.json
|
||||
62fcca040385405c7655ea6e4b524b2a5e652e4c assets/create/lang/unfinished/es_mx.json
|
||||
0f527cc6472caec6ec090985c5000e6f7f93208f assets/create/lang/unfinished/fr_fr.json
|
||||
812f7e66a1d5a06a7b81a41216ee2151e678db69 assets/create/lang/unfinished/it_it.json
|
||||
8122ad97eac98b1f549a08e623066be1ffd3a29e assets/create/lang/unfinished/ja_jp.json
|
||||
2c3a1bd28a6a08bec850cc36735204c59045b188 assets/create/lang/unfinished/ko_kr.json
|
||||
27559156601b57cc2e9fae07a92c7f79a7f4e473 assets/create/lang/unfinished/nl_nl.json
|
||||
f401f044ec0785b9399d29d2a82f0f998a2a4db7 assets/create/lang/unfinished/pl_pl.json
|
||||
fa22d8055979012a45a6648009ef0094be4560d8 assets/create/lang/unfinished/pt_br.json
|
||||
d1b6b069a4547c107c58af4f8837f3cc843e1613 assets/create/lang/unfinished/ru_ru.json
|
||||
b1650c7805cfe03c6b3b9d43f96964b695f55415 assets/create/lang/unfinished/zh_cn.json
|
||||
8052350b58969035d456f882fa5624ee16a0024c assets/create/lang/unfinished/zh_tw.json
|
||||
a6d814f94926d88764c38862cc4ece9c367e023b assets/create/lang/en_ud.json
|
||||
d1838140c8383ee4537db90eb8f657d0c268fe91 assets/create/lang/en_us.json
|
||||
4fcda300efe5a2ad8695b5ae3f24a54ea109a954 assets/create/lang/unfinished/de_de.json
|
||||
6a1dde57b2224d4b0287ebc705d6a75d329b5e1f assets/create/lang/unfinished/es_es.json
|
||||
93ee0e30a56b405a9e766d353c36276e36a84b5c assets/create/lang/unfinished/es_mx.json
|
||||
49a691320c73e09f921cd0ea97398126231e99fa assets/create/lang/unfinished/fr_fr.json
|
||||
cf14b3828b6c11013f606f277d88fb63245bb2a8 assets/create/lang/unfinished/it_it.json
|
||||
73c1c1489833cbcb28bb1ce90541c8c8bdf329c0 assets/create/lang/unfinished/ja_jp.json
|
||||
924303b9bcf56aedbbfc46108655f71324308e12 assets/create/lang/unfinished/ko_kr.json
|
||||
079aea6843e756efbfca0976983be1957863717c assets/create/lang/unfinished/nl_nl.json
|
||||
b7bab15167400ee48a9728f81446e572c494fd8d assets/create/lang/unfinished/pl_pl.json
|
||||
07e84cc3eee3faa1ab3d26e0c85c7f09c8573368 assets/create/lang/unfinished/pt_br.json
|
||||
6ffb0cf20d712aee23a42a9ec440dd7dc92293d6 assets/create/lang/unfinished/ru_ru.json
|
||||
0ae98a18e59f478da41d8c5d832737b65f6a8c8a assets/create/lang/unfinished/zh_cn.json
|
||||
4c96e5a76e72368a59190b7588d389fdd2cc75e1 assets/create/lang/unfinished/zh_tw.json
|
||||
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
|
||||
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
|
||||
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||
|
@ -1261,6 +1262,7 @@ c1da21be9f1af4f7a2ef4ec9cd92195d65ada316 assets/create/models/item/clockwork_bea
|
|||
dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json
|
||||
7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json
|
||||
9dbd63c9e1b09a663fd4b83d76e3ab5967086167 assets/create/models/item/controller_rail.json
|
||||
10397036fc0bb1e18a767cfd7b19b10d805a83fe assets/create/models/item/copper_backtank.json
|
||||
965a90a882d85dba93b30af9bce7ecf8e68ce747 assets/create/models/item/copper_block.json
|
||||
759bcb5fe7dfdd628716f9b4ff19a5ab00393381 assets/create/models/item/copper_casing.json
|
||||
c2a320162daa2d24cef969d1d14a0cbd55eb574f assets/create/models/item/copper_ingot.json
|
||||
|
@ -1317,6 +1319,8 @@ a215bca75c32124c4cb070065967de1d56c6c57f assets/create/models/item/diorite_cobbl
|
|||
645a16dfb3619cedf2046e1d0869a27394e6460a assets/create/models/item/diorite_cobblestone_stairs.json
|
||||
32ebea959ce34458ac2f5ae105f9b415ab18ae4c assets/create/models/item/diorite_cobblestone_wall.json
|
||||
e0ecc0a20cf9dd54ccfc48e0041d5220b2c8316e assets/create/models/item/diorite_pillar.json
|
||||
6006f88e56d74a3fd75a9dddb25af39075e0482b assets/create/models/item/diving_boots.json
|
||||
df8cfe7e8eb527329094396e11222e9097e309d7 assets/create/models/item/diving_helmet.json
|
||||
1bd32eb16dee4bbf313a8813a7f1461ea5feeffe assets/create/models/item/dolomite.json
|
||||
4c5e12f1acb8c4abc24b9dd80e5cbbf3a5cbd89c assets/create/models/item/dolomite_bricks.json
|
||||
ebb596ce665b085e501ee2fd9a5371ce53e40553 assets/create/models/item/dolomite_bricks_slab.json
|
||||
|
@ -1647,8 +1651,8 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
|
|||
866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json
|
||||
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
|
||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
||||
7b73f40a65af0c2288c886928c609ec783c0fc40 assets/create/sounds.json
|
||||
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
|
||||
096382a4c025b5ffdde9c496ee9da0d5345fbe17 assets/create/sounds.json
|
||||
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
|
||||
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
||||
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
||||
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
|
||||
|
@ -1769,6 +1773,9 @@ c33e122c534a7a134f69faa36446ce7564d8a705 data/create/advancements/recipes/buildi
|
|||
c368cadffa9177fefb9e92ff4453b40bc8dd670d data/create/advancements/recipes/create.base/blasting/copper_ingot_from_ore.json
|
||||
8fffce2a5c5dd88d52e3b006fa92fb18cf2f1571 data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_crushed.json
|
||||
4bb60ef5e186f12a9d52e61319db8c78300c64ab data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json
|
||||
d1d8cf6e1c95b7d99bf873fa6fee033103f995fd data/create/advancements/recipes/create.base/crafting/appliances/copper_backtank.json
|
||||
46c04e685ab345a80598176f7ac68a044a76cd76 data/create/advancements/recipes/create.base/crafting/appliances/diving_boots.json
|
||||
5f06b7dcf2af11f30c2e10ade4ac3fd172bc04df data/create/advancements/recipes/create.base/crafting/appliances/diving_helmet.json
|
||||
dd487f98c411f1ff22cb7fc208b8cc24b27deb2f data/create/advancements/recipes/create.base/crafting/appliances/dough.json
|
||||
51cdcf168087f47e4458eed7543d227da1ee5ca0 data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json
|
||||
d531f87f425d199aee4777a588c1cd6cab6f5173 data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json
|
||||
|
@ -2420,6 +2427,7 @@ d76113310fc56eca6382d44df174096f2210d416 data/create/loot_tables/blocks/clutch.j
|
|||
673ba3a5deae9133b917d16c9eb87fe4c2873c8a data/create/loot_tables/blocks/cogwheel.json
|
||||
096af6b5df6e87d36cb936eea9b00982a554f4af data/create/loot_tables/blocks/content_observer.json
|
||||
80c2cb21714651116a71f449368c06bb22e841ce data/create/loot_tables/blocks/controller_rail.json
|
||||
662b8d41803ef166d20850653b36759de719206c data/create/loot_tables/blocks/copper_backtank.json
|
||||
f38802b919c49f162f102d6e5d94113f05bf4ab1 data/create/loot_tables/blocks/copper_block.json
|
||||
5a65a18ea787130ac7b8f5652bfa5ed187446649 data/create/loot_tables/blocks/copper_casing.json
|
||||
31a51237763c374b7cdf39b9b62c14e965871047 data/create/loot_tables/blocks/copper_ore.json
|
||||
|
@ -2718,7 +2726,7 @@ cecaac07bd275bb1ae9e302f0bf44b581e74105d data/create/loot_tables/blocks/rope_pul
|
|||
aa6af37356d65105efab2503ffe75f778cfe873b data/create/loot_tables/blocks/rotation_speed_controller.json
|
||||
30de11bec82606fead9d6bff7bba0232e97f1039 data/create/loot_tables/blocks/sail_frame.json
|
||||
069701cb804b6522c18624a0d4f3f949ff8b0281 data/create/loot_tables/blocks/schematic_table.json
|
||||
c4a89145334addfd0dd1fedf7fa75ba07a7d3490 data/create/loot_tables/blocks/schematicannon.json
|
||||
a2b172dc749176d4df34729007019605fc6dd150 data/create/loot_tables/blocks/schematicannon.json
|
||||
af1bbbb8236b4ab05a6a8edc6db960bc758cbdf3 data/create/loot_tables/blocks/scoria.json
|
||||
bb670ac5dd2fa4c743bc268cd0547926eb6cdb68 data/create/loot_tables/blocks/scoria_bricks.json
|
||||
a7217ea301a282d0ef52f2d8c06dd8683398408d data/create/loot_tables/blocks/scoria_bricks_slab.json
|
||||
|
@ -2837,6 +2845,9 @@ f7879d404d7a848d818278b4e788f285a9087e63 data/create/recipes/compacting/blaze_ca
|
|||
27c23592d8fec03072a04544d3598ca9b1c798ff data/create/recipes/compacting/chocolate.json
|
||||
7b2ef15dd28d1d8a450ea49a82dfb361d1adde4c data/create/recipes/compacting/diorite_from_flint.json
|
||||
7657603e95ccf83dd0d4b104635db66e531d092a data/create/recipes/compacting/granite_from_flint.json
|
||||
30030b15caa11b3a7c0104adb62fe74e8c7c0df1 data/create/recipes/crafting/appliances/copper_backtank.json
|
||||
9ad82ac5ce02654b7af7f1a570a6b2c01e140da3 data/create/recipes/crafting/appliances/diving_boots.json
|
||||
813081c6421b34e161ec44e8e470994c282f76be data/create/recipes/crafting/appliances/diving_helmet.json
|
||||
19526da3a59fc136654ff1bc93c0251581f397a9 data/create/recipes/crafting/appliances/dough.json
|
||||
7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting/appliances/slime_ball.json
|
||||
b159ba84428eee6ef6e23df1766f2a18f2c8a63e data/create/recipes/crafting/appliances/tree_fertilizer.json
|
||||
|
@ -3634,7 +3645,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone
|
|||
0f3c993eb6dd3f37953f304b8fad15bf60469ef4 data/create/recipes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json
|
||||
6eceb25fabbb6b389ca35de3b829ad061c9c456a data/create/recipes/weathered_limestone_pillar.json
|
||||
11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json
|
||||
eedf31af7134d03656c5fa57229982f9c5bed07c data/create/tags/blocks/brittle.json
|
||||
20c20a12b0baff2ba493b1405db7d2d8a15b81af data/create/tags/blocks/brittle.json
|
||||
330bfb3850ba3964b10b1bccbc3cbb9b012cae54 data/create/tags/blocks/fan_heaters.json
|
||||
3bc64e3a1e7980237435b1770a9ba2102d57fcd4 data/create/tags/blocks/fan_transparent.json
|
||||
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/non_movable.json
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,waterlogged=false": {
|
||||
"model": "create:block/copper_backtank/block"
|
||||
},
|
||||
"facing=south,waterlogged=false": {
|
||||
"model": "create:block/copper_backtank/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,waterlogged=false": {
|
||||
"model": "create:block/copper_backtank/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,waterlogged=false": {
|
||||
"model": "create:block/copper_backtank/block",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,waterlogged=true": {
|
||||
"model": "create:block/copper_backtank/block"
|
||||
},
|
||||
"facing=south,waterlogged=true": {
|
||||
"model": "create:block/copper_backtank/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,waterlogged=true": {
|
||||
"model": "create:block/copper_backtank/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,waterlogged=true": {
|
||||
"model": "create:block/copper_backtank/block",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -55,6 +55,7 @@
|
|||
"block.create.cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186",
|
||||
"block.create.content_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287u\u01DD\u0287uo\u0186",
|
||||
"block.create.controller_rail": "\u05DF\u0131\u0250\u1D1A \u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186",
|
||||
"block.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186",
|
||||
"block.create.copper_block": "\u0279\u01DDddo\u0186 \u025Fo \u029E\u0254o\u05DF\u15FA",
|
||||
"block.create.copper_casing": "bu\u0131s\u0250\u0186 \u0279\u01DDddo\u0186",
|
||||
"block.create.copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186",
|
||||
|
@ -432,6 +433,7 @@
|
|||
"item.create.chocolate_glazed_berries": "s\u01DD\u0131\u0279\u0279\u01DD\u15FA p\u01DDz\u0250\u05DF\u2141 \u01DD\u0287\u0250\u05DFo\u0254o\u0265\u0186",
|
||||
"item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186",
|
||||
"item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186",
|
||||
"item.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186",
|
||||
"item.create.copper_ingot": "\u0287obuI \u0279\u01DDddo\u0186",
|
||||
"item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186",
|
||||
"item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186",
|
||||
|
@ -450,6 +452,8 @@
|
|||
"item.create.crushed_tin_ore": "\u01DD\u0279O u\u0131\u27D8 p\u01DD\u0265sn\u0279\u0186",
|
||||
"item.create.crushed_uranium_ore": "\u01DD\u0279O \u026Fn\u0131u\u0250\u0279\u2229 p\u01DD\u0265sn\u0279\u0186",
|
||||
"item.create.crushed_zinc_ore": "\u01DD\u0279O \u0254u\u0131Z p\u01DD\u0265sn\u0279\u0186",
|
||||
"item.create.diving_boots": "s\u0287oo\u15FA bu\u0131\u028C\u0131\u15E1",
|
||||
"item.create.diving_helmet": "\u0287\u01DD\u026F\u05DF\u01DDH bu\u0131\u028C\u0131\u15E1",
|
||||
"item.create.dough": "\u0265bno\u15E1",
|
||||
"item.create.electron_tube": "\u01DDqn\u27D8 uo\u0279\u0287\u0254\u01DD\u05DF\u018E",
|
||||
"item.create.empty_blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA \u028E\u0287d\u026F\u018E",
|
||||
|
|
|
@ -41,27 +41,28 @@
|
|||
"block.create.brass_funnel": "Brass Funnel",
|
||||
"block.create.brass_tunnel": "Brass Tunnel",
|
||||
"block.create.brown_sail": "Brown Sail",
|
||||
"block.create.brown_seat": "Brown Seat",
|
||||
"block.create.brown_valve_handle": "Brown Valve Handle",
|
||||
"block.create.cart_assembler": "Cart Assembler",
|
||||
"block.create.chiseled_dark_scoria": "Chiseled Dark Scoria",
|
||||
"block.create.chiseled_dolomite": "Chiseled Dolomite",
|
||||
"block.create.chiseled_gabbro": "Chiseled Gabbro",
|
||||
"block.create.chiseled_limestone": "Chiseled Limestone",
|
||||
"block.create.chiseled_scoria": "Chiseled Scoria",
|
||||
"block.create.chiseled_weathered_limestone": "Chiseled Weathered Limestone",
|
||||
"block.create.chocolate": "Chocolate",
|
||||
"block.create.brown_seat": "Brown Seat",
|
||||
"block.create.brown_valve_handle": "Brown Valve Handle",
|
||||
"block.create.cart_assembler": "Cart Assembler",
|
||||
"block.create.chiseled_dark_scoria": "Chiseled Dark Scoria",
|
||||
"block.create.chiseled_dolomite": "Chiseled Dolomite",
|
||||
"block.create.chiseled_gabbro": "Chiseled Gabbro",
|
||||
"block.create.chiseled_limestone": "Chiseled Limestone",
|
||||
"block.create.chiseled_scoria": "Chiseled Scoria",
|
||||
"block.create.chiseled_weathered_limestone": "Chiseled Weathered Limestone",
|
||||
"block.create.chocolate": "Chocolate",
|
||||
"block.create.chromatic_projector": "Chromatic Projector",
|
||||
"block.create.chute": "Chute",
|
||||
"block.create.clockwork_bearing": "Clockwork Bearing",
|
||||
"block.create.clutch": "Clutch",
|
||||
"block.create.cogwheel": "Cogwheel",
|
||||
"block.create.content_observer": "Content Observer",
|
||||
"block.create.controller_rail": "Controller Rail",
|
||||
"block.create.copper_block": "Block of Copper",
|
||||
"block.create.copper_casing": "Copper Casing",
|
||||
"block.create.copper_ore": "Copper Ore",
|
||||
"block.create.copper_shingles": "Copper Shingles",
|
||||
"block.create.chute": "Chute",
|
||||
"block.create.clockwork_bearing": "Clockwork Bearing",
|
||||
"block.create.clutch": "Clutch",
|
||||
"block.create.cogwheel": "Cogwheel",
|
||||
"block.create.content_observer": "Content Observer",
|
||||
"block.create.controller_rail": "Controller Rail",
|
||||
"block.create.copper_backtank": "Copper Backtank",
|
||||
"block.create.copper_block": "Block of Copper",
|
||||
"block.create.copper_casing": "Copper Casing",
|
||||
"block.create.copper_ore": "Copper Ore",
|
||||
"block.create.copper_shingles": "Copper Shingles",
|
||||
"block.create.copper_tiles": "Copper Tiles",
|
||||
"block.create.copper_valve_handle": "Copper Valve Handle",
|
||||
"block.create.creative_crate": "Creative Crate",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "Chromatic Compound",
|
||||
"item.create.cinder_flour": "Cinder Flour",
|
||||
"item.create.copper_backtank": "Copper Backtank",
|
||||
"item.create.copper_ingot": "Copper Ingot",
|
||||
"item.create.copper_nugget": "Copper Nugget",
|
||||
"item.create.copper_sheet": "Copper Sheet",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Crushed Tin Ore",
|
||||
"item.create.crushed_uranium_ore": "Crushed Uranium Ore",
|
||||
"item.create.crushed_zinc_ore": "Crushed Zinc Ore",
|
||||
"item.create.diving_boots": "Diving Boots",
|
||||
"item.create.diving_helmet": "Diving Helmet",
|
||||
"item.create.dough": "Dough",
|
||||
"item.create.electron_tube": "Electron Tube",
|
||||
"item.create.empty_blaze_burner": "Empty Blaze Burner",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "Fan behind Lava",
|
||||
"create.recipe.pressing": "Pressing",
|
||||
"create.recipe.mixing": "Mixing",
|
||||
"create.recipe.deploying": "Deploying",
|
||||
"create.recipe.automatic_shapeless": "Automated Shapeless Crafting",
|
||||
"create.recipe.automatic_brewing": "Automated Brewing",
|
||||
"create.recipe.packing": "Compacting",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "Item slides",
|
||||
"create.subtitle.deny": "Declining boop",
|
||||
"create.subtitle.blaze_munch": "Blaze Burner munches",
|
||||
"create.subtitle.schematicannon_launch_block": "Schematicannon fires",
|
||||
"create.subtitle.funnel_flap": "Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "Schematicannon dings",
|
||||
"create.subtitle.scroll_value": "Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "Mechanical Press clangs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 935",
|
||||
"_": "Missing Localizations: 942",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Zahnrad",
|
||||
"block.create.content_observer": "Inhaltsbeobachter",
|
||||
"block.create.controller_rail": "Steuerungsschiene",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "Kupfer Block",
|
||||
"block.create.copper_casing": "Kupferrahmen",
|
||||
"block.create.copper_ore": "Kupfererz",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren",
|
||||
"item.create.chromatic_compound": "Chromatische Verbindung",
|
||||
"item.create.cinder_flour": "Aschenmehl",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Kupferbarren",
|
||||
"item.create.copper_nugget": "Kupferklumpen",
|
||||
"item.create.copper_sheet": "Kupferblech",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Zerkleinertes Zinnerz",
|
||||
"item.create.crushed_uranium_ore": "Zerkleinertes Uranerz",
|
||||
"item.create.crushed_zinc_ore": "Zerkleinertes Zinkerz",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Teig",
|
||||
"item.create.electron_tube": "Elektronenröhre",
|
||||
"item.create.empty_blaze_burner": "Leerer Lohenbrenner",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "Propeller hinter Lava",
|
||||
"create.recipe.pressing": "Mechanische Presse",
|
||||
"create.recipe.mixing": "Mixen",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "Automatisiertes Formloses Bauen",
|
||||
"create.recipe.automatic_brewing": "Automatisiertes Brauen",
|
||||
"create.recipe.packing": "Komprimieren",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "Lohe kaut glücklich",
|
||||
"create.subtitle.schematicannon_launch_block": "Bauplankanone schießt",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "Bauplankanone endet",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "Mechanische Presse wird aktiviert",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 636",
|
||||
"_": "Missing Localizations: 643",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Rueda dentada",
|
||||
"block.create.content_observer": "Observador de contenidos",
|
||||
"block.create.controller_rail": "Raíl de control",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "Bloque de cobre",
|
||||
"block.create.copper_casing": "Revestidor de caliza",
|
||||
"block.create.copper_ore": "Mineral de cobre",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "Compuesto cromático",
|
||||
"item.create.cinder_flour": "Harina de ceniza",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Lingote de cobre",
|
||||
"item.create.copper_nugget": "Pepita de cobre",
|
||||
"item.create.copper_sheet": "Lámina de cobre",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Mineral de estaño molido",
|
||||
"item.create.crushed_uranium_ore": "Mineral de uranio molido",
|
||||
"item.create.crushed_zinc_ore": "Mineral de zinc molido",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Masilla",
|
||||
"item.create.electron_tube": "Tubo de electrones",
|
||||
"item.create.empty_blaze_burner": "Quemador de Blaze vacío",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "Ventilador detrás de la lava",
|
||||
"create.recipe.pressing": "Prensando",
|
||||
"create.recipe.mixing": "Mezclando",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "Elaboración automatizada de productos sin forma",
|
||||
"create.recipe.automatic_brewing": "Elaboración de cerveza automatizada",
|
||||
"create.recipe.packing": "Compactando",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "Blaze mastica felizmente",
|
||||
"create.subtitle.schematicannon_launch_block": "Disparos de Schematicannon",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "Acabados de Schematicannon",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "La Prensa Mecánica se activa",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1259",
|
||||
"_": "Missing Localizations: 1266",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Rueda Dentada",
|
||||
"block.create.content_observer": "Observador de Contenido",
|
||||
"block.create.controller_rail": "Vía de Control",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "Bloque de Cobre",
|
||||
"block.create.copper_casing": "Carcasa de Cobre",
|
||||
"block.create.copper_ore": "Mineral de Cobre",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "Compuesto Cromático",
|
||||
"item.create.cinder_flour": "Ceniza Molida",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Lingote de Cobre",
|
||||
"item.create.copper_nugget": "Pepita de Cobre",
|
||||
"item.create.copper_sheet": "Lámina de Cobre",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Mineral de Estaño Molido",
|
||||
"item.create.crushed_uranium_ore": "Mineral de Uranio Molido",
|
||||
"item.create.crushed_zinc_ore": "Mineral de Zinc Molido",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Masa",
|
||||
"item.create.electron_tube": "Válvula Electrónica",
|
||||
"item.create.empty_blaze_burner": "Quemador de Blaze Vacío",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
|
||||
"create.recipe.pressing": "UNLOCALIZED: Pressing",
|
||||
"create.recipe.mixing": "UNLOCALIZED: Mixing",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
|
||||
"create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing",
|
||||
"create.recipe.packing": "UNLOCALIZED: Compacting",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
|
||||
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1187",
|
||||
"_": "Missing Localizations: 1194",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Roue dentée",
|
||||
"block.create.content_observer": "Observateur de contenu",
|
||||
"block.create.controller_rail": "Rails controlleurs",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "Bloc de cuivre",
|
||||
"block.create.copper_casing": "Revêtement en cuivre",
|
||||
"block.create.copper_ore": "Minerai de cuivre",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "Composé chromatique",
|
||||
"item.create.cinder_flour": "Farine de braise",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Lingot de cuivre",
|
||||
"item.create.copper_nugget": "Pépite de cuivre",
|
||||
"item.create.copper_sheet": "Plaques de cuivre",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Etain concassé",
|
||||
"item.create.crushed_uranium_ore": "Uranium concassé",
|
||||
"item.create.crushed_zinc_ore": "Zinc concassé",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Pâte",
|
||||
"item.create.electron_tube": "Tube électronique",
|
||||
"item.create.empty_blaze_burner": "Brûleur à blaze vide",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "Ventilateur derrière de la lave",
|
||||
"create.recipe.pressing": "Pressage",
|
||||
"create.recipe.mixing": "Mixage",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
|
||||
"create.recipe.automatic_brewing": "Alchimie automatisée",
|
||||
"create.recipe.packing": "Compactage",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
|
||||
"create.subtitle.schematicannon_launch_block": "Tir de schémacanon",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "Fin de schémacanon",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "Activation de la presse mechanique",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 653",
|
||||
"_": "Missing Localizations: 660",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Ruota dentata",
|
||||
"block.create.content_observer": "Osservatore dei contenuti",
|
||||
"block.create.controller_rail": "Binario di controllo",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "Blocco di rame",
|
||||
"block.create.copper_casing": "Involucro di rame",
|
||||
"block.create.copper_ore": "Rame grezzo",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "Composto cromatico",
|
||||
"item.create.cinder_flour": "Cenere farinosa",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Lingotto di rame",
|
||||
"item.create.copper_nugget": "Pepita di rame",
|
||||
"item.create.copper_sheet": "Lamiera di rame",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Stagno grezzo frantumato",
|
||||
"item.create.crushed_uranium_ore": "Uranio grezzo frantumato",
|
||||
"item.create.crushed_zinc_ore": "Zinco grezzo frantumato",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Impasto",
|
||||
"item.create.electron_tube": "Valvola",
|
||||
"item.create.empty_blaze_burner": "Inceneritore di blaze vuoto",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "Ventilatore dietro la lava",
|
||||
"create.recipe.pressing": "Pressatura",
|
||||
"create.recipe.mixing": "Mescolamento",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "Costruzione informe automatizzata",
|
||||
"create.recipe.automatic_brewing": "Fermentazione automatica",
|
||||
"create.recipe.packing": "Compattazione",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "Il blaze lo gusta felicemente",
|
||||
"create.subtitle.schematicannon_launch_block": "Tiri del cannoneschematico",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "Finiture cannoneschematico",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "Pressa meccanica attiva",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 17",
|
||||
"_": "Missing Localizations: 24",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "歯車",
|
||||
"block.create.content_observer": "コンテンツオブザーバー",
|
||||
"block.create.controller_rail": "コントローラーレール",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "銅ブロック",
|
||||
"block.create.copper_casing": "銅ケーシング",
|
||||
"block.create.copper_ore": "銅鉱石",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー",
|
||||
"item.create.chromatic_compound": "色彩の化合物",
|
||||
"item.create.cinder_flour": "ネザーラックの粉",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "銅インゴット",
|
||||
"item.create.copper_nugget": "銅塊",
|
||||
"item.create.copper_sheet": "銅板",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "砕いた錫鉱石",
|
||||
"item.create.crushed_uranium_ore": "砕いたウラン鉱石",
|
||||
"item.create.crushed_zinc_ore": "砕いた亜鉛鉱石",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "生地",
|
||||
"item.create.electron_tube": "電子管",
|
||||
"item.create.empty_blaze_burner": "空のブレイズバーナー",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "溶岩の奥のケース入りファン",
|
||||
"create.recipe.pressing": "プレス",
|
||||
"create.recipe.mixing": "混合",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "自動不定形クラフト",
|
||||
"create.recipe.automatic_brewing": "自動醸造",
|
||||
"create.recipe.packing": "圧縮",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "混ぜる音",
|
||||
"create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "アイテムが滑る",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "ブレイズの咀嚼音",
|
||||
"create.subtitle.schematicannon_launch_block": "概略図砲が発射する",
|
||||
"create.subtitle.funnel_flap": "ファンネルがはためく",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "概略図砲が作業を終える",
|
||||
"create.subtitle.scroll_value": "スクロールのカチカチ音",
|
||||
"create.subtitle.mechanical_press_activation": "メカニカルプレスがガーンと鳴る",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 706",
|
||||
"_": "Missing Localizations: 713",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "톱니바퀴",
|
||||
"block.create.content_observer": "정보 감지기",
|
||||
"block.create.controller_rail": "방향 레일",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "구리 블록",
|
||||
"block.create.copper_casing": "구리 케이스",
|
||||
"block.create.copper_ore": "구리 광석",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "색채 혼합물",
|
||||
"item.create.cinder_flour": "잿가루",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "구리 주괴",
|
||||
"item.create.copper_nugget": "구리 조각",
|
||||
"item.create.copper_sheet": "구리 판",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
|
||||
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
|
||||
"item.create.crushed_zinc_ore": "분쇄된 아연 광석",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "반죽",
|
||||
"item.create.electron_tube": "전지 튜브",
|
||||
"item.create.empty_blaze_burner": "빈 블레이즈 버너",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "용암과 선풍기",
|
||||
"create.recipe.pressing": "압착",
|
||||
"create.recipe.mixing": "혼합",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "무형 자동 조합",
|
||||
"create.recipe.automatic_brewing": "자동 양조",
|
||||
"create.recipe.packing": "압축",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "블레이즈가 행복하게 섭취함",
|
||||
"create.subtitle.schematicannon_launch_block": "청사진 대포가 발포함",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "청사진 대포가 끝남",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "압착기가 가동됨",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1570",
|
||||
"_": "Missing Localizations: 1577",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Tandwiel",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.controller_rail": "UNLOCALIZED: Controller Rail",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "UNLOCALIZED: Block of Copper",
|
||||
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
|
||||
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
|
||||
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Koperstaaf",
|
||||
"item.create.copper_nugget": "Koper klompje",
|
||||
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
|
||||
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
|
||||
"item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Deeg",
|
||||
"item.create.electron_tube": "UNLOCALIZED: Electron Tube",
|
||||
"item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
|
||||
"create.recipe.pressing": "Persen",
|
||||
"create.recipe.mixing": "Mengen",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
|
||||
"create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing",
|
||||
"create.recipe.packing": "Compressen",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
|
||||
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 31",
|
||||
"_": "Missing Localizations: 38",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Koło zębate",
|
||||
"block.create.content_observer": "Detektor zawartości",
|
||||
"block.create.controller_rail": "Tory sterujące",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "Blok miedzi",
|
||||
"block.create.copper_casing": "Miedziana Obudowa",
|
||||
"block.create.copper_ore": "Ruda miedzi",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "Jagody w czekoladzie",
|
||||
"item.create.chromatic_compound": "Związek chromatyczny",
|
||||
"item.create.cinder_flour": "Rozżarzona mąka",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Sztabka miedzi",
|
||||
"item.create.copper_nugget": "Bryłka miedzi",
|
||||
"item.create.copper_sheet": "Arkusz miedzi",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Rozkruszona ruda cyny",
|
||||
"item.create.crushed_uranium_ore": "Rozkruszona ruda uranu",
|
||||
"item.create.crushed_zinc_ore": "Rozkruszona ruda cynku",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Ciasto",
|
||||
"item.create.electron_tube": "Lampa elektronowa",
|
||||
"item.create.empty_blaze_burner": "Pusty płomienny palnik",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "Wiatrak za lawą",
|
||||
"create.recipe.pressing": "Tłoczenie",
|
||||
"create.recipe.mixing": "Mieszanie",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "Zautomatyzowanie nieokreślone konstruowanie",
|
||||
"create.recipe.automatic_brewing": "Zautomatyzowane warzenie",
|
||||
"create.recipe.packing": "Prasowanie",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "Płomyk szczęśliwie przeżuwa",
|
||||
"create.subtitle.schematicannon_launch_block": "Schematoarmata strzela",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "Schematoarmata skończyła",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "Mechaniczna prasa się uruchamia",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1622",
|
||||
"_": "Missing Localizations: 1629",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Roda Dentada",
|
||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
||||
"block.create.controller_rail": "UNLOCALIZED: Controller Rail",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "UNLOCALIZED: Block of Copper",
|
||||
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
|
||||
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
|
||||
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
|
||||
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
|
||||
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
|
||||
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
|
||||
"item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Massa",
|
||||
"item.create.electron_tube": "UNLOCALIZED: Electron Tube",
|
||||
"item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
|
||||
"create.recipe.pressing": "Prensa Mecânica",
|
||||
"create.recipe.mixing": "UNLOCALIZED: Mixing",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
|
||||
"create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing",
|
||||
"create.recipe.packing": "UNLOCALIZED: Compacting",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
|
||||
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 550",
|
||||
"_": "Missing Localizations: 557",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "Шестерня",
|
||||
"block.create.content_observer": "Наблюдетель за содержимым",
|
||||
"block.create.controller_rail": "Контролирующая рельса",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "Медный блок",
|
||||
"block.create.copper_casing": "Медный корпус",
|
||||
"block.create.copper_ore": "Медная руда",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "Ягоды в шоколадной глазури",
|
||||
"item.create.chromatic_compound": "Хроматический компаунд",
|
||||
"item.create.cinder_flour": "Незераковая пыль",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "Медный слиток",
|
||||
"item.create.copper_nugget": "Кусочек меди",
|
||||
"item.create.copper_sheet": "Медный лист",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "Дроблёная оловянная руда",
|
||||
"item.create.crushed_uranium_ore": "Дроблёная урановая руда",
|
||||
"item.create.crushed_zinc_ore": "Дроблёная цинковая руда",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "Тесто",
|
||||
"item.create.electron_tube": "Электронная лампа",
|
||||
"item.create.empty_blaze_burner": "Пустая горелека Всполоха",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "Вентилятор за текущей лавой",
|
||||
"create.recipe.pressing": "Прессование",
|
||||
"create.recipe.mixing": "Смешивание",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "Автоматическая бесформенная сборка",
|
||||
"create.recipe.automatic_brewing": "Автоматическое смешивание",
|
||||
"create.recipe.packing": "Прессование",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "Всполох радостно жуёт",
|
||||
"create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "Схематичная пушка закончила работу",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "Механический пресс активирован",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 36",
|
||||
"_": "Missing Localizations: 43",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "齿轮",
|
||||
"block.create.content_observer": "物品侦测器",
|
||||
"block.create.controller_rail": "控制铁轨",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "铜块",
|
||||
"block.create.copper_casing": "铜机壳",
|
||||
"block.create.copper_ore": "铜矿石",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "巧克力包层浆果",
|
||||
"item.create.chromatic_compound": "异彩化合物",
|
||||
"item.create.cinder_flour": "下界面粉",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "铜锭",
|
||||
"item.create.copper_nugget": "铜粒",
|
||||
"item.create.copper_sheet": "铜板",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "粉碎锡矿石",
|
||||
"item.create.crushed_uranium_ore": "粉碎铀矿石",
|
||||
"item.create.crushed_zinc_ore": "粉碎锌矿石",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "面团",
|
||||
"item.create.electron_tube": "电子管",
|
||||
"item.create.empty_blaze_burner": "空的烈焰人燃烧室",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "在熔岩后放置鼓风机",
|
||||
"create.recipe.pressing": "金属压片",
|
||||
"create.recipe.mixing": "混合搅拌",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "自动搅拌",
|
||||
"create.recipe.automatic_brewing": "自动酿造",
|
||||
"create.recipe.packing": "压块塑形",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "烈焰人:咀嚼",
|
||||
"create.subtitle.schematicannon_launch_block": "蓝图加农炮:发射",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "蓝图加农炮:叮",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "辊压机:工作中",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 655",
|
||||
"_": "Missing Localizations: 662",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
|||
"block.create.cogwheel": "齒輪",
|
||||
"block.create.content_observer": "物品偵測器",
|
||||
"block.create.controller_rail": "控制鐵軌",
|
||||
"block.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"block.create.copper_block": "銅磚",
|
||||
"block.create.copper_casing": "銅機殼",
|
||||
"block.create.copper_ore": "銅礦石",
|
||||
|
@ -438,6 +439,7 @@
|
|||
"item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries",
|
||||
"item.create.chromatic_compound": "異彩化合物",
|
||||
"item.create.cinder_flour": "地獄麵粉",
|
||||
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
|
||||
"item.create.copper_ingot": "銅錠",
|
||||
"item.create.copper_nugget": "銅粒",
|
||||
"item.create.copper_sheet": "銅板",
|
||||
|
@ -456,6 +458,8 @@
|
|||
"item.create.crushed_tin_ore": "碎狀錫礦石",
|
||||
"item.create.crushed_uranium_ore": "碎狀鈾礦石",
|
||||
"item.create.crushed_zinc_ore": "碎狀鋅礦石",
|
||||
"item.create.diving_boots": "UNLOCALIZED: Diving Boots",
|
||||
"item.create.diving_helmet": "UNLOCALIZED: Diving Helmet",
|
||||
"item.create.dough": "麵團",
|
||||
"item.create.electron_tube": "真空管",
|
||||
"item.create.empty_blaze_burner": "空的烈焰使者動力爐",
|
||||
|
@ -678,6 +682,7 @@
|
|||
"create.recipe.fan_blasting.fan": "在熔岩後放置鼓風機",
|
||||
"create.recipe.pressing": "金屬壓片",
|
||||
"create.recipe.mixing": "混合攪拌",
|
||||
"create.recipe.deploying": "UNLOCALIZED: Deploying",
|
||||
"create.recipe.automatic_shapeless": "自動攪拌",
|
||||
"create.recipe.automatic_brewing": "自動釀造",
|
||||
"create.recipe.packing": "壓塊塑形",
|
||||
|
@ -1138,11 +1143,13 @@
|
|||
"create.subtitle.mixing": "UNLOCALIZED: Mixing Noises",
|
||||
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
|
||||
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
|
||||
"create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish",
|
||||
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
|
||||
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
|
||||
"create.subtitle.blaze_munch": "烈焰使者開心地吃著",
|
||||
"create.subtitle.schematicannon_launch_block": "藍圖大炮發射",
|
||||
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps",
|
||||
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
|
||||
"create.subtitle.schematicannon_finish": "藍圖大炮完成任務",
|
||||
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
|
||||
"create.subtitle.mechanical_press_activation": "液壓機工作",
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/copper_backtank/item"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "create:item/diving_boots"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "create:item/diving_helmet"
|
||||
}
|
||||
}
|
|
@ -49,6 +49,15 @@
|
|||
],
|
||||
"subtitle": "create.subtitle.contraption_disassemble"
|
||||
},
|
||||
"copper_armor_equip": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "minecraft:item.armor.equip_gold",
|
||||
"type": "event"
|
||||
}
|
||||
],
|
||||
"subtitle": "create.subtitle.copper_armor_equip"
|
||||
},
|
||||
"crafter_click": {
|
||||
"sounds": [
|
||||
{
|
||||
|
@ -101,6 +110,15 @@
|
|||
],
|
||||
"subtitle": "create.subtitle.deny"
|
||||
},
|
||||
"deployer_polish": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "minecraft:ui.stonecutter.take_result",
|
||||
"type": "event"
|
||||
}
|
||||
],
|
||||
"subtitle": "create.subtitle.deployer_polish"
|
||||
},
|
||||
"depot_plop": {
|
||||
"sounds": [
|
||||
{
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"create:crafting/appliances/copper_backtank"
|
||||
]
|
||||
},
|
||||
"criteria": {
|
||||
"has_item": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"tag": "forge:ingots/copper"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"trigger": "minecraft:recipe_unlocked",
|
||||
"conditions": {
|
||||
"recipe": "create:crafting/appliances/copper_backtank"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_item",
|
||||
"has_the_recipe"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"create:crafting/appliances/diving_boots"
|
||||
]
|
||||
},
|
||||
"criteria": {
|
||||
"has_item": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"tag": "forge:ingots/copper"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"trigger": "minecraft:recipe_unlocked",
|
||||
"conditions": {
|
||||
"recipe": "create:crafting/appliances/diving_boots"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_item",
|
||||
"has_the_recipe"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"create:crafting/appliances/diving_helmet"
|
||||
]
|
||||
},
|
||||
"criteria": {
|
||||
"has_item": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"tag": "forge:ingots/copper"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"trigger": "minecraft:recipe_unlocked",
|
||||
"conditions": {
|
||||
"recipe": "create:crafting/appliances/diving_helmet"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_item",
|
||||
"has_the_recipe"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"functions": [
|
||||
{
|
||||
"function": "minecraft:copy_name",
|
||||
"source": "block_entity"
|
||||
},
|
||||
{
|
||||
"function": "minecraft:copy_nbt",
|
||||
"source": "block_entity",
|
||||
"ops": [
|
||||
{
|
||||
"source": "Air",
|
||||
"target": "Air",
|
||||
"op": "replace"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"name": "create:copper_backtank"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -6,6 +6,19 @@
|
|||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"functions": [
|
||||
{
|
||||
"function": "minecraft:copy_nbt",
|
||||
"source": "block_entity",
|
||||
"ops": [
|
||||
{
|
||||
"source": "Options",
|
||||
"target": "BlockEntityTag.Options",
|
||||
"op": "replace"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"name": "create:schematicannon"
|
||||
}
|
||||
],
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"AGA",
|
||||
"PPP",
|
||||
" P "
|
||||
],
|
||||
"key": {
|
||||
"G": {
|
||||
"item": "create:shaft"
|
||||
},
|
||||
"A": {
|
||||
"item": "create:andesite_alloy"
|
||||
},
|
||||
"P": {
|
||||
"tag": "forge:ingots/copper"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "create:copper_backtank"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"P P",
|
||||
"P P",
|
||||
"G G"
|
||||
],
|
||||
"key": {
|
||||
"G": {
|
||||
"item": "create:andesite_alloy"
|
||||
},
|
||||
"P": {
|
||||
"tag": "forge:ingots/copper"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "create:diving_boots"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"PPP",
|
||||
"PGP"
|
||||
],
|
||||
"key": {
|
||||
"G": {
|
||||
"tag": "forge:glass"
|
||||
},
|
||||
"P": {
|
||||
"tag": "forge:ingots/copper"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "create:diving_helmet"
|
||||
}
|
||||
}
|
|
@ -25,6 +25,7 @@
|
|||
"create:furnace_engine",
|
||||
"create:redstone_link",
|
||||
"#minecraft:doors",
|
||||
"#minecraft:beds",
|
||||
"minecraft:flower_pot",
|
||||
"minecraft:bell",
|
||||
"minecraft:cocoa"
|
||||
|
|
|
@ -98,6 +98,9 @@ public class AllBlockPartials {
|
|||
GOGGLES = get("goggles"),
|
||||
|
||||
EJECTOR_TOP = get("weighted_ejector/top"),
|
||||
|
||||
COPPER_BACKTANK_SHAFT = get("copper_backtank/block_shaft_input"),
|
||||
COPPER_BACKTANK_COGS = get("copper_backtank/block_cogs"),
|
||||
|
||||
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
|
||||
COUPLING_RING = getEntity("minecart_coupling/ring"),
|
||||
|
|
|
@ -115,6 +115,7 @@ import com.simibubi.create.content.contraptions.relays.encased.GearshiftBlock;
|
|||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeGenerator;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankBlock;
|
||||
import com.simibubi.create.content.curiosities.projector.ChromaticProjectorBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelBlock;
|
||||
|
@ -181,6 +182,15 @@ import net.minecraft.data.ShapedRecipeBuilder;
|
|||
import net.minecraft.item.DyeColor;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.Rarity;
|
||||
import net.minecraft.loot.ConstantRange;
|
||||
import net.minecraft.loot.ItemLootEntry;
|
||||
import net.minecraft.loot.LootPool;
|
||||
import net.minecraft.loot.LootTable;
|
||||
import net.minecraft.loot.LootTable.Builder;
|
||||
import net.minecraft.loot.conditions.ILootCondition.IBuilder;
|
||||
import net.minecraft.loot.conditions.SurvivesExplosion;
|
||||
import net.minecraft.loot.functions.CopyName;
|
||||
import net.minecraft.loot.functions.CopyNbt;
|
||||
import net.minecraft.state.properties.PistonType;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
|
@ -206,6 +216,16 @@ public class AllBlocks {
|
|||
REGISTRATE.block("schematicannon", SchematicannonBlock::new)
|
||||
.initialProperties(() -> Blocks.DISPENSER)
|
||||
.blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov)))
|
||||
.loot((lt, block) -> {
|
||||
Builder builder = LootTable.builder();
|
||||
IBuilder survivesExplosion = SurvivesExplosion.builder();
|
||||
lt.registerLootTable(block, builder.addLootPool(LootPool.builder()
|
||||
.acceptCondition(survivesExplosion)
|
||||
.rolls(ConstantRange.of(1))
|
||||
.addEntry(ItemLootEntry.builder(AllBlocks.SCHEMATICANNON.get().asItem())
|
||||
.acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY)
|
||||
.func_216056_a("Options", "BlockEntityTag.Options")))));
|
||||
})
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
.register();
|
||||
|
@ -466,7 +486,7 @@ public class AllBlocks {
|
|||
.loot((lt, block) -> lt.registerLootTable(block, BlazeBurnerBlock.buildLootTable()))
|
||||
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
|
||||
.item(BlazeBurnerBlockItem::withBlaze)
|
||||
.model(AssetLookup.<BlazeBurnerBlockItem>customItemModel("blaze_burner", "block_with_blaze"))
|
||||
.model(AssetLookup.<BlazeBurnerBlockItem>customBlockItemModel("blaze_burner", "block_with_blaze"))
|
||||
.build()
|
||||
.register();
|
||||
|
||||
|
@ -634,7 +654,7 @@ public class AllBlocks {
|
|||
.onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard))
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.item(FluidTankItem::new)
|
||||
.model(AssetLookup.<FluidTankItem>customItemModel("_", "block_single_window"))
|
||||
.model(AssetLookup.<FluidTankItem>customBlockItemModel("_", "block_single_window"))
|
||||
.build()
|
||||
.register();
|
||||
|
||||
|
@ -1273,6 +1293,38 @@ public class AllBlocks {
|
|||
.transform(customItemModel("diodes", "latch_off"))
|
||||
.register();
|
||||
|
||||
// Curiosities
|
||||
|
||||
static {
|
||||
REGISTRATE.startSection(AllSections.CURIOSITIES);
|
||||
}
|
||||
|
||||
public static final BlockEntry<CopperBacktankBlock> COPPER_BACKTANK =
|
||||
REGISTRATE.block("copper_backtank", CopperBacktankBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.transform(StressConfigDefaults.setImpact(4.0))
|
||||
.loot((lt, block) -> {
|
||||
Builder builder = LootTable.builder();
|
||||
IBuilder survivesExplosion = SurvivesExplosion.builder();
|
||||
lt.registerLootTable(block, builder.addLootPool(LootPool.builder()
|
||||
.acceptCondition(survivesExplosion)
|
||||
.rolls(ConstantRange.of(1))
|
||||
.addEntry(ItemLootEntry.builder(AllItems.COPPER_BACKTANK.get())
|
||||
.acceptFunction(CopyName.builder(CopyName.Source.BLOCK_ENTITY))
|
||||
.acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY)
|
||||
.func_216056_a("Air", "Air")))));
|
||||
})
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<ChromaticProjectorBlock> CHROMATIC_PROJECTOR =
|
||||
REGISTRATE.block("chromatic_projector", ChromaticProjectorBlock::new)
|
||||
.initialProperties(() -> Blocks.IRON_BLOCK)
|
||||
.item()
|
||||
.build()
|
||||
.register();
|
||||
|
||||
// Materials
|
||||
|
||||
static {
|
||||
|
@ -1350,17 +1402,6 @@ public class AllBlocks {
|
|||
.lang("Block of Brass")
|
||||
.register();
|
||||
|
||||
static {
|
||||
REGISTRATE.startSection(AllSections.CURIOSITIES);
|
||||
}
|
||||
|
||||
public static final BlockEntry<ChromaticProjectorBlock> CHROMATIC_PROJECTOR =
|
||||
REGISTRATE.block("chromatic_projector", ChromaticProjectorBlock::new)
|
||||
.initialProperties(() -> Blocks.IRON_BLOCK)
|
||||
.item()
|
||||
.build()
|
||||
.register();
|
||||
|
||||
// Load this class
|
||||
|
||||
public static void register() {}
|
||||
|
|
|
@ -29,6 +29,10 @@ import com.simibubi.create.content.curiosities.CombustibleItem;
|
|||
import com.simibubi.create.content.curiosities.RefinedRadianceItem;
|
||||
import com.simibubi.create.content.curiosities.ShadowSteelItem;
|
||||
import com.simibubi.create.content.curiosities.TreeFertilizerItem;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperArmorItem;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankItem;
|
||||
import com.simibubi.create.content.curiosities.armor.DivingBootsItem;
|
||||
import com.simibubi.create.content.curiosities.armor.DivingHelmetItem;
|
||||
import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem;
|
||||
import com.simibubi.create.content.curiosities.symmetry.client.SymmetryWandModel;
|
||||
import com.simibubi.create.content.curiosities.tools.ExtendoGripItem;
|
||||
|
@ -47,6 +51,7 @@ import com.simibubi.create.foundation.item.TagDependentIngredientItem;
|
|||
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||
import com.tterrag.registrate.util.entry.ItemEntry;
|
||||
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Food;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.Rarity;
|
||||
|
@ -168,12 +173,12 @@ public class AllItems {
|
|||
|
||||
public static final ItemEntry<VerticalGearboxItem> VERTICAL_GEARBOX =
|
||||
REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new)
|
||||
.model(AssetLookup.<VerticalGearboxItem>customItemModel("gearbox", "item_vertical"))
|
||||
.model(AssetLookup.<VerticalGearboxItem>customBlockItemModel("gearbox", "item_vertical"))
|
||||
.register();
|
||||
|
||||
public static final ItemEntry<BlazeBurnerBlockItem> EMPTY_BLAZE_BURNER =
|
||||
REGISTRATE.item("empty_blaze_burner", BlazeBurnerBlockItem::empty)
|
||||
.model(AssetLookup.<BlazeBurnerBlockItem>customItemModel("blaze_burner", "block"))
|
||||
.model(AssetLookup.<BlazeBurnerBlockItem>customBlockItemModel("blaze_burner", "block"))
|
||||
.register();
|
||||
|
||||
public static final ItemEntry<GogglesItem> GOGGLES = REGISTRATE.item("goggles", GogglesItem::new)
|
||||
|
@ -208,13 +213,13 @@ public class AllItems {
|
|||
.transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new))
|
||||
.model(AssetLookup.itemModelWithPartials())
|
||||
.register();
|
||||
|
||||
|
||||
public static final ItemEntry<SymmetryWandItem> WAND_OF_SYMMETRY =
|
||||
REGISTRATE.item("wand_of_symmetry", SymmetryWandItem::new)
|
||||
.transform(CreateRegistrate.customRenderedItem(() -> SymmetryWandModel::new))
|
||||
.model(AssetLookup.itemModelWithPartials())
|
||||
.register();
|
||||
|
||||
|
||||
public static final ItemEntry<WorldshaperItem> WORLDSHAPER =
|
||||
REGISTRATE.item("handheld_worldshaper", WorldshaperItem::new)
|
||||
.properties(p -> p.rarity(Rarity.EPIC))
|
||||
|
@ -256,6 +261,20 @@ public class AllItems {
|
|||
REGISTRATE.startSection(CURIOSITIES);
|
||||
}
|
||||
|
||||
public static final ItemEntry<? extends CopperArmorItem>
|
||||
|
||||
COPPER_BACKTANK =
|
||||
REGISTRATE
|
||||
.item("copper_backtank", p -> new CopperBacktankItem(p, new BlockItem(AllBlocks.COPPER_BACKTANK.get(), p)))
|
||||
.model(AssetLookup.<CopperBacktankItem>customGenericItemModel("_", "item"))
|
||||
.register(),
|
||||
|
||||
DIVING_HELMET = REGISTRATE.item("diving_helmet", DivingHelmetItem::new)
|
||||
.register(),
|
||||
|
||||
DIVING_BOOTS = REGISTRATE.item("diving_boots", DivingBootsItem::new)
|
||||
.register();
|
||||
|
||||
public static final ItemEntry<TreeFertilizerItem> TREE_FERTILIZER =
|
||||
REGISTRATE.item("tree_fertilizer", TreeFertilizerItem::new)
|
||||
.register();
|
||||
|
|
|
@ -6,6 +6,7 @@ import java.util.function.Supplier;
|
|||
import com.simibubi.create.compat.jei.ConversionRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.crusher.CrushingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.millstone.MillingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.mixer.CompactingRecipe;
|
||||
|
@ -44,6 +45,7 @@ public enum AllRecipeTypes {
|
|||
PRESSING(processingSerializer(PressingRecipe::new)),
|
||||
SANDPAPER_POLISHING(processingSerializer(SandPaperPolishingRecipe::new)),
|
||||
SPLASHING(processingSerializer(SplashingRecipe::new)),
|
||||
DEPLOYING(processingSerializer(DeployerApplicationRecipe::new)),
|
||||
FILLING(processingSerializer(FillingRecipe::new)),
|
||||
EMPTYING(processingSerializer(EmptyingRecipe::new)),
|
||||
|
||||
|
|
|
@ -141,6 +141,8 @@ public class AllShapes {
|
|||
BASIN_COLLISION_SHAPE = shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 16, 14)
|
||||
.add(2, 0, 2, 14, 2, 14)
|
||||
.build(),
|
||||
BACKTANK = shape(3, 0, 3, 13, 12, 13).add(SIX_VOXEL_POLE.get(Axis.Y))
|
||||
.build(),
|
||||
SPEED_CONTROLLER = shape(0, 0, 0, 16, 4, 16).add(1, 1, 1, 15, 13, 15)
|
||||
.add(0, 8, 0, 16, 14, 16)
|
||||
.build(),
|
||||
|
|
|
@ -148,6 +148,16 @@ public class AllSoundEvents {
|
|||
.category(SoundCategory.BLOCKS)
|
||||
.build(),
|
||||
|
||||
COPPER_ARMOR_EQUIP = create("copper_armor_equip").subtitle("Diving equipment clinks")
|
||||
.playExisting(SoundEvents.ITEM_ARMOR_EQUIP_GOLD, 1f, 1f)
|
||||
.category(SoundCategory.PLAYERS)
|
||||
.build(),
|
||||
|
||||
AUTO_POLISH = create("deployer_polish").subtitle("Deployer applies polish")
|
||||
.playExisting(SoundEvents.UI_STONECUTTER_TAKE_RESULT, 1f, 1f)
|
||||
.category(SoundCategory.BLOCKS)
|
||||
.build(),
|
||||
|
||||
BLAZE_MUNCH = create("blaze_munch").subtitle("Blaze Burner munches")
|
||||
.playExisting(SoundEvents.ENTITY_GENERIC_EAT, .5f, 1f)
|
||||
.category(SoundCategory.BLOCKS)
|
||||
|
@ -162,6 +172,11 @@ public class AllSoundEvents {
|
|||
for (SoundEntry entry : entries.values())
|
||||
entry.register(registry);
|
||||
}
|
||||
|
||||
public static void prepare() {
|
||||
for (SoundEntry entry : entries.values())
|
||||
entry.prepare();
|
||||
}
|
||||
|
||||
public static JsonElement provideLangEntries() {
|
||||
JsonObject object = new JsonObject();
|
||||
|
@ -278,6 +293,8 @@ public class AllSoundEvents {
|
|||
this.category = category;
|
||||
}
|
||||
|
||||
public abstract void prepare();
|
||||
|
||||
public abstract void register(IForgeRegistry<SoundEvent> registry);
|
||||
|
||||
public abstract void write(JsonObject json);
|
||||
|
@ -346,18 +363,23 @@ public class AllSoundEvents {
|
|||
this.wrappedEvents = wrappedEvents;
|
||||
compiledEvents = Lists.newArrayList();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void register(IForgeRegistry<SoundEvent> registry) {
|
||||
public void prepare() {
|
||||
for (int i = 0; i < wrappedEvents.size(); i++) {
|
||||
ResourceLocation location = Create.asResource(getIdOf(i));
|
||||
SoundEvent sound = new SoundEvent(location).setRegistryName(location);
|
||||
registry.register(sound);
|
||||
compiledEvents.add(Pair.of(sound, wrappedEvents.get(i)
|
||||
.getSecond()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(IForgeRegistry<SoundEvent> registry) {
|
||||
for (Pair<SoundEvent, Couple<Float>> pair : compiledEvents)
|
||||
registry.register(pair.getFirst());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getMainEvent() {
|
||||
return compiledEvents.get(0)
|
||||
|
@ -413,11 +435,16 @@ public class AllSoundEvents {
|
|||
public CustomSoundEntry(String id, String subtitle, SoundCategory category) {
|
||||
super(id, subtitle, category);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepare() {
|
||||
ResourceLocation location = getLocation();
|
||||
event = new SoundEvent(location).setRegistryName(location);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(IForgeRegistry<SoundEvent> registry) {
|
||||
ResourceLocation location = getLocation();
|
||||
registry.register(event = new SoundEvent(location).setRegistryName(location));
|
||||
registry.register(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -209,6 +209,7 @@ public class AllTags {
|
|||
AllBlockTags.WINDMILL_SAILS.includeAll(BlockTags.WOOL);
|
||||
|
||||
AllBlockTags.BRITTLE.includeAll(BlockTags.DOORS);
|
||||
AllBlockTags.BRITTLE.includeAll(BlockTags.BEDS);
|
||||
AllBlockTags.BRITTLE.add(Blocks.FLOWER_POT, Blocks.BELL, Blocks.COCOA);
|
||||
|
||||
AllBlockTags.FAN_TRANSPARENT.includeAll(BlockTags.FENCES);
|
||||
|
|
|
@ -116,6 +116,9 @@ import com.simibubi.create.content.contraptions.relays.gearbox.GearboxInstance;
|
|||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxRenderer;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearshiftTileEntity;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankInstance;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankRenderer;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankTileEntity;
|
||||
import com.simibubi.create.content.curiosities.projector.ChromaticProjectorInstance;
|
||||
import com.simibubi.create.content.curiosities.projector.ChromaticProjectorTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelInstance;
|
||||
|
@ -647,23 +650,27 @@ public class AllTileEntities {
|
|||
.instance(() -> AdjustableRepeaterInstance::new)
|
||||
.validBlocks(AllBlocks.ADJUSTABLE_REPEATER)
|
||||
.renderer(() -> AdjustableRepeaterRenderer::new)
|
||||
.register();
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<AdjustablePulseRepeaterTileEntity> ADJUSTABLE_PULSE_REPEATER =
|
||||
Create.registrate()
|
||||
.tileEntity("adjustable_pulse_repeater", AdjustablePulseRepeaterTileEntity::new)
|
||||
.instance(() -> AdjustableRepeaterInstance::new)
|
||||
.validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER)
|
||||
.renderer(() -> AdjustableRepeaterRenderer::new)
|
||||
.register();
|
||||
Create.registrate()
|
||||
.tileEntity("adjustable_pulse_repeater", AdjustablePulseRepeaterTileEntity::new)
|
||||
.instance(() -> AdjustableRepeaterInstance::new)
|
||||
.validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER)
|
||||
.renderer(() -> AdjustableRepeaterRenderer::new)
|
||||
.register();
|
||||
public static final TileEntityEntry<CopperBacktankTileEntity> COPPER_BACKTANK = Create.registrate()
|
||||
.tileEntity("copper_backtank", CopperBacktankTileEntity::new)
|
||||
.instance(() -> CopperBacktankInstance::new)
|
||||
.validBlocks(AllBlocks.COPPER_BACKTANK)
|
||||
.renderer(() -> CopperBacktankRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<ChromaticProjectorTileEntity> CHROMATIC_PROJECTOR =
|
||||
Create.registrate()
|
||||
.tileEntity("chromatic_projector", ChromaticProjectorTileEntity::new)
|
||||
.instance(() -> ChromaticProjectorInstance::new)
|
||||
.validBlocks(AllBlocks.CHROMATIC_PROJECTOR)
|
||||
.register();
|
||||
public static final TileEntityEntry<ChromaticProjectorTileEntity> CHROMATIC_PROJECTOR =Create.registrate()
|
||||
.tileEntity("chromatic_projector", ChromaticProjectorTileEntity::new)
|
||||
.instance(() -> ChromaticProjectorInstance::new)
|
||||
.validBlocks(AllBlocks.CHROMATIC_PROJECTOR)
|
||||
.register();
|
||||
|
||||
public static void register() {
|
||||
}
|
||||
public static void register() {}
|
||||
}
|
||||
|
|
|
@ -78,6 +78,7 @@ public class Create {
|
|||
IEventBus modEventBus = FMLJavaModLoadingContext.get()
|
||||
.getModEventBus();
|
||||
|
||||
AllSoundEvents.prepare();
|
||||
AllBlocks.register();
|
||||
AllItems.register();
|
||||
AllFluids.register();
|
||||
|
|
|
@ -14,9 +14,11 @@ import com.jozufozu.flywheel.backend.instancing.InstancedTileRenderer;
|
|||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankArmorLayer;
|
||||
import com.simibubi.create.content.schematics.ClientSchematicLoader;
|
||||
import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler;
|
||||
import com.simibubi.create.content.schematics.client.SchematicHandler;
|
||||
import com.simibubi.create.events.ClientEvents;
|
||||
import com.simibubi.create.foundation.ResourceReloadHandler;
|
||||
import com.simibubi.create.foundation.block.render.CustomBlockModels;
|
||||
import com.simibubi.create.foundation.block.render.SpriteShifter;
|
||||
|
@ -79,6 +81,7 @@ public class CreateClient {
|
|||
modEventBus.addListener(CreateClient::onModelRegistry);
|
||||
modEventBus.addListener(CreateClient::onTextureStitch);
|
||||
modEventBus.addListener(AllParticleTypes::registerFactories);
|
||||
modEventBus.addListener(ClientEvents::loadCompleted);
|
||||
|
||||
Backend.init();
|
||||
CreateFlywheelHandler.init();
|
||||
|
@ -109,6 +112,7 @@ public class CreateClient {
|
|||
PonderIndex.registerTags();
|
||||
|
||||
UIRenderHelper.init();
|
||||
UIRenderHelper.enableStencil();
|
||||
|
||||
IResourceManager resourceManager = Minecraft.getInstance()
|
||||
.getResourceManager();
|
||||
|
@ -116,6 +120,10 @@ public class CreateClient {
|
|||
((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler());
|
||||
|
||||
AllBlockPartials.clientInit();
|
||||
|
||||
event.enqueueWork(() -> {
|
||||
CopperBacktankArmorLayer.register();
|
||||
});
|
||||
}
|
||||
|
||||
public static void onTextureStitch(TextureStitchEvent.Pre event) {
|
||||
|
|
|
@ -19,6 +19,7 @@ import com.simibubi.create.compat.jei.category.BlockCuttingCategory;
|
|||
import com.simibubi.create.compat.jei.category.BlockCuttingCategory.CondensedBlockCuttingRecipe;
|
||||
import com.simibubi.create.compat.jei.category.CreateRecipeCategory;
|
||||
import com.simibubi.create.compat.jei.category.CrushingCategory;
|
||||
import com.simibubi.create.compat.jei.category.DeployingCategory;
|
||||
import com.simibubi.create.compat.jei.category.FanBlastingCategory;
|
||||
import com.simibubi.create.compat.jei.category.FanSmokingCategory;
|
||||
import com.simibubi.create.compat.jei.category.FanWashingCategory;
|
||||
|
@ -33,6 +34,7 @@ import com.simibubi.create.compat.jei.category.PressingCategory;
|
|||
import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory;
|
||||
import com.simibubi.create.compat.jei.category.SawingCategory;
|
||||
import com.simibubi.create.compat.jei.category.SpoutCategory;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
|
||||
|
@ -53,7 +55,6 @@ import mezz.jei.api.registration.IGuiHandlerRegistration;
|
|||
import mezz.jei.api.registration.IRecipeCatalystRegistration;
|
||||
import mezz.jei.api.registration.IRecipeCategoryRegistration;
|
||||
import mezz.jei.api.registration.IRecipeRegistration;
|
||||
import mezz.jei.api.registration.ISubtypeRegistration;
|
||||
import mezz.jei.api.runtime.IIngredientManager;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -164,6 +165,14 @@ public class CreateJEI implements IModPlugin {
|
|||
.catalyst(AllItems.SAND_PAPER::get)
|
||||
.catalyst(AllItems.RED_SAND_PAPER::get)
|
||||
.build(),
|
||||
|
||||
deploying = register("deploying", DeployingCategory::new)
|
||||
.recipeList(() -> DeployerApplicationRecipe.convert(findRecipesByType(AllRecipeTypes.SANDPAPER_POLISHING.type)))
|
||||
.recipes(AllRecipeTypes.DEPLOYING)
|
||||
.catalyst(AllBlocks.DEPLOYER::get)
|
||||
.catalyst(AllBlocks.DEPOT::get)
|
||||
.catalyst(AllItems.BELT_CONNECTOR::get)
|
||||
.build(),
|
||||
|
||||
mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new)
|
||||
.recipeList(MysteriousItemConversionCategory::getRecipes)
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
package com.simibubi.create.compat.jei.category;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||
|
||||
import mezz.jei.api.constants.VanillaTypes;
|
||||
import mezz.jei.api.gui.IRecipeLayout;
|
||||
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
|
||||
import mezz.jei.api.ingredients.IIngredients;
|
||||
|
||||
public class DeployingCategory extends CreateRecipeCategory<DeployerApplicationRecipe> {
|
||||
|
||||
AnimatedDeployer deployer;
|
||||
|
||||
public DeployingCategory() {
|
||||
super(itemIcon(AllBlocks.DEPLOYER.get()), emptyBackground(177, 70));
|
||||
deployer = new AnimatedDeployer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<DeployerApplicationRecipe> getRecipeClass() {
|
||||
return DeployerApplicationRecipe.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIngredients(DeployerApplicationRecipe recipe, IIngredients ingredients) {
|
||||
ingredients.setInputIngredients(recipe.getIngredients());
|
||||
ingredients.setInputLists(VanillaTypes.FLUID, recipe.getFluidIngredients()
|
||||
.stream()
|
||||
.map(FluidIngredient::getMatchingFluidStacks)
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
if (!recipe.getRollableResults()
|
||||
.isEmpty())
|
||||
ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRecipe(IRecipeLayout recipeLayout, DeployerApplicationRecipe recipe, IIngredients ingredients) {
|
||||
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
|
||||
itemStacks.init(0, true, 50, 4);
|
||||
itemStacks.set(0, Arrays.asList(recipe.getRequiredHeldItem()
|
||||
.getMatchingStacks()));
|
||||
itemStacks.init(1, true, 26, 50);
|
||||
itemStacks.set(1, Arrays.asList(recipe.getProcessedItem()
|
||||
.getMatchingStacks()));
|
||||
itemStacks.init(2, false, 131, 50);
|
||||
itemStacks.set(2, recipe.getRecipeOutput());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(DeployerApplicationRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
|
||||
AllGuiTextures.JEI_SLOT.draw(matrixStack, 50, 4);
|
||||
AllGuiTextures.JEI_SLOT.draw(matrixStack, 26, 50);
|
||||
getRenderedSlot(recipe, 0).draw(matrixStack, 131, 50);
|
||||
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 62, 57);
|
||||
AllGuiTextures.JEI_DOWN_ARROW.draw(matrixStack, 126, 29);
|
||||
deployer.draw(matrixStack, getBackground().getWidth() / 2 - 13, 22);
|
||||
}
|
||||
|
||||
}
|
|
@ -73,7 +73,7 @@ public class PolishingCategory extends CreateRecipeCategory<SandPaperPolishingRe
|
|||
tag.put("Polishing", matchingStacks[0].serializeNBT());
|
||||
tag.putBoolean("JEI", true);
|
||||
GuiGameElement.of(renderedSandpaper)
|
||||
.at(getBackground().getWidth() / 2 - 16, 0, 0)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(getBackground().getWidth() / 2 - 16, 0, 0)
|
||||
.scale(2)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.simibubi.create.AllBlocks;
|
|||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.compat.jei.category.animations.AnimatedSpout;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling;
|
||||
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
|
||||
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
||||
|
@ -71,6 +72,8 @@ public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
|
|||
ItemStack copy = stack.copy();
|
||||
copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
|
||||
.ifPresent(fhi -> {
|
||||
if (!GenericItemFilling.isFluidHandlerValid(copy, fhi))
|
||||
return;
|
||||
FluidStack fluidCopy = fluidStack.copy();
|
||||
fluidCopy.setAmount(1000);
|
||||
fhi.fill(fluidCopy, FluidAction.EXECUTE);
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package com.simibubi.create.compat.jei.category.animations;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.foundation.gui.GuiGameElement;
|
||||
|
||||
|
@ -14,11 +13,11 @@ public class AnimatedCrushingWheels extends AnimatedKinetics {
|
|||
|
||||
@Override
|
||||
public void draw(MatrixStack matrixStack, int xOffset, int yOffset) {
|
||||
RenderSystem.enableDepthTest();
|
||||
matrixStack.push();
|
||||
matrixStack.translate(xOffset, yOffset, 100);
|
||||
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-22.5f));
|
||||
int scale = 22;
|
||||
|
||||
|
||||
BlockState wheel = AllBlocks.CRUSHING_WHEEL.get()
|
||||
.getDefaultState()
|
||||
.with(BlockStateProperties.AXIS, Axis.X);
|
||||
|
@ -33,6 +32,8 @@ public class AnimatedCrushingWheels extends AnimatedKinetics {
|
|||
.atLocal(2, 0, 0)
|
||||
.scale(scale)
|
||||
.render(matrixStack);
|
||||
|
||||
matrixStack.pop();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
package com.simibubi.create.compat.jei.category.animations;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock;
|
||||
import com.simibubi.create.foundation.gui.GuiGameElement;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.vector.Vector3f;
|
||||
|
||||
public class AnimatedDeployer extends AnimatedKinetics {
|
||||
|
||||
@Override
|
||||
public void draw(MatrixStack matrixStack, int xOffset, int yOffset) {
|
||||
matrixStack.push();
|
||||
matrixStack.translate(xOffset, yOffset, 100);
|
||||
matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f));
|
||||
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
|
||||
int scale = 20;
|
||||
|
||||
GuiGameElement.of(shaft(Axis.Z))
|
||||
.rotateBlock(0, 0, getCurrentAngle())
|
||||
.scale(scale)
|
||||
.render(matrixStack);
|
||||
|
||||
GuiGameElement.of(AllBlocks.DEPLOYER.getDefaultState()
|
||||
.with(DeployerBlock.FACING, Direction.DOWN)
|
||||
.with(DeployerBlock.AXIS_ALONG_FIRST_COORDINATE, false))
|
||||
.scale(scale)
|
||||
.render(matrixStack);
|
||||
|
||||
float cycle = AnimationTickHolder.getRenderTime() % 30;
|
||||
float offset = cycle < 10 ? cycle / 10f : cycle < 20 ? (20 - cycle) / 10f : 0;
|
||||
|
||||
matrixStack.push();
|
||||
|
||||
matrixStack.translate(0, offset * 17, 0);
|
||||
GuiGameElement.of(AllBlockPartials.DEPLOYER_POLE)
|
||||
.rotateBlock(90, 0, 0)
|
||||
.scale(scale)
|
||||
.render(matrixStack);
|
||||
GuiGameElement.of(AllBlockPartials.DEPLOYER_HAND_HOLDING)
|
||||
.rotateBlock(90, 0, 0)
|
||||
.scale(scale)
|
||||
.render(matrixStack);
|
||||
|
||||
matrixStack.pop();
|
||||
|
||||
GuiGameElement.of(AllBlocks.DEPOT.getDefaultState())
|
||||
.atLocal(0, 2, 0)
|
||||
.scale(scale)
|
||||
.render(matrixStack);
|
||||
|
||||
matrixStack.pop();
|
||||
}
|
||||
|
||||
}
|
|
@ -21,13 +21,13 @@ public enum AllSections {
|
|||
|
||||
/** Decorative blocks */
|
||||
PALETTES(Palette.Green),
|
||||
|
||||
/** Helpful gadgets and other shenanigans */
|
||||
CURIOSITIES(Palette.Purple),
|
||||
|
||||
/** Base materials, ingredients and tools */
|
||||
MATERIALS(Palette.Green),
|
||||
|
||||
/** Helpful gadgets and other shenanigans */
|
||||
CURIOSITIES(Palette.Purple),
|
||||
|
||||
/** Fallback section */
|
||||
UNASSIGNED(Palette.Gray)
|
||||
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
package com.simibubi.create.content.contraptions.components.deployer;
|
||||
|
||||
import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
||||
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe;
|
||||
import com.simibubi.create.content.logistics.InWorldProcessing;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class BeltDeployerCallbacks {
|
||||
|
||||
public static ProcessingResult onItemReceived(TransportedItemStack s, TransportedItemStackHandlerBehaviour i,
|
||||
DeployerTileEntity deployerTileEntity) {
|
||||
|
||||
if (deployerTileEntity.getSpeed() == 0)
|
||||
return ProcessingResult.PASS;
|
||||
if (deployerTileEntity.mode == Mode.PUNCH)
|
||||
return ProcessingResult.PASS;
|
||||
BlockState blockState = deployerTileEntity.getBlockState();
|
||||
if (!blockState.contains(FACING) || blockState.get(FACING) != Direction.DOWN)
|
||||
return ProcessingResult.PASS;
|
||||
if (deployerTileEntity.state != State.WAITING)
|
||||
return ProcessingResult.HOLD;
|
||||
if (deployerTileEntity.redstoneLocked)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
if (deployerTileEntity.getRecipe(s.stack) == null)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
deployerTileEntity.start();
|
||||
return ProcessingResult.HOLD;
|
||||
}
|
||||
|
||||
public static ProcessingResult whenItemHeld(TransportedItemStack s, TransportedItemStackHandlerBehaviour i,
|
||||
DeployerTileEntity deployerTileEntity) {
|
||||
|
||||
if (deployerTileEntity.getSpeed() == 0)
|
||||
return ProcessingResult.PASS;
|
||||
BlockState blockState = deployerTileEntity.getBlockState();
|
||||
if (!blockState.contains(FACING) || blockState.get(FACING) != Direction.DOWN)
|
||||
return ProcessingResult.PASS;
|
||||
IRecipe<?> recipe = deployerTileEntity.getRecipe(s.stack);
|
||||
if (recipe == null)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
if (deployerTileEntity.state == State.RETRACTING && deployerTileEntity.timer == 1000) {
|
||||
activate(s, i, deployerTileEntity, recipe);
|
||||
return ProcessingResult.HOLD;
|
||||
}
|
||||
|
||||
if (deployerTileEntity.state == State.WAITING) {
|
||||
if (deployerTileEntity.redstoneLocked)
|
||||
return ProcessingResult.PASS;
|
||||
deployerTileEntity.start();
|
||||
}
|
||||
|
||||
return ProcessingResult.HOLD;
|
||||
}
|
||||
|
||||
public static void activate(TransportedItemStack transported, TransportedItemStackHandlerBehaviour handler,
|
||||
DeployerTileEntity deployerTileEntity, IRecipe<?> recipe) {
|
||||
|
||||
List<TransportedItemStack> collect =
|
||||
InWorldProcessing.applyRecipeOn(ItemHandlerHelper.copyStackWithSize(transported.stack, 1), recipe)
|
||||
.stream()
|
||||
.map(stack -> {
|
||||
TransportedItemStack copy = transported.copy();
|
||||
boolean centered = BeltHelper.isItemUpright(stack);
|
||||
copy.stack = stack;
|
||||
copy.locked = true;
|
||||
copy.angle = centered ? 180 : Create.random.nextInt(360);
|
||||
return copy;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
TransportedItemStack left = transported.copy();
|
||||
deployerTileEntity.player.spawnedItemEffects = transported.stack.copy();
|
||||
left.stack.shrink(1);
|
||||
|
||||
if (collect.isEmpty())
|
||||
handler.handleProcessingOnItem(transported, TransportedResult.convertTo(left));
|
||||
else
|
||||
handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(collect, left));
|
||||
|
||||
ItemStack heldItem = deployerTileEntity.player.getHeldItemMainhand();
|
||||
if (heldItem.isDamageable())
|
||||
heldItem.damageItem(1, deployerTileEntity.player, s -> s.sendBreakAnimation(Hand.MAIN_HAND));
|
||||
else
|
||||
heldItem.shrink(1);
|
||||
|
||||
BlockPos pos = deployerTileEntity.getPos();
|
||||
World world = deployerTileEntity.getWorld();
|
||||
if (heldItem.isEmpty())
|
||||
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_BREAK, SoundCategory.BLOCKS, .25f, 1);
|
||||
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .25f, .75f);
|
||||
if (recipe instanceof SandPaperPolishingRecipe)
|
||||
AllSoundEvents.AUTO_POLISH.playOnServer(world, pos, .25f, 1f);
|
||||
|
||||
deployerTileEntity.sendData();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package com.simibubi.create.content.contraptions.components.deployer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
|
||||
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.item.crafting.Ingredient;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||
|
||||
public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> {
|
||||
|
||||
public DeployerApplicationRecipe(ProcessingRecipeParams params) {
|
||||
super(AllRecipeTypes.DEPLOYING, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RecipeWrapper inv, World p_77569_2_) {
|
||||
return ingredients.get(0)
|
||||
.test(inv.getStackInSlot(0))
|
||||
&& ingredients.get(1)
|
||||
.test(inv.getStackInSlot(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getMaxInputCount() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getMaxOutputCount() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
public Ingredient getRequiredHeldItem() {
|
||||
if (ingredients.isEmpty())
|
||||
throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no tool!");
|
||||
return ingredients.get(0);
|
||||
}
|
||||
|
||||
public Ingredient getProcessedItem() {
|
||||
if (ingredients.size() < 2)
|
||||
throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no ingredient!");
|
||||
return ingredients.get(1);
|
||||
}
|
||||
|
||||
public static List<DeployerApplicationRecipe> convert(List<IRecipe<?>> sandpaperRecipes) {
|
||||
return sandpaperRecipes.stream()
|
||||
.map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, Create.asResource(r.getId()
|
||||
.getPath() + "_using_deployer"))
|
||||
.require(Ingredient.fromItems(AllItems.SAND_PAPER.get(), AllItems.RED_SAND_PAPER.get()))
|
||||
.require(r.getIngredients()
|
||||
.get(0))
|
||||
.output(r.getRecipeOutput())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
|
@ -6,11 +6,16 @@ import static net.minecraftforge.eventbus.api.Event.Result.DENY;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
|
||||
import com.simibubi.create.content.curiosities.tools.SandPaperItem;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
|
||||
|
||||
|
@ -93,7 +98,7 @@ public class DeployerHandler {
|
|||
}
|
||||
}
|
||||
|
||||
static boolean shouldActivate(ItemStack held, World world, BlockPos targetPos) {
|
||||
static boolean shouldActivate(ItemStack held, World world, BlockPos targetPos, @Nullable Direction facing) {
|
||||
if (held.getItem() instanceof BlockItem)
|
||||
if (world.getBlockState(targetPos)
|
||||
.getBlock() == ((BlockItem) held.getItem()).getBlock())
|
||||
|
@ -107,10 +112,15 @@ public class DeployerHandler {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!held.isEmpty() && facing == Direction.DOWN
|
||||
&& TileEntityBehaviour.get(world, targetPos, TransportedItemStackHandlerBehaviour.TYPE) != null)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void activate(DeployerFakePlayer player, Vector3d vec, BlockPos clickedPos, Vector3d extensionVector, Mode mode) {
|
||||
static void activate(DeployerFakePlayer player, Vector3d vec, BlockPos clickedPos, Vector3d extensionVector,
|
||||
Mode mode) {
|
||||
Multimap<Attribute, AttributeModifier> attributeModifiers = player.getHeldItemMainhand()
|
||||
.getAttributeModifiers(EquipmentSlotType.MAINHAND);
|
||||
player.getAttributes()
|
||||
|
@ -120,8 +130,8 @@ public class DeployerHandler {
|
|||
.addTemporaryModifiers(attributeModifiers);
|
||||
}
|
||||
|
||||
private static void activateInner(DeployerFakePlayer player, Vector3d vec, BlockPos clickedPos, Vector3d extensionVector,
|
||||
Mode mode) {
|
||||
private static void activateInner(DeployerFakePlayer player, Vector3d vec, BlockPos clickedPos,
|
||||
Vector3d extensionVector, Mode mode) {
|
||||
|
||||
Vector3d rayOrigin = vec.add(extensionVector.scale(3 / 2f + 1 / 64f));
|
||||
Vector3d rayTarget = vec.add(extensionVector.scale(5 / 2f - 1 / 64f));
|
||||
|
@ -148,10 +158,11 @@ public class DeployerHandler {
|
|||
return;
|
||||
}
|
||||
if (cancelResult == null) {
|
||||
if (entity.processInitialInteract(player, hand).isAccepted())
|
||||
if (entity.processInitialInteract(player, hand)
|
||||
.isAccepted())
|
||||
success = true;
|
||||
else if (entity instanceof LivingEntity
|
||||
&& stack.useOnEntity(player, (LivingEntity) entity, hand).isAccepted())
|
||||
else if (entity instanceof LivingEntity && stack.useOnEntity(player, (LivingEntity) entity, hand)
|
||||
.isAccepted())
|
||||
success = true;
|
||||
}
|
||||
if (!success && stack.isFood() && entity instanceof PlayerEntity) {
|
||||
|
@ -215,7 +226,8 @@ public class DeployerHandler {
|
|||
if (blockBreakingProgress != null)
|
||||
before = blockBreakingProgress.getValue();
|
||||
progress += before;
|
||||
world.playSound(null, clickedPos, clickedState.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1);
|
||||
world.playSound(null, clickedPos, clickedState.getSoundType()
|
||||
.getHitSound(), SoundCategory.NEUTRAL, .25f, 1);
|
||||
|
||||
if (progress >= 1) {
|
||||
tryHarvestBlock(player.interactionManager, clickedPos);
|
||||
|
@ -300,8 +312,10 @@ public class DeployerHandler {
|
|||
}
|
||||
|
||||
CompoundNBT tag = stack.getTag();
|
||||
if (tag != null && stack.getItem() instanceof SandPaperItem && tag.contains("Polishing"))
|
||||
if (tag != null && stack.getItem() instanceof SandPaperItem && tag.contains("Polishing")) {
|
||||
player.spawnedItemEffects = ItemStack.read(tag.getCompound("Polishing"));
|
||||
AllSoundEvents.AUTO_POLISH.playOnServer(world, pos, .25f, 1f);
|
||||
}
|
||||
|
||||
if (!player.getActiveItemStack()
|
||||
.isEmpty())
|
||||
|
@ -359,7 +373,7 @@ public class DeployerHandler {
|
|||
protected static ActionResultType safeOnBeehiveUse(BlockState state, World world, BlockPos pos, PlayerEntity player,
|
||||
Hand hand) {
|
||||
// <> BeehiveBlock#onUse
|
||||
|
||||
|
||||
BeehiveBlock block = (BeehiveBlock) state.getBlock();
|
||||
ItemStack prevHeldItem = player.getHeldItem(hand);
|
||||
int honeyLevel = state.get(BeehiveBlock.HONEY_LEVEL);
|
||||
|
|
|
@ -64,7 +64,7 @@ public class DeployerMovementBehaviour extends MovementBehaviour {
|
|||
tryGrabbingItem(context);
|
||||
DeployerFakePlayer player = getPlayer(context);
|
||||
Mode mode = getMode(context);
|
||||
if (mode == Mode.USE && !DeployerHandler.shouldActivate(player.getHeldItemMainhand(), context.world, pos))
|
||||
if (mode == Mode.USE && !DeployerHandler.shouldActivate(player.getHeldItemMainhand(), context.world, pos, null))
|
||||
return;
|
||||
|
||||
activate(context, pos, player, mode);
|
||||
|
|
|
@ -5,14 +5,20 @@ import static com.simibubi.create.content.contraptions.base.DirectionalKineticBl
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.jozufozu.flywheel.backend.core.PartialModel;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.curiosities.tools.SandPaperItem;
|
||||
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe.SandPaperInv;
|
||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
@ -21,6 +27,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
|||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.ListNBT;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
@ -41,6 +48,8 @@ import net.minecraftforge.common.capabilities.Capability;
|
|||
import net.minecraftforge.common.util.Constants.NBT;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||
|
||||
public class DeployerTileEntity extends KineticTileEntity {
|
||||
|
||||
|
@ -59,6 +68,8 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
|
||||
private LerpedFloat animatedOffset;
|
||||
|
||||
public BeltProcessingBehaviour processingBehaviour;
|
||||
|
||||
enum State {
|
||||
WAITING, EXPANDING, RETRACTING, DUMPING;
|
||||
}
|
||||
|
@ -82,6 +93,10 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
super.addBehaviours(behaviours);
|
||||
filtering = new FilteringBehaviour(this, new DeployerFilterSlot());
|
||||
behaviours.add(filtering);
|
||||
processingBehaviour =
|
||||
new BeltProcessingBehaviour(this).whenItemEnters((s, i) -> BeltDeployerCallbacks.onItemReceived(s, i, this))
|
||||
.whileItemHeld((s, i) -> BeltDeployerCallbacks.whenItemHeld(s, i, this));
|
||||
behaviours.add(processingBehaviour);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -158,7 +173,7 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
Direction facing = getBlockState().get(FACING);
|
||||
if (mode == Mode.USE && !DeployerHandler.shouldActivate(stack, world, pos.offset(facing, 2))) {
|
||||
if (mode == Mode.USE && !DeployerHandler.shouldActivate(stack, world, pos.offset(facing, 2), facing)) {
|
||||
timer = getTimerSpeed() * 10;
|
||||
return;
|
||||
}
|
||||
|
@ -166,25 +181,10 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
// Check for advancement conditions
|
||||
if (mode == Mode.PUNCH && !boop && startBoop(facing))
|
||||
return;
|
||||
|
||||
if (redstoneLocked)
|
||||
return;
|
||||
|
||||
state = State.EXPANDING;
|
||||
Vector3d movementVector = getMovementVector();
|
||||
Vector3d rayOrigin = VecHelper.getCenterOf(pos)
|
||||
.add(movementVector.scale(3 / 2f));
|
||||
Vector3d rayTarget = VecHelper.getCenterOf(pos)
|
||||
.add(movementVector.scale(5 / 2f));
|
||||
RayTraceContext rayTraceContext =
|
||||
new RayTraceContext(rayOrigin, rayTarget, BlockMode.OUTLINE, FluidMode.NONE, player);
|
||||
BlockRayTraceResult result = world.rayTraceBlocks(rayTraceContext);
|
||||
reach = (float) (.5f + Math.min(result.getHitVec()
|
||||
.subtract(rayOrigin)
|
||||
.length(), .75f));
|
||||
|
||||
timer = 1000;
|
||||
sendData();
|
||||
start();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -208,6 +208,23 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
|
||||
}
|
||||
|
||||
protected void start() {
|
||||
state = State.EXPANDING;
|
||||
Vector3d movementVector = getMovementVector();
|
||||
Vector3d rayOrigin = VecHelper.getCenterOf(pos)
|
||||
.add(movementVector.scale(3 / 2f));
|
||||
Vector3d rayTarget = VecHelper.getCenterOf(pos)
|
||||
.add(movementVector.scale(5 / 2f));
|
||||
RayTraceContext rayTraceContext =
|
||||
new RayTraceContext(rayOrigin, rayTarget, BlockMode.OUTLINE, FluidMode.NONE, player);
|
||||
BlockRayTraceResult result = world.rayTraceBlocks(rayTraceContext);
|
||||
reach = (float) (.5f + Math.min(result.getHitVec()
|
||||
.subtract(rayOrigin)
|
||||
.length(), .75f));
|
||||
timer = 1000;
|
||||
sendData();
|
||||
}
|
||||
|
||||
public boolean startBoop(Direction facing) {
|
||||
if (!world.isAirBlock(pos.offset(facing, 1)) || !world.isAirBlock(pos.offset(facing, 2)))
|
||||
return false;
|
||||
|
@ -263,6 +280,10 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
player.rotationYaw = direction.getHorizontalAngle();
|
||||
player.rotationPitch = direction == Direction.UP ? -90 : direction == Direction.DOWN ? 90 : 0;
|
||||
|
||||
if (direction == Direction.DOWN
|
||||
&& TileEntityBehaviour.get(world, clickedPos, TransportedItemStackHandlerBehaviour.TYPE) != null)
|
||||
return; // Belt processing handled in BeltDeployerCallbacks
|
||||
|
||||
DeployerHandler.activate(player, center, clickedPos, movementVector, mode);
|
||||
if (player != null)
|
||||
heldItem = player.getHeldItemMainhand();
|
||||
|
@ -294,7 +315,7 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
if (compound.contains("Particle")) {
|
||||
ItemStack particleStack = ItemStack.read(compound.getCompound("Particle"));
|
||||
SandPaperItem.spawnParticles(VecHelper.getCenterOf(pos)
|
||||
.add(getMovementVector().scale(2f)), particleStack, this.world);
|
||||
.add(getMovementVector().scale(reach + 1)), particleStack, this.world);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -413,4 +434,23 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
animatedOffset.setValue(offset);
|
||||
}
|
||||
|
||||
RecipeWrapper recipeInv = new RecipeWrapper(new ItemStackHandler(2));
|
||||
SandPaperInv sandpaperInv = new SandPaperInv(ItemStack.EMPTY);
|
||||
|
||||
@Nullable
|
||||
public IRecipe<?> getRecipe(ItemStack stack) {
|
||||
if (player == null)
|
||||
return null;
|
||||
ItemStack heldItemMainhand = player.getHeldItemMainhand();
|
||||
if (heldItemMainhand.getItem() instanceof SandPaperItem) {
|
||||
sandpaperInv.setInventorySlotContents(0, stack);
|
||||
return AllRecipeTypes.SANDPAPER_POLISHING.find(sandpaperInv, world)
|
||||
.orElse(null);
|
||||
}
|
||||
recipeInv.setInventorySlotContents(0, heldItemMainhand);
|
||||
recipeInv.setInventorySlotContents(1, stack);
|
||||
return AllRecipeTypes.DEPLOYING.find(recipeInv, world)
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock;
|
|||
import net.minecraft.block.AbstractPressurePlateBlock;
|
||||
import net.minecraft.block.AbstractRailBlock;
|
||||
import net.minecraft.block.AbstractSignBlock;
|
||||
import net.minecraft.block.BedBlock;
|
||||
import net.minecraft.block.BellBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -49,6 +50,7 @@ import net.minecraft.block.WallSignBlock;
|
|||
import net.minecraft.block.WallTorchBlock;
|
||||
import net.minecraft.block.material.PushReaction;
|
||||
import net.minecraft.state.properties.AttachFace;
|
||||
import net.minecraft.state.properties.BedPart;
|
||||
import net.minecraft.state.properties.BellAttachment;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
@ -163,6 +165,13 @@ public class BlockMovementTraits {
|
|||
return direction == Direction.DOWN;
|
||||
if (block instanceof DoorBlock)
|
||||
return direction == Direction.DOWN;
|
||||
if (block instanceof BedBlock) {
|
||||
Direction facing = state.get(BedBlock.HORIZONTAL_FACING);
|
||||
if (state.get(BedBlock.PART) == BedPart.HEAD) {
|
||||
facing = facing.getOpposite();
|
||||
}
|
||||
return direction == facing;
|
||||
}
|
||||
if (block instanceof RedstoneLinkBlock)
|
||||
return direction.getOpposite() == state.get(RedstoneLinkBlock.FACING);
|
||||
if (block instanceof FlowerPotBlock)
|
||||
|
|
|
@ -35,6 +35,7 @@ import com.simibubi.create.content.contraptions.components.actors.SeatBlock;
|
|||
import com.simibubi.create.content.contraptions.components.actors.SeatEntity;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.WindmillBearingBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.StickerBlock;
|
||||
|
@ -342,6 +343,10 @@ public abstract class Contraption {
|
|||
// Bearings potentially create stabilized sub-contraptions
|
||||
if (AllBlocks.MECHANICAL_BEARING.has(state))
|
||||
moveBearing(pos, frontier, visited, state);
|
||||
|
||||
// WM Bearings attach their structure when moved
|
||||
if (AllBlocks.WINDMILL_BEARING.has(state))
|
||||
moveWindmillBearing(pos, frontier, visited, state);
|
||||
|
||||
// Seats transfer their passenger to the contraption
|
||||
if (state.getBlock() instanceof SeatBlock)
|
||||
|
@ -497,6 +502,13 @@ public abstract class Contraption {
|
|||
}
|
||||
}
|
||||
|
||||
private void moveWindmillBearing(BlockPos pos, Queue<BlockPos> frontier, Set<BlockPos> visited, BlockState state) {
|
||||
Direction facing = state.get(WindmillBearingBlock.FACING);
|
||||
BlockPos offset = pos.offset(facing);
|
||||
if (!visited.contains(offset))
|
||||
frontier.add(offset);
|
||||
}
|
||||
|
||||
private void moveBearing(BlockPos pos, Queue<BlockPos> frontier, Set<BlockPos> visited, BlockState state) {
|
||||
Direction facing = state.get(MechanicalBearingBlock.FACING);
|
||||
if (!canBeStabilized(facing, pos.subtract(anchor))) {
|
||||
|
@ -701,8 +713,8 @@ public abstract class Contraption {
|
|||
c -> seatMapping.put(NBTUtil.readUniqueId(NBTHelper.getINBT(c, "Id")), c.getInt("Seat")));
|
||||
|
||||
stabilizedSubContraptions.clear();
|
||||
NBTHelper.iterateCompoundList(nbt.getList("SubContraptions", NBT.TAG_COMPOUND), c -> stabilizedSubContraptions
|
||||
.put(c.getUniqueId("Id"), BlockFace.fromNBT(c.getCompound("Location"))));
|
||||
NBTHelper.iterateCompoundList(nbt.getList("SubContraptions", NBT.TAG_COMPOUND),
|
||||
c -> stabilizedSubContraptions.put(c.getUniqueId("Id"), BlockFace.fromNBT(c.getCompound("Location"))));
|
||||
|
||||
storage.clear();
|
||||
NBTHelper.iterateCompoundList(nbt.getList("Storage", NBT.TAG_COMPOUND), c -> storage
|
||||
|
@ -831,7 +843,9 @@ public abstract class Contraption {
|
|||
|
||||
private CompoundNBT writeBlocksCompound() {
|
||||
CompoundNBT compound = new CompoundNBT();
|
||||
HashMapPalette<BlockState> palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {throw new IllegalStateException("Palette Map index exceeded maximum");}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
||||
HashMapPalette<BlockState> palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {
|
||||
throw new IllegalStateException("Palette Map index exceeded maximum");
|
||||
}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
||||
ListNBT blockList = new ListNBT();
|
||||
|
||||
for (BlockInfo block : this.blocks.values()) {
|
||||
|
@ -857,7 +871,9 @@ public abstract class Contraption {
|
|||
ListNBT blockList;
|
||||
if (usePalettedDeserialization) {
|
||||
CompoundNBT c = ((CompoundNBT) compound);
|
||||
palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {throw new IllegalStateException("Palette Map index exceeded maximum");}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
||||
palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {
|
||||
throw new IllegalStateException("Palette Map index exceeded maximum");
|
||||
}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
||||
palette.read(c.getList("Palette", 10));
|
||||
|
||||
blockList = c.getList("BlockList", 10);
|
||||
|
@ -906,19 +922,15 @@ public abstract class Contraption {
|
|||
}
|
||||
|
||||
private static BlockInfo readBlockInfo(CompoundNBT blockListEntry, HashMapPalette<BlockState> palette) {
|
||||
return new BlockInfo(
|
||||
BlockPos.fromLong(blockListEntry.getLong("Pos")),
|
||||
Objects.requireNonNull(palette.get(blockListEntry.getInt("State"))),
|
||||
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null
|
||||
);
|
||||
return new BlockInfo(BlockPos.fromLong(blockListEntry.getLong("Pos")),
|
||||
Objects.requireNonNull(palette.get(blockListEntry.getInt("State"))),
|
||||
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null);
|
||||
}
|
||||
|
||||
private static BlockInfo legacyReadBlockInfo(CompoundNBT blockListEntry) {
|
||||
return new BlockInfo(
|
||||
NBTUtil.readBlockPos(blockListEntry.getCompound("Pos")),
|
||||
NBTUtil.readBlockState(blockListEntry.getCompound("Block")),
|
||||
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null
|
||||
);
|
||||
return new BlockInfo(NBTUtil.readBlockPos(blockListEntry.getCompound("Pos")),
|
||||
NBTUtil.readBlockState(blockListEntry.getCompound("Block")),
|
||||
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null);
|
||||
}
|
||||
|
||||
public void removeBlocksFromWorld(World world, BlockPos offset) {
|
||||
|
@ -999,8 +1011,7 @@ public abstract class Contraption {
|
|||
}
|
||||
if (state.getBlock() instanceof IWaterLoggable && state.contains(BlockStateProperties.WATERLOGGED)) {
|
||||
FluidState FluidState = world.getFluidState(targetPos);
|
||||
state = state.with(BlockStateProperties.WATERLOGGED,
|
||||
FluidState.getFluid() == Fluids.WATER);
|
||||
state = state.with(BlockStateProperties.WATERLOGGED, FluidState.getFluid() == Fluids.WATER);
|
||||
}
|
||||
|
||||
world.destroyBlock(targetPos, true);
|
||||
|
@ -1232,8 +1243,8 @@ public abstract class Contraption {
|
|||
|
||||
float distSq = a * a + b * b;
|
||||
|
||||
|
||||
if (distSq > maxDistSq) maxDistSq = distSq;
|
||||
if (distSq > maxDistSq)
|
||||
maxDistSq = distSq;
|
||||
}
|
||||
|
||||
return maxDistSq;
|
||||
|
|
|
@ -13,6 +13,7 @@ import net.minecraft.client.Minecraft;
|
|||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.renderer.culling.ClippingHelper;
|
||||
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererManager;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
|
@ -31,10 +32,8 @@ public class SuperGlueRenderer extends EntityRenderer<SuperGlueEntity> {
|
|||
|
||||
private ResourceLocation regular = new ResourceLocation(Create.ID, "textures/entity/super_glue/slime.png");
|
||||
|
||||
private Vector3d[] quad1;
|
||||
private Vector3d[] quad2;
|
||||
private float[] u = { 0, 1, 1, 0 };
|
||||
private float[] v = { 0, 0, 1, 1 };
|
||||
private float[] insideQuad;
|
||||
private float[] outsideQuad;
|
||||
|
||||
public SuperGlueRenderer(EntityRendererManager renderManager) {
|
||||
super(renderManager);
|
||||
|
@ -47,17 +46,23 @@ public class SuperGlueRenderer extends EntityRenderer<SuperGlueEntity> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(SuperGlueEntity entity, float p_225623_2_, float p_225623_3_, MatrixStack ms,
|
||||
public boolean shouldRender(SuperGlueEntity entity, ClippingHelper frustum, double x, double y, double z) {
|
||||
if (super.shouldRender(entity, frustum, x, y, z)) {
|
||||
PlayerEntity player = Minecraft.getInstance().player;
|
||||
boolean visible = entity.isVisible();
|
||||
boolean holdingGlue = AllItems.SUPER_GLUE.isIn(player.getHeldItemMainhand())
|
||||
|| AllItems.SUPER_GLUE.isIn(player.getHeldItemOffhand());
|
||||
|
||||
if (visible || holdingGlue)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(SuperGlueEntity entity, float yaw, float partialTicks, MatrixStack ms,
|
||||
IRenderTypeBuffer buffer, int light) {
|
||||
super.render(entity, p_225623_2_, p_225623_3_, ms, buffer, light);
|
||||
|
||||
PlayerEntity player = Minecraft.getInstance().player;
|
||||
boolean visible = entity.isVisible();
|
||||
boolean holdingGlue = AllItems.SUPER_GLUE.isIn(player.getHeldItemMainhand())
|
||||
|| AllItems.SUPER_GLUE.isIn(player.getHeldItemOffhand());
|
||||
|
||||
if (!visible && !holdingGlue)
|
||||
return;
|
||||
super.render(entity, yaw, partialTicks, ms, buffer, light);
|
||||
|
||||
IVertexBuilder builder = buffer.getBuffer(RenderType.getEntityCutout(getEntityTexture(entity)));
|
||||
light = getBrightnessForRender(entity);
|
||||
|
@ -65,24 +70,13 @@ public class SuperGlueRenderer extends EntityRenderer<SuperGlueEntity> {
|
|||
|
||||
ms.push();
|
||||
MatrixStacker.of(ms)
|
||||
.rotateY(AngleHelper.horizontalAngle(face))
|
||||
.rotateY(AngleHelper.horizontalAngleNew(face))
|
||||
.rotateX(AngleHelper.verticalAngle(face));
|
||||
Entry peek = ms.peek();
|
||||
|
||||
Vector3d[][] quads = { quad1, quad2 };
|
||||
for (Vector3d[] quad : quads) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
Vector3d vertex = quad[i];
|
||||
builder.vertex(peek.getModel(), (float) vertex.x, (float) vertex.y, (float) vertex.z)
|
||||
.color(255, 255, 255, 255)
|
||||
.texture(u[i], v[i])
|
||||
.overlay(OverlayTexture.DEFAULT_UV)
|
||||
.light(light)
|
||||
.normal(peek.getNormal(), face.getXOffset(), face.getYOffset(), face.getZOffset())
|
||||
.endVertex();
|
||||
}
|
||||
face = face.getOpposite();
|
||||
}
|
||||
renderQuad(builder, peek, insideQuad, light, -1);
|
||||
renderQuad(builder, peek, outsideQuad, light, 1);
|
||||
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
|
@ -111,8 +105,18 @@ public class SuperGlueRenderer extends EntityRenderer<SuperGlueEntity> {
|
|||
Vector3d a4 = plane.add(start);
|
||||
Vector3d b4 = plane.add(end);
|
||||
|
||||
quad1 = new Vector3d[] { a2, a3, a4, a1 };
|
||||
quad2 = new Vector3d[] { b3, b2, b1, b4 };
|
||||
insideQuad = new float[] {
|
||||
(float) a1.x, (float) a1.y, (float) a1.z, 1, 0,
|
||||
(float) a2.x, (float) a2.y, (float) a2.z, 1, 1,
|
||||
(float) a3.x, (float) a3.y, (float) a3.z, 0, 1,
|
||||
(float) a4.x, (float) a4.y, (float) a4.z, 0, 0,
|
||||
};
|
||||
outsideQuad = new float[] {
|
||||
(float) b4.x, (float) b4.y, (float) b4.z, 0, 0,
|
||||
(float) b3.x, (float) b3.y, (float) b3.z, 0, 1,
|
||||
(float) b2.x, (float) b2.y, (float) b2.z, 1, 1,
|
||||
(float) b1.x, (float) b1.y, (float) b1.z, 1, 0,
|
||||
};
|
||||
}
|
||||
|
||||
private int getBrightnessForRender(SuperGlueEntity entity) {
|
||||
|
@ -126,4 +130,17 @@ public class SuperGlueRenderer extends EntityRenderer<SuperGlueEntity> {
|
|||
return Math.max(light, light2);
|
||||
}
|
||||
|
||||
// Vertex format: pos x, pos y, pos z, u, v
|
||||
private void renderQuad(IVertexBuilder builder, Entry matrix, float[] data, int light, float normalZ) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
builder.vertex(matrix.getModel(), data[5 * i], data[5 * i + 1], data[5 * i + 2])
|
||||
.color(255, 255, 255, 255)
|
||||
.texture(data[5 * i + 3], data[5 * i + 4])
|
||||
.overlay(OverlayTexture.DEFAULT_UV)
|
||||
.light(light)
|
||||
.normal(matrix.getNormal(), 0.0f, 0.0f, normalZ)
|
||||
.endVertex();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ import net.minecraft.util.ActionResultType;
|
|||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.Mirror;
|
||||
import net.minecraft.util.Rotation;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
|
@ -492,29 +493,55 @@ public class CartAssemblerBlock extends AbstractRailBlock
|
|||
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
World world = context.getWorld();
|
||||
if (world.isRemote)
|
||||
return ActionResultType.SUCCESS;
|
||||
BlockPos pos = context.getPos();
|
||||
BlockState newState = state.with(RAIL_SHAPE,
|
||||
state.get(RAIL_SHAPE) == RailShape.NORTH_SOUTH ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH);
|
||||
if (state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL
|
||||
|| state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS) {
|
||||
newState = newState.with(RAIL_TYPE, AllBlocks.CONTROLLER_RAIL.get()
|
||||
.rotate(AllBlocks.CONTROLLER_RAIL.getDefaultState()
|
||||
.with(ControllerRailBlock.SHAPE, state.get(RAIL_SHAPE))
|
||||
.with(ControllerRailBlock.BACKWARDS,
|
||||
state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS),
|
||||
Rotation.CLOCKWISE_90)
|
||||
.get(ControllerRailBlock.BACKWARDS) ? CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS
|
||||
: CartAssembleRailType.CONTROLLER_RAIL);
|
||||
}
|
||||
context.getWorld()
|
||||
.setBlockState(pos, newState, 3);
|
||||
world.setBlockState(pos, rotate(state, Rotation.CLOCKWISE_90), 3);
|
||||
world.notifyNeighborsOfStateChange(pos.down(), this);
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState rotate(BlockState state, Rotation rotation) {
|
||||
if (rotation == Rotation.NONE)
|
||||
return state;
|
||||
|
||||
boolean is_controller_rail_backwards = state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS;
|
||||
boolean is_controller_rail = state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL || is_controller_rail_backwards;
|
||||
BlockState base = AllBlocks.CONTROLLER_RAIL.getDefaultState()
|
||||
.with(ControllerRailBlock.SHAPE, state.get(RAIL_SHAPE))
|
||||
.with(ControllerRailBlock.BACKWARDS, is_controller_rail_backwards)
|
||||
.rotate(rotation);
|
||||
if (is_controller_rail) {
|
||||
state = state.with(RAIL_TYPE,
|
||||
base.get(ControllerRailBlock.BACKWARDS) ? CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS :
|
||||
CartAssembleRailType.CONTROLLER_RAIL
|
||||
);
|
||||
}
|
||||
return state.with(RAIL_SHAPE, base.get(ControllerRailBlock.SHAPE));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState mirror(BlockState state, Mirror mirror) {
|
||||
if (mirror == Mirror.NONE)
|
||||
return state;
|
||||
|
||||
boolean is_controller_rail_backwards = state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS;
|
||||
boolean is_controller_rail = state.get(RAIL_TYPE) == CartAssembleRailType.CONTROLLER_RAIL || is_controller_rail_backwards;
|
||||
BlockState base = AllBlocks.CONTROLLER_RAIL.getDefaultState()
|
||||
.with(ControllerRailBlock.SHAPE, state.get(RAIL_SHAPE))
|
||||
.with(ControllerRailBlock.BACKWARDS, is_controller_rail_backwards)
|
||||
.mirror(mirror);
|
||||
if (is_controller_rail) {
|
||||
state = state.with(RAIL_TYPE,
|
||||
base.get(ControllerRailBlock.BACKWARDS) ? CartAssembleRailType.CONTROLLER_RAIL_BACKWARDS :
|
||||
CartAssembleRailType.CONTROLLER_RAIL
|
||||
);
|
||||
}
|
||||
return state.with(RAIL_SHAPE, base.get(ControllerRailBlock.SHAPE));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,6 +103,11 @@ public class PumpTileEntity extends KineticTileEntity {
|
|||
BlockPos backPos = pos.offset(getFront().getOpposite());
|
||||
FluidPropagator.propagateChangedPipe(world, frontPos, world.getBlockState(frontPos));
|
||||
FluidPropagator.propagateChangedPipe(world, backPos, world.getBlockState(backPos));
|
||||
|
||||
FluidTransportBehaviour behaviour = getBehaviour(FluidTransportBehaviour.TYPE);
|
||||
if (behaviour != null)
|
||||
behaviour.wipePressure();
|
||||
sidesToUpdate.forEach(MutableBoolean::setTrue);
|
||||
}
|
||||
|
||||
protected void distributePressureTo(Direction side) {
|
||||
|
|
|
@ -5,9 +5,11 @@ import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler
|
|||
import com.simibubi.create.foundation.fluid.FluidHelper;
|
||||
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.item.BucketItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.item.MilkBucketItem;
|
||||
import net.minecraft.potion.PotionUtils;
|
||||
import net.minecraft.potion.Potions;
|
||||
import net.minecraft.world.World;
|
||||
|
@ -20,6 +22,33 @@ import net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper;
|
|||
|
||||
public class GenericItemFilling {
|
||||
|
||||
/**
|
||||
* Checks if an ItemStack's IFluidHandlerItem is valid. Ideally, this check would
|
||||
* not be necessary. Unfortunately, some mods that copy the functionality of the
|
||||
* MilkBucketItem copy the FluidBucketWrapper capability that is patched in by
|
||||
* Forge without looking into what it actually does. In all cases this is
|
||||
* incorrect because having a non-bucket item turn into a bucket item does not
|
||||
* make sense.
|
||||
*
|
||||
* <p>This check is only necessary for filling since a FluidBucketWrapper will be
|
||||
* empty if it is initialized with a non-bucket item.
|
||||
*
|
||||
* @param stack The ItemStack.
|
||||
* @param fluidHandler The IFluidHandlerItem instance retrieved from the ItemStack.
|
||||
* @return If the IFluidHandlerItem is valid for the passed ItemStack.
|
||||
*/
|
||||
public static boolean isFluidHandlerValid(ItemStack stack, IFluidHandlerItem fluidHandler) {
|
||||
// Not instanceof in case a correct subclass is made
|
||||
if (fluidHandler.getClass() == FluidBucketWrapper.class) {
|
||||
Item item = stack.getItem();
|
||||
// Forge does not patch the FluidBucketWrapper onto subclasses of BucketItem
|
||||
if (item.getClass() != BucketItem.class && !(item instanceof MilkBucketItem)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean canItemBeFilled(World world, ItemStack stack) {
|
||||
if (stack.getItem() == Items.GLASS_BOTTLE)
|
||||
return true;
|
||||
|
@ -31,6 +60,8 @@ public class GenericItemFilling {
|
|||
IFluidHandlerItem tank = capability.orElse(null);
|
||||
if (tank == null)
|
||||
return false;
|
||||
if (!isFluidHandlerValid(stack, tank))
|
||||
return false;
|
||||
for (int i = 0; i < tank.getTanks(); i++) {
|
||||
if (tank.getFluidInTank(i)
|
||||
.getAmount() < tank.getTankCapacity(i))
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.simibubi.create.foundation.fluid.SmartFluidTank;
|
||||
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
public class CreativeFluidTankTileEntity extends FluidTankTileEntity {
|
||||
|
@ -17,6 +19,11 @@ public class CreativeFluidTankTileEntity extends FluidTankTileEntity {
|
|||
protected SmartFluidTank createInventory() {
|
||||
return new CreativeSmartFluidTank(getCapacityMultiplier(), this::onFluidStackChanged);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addToGoggleTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static class CreativeSmartFluidTank extends SmartFluidTank {
|
||||
|
||||
|
|
|
@ -141,6 +141,8 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI
|
|||
FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, pos);
|
||||
if (tankAt == null)
|
||||
continue;
|
||||
world.updateComparatorOutputLevel(pos, tankAt.getBlockState()
|
||||
.getBlock());
|
||||
if (tankAt.luminosity == actualLuminosity)
|
||||
continue;
|
||||
tankAt.setLuminosity(actualLuminosity);
|
||||
|
@ -315,8 +317,11 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI
|
|||
|
||||
@Override
|
||||
public boolean addToGoggleTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
|
||||
FluidTankTileEntity controllerTE = getControllerTE();
|
||||
if (controllerTE == null)
|
||||
return false;
|
||||
return containedFluidTooltip(tooltip, isPlayerSneaking,
|
||||
getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY));
|
||||
controllerTE.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -169,6 +169,20 @@ public class GantryShaftBlock extends DirectionalKineticBlock {
|
|||
return onWrenched;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
super.onBlockAdded(state, worldIn, pos, oldState, isMoving);
|
||||
|
||||
if (!worldIn.isRemote() && oldState.getBlock().is(AllBlocks.GANTRY_SHAFT.get())) {
|
||||
Part oldPart = oldState.get(PART), part = state.get(PART);
|
||||
if ((oldPart != Part.MIDDLE && part == Part.MIDDLE) || (oldPart == Part.SINGLE && part != Part.SINGLE)) {
|
||||
TileEntity te = worldIn.getTileEntity(pos);
|
||||
if (te instanceof GantryShaftTileEntity)
|
||||
((GantryShaftTileEntity) te).checkAttachedCarriageBlocks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_,
|
||||
boolean p_220069_6_) {
|
||||
|
@ -260,7 +274,7 @@ public class GantryShaftBlock extends DirectionalKineticBlock {
|
|||
return super.areStatesKineticallyEquivalent(oldState, newState)
|
||||
&& oldState.get(POWERED) == newState.get(POWERED);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public float getParticleTargetRadius() {
|
||||
return .35f;
|
||||
|
@ -270,7 +284,7 @@ public class GantryShaftBlock extends DirectionalKineticBlock {
|
|||
public float getParticleInitialRadius() {
|
||||
return .25f;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
|
||||
return false;
|
||||
|
|
|
@ -19,15 +19,12 @@ public class GantryShaftTileEntity extends KineticTileEntity {
|
|||
super(typeIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpeedChanged(float previousSpeed) {
|
||||
super.onSpeedChanged(previousSpeed);
|
||||
|
||||
public void checkAttachedCarriageBlocks() {
|
||||
if (!canAssembleOn())
|
||||
return;
|
||||
for (Direction d : Iterate.directions) {
|
||||
if (d.getAxis() == getBlockState().get(GantryShaftBlock.FACING)
|
||||
.getAxis())
|
||||
.getAxis())
|
||||
continue;
|
||||
BlockPos offset = pos.offset(d);
|
||||
BlockState pinionState = world.getBlockState(offset);
|
||||
|
@ -39,7 +36,12 @@ public class GantryShaftTileEntity extends KineticTileEntity {
|
|||
if (tileEntity instanceof GantryCarriageTileEntity)
|
||||
((GantryCarriageTileEntity) tileEntity).queueAssembly();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpeedChanged(float previousSpeed) {
|
||||
super.onSpeedChanged(previousSpeed);
|
||||
checkAttachedCarriageBlocks();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -99,7 +101,7 @@ public class GantryShaftTileEntity extends KineticTileEntity {
|
|||
return 0;
|
||||
return MathHelper.clamp(-getSpeed() / 512f, -.49f, .49f);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected boolean isNoisy() {
|
||||
return false;
|
||||
|
|
|
@ -153,7 +153,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen {
|
|||
0xffffff);
|
||||
|
||||
GuiGameElement.of(renderedItem)
|
||||
.at(guiLeft + background.width + 10, guiTop + 100, -150)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(guiLeft + background.width + 10, guiTop + 100, -150)
|
||||
.scale(5)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
|
|
@ -187,6 +187,10 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
return;
|
||||
}
|
||||
|
||||
if (AllItems.DIVING_BOOTS.get()
|
||||
.isWornBy(entityIn))
|
||||
return;
|
||||
|
||||
BeltTileEntity belt = BeltHelper.getSegmentTE(worldIn, pos);
|
||||
if (belt == null)
|
||||
return;
|
||||
|
|
|
@ -41,7 +41,7 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
large = block.isLarge;
|
||||
|
||||
placementHelperId = PlacementHelpers.register(large ? new LargeCogHelper() : new SmallCogHelper());
|
||||
integratedCogHelperId = large ? PlacementHelpers.register(new IntegratedCogHelper()) : -1;
|
||||
integratedCogHelperId = PlacementHelpers.register(large ? new IntegratedLargeCogHelper() : new IntegratedSmallCogHelper());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -93,7 +93,7 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
for (int offset1 : Iterate.positiveAndNegative) {
|
||||
for (int offset2 : Iterate.positiveAndNegative) {
|
||||
BlockPos connectedPos = pos.offset(d1, offset1)
|
||||
.offset(d2, offset2);
|
||||
.offset(d2, offset2);
|
||||
BlockState blockState = world.getBlockState(connectedPos);
|
||||
if (!(blockState.getBlock() instanceof CogWheelBlock))
|
||||
continue;
|
||||
|
@ -123,7 +123,7 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
|
||||
if (!((CogWheelBlock) state.getBlock()).isLarge) {
|
||||
List<Direction> directions =
|
||||
IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS));
|
||||
IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS));
|
||||
|
||||
for (Direction dir : directions) {
|
||||
BlockPos newPos = pos.offset(dir);
|
||||
|
@ -132,8 +132,8 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
continue;
|
||||
|
||||
if (!world.getBlockState(newPos)
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
continue;
|
||||
|
||||
return PlacementOffset.success(newPos, s -> s.with(AXIS, state.get(AXIS)));
|
||||
|
@ -162,19 +162,19 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
|
||||
if (((CogWheelBlock) state.getBlock()).isLarge) {
|
||||
Direction side = IPlacementHelper.orderedByDistanceOnlyAxis(pos, ray.getHitVec(), state.get(AXIS))
|
||||
.get(0);
|
||||
.get(0);
|
||||
List<Direction> directions =
|
||||
IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS));
|
||||
IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS));
|
||||
for (Direction dir : directions) {
|
||||
BlockPos newPos = pos.offset(dir)
|
||||
.offset(side);
|
||||
.offset(side);
|
||||
|
||||
if (!CogWheelBlock.isValidCogwheelPosition(true, world, newPos, dir.getAxis()))
|
||||
continue;
|
||||
|
||||
if (!world.getBlockState(newPos)
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
continue;
|
||||
|
||||
return PlacementOffset.success(newPos, s -> s.with(AXIS, dir.getAxis()));
|
||||
|
@ -199,16 +199,16 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) {
|
||||
// diagonal gears of different size
|
||||
Direction closest = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS))
|
||||
.get(0);
|
||||
.get(0);
|
||||
List<Direction> directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(),
|
||||
state.get(AXIS), d -> d.getAxis() != closest.getAxis());
|
||||
state.get(AXIS), d -> d.getAxis() != closest.getAxis());
|
||||
|
||||
for (Direction dir : directions) {
|
||||
BlockPos newPos = pos.offset(dir)
|
||||
.offset(closest);
|
||||
.offset(closest);
|
||||
if (!world.getBlockState(newPos)
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
continue;
|
||||
|
||||
if (!CogWheelBlock.isValidCogwheelPosition(ICogWheel.isLargeCog(state), world, newPos, state.get(AXIS)))
|
||||
|
@ -222,16 +222,16 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
|
||||
protected boolean hitOnShaft(BlockState state, BlockRayTraceResult ray) {
|
||||
return AllShapes.SIX_VOXEL_POLE.get(state.get(AXIS))
|
||||
.getBoundingBox()
|
||||
.grow(0.001)
|
||||
.contains(ray.getHitVec()
|
||||
.subtract(ray.getHitVec()
|
||||
.align(Iterate.axisSet)));
|
||||
.getBoundingBox()
|
||||
.grow(0.001)
|
||||
.contains(ray.getHitVec()
|
||||
.subtract(ray.getHitVec()
|
||||
.align(Iterate.axisSet)));
|
||||
}
|
||||
}
|
||||
|
||||
@MethodsReturnNonnullByDefault
|
||||
public static class IntegratedCogHelper implements IPlacementHelper {
|
||||
public static class IntegratedLargeCogHelper implements IPlacementHelper {
|
||||
|
||||
@Override
|
||||
public Predicate<ItemStack> getItemPredicate() {
|
||||
|
@ -250,10 +250,10 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
|
||||
if (state.contains(HorizontalKineticBlock.HORIZONTAL_FACING))
|
||||
newAxis = state.get(HorizontalKineticBlock.HORIZONTAL_FACING)
|
||||
.getAxis();
|
||||
.getAxis();
|
||||
else if (state.contains(DirectionalKineticBlock.FACING))
|
||||
newAxis = state.get(DirectionalKineticBlock.FACING)
|
||||
.getAxis();
|
||||
.getAxis();
|
||||
else
|
||||
newAxis = Axis.Y;
|
||||
|
||||
|
@ -261,15 +261,15 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
return PlacementOffset.fail();
|
||||
|
||||
List<Direction> directions =
|
||||
IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), face.getAxis(), newAxis);
|
||||
IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), face.getAxis(), newAxis);
|
||||
|
||||
for (Direction d : directions) {
|
||||
BlockPos newPos = pos.offset(face)
|
||||
.offset(d);
|
||||
.offset(d);
|
||||
|
||||
if (!world.getBlockState(newPos)
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
continue;
|
||||
|
||||
if (!CogWheelBlock.isValidCogwheelPosition(false, world, newPos, newAxis))
|
||||
|
@ -282,4 +282,57 @@ public class CogwheelBlockItem extends BlockItem {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
@MethodsReturnNonnullByDefault
|
||||
public static class IntegratedSmallCogHelper implements IPlacementHelper {
|
||||
|
||||
@Override
|
||||
public Predicate<ItemStack> getItemPredicate() {
|
||||
return ((Predicate<ItemStack>) ICogWheel::isSmallCogItem).and(ICogWheel::isDedicatedCogItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<BlockState> getStatePredicate() {
|
||||
return s -> !ICogWheel.isDedicatedCogWheel(s.getBlock()) && ICogWheel.isSmallCog(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) {
|
||||
Direction face = ray.getFace();
|
||||
Axis newAxis;
|
||||
|
||||
if (state.contains(HorizontalKineticBlock.HORIZONTAL_FACING))
|
||||
newAxis = state.get(HorizontalKineticBlock.HORIZONTAL_FACING)
|
||||
.getAxis();
|
||||
else if (state.contains(DirectionalKineticBlock.FACING))
|
||||
newAxis = state.get(DirectionalKineticBlock.FACING)
|
||||
.getAxis();
|
||||
else
|
||||
newAxis = Axis.Y;
|
||||
|
||||
if (face.getAxis() == newAxis)
|
||||
return PlacementOffset.fail();
|
||||
|
||||
List<Direction> directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), newAxis);
|
||||
|
||||
for (Direction d : directions) {
|
||||
BlockPos newPos = pos.offset(d);
|
||||
|
||||
if (!world.getBlockState(newPos)
|
||||
.getMaterial()
|
||||
.isReplaceable())
|
||||
continue;
|
||||
|
||||
if (!CogWheelBlock.isValidCogwheelPosition(false, world, newPos, newAxis))
|
||||
return PlacementOffset.fail();
|
||||
|
||||
return PlacementOffset.success()
|
||||
.at(newPos)
|
||||
.withTransform(s -> s.with(CogWheelBlock.AXIS, newAxis));
|
||||
}
|
||||
|
||||
return PlacementOffset.fail();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,6 @@ import net.minecraft.item.ItemUseContext;
|
|||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
|
@ -75,7 +73,7 @@ public interface IWrenchable {
|
|||
default void playRemoveSound(World world, BlockPos pos) {
|
||||
AllSoundEvents.WRENCH_REMOVE.playOnServer(world, pos, 1, Create.random.nextFloat() * .5f + .5f);
|
||||
}
|
||||
|
||||
|
||||
default void playRotateSound(World world, BlockPos pos) {
|
||||
AllSoundEvents.WRENCH_ROTATE.playOnServer(world, pos, 1, Create.random.nextFloat() + .5f);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
|
||||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.item.IArmorMaterial;
|
||||
import net.minecraft.item.crafting.Ingredient;
|
||||
import net.minecraft.util.LazyValue;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
public enum AllArmorMaterials implements IArmorMaterial {
|
||||
|
||||
COPPER("copper", 7, new int[] { 1, 3, 4, 2 }, 25, AllSoundEvents.COPPER_ARMOR_EQUIP.getMainEvent(), 0.0F, 0.0F,
|
||||
() -> Ingredient.fromItems(AllItems.COPPER_INGOT.get()))
|
||||
|
||||
;
|
||||
|
||||
private static final int[] MAX_DAMAGE_ARRAY = new int[] { 13, 15, 16, 11 };
|
||||
private final String name;
|
||||
private final int maxDamageFactor;
|
||||
private final int[] damageReductionAmountArray;
|
||||
private final int enchantability;
|
||||
private final SoundEvent soundEvent;
|
||||
private final float toughness;
|
||||
private final float knockbackResistance;
|
||||
private final LazyValue<Ingredient> repairMaterial;
|
||||
|
||||
private AllArmorMaterials(String p_i231593_3_, int p_i231593_4_, int[] p_i231593_5_, int p_i231593_6_,
|
||||
SoundEvent p_i231593_7_, float p_i231593_8_, float p_i231593_9_, Supplier<Ingredient> p_i231593_10_) {
|
||||
this.name = p_i231593_3_;
|
||||
this.maxDamageFactor = p_i231593_4_;
|
||||
this.damageReductionAmountArray = p_i231593_5_;
|
||||
this.enchantability = p_i231593_6_;
|
||||
this.soundEvent = p_i231593_7_;
|
||||
this.toughness = p_i231593_8_;
|
||||
this.knockbackResistance = p_i231593_9_;
|
||||
this.repairMaterial = new LazyValue<>(p_i231593_10_);
|
||||
}
|
||||
|
||||
public int getDurability(EquipmentSlotType p_200896_1_) {
|
||||
return MAX_DAMAGE_ARRAY[p_200896_1_.getIndex()] * this.maxDamageFactor;
|
||||
}
|
||||
|
||||
public int getDamageReductionAmount(EquipmentSlotType p_200902_1_) {
|
||||
return this.damageReductionAmountArray[p_200902_1_.getIndex()];
|
||||
}
|
||||
|
||||
public int getEnchantability() {
|
||||
return this.enchantability;
|
||||
}
|
||||
|
||||
public SoundEvent getSoundEvent() {
|
||||
return this.soundEvent;
|
||||
}
|
||||
|
||||
public Ingredient getRepairMaterial() {
|
||||
return this.repairMaterial.getValue();
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public float getToughness() {
|
||||
return this.toughness;
|
||||
}
|
||||
|
||||
public float getKnockbackResistance() {
|
||||
return this.knockbackResistance;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.simibubi.create.Create;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.item.ArmorItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class CopperArmorItem extends ArmorItem {
|
||||
|
||||
public CopperArmorItem(EquipmentSlotType p_i48534_2_, Properties p_i48534_3_) {
|
||||
super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_);
|
||||
}
|
||||
|
||||
public boolean isWornBy(Entity entity) {
|
||||
for (ItemStack itemStack : entity.getArmorInventoryList())
|
||||
if (itemStack.getItem() == this)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) {
|
||||
return String.format("%s:textures/models/armor/copper.png", Create.ID);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,141 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.foundation.gui.GuiGameElement;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.MainWindow;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer.Impl;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererManager;
|
||||
import net.minecraft.client.renderer.entity.LivingRenderer;
|
||||
import net.minecraft.client.renderer.entity.layers.LayerRenderer;
|
||||
import net.minecraft.client.renderer.entity.model.BipedModel;
|
||||
import net.minecraft.client.renderer.entity.model.EntityModel;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.Pose;
|
||||
import net.minecraft.tags.FluidTags;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.StringUtils;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
|
||||
public class CopperBacktankArmorLayer<T extends LivingEntity, M extends EntityModel<T>> extends LayerRenderer<T, M> {
|
||||
|
||||
private LivingRenderer<T, M> renderer;
|
||||
|
||||
public CopperBacktankArmorLayer(LivingRenderer<T, M> renderer) {
|
||||
super(renderer);
|
||||
this.renderer = renderer;
|
||||
renderer.addLayer(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack ms, IRenderTypeBuffer buffer, int light, LivingEntity entity, float yaw, float pitch,
|
||||
float pt, float p_225628_8_, float p_225628_9_, float p_225628_10_) {
|
||||
|
||||
if (entity.getPose() == Pose.SLEEPING)
|
||||
return;
|
||||
if (!AllItems.COPPER_BACKTANK.get()
|
||||
.isWornBy(entity))
|
||||
return;
|
||||
|
||||
M entityModel = renderer.getEntityModel();
|
||||
if (!(entityModel instanceof BipedModel))
|
||||
return;
|
||||
|
||||
ms.push();
|
||||
BipedModel<?> model = (BipedModel<?>) entityModel;
|
||||
BlockState renderedState = AllBlocks.COPPER_BACKTANK.getDefaultState()
|
||||
.with(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH);
|
||||
RenderType renderType = RenderType.getCutout();
|
||||
|
||||
SuperByteBuffer backtank = CreateClient.bufferCache.renderBlock(renderedState);
|
||||
SuperByteBuffer cogs =
|
||||
CreateClient.bufferCache.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, renderedState);
|
||||
|
||||
model.bipedBody.rotate(ms);
|
||||
ms.translate(-1 / 2f, 10 / 16f, 1f);
|
||||
ms.scale(1, -1, -1);
|
||||
backtank.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(renderType));
|
||||
|
||||
cogs.matrixStacker()
|
||||
.centre()
|
||||
.rotateY(180)
|
||||
.unCentre()
|
||||
.translate(0, 6.5f / 16, 11f / 16)
|
||||
.rotate(Direction.EAST, AngleHelper.rad(2 * AnimationTickHolder.getRenderTime(entity.world) % 360))
|
||||
.translate(0, -6.5f / 16, -11f / 16);
|
||||
|
||||
cogs.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(renderType));
|
||||
|
||||
if (buffer instanceof Impl)
|
||||
((Impl) buffer).draw(renderType);
|
||||
ms.pop();
|
||||
|
||||
}
|
||||
|
||||
public static void register() {
|
||||
EntityRendererManager renderManager = Minecraft.getInstance()
|
||||
.getRenderManager();
|
||||
registerOn(renderManager.playerRenderer);
|
||||
for (EntityRenderer<?> renderer : renderManager.renderers.values())
|
||||
registerOn(renderer);
|
||||
}
|
||||
|
||||
private static void registerOn(EntityRenderer<?> entityRenderer) {
|
||||
if (!(entityRenderer instanceof LivingRenderer))
|
||||
return;
|
||||
new CopperBacktankArmorLayer<>((LivingRenderer<?, ?>) entityRenderer);
|
||||
}
|
||||
|
||||
public static void renderRemainingAirOverlay(MatrixStack ms, Impl buffers, int light, int overlay, float pt) {
|
||||
ClientPlayerEntity player = Minecraft.getInstance().player;
|
||||
if (player == null)
|
||||
return;
|
||||
if (player.isSpectator() || player.isCreative())
|
||||
return;
|
||||
if (!player.getPersistentData()
|
||||
.contains("VisualBacktankAir"))
|
||||
return;
|
||||
if (!player.areEyesInFluid(FluidTags.WATER))
|
||||
return;
|
||||
|
||||
int timeLeft = player.getPersistentData()
|
||||
.getInt("VisualBacktankAir");
|
||||
|
||||
ms.push();
|
||||
|
||||
MainWindow window = Minecraft.getInstance()
|
||||
.getWindow();
|
||||
ms.translate(window.getScaledWidth() / 2 + 90, window.getScaledHeight() - 53, 0);
|
||||
|
||||
ITextComponent text = new StringTextComponent(StringUtils.ticksToElapsedTime(timeLeft * 20));
|
||||
GuiGameElement.of(AllItems.COPPER_BACKTANK.asStack())
|
||||
.at(0, 0)
|
||||
.render(ms);
|
||||
int color = 0xFF_FFFFFF;
|
||||
if (timeLeft < 60 && timeLeft % 2 == 0) {
|
||||
color = ColorHelper.mixColors(0xFF_FF0000, color, Math.max(timeLeft / 60f, .25f));
|
||||
}
|
||||
Minecraft.getInstance().fontRenderer.drawWithShadow(ms, text, 16, 5, color);
|
||||
buffers.draw();
|
||||
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,165 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.IWaterLoggable;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.fluid.FluidState;
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.pathfinding.PathType;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.IWorldReader;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
|
||||
public class CopperBacktankBlock extends HorizontalKineticBlock
|
||||
implements ITE<CopperBacktankTileEntity>, IWaterLoggable {
|
||||
|
||||
public CopperBacktankBlock(Properties properties) {
|
||||
super(properties);
|
||||
setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidState getFluidState(BlockState state) {
|
||||
return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false)
|
||||
: Fluids.EMPTY.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
builder.add(BlockStateProperties.WATERLOGGED);
|
||||
super.fillStateContainer(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState,
|
||||
IWorld world, BlockPos pos, BlockPos neighbourPos) {
|
||||
if (state.get(BlockStateProperties.WATERLOGGED)) {
|
||||
world.getPendingFluidTicks()
|
||||
.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
FluidState ifluidstate = context.getWorld()
|
||||
.getFluidState(context.getPos());
|
||||
return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED,
|
||||
Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
||||
return face == Direction.UP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Axis getRotationAxis(BlockState state) {
|
||||
return Axis.Y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) {
|
||||
super.onBlockPlacedBy(worldIn, pos, state, placer, stack);
|
||||
if (worldIn.isRemote)
|
||||
return;
|
||||
if (stack == null)
|
||||
return;
|
||||
withTileEntityDo(worldIn, pos, te -> {
|
||||
te.setAirLevel(stack.getOrCreateTag()
|
||||
.getInt("Air"));
|
||||
if (stack.hasDisplayName())
|
||||
te.setCustomName(stack.getDisplayName());
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand p_225533_5_,
|
||||
BlockRayTraceResult p_225533_6_) {
|
||||
if (player == null)
|
||||
return ActionResultType.PASS;
|
||||
if (player instanceof FakePlayer)
|
||||
return ActionResultType.PASS;
|
||||
if (player.isSneaking())
|
||||
return ActionResultType.PASS;
|
||||
if (player.getHeldItemMainhand()
|
||||
.getItem() instanceof BlockItem)
|
||||
return ActionResultType.PASS;
|
||||
if (!player.getItemStackFromSlot(EquipmentSlotType.CHEST)
|
||||
.isEmpty())
|
||||
return ActionResultType.PASS;
|
||||
if (!world.isRemote) {
|
||||
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .75f, 1);
|
||||
player.setItemStackToSlot(EquipmentSlotType.CHEST, getItem(world, pos, state));
|
||||
world.destroyBlock(pos, false);
|
||||
}
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItem(IBlockReader p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) {
|
||||
ItemStack item = AllItems.COPPER_BACKTANK.asStack();
|
||||
Optional<CopperBacktankTileEntity> tileEntityOptional = getTileEntityOptional(p_185473_1_, p_185473_2_);
|
||||
int air = tileEntityOptional.map(CopperBacktankTileEntity::getAirLevel)
|
||||
.orElse(0);
|
||||
ITextComponent customName = tileEntityOptional.map(CopperBacktankTileEntity::getCustomName)
|
||||
.orElse(null);
|
||||
item.getOrCreateTag()
|
||||
.putInt("Air", air);
|
||||
if (customName != null)
|
||||
item.setDisplayName(customName);
|
||||
return item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState p_220053_1_, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||
ISelectionContext p_220053_4_) {
|
||||
return AllShapes.BACKTANK;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.COPPER_BACKTANK.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<CopperBacktankTileEntity> getTileEntityClass() {
|
||||
return CopperBacktankTileEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.jozufozu.flywheel.backend.instancing.InstancedModel;
|
||||
import com.jozufozu.flywheel.backend.instancing.InstancedTileRenderer;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||
|
||||
public class CopperBacktankInstance extends SingleRotatingInstance {
|
||||
|
||||
public CopperBacktankInstance(InstancedTileRenderer<?> modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected InstancedModel<RotatingData> getModel() {
|
||||
return getRotatingMaterial().getModel(AllBlockPartials.COPPER_BACKTANK_SHAFT, blockState);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
|
||||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
||||
public class CopperBacktankItem extends CopperArmorItem {
|
||||
|
||||
private BlockItem blockItem;
|
||||
|
||||
public CopperBacktankItem(Properties p_i48534_3_, BlockItem blockItem) {
|
||||
super(EquipmentSlotType.CHEST, p_i48534_3_);
|
||||
this.blockItem = blockItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onItemUse(ItemUseContext p_195939_1_) {
|
||||
return blockItem.onItemUse(p_195939_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDamageable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRGBDurabilityForDisplay(ItemStack stack) {
|
||||
return 0xefefef;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillItemGroup(ItemGroup p_150895_1_, NonNullList<ItemStack> p_150895_2_) {
|
||||
if (!isInGroup(p_150895_1_))
|
||||
return;
|
||||
|
||||
ItemStack stack = new ItemStack(this);
|
||||
CompoundNBT nbt = new CompoundNBT();
|
||||
nbt.putInt("Air", AllConfigs.SERVER.curiosities.maxAirInBacktank.get());
|
||||
stack.setTag(nbt);
|
||||
p_150895_2_.add(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDurabilityForDisplay(ItemStack stack) {
|
||||
return 1 - MathHelper
|
||||
.clamp(getRemainingAir(stack) / ((float) AllConfigs.SERVER.curiosities.maxAirInBacktank.get()), 0, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean showDurabilityBar(ItemStack stack) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int getRemainingAir(ItemStack stack) {
|
||||
CompoundNBT orCreateTag = stack.getOrCreateTag();
|
||||
return orCreateTag.getInt("Air");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.PartialBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||
import net.minecraft.util.Direction;
|
||||
|
||||
public class CopperBacktankRenderer extends KineticTileEntityRenderer {
|
||||
|
||||
public CopperBacktankRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||
super(dispatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||
int light, int overlay) {
|
||||
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
|
||||
|
||||
SuperByteBuffer cogs =
|
||||
CreateClient.bufferCache.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, te.getBlockState());
|
||||
cogs.matrixStacker()
|
||||
.centre()
|
||||
.rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState()
|
||||
.get(CopperBacktankBlock.HORIZONTAL_FACING)))
|
||||
.unCentre()
|
||||
.translate(0, 6.5f / 16, 11f / 16)
|
||||
.rotate(Direction.EAST,
|
||||
AngleHelper.rad(te.getSpeed() / 4f * AnimationTickHolder.getRenderTime(te.getWorld()) % 360))
|
||||
.translate(0, -6.5f / 16, -11f / 16);
|
||||
cogs.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
||||
return PartialBufferer.get(AllBlockPartials.COPPER_BACKTANK_SHAFT, te.getBlockState());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,130 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.particle.AirParticleData;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.particles.ParticleTypes;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.INameable;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.vector.Vector3d;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
|
||||
public class CopperBacktankTileEntity extends KineticTileEntity implements INameable {
|
||||
|
||||
public int airLevel;
|
||||
public int airLevelTimer;
|
||||
private ITextComponent customName;
|
||||
|
||||
public CopperBacktankTileEntity(TileEntityType<?> typeIn) {
|
||||
super(typeIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (getSpeed() == 0)
|
||||
return;
|
||||
if (airLevelTimer > 0) {
|
||||
airLevelTimer--;
|
||||
return;
|
||||
}
|
||||
|
||||
int max = getMaxAir();
|
||||
if (world.isRemote) {
|
||||
Vector3d centerOf = VecHelper.getCenterOf(pos);
|
||||
Vector3d v = VecHelper.offsetRandomly(centerOf, Create.random, .65f);
|
||||
Vector3d m = centerOf.subtract(v);
|
||||
if (airLevel != max)
|
||||
world.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z);
|
||||
return;
|
||||
}
|
||||
|
||||
if (airLevel == max)
|
||||
return;
|
||||
|
||||
float abs = Math.abs(getSpeed());
|
||||
int increment = MathHelper.clamp(((int) abs - 100) / 20, 1, 5);
|
||||
airLevel = Math.min(max, airLevel + increment);
|
||||
if (airLevel == max)
|
||||
sendData();
|
||||
airLevelTimer = MathHelper.clamp((int) (128f - abs / 5f) - 108, 0, 20);
|
||||
}
|
||||
|
||||
protected int getMaxAir() {
|
||||
return AllConfigs.SERVER.curiosities.maxAirInBacktank.get();
|
||||
}
|
||||
|
||||
public int getAirLevel() {
|
||||
return airLevel;
|
||||
}
|
||||
|
||||
public void setAirLevel(int airLevel) {
|
||||
this.airLevel = airLevel;
|
||||
sendData();
|
||||
}
|
||||
|
||||
public void setCustomName(ITextComponent customName) {
|
||||
this.customName = customName;
|
||||
}
|
||||
|
||||
public ITextComponent getCustomName() {
|
||||
return customName;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(CompoundNBT compound, boolean clientPacket) {
|
||||
super.write(compound, clientPacket);
|
||||
compound.putInt("Air", airLevel);
|
||||
compound.putInt("Timer", airLevelTimer);
|
||||
if (this.customName != null)
|
||||
compound.putString("CustomName", ITextComponent.Serializer.toJson(this.customName));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) {
|
||||
super.fromTag(state, compound, clientPacket);
|
||||
int prev = airLevel;
|
||||
airLevel = compound.getInt("Air");
|
||||
airLevelTimer = compound.getInt("Timer");
|
||||
if (compound.contains("CustomName", 8))
|
||||
this.customName = ITextComponent.Serializer.fromJson(compound.getString("CustomName"));
|
||||
if (prev != 0 && prev != airLevel && airLevel == getMaxAir() && clientPacket)
|
||||
playFilledEffect();
|
||||
}
|
||||
|
||||
protected void playFilledEffect() {
|
||||
AllSoundEvents.CONFIRM.playAt(world, pos, 0.4f, 1, true);
|
||||
Vector3d baseMotion = new Vector3d(.25, 0.1, 0);
|
||||
Vector3d baseVec = VecHelper.getCenterOf(pos);
|
||||
for (int i = 0; i < 360; i += 10) {
|
||||
Vector3d m = VecHelper.rotate(baseMotion, i, Axis.Y);
|
||||
Vector3d v = baseVec.add(m.normalize()
|
||||
.scale(.25f));
|
||||
|
||||
world.addParticle(ParticleTypes.SPIT, v.x, v.y, v.z, m.x, m.y, m.z);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITextComponent getName() {
|
||||
return this.customName != null ? this.customName
|
||||
: new TranslationTextComponent(AllItems.COPPER_BACKTANK.get()
|
||||
.getTranslationKey());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRenderAsTE() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.Pose;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.util.math.vector.Vector3d;
|
||||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||
|
||||
@EventBusSubscriber
|
||||
public class DivingBootsItem extends CopperArmorItem {
|
||||
|
||||
public DivingBootsItem(Properties p_i48534_3_) {
|
||||
super(EquipmentSlotType.FEET, p_i48534_3_);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void accellerateDescentUnderwater(LivingUpdateEvent event) {
|
||||
LivingEntity entity = event.getEntityLiving();
|
||||
if (!affects(entity))
|
||||
return;
|
||||
|
||||
Vector3d motion = entity.getMotion();
|
||||
Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "field_70703_bu");
|
||||
entity.onGround |= entity.collidedVertically;
|
||||
|
||||
if (isJumping && entity.onGround) {
|
||||
motion = motion.add(0, .5f, 0);
|
||||
entity.onGround = false;
|
||||
} else {
|
||||
motion = motion.add(0, -0.05f, 0);
|
||||
}
|
||||
|
||||
float multiplier = 1.3f;
|
||||
if (motion.mul(1, 0, 1)
|
||||
.length() < 0.145f && (entity.moveForward > 0 || entity.moveStrafing != 0) && !entity.isSneaking())
|
||||
motion = motion.mul(multiplier, 1, multiplier);
|
||||
entity.setMotion(motion);
|
||||
}
|
||||
|
||||
protected static boolean affects(LivingEntity entity) {
|
||||
if (!AllItems.DIVING_BOOTS.get()
|
||||
.isWornBy(entity)) {
|
||||
entity.getPersistentData()
|
||||
.remove("HeavyBoots");
|
||||
return false;
|
||||
}
|
||||
|
||||
NBTHelper.putMarker(entity.getPersistentData(), "HeavyBoots");
|
||||
if (!entity.isInWater())
|
||||
return false;
|
||||
if (entity.getPose() == Pose.SWIMMING)
|
||||
return false;
|
||||
if (entity instanceof PlayerEntity) {
|
||||
PlayerEntity playerEntity = (PlayerEntity) entity;
|
||||
if (playerEntity.abilities.isFlying)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
package com.simibubi.create.content.curiosities.armor;
|
||||
|
||||
import com.simibubi.create.AllItems;
|
||||
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.potion.EffectInstance;
|
||||
import net.minecraft.potion.Effects;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
|
||||
@EventBusSubscriber
|
||||
public class DivingHelmetItem extends CopperArmorItem {
|
||||
|
||||
public DivingHelmetItem(Properties p_i48534_3_) {
|
||||
super(EquipmentSlotType.HEAD, p_i48534_3_);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void breatheUnderwater(LivingUpdateEvent event) {
|
||||
LivingEntity entity = event.getEntityLiving();
|
||||
World world = entity.world;
|
||||
boolean second = world.getGameTime() % 20 == 0;
|
||||
boolean drowning = entity.getAir() == 0;
|
||||
|
||||
if (world.isRemote)
|
||||
entity.getPersistentData()
|
||||
.remove("VisualBacktankAir");
|
||||
|
||||
if (!AllItems.DIVING_HELMET.get()
|
||||
.isWornBy(entity))
|
||||
return;
|
||||
if (!entity.isInWater())
|
||||
return;
|
||||
|
||||
ItemStack backtank = ItemStack.EMPTY;
|
||||
for (ItemStack itemStack : entity.getArmorInventoryList()) {
|
||||
if (AllItems.COPPER_BACKTANK.isIn(itemStack)) {
|
||||
backtank = itemStack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (backtank.isEmpty())
|
||||
return;
|
||||
|
||||
CompoundNBT tag = backtank.getOrCreateTag();
|
||||
int airRemaining = tag.getInt("Air");
|
||||
if (airRemaining == 0)
|
||||
return;
|
||||
|
||||
if (drowning)
|
||||
entity.setAir(10);
|
||||
|
||||
if (world.isRemote)
|
||||
entity.getPersistentData()
|
||||
.putInt("VisualBacktankAir", airRemaining);
|
||||
|
||||
if (!second)
|
||||
return;
|
||||
|
||||
entity.setAir(Math.min(entity.getMaxAir(), entity.getAir() + 10));
|
||||
entity.addPotionEffect(new EffectInstance(Effects.WATER_BREATHING, 30, 0, true, false, true));
|
||||
tag.putInt("Air", airRemaining - 1);
|
||||
backtank.setTag(tag);
|
||||
}
|
||||
|
||||
}
|
|
@ -229,8 +229,8 @@ public class ChromaticProjectorScreen extends AbstractSimiScreen {
|
|||
0xffffff);
|
||||
|
||||
GuiGameElement.of(renderedItem)
|
||||
.at(guiLeft + background.width + 10, guiTop + 140, -150)
|
||||
.scale(5)
|
||||
.at(guiLeft + background.width + 10, guiTop + 140, -150)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
||||
|
|
|
@ -96,14 +96,14 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
|
|||
widgets.add(labelAlign);
|
||||
widgets.add(areaType);
|
||||
widgets.add(labelType);
|
||||
|
||||
|
||||
confirmButton = new IconButton(guiLeft + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM);
|
||||
widgets.add(confirmButton);
|
||||
|
||||
}
|
||||
|
||||
private void initAlign(SymmetryMirror element) {
|
||||
if (areaAlign != null)
|
||||
if (areaAlign != null)
|
||||
widgets.remove(areaAlign);
|
||||
|
||||
areaAlign = new SelectionScrollInput(guiLeft + 45, guiTop + 43, 109, 18).forOptions(element.getAlignToolTips())
|
||||
|
@ -121,10 +121,10 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
|
|||
textRenderer.draw(matrixStack, wand.getDisplayName(), guiLeft + 11, guiTop + 4, 0x6B3802);
|
||||
renderBlock(matrixStack);
|
||||
GuiGameElement.of(wand)
|
||||
.at(guiLeft + 170, guiTop + 490, -150)
|
||||
.scale(4)
|
||||
.rotate(-70, 20, 20)
|
||||
.render(matrixStack);
|
||||
.scale(4)
|
||||
.rotate(-70, 20, 20)
|
||||
.at(guiLeft + 170, guiTop + 490, -150)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
||||
protected void renderBlock(MatrixStack ms) {
|
||||
|
@ -150,7 +150,7 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
|
|||
client.player.setHeldItem(hand, heldItem);
|
||||
super.removed();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(double x, double y, int button) {
|
||||
if (confirmButton.isHovered()) {
|
||||
|
|
|
@ -135,9 +135,9 @@ public class ZapperScreen extends AbstractSimiScreen {
|
|||
|
||||
protected void renderZapper(MatrixStack matrixStack) {
|
||||
GuiGameElement.of(zapper)
|
||||
.at((this.width - this.sWidth) / 2 + 220, this.height / 2 - this.sHeight / 4 + 27, -150)
|
||||
.scale(4)
|
||||
.render(matrixStack);
|
||||
.scale(4)
|
||||
.at((this.width - this.sWidth) / 2 + 220, this.height / 2 - this.sHeight / 4 + 27, -150)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
||||
protected void renderBlock(MatrixStack matrixStack) {
|
||||
|
|
|
@ -97,7 +97,7 @@ public class AdjustableCrateScreen extends AbstractSimiContainerScreen<Adjustabl
|
|||
}
|
||||
|
||||
GuiGameElement.of(renderedItem)
|
||||
.at(guiLeft + ADJUSTABLE_CRATE.width + 110, guiTop + 70, -150)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(guiLeft + ADJUSTABLE_CRATE.width + 110, guiTop + 70, -150)
|
||||
.scale(5)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
|
|
@ -122,14 +122,14 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
}
|
||||
if (world.isRemote)
|
||||
return;
|
||||
|
||||
|
||||
if (phase == Phase.MOVE_TO_INPUT)
|
||||
collectItem();
|
||||
else if (phase == Phase.MOVE_TO_OUTPUT)
|
||||
depositItem();
|
||||
else if (phase == Phase.SEARCH_INPUTS || phase == Phase.DANCING)
|
||||
searchForItem();
|
||||
|
||||
|
||||
if (targetReached)
|
||||
lazyTick();
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
return;
|
||||
if (chasedPointProgress < .5f)
|
||||
return;
|
||||
if (phase == Phase.SEARCH_INPUTS || phase == Phase.DANCING)
|
||||
if (phase == Phase.SEARCH_INPUTS || phase == Phase.DANCING)
|
||||
checkForMusic();
|
||||
if (phase == Phase.SEARCH_OUTPUTS)
|
||||
searchForDestination();
|
||||
|
@ -175,7 +175,7 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
private boolean tickMovementProgress() {
|
||||
boolean targetReachedPreviously = chasedPointProgress >= 1;
|
||||
boolean targetReachedPreviously = chasedPointProgress >= 1;
|
||||
chasedPointProgress += Math.min(256, Math.abs(getSpeed())) / 1024f;
|
||||
if (chasedPointProgress > 1)
|
||||
chasedPointProgress = 1;
|
||||
|
@ -349,7 +349,7 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
chasedPointIndex = -1;
|
||||
sendData();
|
||||
markDirty();
|
||||
|
||||
|
||||
if (!prevHeld.isItemEqual(heldItem))
|
||||
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .125f,
|
||||
.5f + Create.random.nextFloat() * .25f);
|
||||
|
@ -416,23 +416,26 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
markDirty();
|
||||
}
|
||||
|
||||
public void writeInteractionPoints(CompoundNBT compound) {
|
||||
if (updateInteractionPoints) {
|
||||
compound.put("InteractionPoints", interactionPointTag);
|
||||
} else {
|
||||
ListNBT pointsNBT = new ListNBT();
|
||||
inputs.stream()
|
||||
.map(aip -> aip.serialize(pos))
|
||||
.forEach(pointsNBT::add);
|
||||
outputs.stream()
|
||||
.map(aip -> aip.serialize(pos))
|
||||
.forEach(pointsNBT::add);
|
||||
compound.put("InteractionPoints", pointsNBT);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(CompoundNBT compound, boolean clientPacket) {
|
||||
super.write(compound, clientPacket);
|
||||
|
||||
if (updateInteractionPoints) {
|
||||
compound.put("InteractionPoints", interactionPointTag);
|
||||
|
||||
} else {
|
||||
ListNBT pointsNBT = new ListNBT();
|
||||
inputs.stream()
|
||||
.map(aip -> aip.serialize(pos))
|
||||
.forEach(pointsNBT::add);
|
||||
outputs.stream()
|
||||
.map(aip -> aip.serialize(pos))
|
||||
.forEach(pointsNBT::add);
|
||||
compound.put("InteractionPoints", pointsNBT);
|
||||
}
|
||||
writeInteractionPoints(compound);
|
||||
|
||||
NBTHelper.writeEnum(compound, "Phase", phase);
|
||||
compound.putBoolean("Powered", redstoneLocked);
|
||||
|
@ -441,6 +444,13 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
compound.putFloat("MovementProgress", chasedPointProgress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeSafe(CompoundNBT compound, boolean clientPacket) {
|
||||
super.writeSafe(compound, clientPacket);
|
||||
|
||||
writeInteractionPoints(compound);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) {
|
||||
int previousIndex = chasedPointIndex;
|
||||
|
|
|
@ -126,7 +126,7 @@ public class StockpileSwitchScreen extends AbstractSimiScreen {
|
|||
|
||||
matrixStack.push();
|
||||
GuiGameElement.of(renderedItem)
|
||||
.at(guiLeft + STOCKSWITCH.width + 15, guiTop + 40, -250)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(guiLeft + STOCKSWITCH.width + 15, guiTop + 40, -250)
|
||||
.scale(5)
|
||||
.render(matrixStack);
|
||||
matrixStack.pop();
|
||||
|
|
|
@ -69,7 +69,7 @@ public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> ex
|
|||
textRenderer.draw(ms, I18n.format(container.filterItem.getTranslationKey()), x + 15, y + 3, 0xdedede);
|
||||
|
||||
GuiGameElement.of(container.filterItem)
|
||||
.at(x + background.width, guiTop + background.height - 60)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(x + background.width, guiTop + background.height - 60, -200)
|
||||
.scale(5)
|
||||
.render(ms);
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicT
|
|||
textRenderer.drawWithShadow(matrixStack, noSchematics, mainLeft + 54, mainTop + 26, 0xd3d3d3);
|
||||
|
||||
GuiGameElement.of(renderedItem)
|
||||
.at(mainLeft + 217, mainTop + 50, -150)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(mainLeft + 217, mainTop + 50, -150)
|
||||
.scale(3)
|
||||
.render(matrixStack);
|
||||
|
||||
|
|
|
@ -262,7 +262,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
|||
renderBlueprintHighlight(matrixStack);
|
||||
|
||||
GuiGameElement.of(renderedItem)
|
||||
.at(guiLeft + 230, guiTop + 110, -200)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(guiLeft + 230, guiTop + 110, -200)
|
||||
.scale(5)
|
||||
.render(matrixStack);
|
||||
|
||||
|
@ -274,7 +274,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
|||
if (te.missingItem != null) {
|
||||
stringWidth += 15;
|
||||
GuiGameElement.of(te.missingItem)
|
||||
.at(guiLeft + 150, guiTop + 46, 100)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(guiLeft + 150, guiTop + 46, 100)
|
||||
.scale(1)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
|
|
@ -28,10 +28,15 @@ import com.simibubi.create.foundation.item.ItemHelper;
|
|||
import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||
import com.simibubi.create.foundation.utility.IPartialSafeNBT;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.NBTProcessors;
|
||||
|
||||
import net.minecraft.block.AbstractRailBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.PistonHeadBlock;
|
||||
|
@ -79,6 +84,10 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
STOPPED, PAUSED, RUNNING;
|
||||
}
|
||||
|
||||
public enum PrintStage {
|
||||
BLOCKS, DEFERRED_BLOCKS, ENTITIES
|
||||
}
|
||||
|
||||
// Inventory
|
||||
public SchematicannonInventory inventory;
|
||||
|
||||
|
@ -99,12 +108,14 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
private int skipsLeft;
|
||||
private boolean blockSkipped;
|
||||
private int printingEntityIndex;
|
||||
private PrintStage printStage;
|
||||
|
||||
public BlockPos target;
|
||||
public BlockPos previousTarget;
|
||||
public LinkedHashSet<LazyOptional<IItemHandler>> attachedInventories;
|
||||
public List<LaunchedItem> flyingBlocks;
|
||||
public MaterialChecklist checklist;
|
||||
public List<BlockPos> deferredBlocks;
|
||||
|
||||
// Gui information
|
||||
public float fuelLevel;
|
||||
|
@ -142,7 +153,9 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
inventory = new SchematicannonInventory(this);
|
||||
statusMsg = "idle";
|
||||
state = State.STOPPED;
|
||||
printingEntityIndex = -1;
|
||||
printingEntityIndex = 0;
|
||||
printStage = PrintStage.BLOCKS;
|
||||
deferredBlocks = new LinkedList<>();
|
||||
replaceMode = 2;
|
||||
checklist = new MaterialChecklist();
|
||||
}
|
||||
|
@ -198,8 +211,14 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
replaceTileEntities = options.getBoolean("ReplaceTileEntities");
|
||||
|
||||
// Printer & Flying Blocks
|
||||
if (compound.contains("PrintStage"))
|
||||
printStage = PrintStage.valueOf(compound.getString("PrintStage"));
|
||||
if (compound.contains("Target"))
|
||||
target = NBTUtil.readBlockPos(compound.getCompound("Target"));
|
||||
if (compound.contains("DeferredBlocks"))
|
||||
compound.getList("DeferredBlocks", 10).stream()
|
||||
.map(p -> NBTUtil.readBlockPos((CompoundNBT) p))
|
||||
.collect(Collectors.toCollection(() -> deferredBlocks));
|
||||
if (compound.contains("FlyingBlocks"))
|
||||
readFlyingBlocks(compound);
|
||||
|
||||
|
@ -273,12 +292,20 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
compound.put("Options", options);
|
||||
|
||||
// Printer & Flying Blocks
|
||||
compound.putString("PrintStage", printStage.name());
|
||||
|
||||
if (target != null)
|
||||
compound.put("Target", NBTUtil.writeBlockPos(target));
|
||||
ListNBT tagBlocks = new ListNBT();
|
||||
|
||||
ListNBT tagDeferredBlocks = new ListNBT();
|
||||
for (BlockPos p : deferredBlocks)
|
||||
tagDeferredBlocks.add(NBTUtil.writeBlockPos(p));
|
||||
compound.put("DeferredBlocks", tagDeferredBlocks);
|
||||
|
||||
ListNBT tagFlyingBlocks = new ListNBT();
|
||||
for (LaunchedItem b : flyingBlocks)
|
||||
tagBlocks.add(b.serializeNBT());
|
||||
compound.put("FlyingBlocks", tagBlocks);
|
||||
tagFlyingBlocks.add(b.serializeNBT());
|
||||
compound.put("FlyingBlocks", tagFlyingBlocks);
|
||||
|
||||
super.write(compound, clientPacket);
|
||||
}
|
||||
|
@ -388,7 +415,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
target = schematicAnchor.add(currentPos);
|
||||
}
|
||||
|
||||
boolean entityMode = printingEntityIndex >= 0;
|
||||
boolean entityMode = printStage == PrintStage.ENTITIES;
|
||||
|
||||
// Check block
|
||||
if (!getWorld().isAreaLoaded(target, 0)) {
|
||||
|
@ -471,13 +498,18 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
launchBlock(target, icon, blockState, null);
|
||||
} else {
|
||||
CompoundNBT data = null;
|
||||
if (AllBlockTags.SAFE_NBT.matches(blockState)) {
|
||||
TileEntity tile = blockReader.getTileEntity(target);
|
||||
if (tile != null) {
|
||||
TileEntity tile = blockReader.getTileEntity(target);
|
||||
if (tile != null) {
|
||||
if (AllBlockTags.SAFE_NBT.matches(blockState)) {
|
||||
data = tile.write(new CompoundNBT());
|
||||
data = NBTProcessors.process(tile, data, true);
|
||||
} else if (tile instanceof IPartialSafeNBT) {
|
||||
data = new CompoundNBT();
|
||||
((IPartialSafeNBT) tile).writeSafe(data, false);
|
||||
data = NBTProcessors.process(tile, data, true);
|
||||
}
|
||||
}
|
||||
|
||||
launchBlock(target, icon, blockState, data);
|
||||
}
|
||||
|
||||
|
@ -563,7 +595,9 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
schematicLoaded = true;
|
||||
state = State.PAUSED;
|
||||
statusMsg = "ready";
|
||||
printingEntityIndex = -1;
|
||||
printingEntityIndex = 0;
|
||||
printStage = PrintStage.BLOCKS;
|
||||
deferredBlocks.clear();
|
||||
updateChecklist();
|
||||
sendUpdate = true;
|
||||
blocksToPlace += blocksPlaced;
|
||||
|
@ -649,22 +683,33 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
protected void advanceCurrentPos() {
|
||||
List<Entity> entities = blockReader.getEntities()
|
||||
.collect(Collectors.toList());
|
||||
if (printingEntityIndex != -1) {
|
||||
printingEntityIndex++;
|
||||
|
||||
// End of entities reached
|
||||
if (printingEntityIndex >= entities.size()) {
|
||||
finishedPrinting();
|
||||
return;
|
||||
if (printStage == PrintStage.BLOCKS) {
|
||||
MutableBoundingBox bounds = blockReader.getBounds();
|
||||
while (tryAdvanceCurrentPos(bounds, entities)) {
|
||||
deferredBlocks.add(currentPos);
|
||||
}
|
||||
|
||||
currentPos = entities.get(printingEntityIndex)
|
||||
.getBlockPos()
|
||||
.subtract(schematicAnchor);
|
||||
return;
|
||||
}
|
||||
|
||||
MutableBoundingBox bounds = blockReader.getBounds();
|
||||
if (printStage == PrintStage.DEFERRED_BLOCKS) {
|
||||
if (deferredBlocks.isEmpty()) {
|
||||
printStage = PrintStage.ENTITIES;
|
||||
} else {
|
||||
currentPos = deferredBlocks.remove(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (printStage == PrintStage.ENTITIES) {
|
||||
if (printingEntityIndex < entities.size()) {
|
||||
currentPos = entities.get(printingEntityIndex).getBlockPos().subtract(schematicAnchor);
|
||||
printingEntityIndex++;
|
||||
} else {
|
||||
finishedPrinting();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean tryAdvanceCurrentPos(MutableBoundingBox bounds, List<Entity> entities) {
|
||||
currentPos = currentPos.offset(Direction.EAST);
|
||||
BlockPos posInBounds = currentPos.add(-bounds.minX, -bounds.minY, -bounds.minZ);
|
||||
|
||||
|
@ -675,15 +720,16 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
|
||||
// End of blocks reached
|
||||
if (currentPos.getY() > bounds.getYSize()) {
|
||||
printingEntityIndex = 0;
|
||||
if (entities.isEmpty()) {
|
||||
finishedPrinting();
|
||||
return;
|
||||
}
|
||||
currentPos = entities.get(0)
|
||||
.getBlockPos()
|
||||
.subtract(schematicAnchor);
|
||||
printStage = PrintStage.DEFERRED_BLOCKS;
|
||||
return false;
|
||||
}
|
||||
|
||||
return shouldDeferBlock(blockReader.getBlockState(schematicAnchor.add(currentPos)));
|
||||
}
|
||||
|
||||
public static boolean shouldDeferBlock(BlockState state) {
|
||||
Block block = state.getBlock();
|
||||
return block instanceof AbstractRailBlock || block.is(AllBlocks.GANTRY_CARRIAGE.get());
|
||||
}
|
||||
|
||||
public void finishedPrinting() {
|
||||
|
@ -705,10 +751,12 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
|
|||
blockReader = null;
|
||||
missingItem = null;
|
||||
sendUpdate = true;
|
||||
printingEntityIndex = -1;
|
||||
printingEntityIndex = 0;
|
||||
printStage = PrintStage.BLOCKS;
|
||||
schematicProgress = 0;
|
||||
blocksPlaced = 0;
|
||||
blocksToPlace = 0;
|
||||
deferredBlocks.clear();
|
||||
}
|
||||
|
||||
protected boolean shouldPlace(BlockPos pos, BlockState state) {
|
||||
|
|
|
@ -152,7 +152,7 @@ public class SchematicEditScreen extends AbstractSimiScreen {
|
|||
x + 93 - textRenderer.getStringWidth(handler.getCurrentSchematicName()) / 2, y + 3, 0xffffff);
|
||||
|
||||
GuiGameElement.of(AllItems.SCHEMATIC.asStack())
|
||||
.at(guiLeft + 200, guiTop + 82, 0)
|
||||
.<GuiGameElement.GuiRenderBuilder>at(guiLeft + 200, guiTop + 82, 0)
|
||||
.scale(3)
|
||||
.render(matrixStack);
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.jozufozu.flywheel.backend.core.shader.WorldProgram;
|
|||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.AllFluids;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.contraptions.KineticDebugger;
|
||||
|
@ -26,6 +27,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.goggles.IHaveGoggleInformation;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler;
|
||||
import com.simibubi.create.content.curiosities.armor.CopperBacktankArmorLayer;
|
||||
import com.simibubi.create.content.curiosities.tools.ExtendoGripRenderHandler;
|
||||
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
|
||||
import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler;
|
||||
|
@ -33,6 +35,8 @@ import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperR
|
|||
import com.simibubi.create.content.logistics.block.depot.EjectorTargetHandler;
|
||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPointHandler;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.config.ui.BaseConfigScreen;
|
||||
import com.simibubi.create.foundation.fluid.FluidHelper;
|
||||
import com.simibubi.create.foundation.item.ItemDescription;
|
||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
|
@ -53,6 +57,7 @@ import com.simibubi.create.foundation.utility.worldWrappers.WrappedClientWorld;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.ActiveRenderInfo;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer.Impl;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.fluid.Fluid;
|
||||
|
@ -78,7 +83,11 @@ 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.ExtensionPoint;
|
||||
import net.minecraftforge.fml.ModContainer;
|
||||
import net.minecraftforge.fml.ModList;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
|
||||
|
||||
@EventBusSubscriber(value = Dist.CLIENT)
|
||||
public class ClientEvents {
|
||||
|
@ -190,18 +199,24 @@ public class ClientEvents {
|
|||
ms.pop();
|
||||
|
||||
RenderWork.runAll();
|
||||
|
||||
//Backend.effects.render();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRenderOverlay(RenderGameOverlayEvent.Post event) {
|
||||
MatrixStack ms = event.getMatrixStack();
|
||||
Impl buffers = Minecraft.getInstance()
|
||||
.getBufferBuilders()
|
||||
.getEntityVertexConsumers();
|
||||
int light = 0xF000F0;
|
||||
int overlay = OverlayTexture.DEFAULT_UV;
|
||||
float pt = event.getPartialTicks();
|
||||
|
||||
if (event.getType() == ElementType.AIR)
|
||||
CopperBacktankArmorLayer.renderRemainingAirOverlay(ms, buffers, light, overlay, pt);
|
||||
if (event.getType() != ElementType.HOTBAR)
|
||||
return;
|
||||
|
||||
onRenderHotbar(event.getMatrixStack(), Minecraft.getInstance()
|
||||
.getBufferBuilders()
|
||||
.getEntityVertexConsumers(), 0xF000F0, OverlayTexture.DEFAULT_UV, event.getPartialTicks());
|
||||
onRenderHotbar(ms, buffers, light, overlay, pt);
|
||||
}
|
||||
|
||||
public static void onRenderHotbar(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay,
|
||||
|
@ -274,11 +289,20 @@ public class ClientEvents {
|
|||
if (fluid.isEquivalentTo(AllFluids.CHOCOLATE.get())) {
|
||||
event.setDensity(5f);
|
||||
event.setCanceled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (fluid.isEquivalentTo(AllFluids.HONEY.get())) {
|
||||
event.setDensity(1.5f);
|
||||
event.setCanceled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (FluidHelper.isWater(fluid) && AllItems.DIVING_HELMET.get()
|
||||
.isWornBy(Minecraft.getInstance().renderViewEntity)) {
|
||||
event.setDensity(0.010f);
|
||||
event.setCanceled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -311,4 +335,9 @@ public class ClientEvents {
|
|||
}
|
||||
}
|
||||
|
||||
public static void loadCompleted(FMLLoadCompleteEvent event) {
|
||||
ModContainer createContainer = ModList.get().getModContainerById("create").orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted"));
|
||||
createContainer.registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (mc, previousScreen) -> new BaseConfigScreen(previousScreen));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,20 +21,22 @@ public class AllCommands {
|
|||
LiteralCommandNode<CommandSource> util = buildUtilityCommands();
|
||||
|
||||
LiteralCommandNode<CommandSource> createRoot = dispatcher.register(Commands.literal("create")
|
||||
.requires(cs -> cs.hasPermissionLevel(0))
|
||||
// general purpose
|
||||
.then(new ToggleExperimentalRenderingCommand().register())
|
||||
.then(new ToggleDebugCommand().register())
|
||||
.then(FabulousWarningCommand.register())
|
||||
.then(OverlayConfigCommand.register())
|
||||
.then(FixLightingCommand.register())
|
||||
.then(HighlightCommand.register())
|
||||
.then(CouplingCommand.register())
|
||||
.then(CloneCommand.register())
|
||||
.then(PonderCommand.register())
|
||||
.requires(cs -> cs.hasPermissionLevel(0))
|
||||
// general purpose
|
||||
.then(new ToggleExperimentalRenderingCommand().register())
|
||||
.then(new ToggleDebugCommand().register())
|
||||
.then(FabulousWarningCommand.register())
|
||||
.then(OverlayConfigCommand.register())
|
||||
.then(FixLightingCommand.register())
|
||||
.then(HighlightCommand.register())
|
||||
.then(CouplingCommand.register())
|
||||
.then(ConfigCommand.register())
|
||||
.then(PonderCommand.register())
|
||||
.then(CloneCommand.register())
|
||||
|
||||
// utility
|
||||
.then(util));
|
||||
// utility
|
||||
.then(util)
|
||||
);
|
||||
|
||||
createRoot.addChild(buildRedirect("u", util));
|
||||
|
||||
|
@ -50,12 +52,12 @@ public class AllCommands {
|
|||
private static LiteralCommandNode<CommandSource> buildUtilityCommands() {
|
||||
|
||||
return Commands.literal("util")
|
||||
.then(ReplaceInCommandBlocksCommand.register())
|
||||
.then(ClearBufferCacheCommand.register())
|
||||
.then(ChunkUtilCommand.register())
|
||||
.then(FlySpeedCommand.register())
|
||||
// .then(KillTPSCommand.register())
|
||||
.build();
|
||||
.then(ReplaceInCommandBlocksCommand.register())
|
||||
.then(ClearBufferCacheCommand.register())
|
||||
.then(ChunkUtilCommand.register())
|
||||
.then(FlySpeedCommand.register())
|
||||
//.then(KillTPSCommand.register())
|
||||
.build();
|
||||
|
||||
}
|
||||
|
||||
|
@ -72,15 +74,15 @@ public class AllCommands {
|
|||
*
|
||||
* @return the built node
|
||||
*/
|
||||
public static LiteralCommandNode<CommandSource> buildRedirect(final String alias,
|
||||
final LiteralCommandNode<CommandSource> destination) {
|
||||
public static LiteralCommandNode<CommandSource> buildRedirect(final String alias, final LiteralCommandNode<CommandSource> destination) {
|
||||
// Redirects only work for nodes with children, but break the top argument-less command.
|
||||
// Manually adding the root command after setting the redirect doesn't fix it.
|
||||
// See https://github.com/Mojang/brigadier/issues/46). Manually clone the node instead.
|
||||
LiteralArgumentBuilder<CommandSource> builder = LiteralArgumentBuilder.<CommandSource>literal(alias)
|
||||
.requires(destination.getRequirement())
|
||||
.forward(destination.getRedirect(), destination.getRedirectModifier(), destination.isFork())
|
||||
.executes(destination.getCommand());
|
||||
LiteralArgumentBuilder<CommandSource> builder = LiteralArgumentBuilder
|
||||
.<CommandSource>literal(alias)
|
||||
.requires(destination.getRequirement())
|
||||
.forward(destination.getRedirect(), destination.getRedirectModifier(), destination.isFork())
|
||||
.executes(destination.getCommand());
|
||||
for (CommandNode<CommandSource> child : destination.getChildren()) {
|
||||
builder.then(child);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
package com.simibubi.create.foundation.command;
|
||||
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.command.Commands;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraftforge.fml.network.PacketDistributor;
|
||||
|
||||
import com.mojang.brigadier.Command;
|
||||
import com.mojang.brigadier.builder.ArgumentBuilder;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
|
||||
public class ConfigCommand {
|
||||
|
||||
public static ArgumentBuilder<CommandSource, ?> register() {
|
||||
return Commands.literal("config")
|
||||
.executes(ctx -> {
|
||||
ServerPlayerEntity player = ctx.getSource().asPlayer();
|
||||
AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> player),
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.configScreen.name(), "")
|
||||
);
|
||||
|
||||
return Command.SINGLE_SUCCESS;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -13,16 +13,18 @@ public class FabulousWarningCommand {
|
|||
|
||||
public static ArgumentBuilder<CommandSource, ?> register() {
|
||||
return Commands.literal("dismissFabulousWarning")
|
||||
.requires(AllCommands.sourceIsPlayer)
|
||||
.executes(ctx -> {
|
||||
ServerPlayerEntity player = ctx.getSource()
|
||||
.asPlayer();
|
||||
.requires(AllCommands.sourceIsPlayer)
|
||||
.executes(ctx -> {
|
||||
ServerPlayerEntity player = ctx.getSource()
|
||||
.asPlayer();
|
||||
|
||||
AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player),
|
||||
new ConfigureConfigPacket(ConfigureConfigPacket.Actions.fabulousWarning.name(), ""));
|
||||
AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> player),
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.fabulousWarning.name(), "")
|
||||
);
|
||||
|
||||
return Command.SINGLE_SUCCESS;
|
||||
});
|
||||
return Command.SINGLE_SUCCESS;
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ public class FixLightingCommand {
|
|||
.executes(ctx -> {
|
||||
AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) ctx.getSource()
|
||||
.getEntity()),
|
||||
new ConfigureConfigPacket(ConfigureConfigPacket.Actions.fixLighting.name(), String.valueOf(true)));
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.fixLighting.name(), String.valueOf(true)));
|
||||
|
||||
ctx.getSource()
|
||||
.sendFeedback(
|
||||
|
|
|
@ -15,35 +15,32 @@ public class OverlayConfigCommand {
|
|||
|
||||
public static ArgumentBuilder<CommandSource, ?> register() {
|
||||
return Commands.literal("overlay")
|
||||
.requires(cs -> cs.hasPermissionLevel(0))
|
||||
.then(Commands.literal("reset")
|
||||
.executes(ctx -> {
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
||||
() -> () -> ConfigureConfigPacket.Actions.overlayReset.performAction(""));
|
||||
.requires(cs -> cs.hasPermissionLevel(0))
|
||||
.then(Commands.literal("reset")
|
||||
.executes(ctx -> {
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> SConfigureConfigPacket.Actions.overlayReset.performAction(""));
|
||||
|
||||
DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER,
|
||||
() -> () -> AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) ctx.getSource()
|
||||
.getEntity()),
|
||||
new ConfigureConfigPacket(ConfigureConfigPacket.Actions.overlayReset.name(), "")));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, () -> () ->
|
||||
AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) ctx.getSource().getEntity()),
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.overlayReset.name(), "")));
|
||||
|
||||
ctx.getSource()
|
||||
.sendFeedback(new StringTextComponent("reset overlay offset"), true);
|
||||
|
||||
return 1;
|
||||
}))
|
||||
.executes(ctx -> {
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
||||
() -> () -> ConfigureConfigPacket.Actions.overlayScreen.performAction(""));
|
||||
return 1;
|
||||
})
|
||||
)
|
||||
.executes(ctx -> {
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> SConfigureConfigPacket.Actions.overlayScreen.performAction(""));
|
||||
|
||||
DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER,
|
||||
() -> () -> AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) ctx.getSource()
|
||||
.getEntity()),
|
||||
new ConfigureConfigPacket(ConfigureConfigPacket.Actions.overlayScreen.name(), "")));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, () -> () ->
|
||||
AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) ctx.getSource().getEntity()),
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.overlayScreen.name(), "")));
|
||||
|
||||
ctx.getSource()
|
||||
.sendFeedback(new StringTextComponent("window opened"), true);
|
||||
ctx.getSource()
|
||||
.sendFeedback(new StringTextComponent("window opened"), true);
|
||||
|
||||
return 1;
|
||||
});
|
||||
|
|
|
@ -21,26 +21,20 @@ import net.minecraftforge.common.util.FakePlayer;
|
|||
import net.minecraftforge.fml.network.PacketDistributor;
|
||||
|
||||
public class PonderCommand {
|
||||
public static final SuggestionProvider<CommandSource> ITEM_PONDERS = SuggestionProviders.register(
|
||||
new ResourceLocation("all_ponders"),
|
||||
(iSuggestionProviderCommandContext, builder) -> ISuggestionProvider.func_212476_a(PonderRegistry.all.keySet()
|
||||
.stream(), builder));
|
||||
public static final SuggestionProvider<CommandSource> ITEM_PONDERS = SuggestionProviders.register(new ResourceLocation("all_ponders"), (iSuggestionProviderCommandContext, builder) -> ISuggestionProvider.func_212476_a(PonderRegistry.all.keySet().stream(), builder));
|
||||
|
||||
static ArgumentBuilder<CommandSource, ?> register() {
|
||||
return Commands.literal("ponder")
|
||||
.requires(cs -> cs.hasPermissionLevel(0))
|
||||
.executes(ctx -> openScene("index", ctx.getSource()
|
||||
.asPlayer()))
|
||||
.then(Commands.argument("scene", ResourceLocationArgument.resourceLocation())
|
||||
.suggests(ITEM_PONDERS)
|
||||
.executes(ctx -> openScene(ResourceLocationArgument.getResourceLocation(ctx, "scene")
|
||||
.toString(),
|
||||
ctx.getSource()
|
||||
.asPlayer()))
|
||||
.then(Commands.argument("targets", EntityArgument.players())
|
||||
.requires(cs -> cs.hasPermissionLevel(2))
|
||||
.executes(ctx -> openScene(ResourceLocationArgument.getResourceLocation(ctx, "scene")
|
||||
.toString(), EntityArgument.getPlayers(ctx, "targets")))));
|
||||
.requires(cs -> cs.hasPermissionLevel(0))
|
||||
.executes(ctx -> openScene("index", ctx.getSource().asPlayer()))
|
||||
.then(Commands.argument("scene", ResourceLocationArgument.resourceLocation())
|
||||
.suggests(ITEM_PONDERS)
|
||||
.executes(ctx -> openScene(ResourceLocationArgument.getResourceLocation(ctx, "scene").toString(), ctx.getSource().asPlayer()))
|
||||
.then(Commands.argument("targets", EntityArgument.players())
|
||||
.requires(cs -> cs.hasPermissionLevel(2))
|
||||
.executes(ctx -> openScene(ResourceLocationArgument.getResourceLocation(ctx, "scene").toString(), EntityArgument.getPlayers(ctx, "targets")))
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
@ -53,8 +47,9 @@ public class PonderCommand {
|
|||
if (player instanceof FakePlayer)
|
||||
continue;
|
||||
|
||||
AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player),
|
||||
new ConfigureConfigPacket(ConfigureConfigPacket.Actions.openPonder.name(), sceneId));
|
||||
AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> player),
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.openPonder.name(), sceneId));
|
||||
}
|
||||
return Command.SINGLE_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.jozufozu.flywheel.backend.OptifineHandler;
|
|||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.goggles.GoggleConfigScreen;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.config.ui.BaseConfigScreen;
|
||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||
import com.simibubi.create.foundation.ponder.PonderRegistry;
|
||||
|
@ -31,17 +32,17 @@ import net.minecraftforge.common.ForgeConfig;
|
|||
import net.minecraftforge.fml.DistExecutor;
|
||||
import net.minecraftforge.fml.network.NetworkEvent;
|
||||
|
||||
public class ConfigureConfigPacket extends SimplePacketBase {
|
||||
public class SConfigureConfigPacket extends SimplePacketBase {
|
||||
|
||||
private final String option;
|
||||
private final String value;
|
||||
|
||||
public ConfigureConfigPacket(String option, String value) {
|
||||
public SConfigureConfigPacket(String option, String value) {
|
||||
this.option = option;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public ConfigureConfigPacket(PacketBuffer buffer) {
|
||||
public SConfigureConfigPacket(PacketBuffer buffer) {
|
||||
this.option = buffer.readString(32767);
|
||||
this.value = buffer.readString(32767);
|
||||
}
|
||||
|
@ -69,7 +70,8 @@ public class ConfigureConfigPacket extends SimplePacketBase {
|
|||
.setPacketHandled(true);
|
||||
}
|
||||
|
||||
enum Actions {
|
||||
public enum Actions {
|
||||
configScreen(() -> Actions::configScreen),
|
||||
rainbowDebug(() -> Actions::rainbowDebug),
|
||||
overlayScreen(() -> Actions::overlayScreen),
|
||||
fixLighting(() -> Actions::experimentalLighting),
|
||||
|
@ -91,6 +93,11 @@ public class ConfigureConfigPacket extends SimplePacketBase {
|
|||
.accept(value);
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
private static void configScreen(String value) {
|
||||
ScreenOpener.open(new BaseConfigScreen(null));
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
private static void rainbowDebug(String value) {
|
||||
ClientPlayerEntity player = Minecraft.getInstance().player;
|
|
@ -13,7 +13,9 @@ public class ToggleDebugCommand extends ConfigureConfigCommand {
|
|||
|
||||
@Override
|
||||
protected void sendPacket(ServerPlayerEntity player, String option) {
|
||||
AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player),
|
||||
new ConfigureConfigPacket(ConfigureConfigPacket.Actions.rainbowDebug.name(), option));
|
||||
AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> player),
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.rainbowDebug.name(), option)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,9 @@ public class ToggleExperimentalRenderingCommand extends ConfigureConfigCommand {
|
|||
|
||||
@Override
|
||||
protected void sendPacket(ServerPlayerEntity player, String option) {
|
||||
AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player),
|
||||
new ConfigureConfigPacket(ConfigureConfigPacket.Actions.experimentalRendering.name(), option));
|
||||
AllPackets.channel.send(
|
||||
PacketDistributor.PLAYER.with(() -> player),
|
||||
new SConfigureConfigPacket(SConfigureConfigPacket.Actions.experimentalRendering.name(), option)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue