mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-11 04:22:00 +01:00
Renaming II
- TileEntity -> BlockEntity
This commit is contained in:
parent
624b2d71d1
commit
f2b472f90d
696 changed files with 6630 additions and 6631 deletions
|
@ -566,30 +566,30 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
|
|||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
3054a5519fbf91481b0c9c8160a20679fa9530da assets/create/lang/en_ud.json
|
||||
c57c7f223e483ec45f7b94a33582f2bf66c4cf60 assets/create/lang/en_us.json
|
||||
a8a98ef3d6c5d586001f26b52be79074fbbf698b assets/create/lang/unfinished/cs_cz.json
|
||||
12babbc5593d305389ef8251e29531fa8301c7dc assets/create/lang/unfinished/da_dk.json
|
||||
6d3b2431c3499dc73220bb81a9e3e183964d5cc0 assets/create/lang/unfinished/de_de.json
|
||||
aa0b7e416178db0cf2b9ac2ecead98e86a99a80a assets/create/lang/unfinished/es_cl.json
|
||||
1b383a69d1f17ffad2548959375e901bb49744b6 assets/create/lang/unfinished/es_es.json
|
||||
8800449d59b970abefa17a4f4880e18e69feb045 assets/create/lang/unfinished/es_mx.json
|
||||
01b50942474c627bb2071c6585fd96296daa3547 assets/create/lang/unfinished/fr_fr.json
|
||||
c993975f362688389c39d6213081b5408874236a assets/create/lang/unfinished/hu_hu.json
|
||||
5066f4b4a13e8a5a03f2405859508ab7bfe6bdb5 assets/create/lang/unfinished/it_it.json
|
||||
5293c84a5e3d19c51fb414092c13a955f7045f33 assets/create/lang/unfinished/ja_jp.json
|
||||
1d0d011e4da491eef7f69be41dd92f194a8a2872 assets/create/lang/unfinished/ko_kr.json
|
||||
fd10e7de1e60c3c6537781b67e215effb3d96964 assets/create/lang/unfinished/nl_nl.json
|
||||
0b1cfb3738eecd97d28ad7eb8110a4f03ef5682b assets/create/lang/unfinished/no_no.json
|
||||
dd9fb706e979d00a90f5f9a947541c5b4cebc024 assets/create/lang/unfinished/pl_pl.json
|
||||
086802842bb63805d358b5ea9d70aeb9d490331f assets/create/lang/unfinished/pt_br.json
|
||||
538445e2d4b6626136b25a1c04a0445b00a229c5 assets/create/lang/unfinished/pt_pt.json
|
||||
01bc95d3f4844e642b8f4848f325e7d2f670bcbb assets/create/lang/unfinished/ro_ro.json
|
||||
967f93516721dda8974359cc5fb088e6fa50d627 assets/create/lang/unfinished/ru_ru.json
|
||||
321146806a1364b3ad4feac1592df680be230e42 assets/create/lang/unfinished/sv_se.json
|
||||
aa3feff9a8b3314002939bef8793c3ae4ee07758 assets/create/lang/unfinished/th_th.json
|
||||
af6ce2a42851ee2b16fc156d6f0198ddf9fa8f74 assets/create/lang/unfinished/uk_ua.json
|
||||
35057efca9e51b76f0ce8292e52c87c830873d1d assets/create/lang/unfinished/zh_cn.json
|
||||
1c56066b9d1094dcf43a307a432b830d916c4bab assets/create/lang/unfinished/zh_tw.json
|
||||
10368a860ae28910f8b376da5a71ed5329e878d6 assets/create/lang/en_us.json
|
||||
0aca1235610eae2a297eda6f96780115f8cd0a8e assets/create/lang/unfinished/cs_cz.json
|
||||
91513e2231501328a1a2e99c8bd90a51c8513c1b assets/create/lang/unfinished/da_dk.json
|
||||
e2e4f2644ca0cfbe26436abadc6553333fe2ce89 assets/create/lang/unfinished/de_de.json
|
||||
ef633c12441059ac2d6795e39bb70578696da6e0 assets/create/lang/unfinished/es_cl.json
|
||||
2d4d14e4c1fb9d9c8590a33570981cca83e0f44f assets/create/lang/unfinished/es_es.json
|
||||
2fb12650950d8867501f5b00ff6edbedd8e231e4 assets/create/lang/unfinished/es_mx.json
|
||||
645f1b7cc8d99de345fa3e5f2d1967e49b17d32b assets/create/lang/unfinished/fr_fr.json
|
||||
0e6f608edc0d95337a6cce21d26cc8c5c7284bfc assets/create/lang/unfinished/hu_hu.json
|
||||
0afaccef5e6b4bc2149bef652e5dd51c426c816a assets/create/lang/unfinished/it_it.json
|
||||
ee8bd262d30c4b176d012902d0371648f5f5d5d4 assets/create/lang/unfinished/ja_jp.json
|
||||
499063468b398b7b31182c109b68e751361b04fa assets/create/lang/unfinished/ko_kr.json
|
||||
5beecf8025e06933a488a4e8224927e001f759cb assets/create/lang/unfinished/nl_nl.json
|
||||
7e6a23b7f7c24ebbd08c135a8565787f65c6e0f0 assets/create/lang/unfinished/no_no.json
|
||||
da8649af75b2b52a99ae4c30a106768f917192b4 assets/create/lang/unfinished/pl_pl.json
|
||||
3fba7b5d3649aac2cb759bed41d8690b5cf4dbd1 assets/create/lang/unfinished/pt_br.json
|
||||
3e83cdf96cde7c50f3f106a7e1f4c029cf26bfe2 assets/create/lang/unfinished/pt_pt.json
|
||||
4a9f031baa04241b34779c74a75ca9f73ee589b7 assets/create/lang/unfinished/ro_ro.json
|
||||
fa470b919e1f304ed0eb43cf3b47f2e9c9f1a470 assets/create/lang/unfinished/ru_ru.json
|
||||
ec236461ebc2bddf2a1281b4d8713ba0bbb40012 assets/create/lang/unfinished/sv_se.json
|
||||
906d8450cd95b65824ff23c1db38096cdc3802ec assets/create/lang/unfinished/th_th.json
|
||||
a7122f134d4cdad8802f097822c38158b3042fa5 assets/create/lang/unfinished/uk_ua.json
|
||||
0e0501505897acbc7bb2fe5cb20faa71727285ab assets/create/lang/unfinished/zh_cn.json
|
||||
7829c9e8b9e5fa92b7327b839d914162a2ab5f06 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
|
||||
|
|
|
@ -1198,12 +1198,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Replace Solid with Any",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty",
|
||||
"create.gui.schematicannon.option.skipMissing": "Skip missing Blocks",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Protect Tile Entities",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Add gunpowder to fuel the cannon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Place books here to print a Checklist for your Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "Add your Schematic here. Make sure it is deployed at a specific location.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "If the cannon cannot find a required Block for placement, it will continue at the next Location.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "The cannon will only replace Solid blocks in its working area if the Schematic contains a solid Block at the Location.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "The cannon will replace Solid blocks in its working area if the Schematic contains any Block at the Location.",
|
||||
|
|
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "UNLOCALIZED: Replace Solid with Any",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "UNLOCALIZED: Replace Solid with Empty",
|
||||
"create.gui.schematicannon.option.skipMissing": "UNLOCALIZED: Skip missing Blocks",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "UNLOCALIZED: If the cannon cannot find a required Block for placement, it will continue at the next Location.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "UNLOCALIZED: The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "UNLOCALIZED: The cannon will only replace Solid blocks in its working area if the Schematic contains a solid Block at the Location.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "UNLOCALIZED: The cannon will replace Solid blocks in its working area if the Schematic contains any Block at the Location.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1353",
|
||||
"_": "Missing Localizations: 1354",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Erstat massiv med enhver",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Erstat massiv med tomt",
|
||||
"create.gui.schematicannon.option.skipMissing": "Spring over manglende blokke",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Beskyt blokojekter",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "UNLOCALIZED: If the cannon cannot find a required Block for placement, it will continue at the next Location.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "UNLOCALIZED: The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "UNLOCALIZED: The cannon will only replace Solid blocks in its working area if the Schematic contains a solid Block at the Location.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "UNLOCALIZED: The cannon will replace Solid blocks in its working area if the Schematic contains any Block at the Location.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 40",
|
||||
"_": "Missing Localizations: 42",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Feste Blöcke immer ersetzen",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Feste Blöcke mit Leere ersetzen",
|
||||
"create.gui.schematicannon.option.skipMissing": "Fehlende Blöcke ignorieren",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Tile Entities ignorieren",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Füge Schwarzpulver hinzu um die Kanone zu betreiben",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Platziere hier Bücher um eine Checkliste für deinen Bauplan zu drucken",
|
||||
"create.gui.schematicannon.slot.schematic": "Füge Bauplan hier hinzu. Stelle sicher dass er an einer spezifischen Position bereitgestellt wird.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Wenn die Bauplankanone einen benötigten Block nicht finden kann, wird sie einfach beim nächsten weiter machen.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Die Bauplankanone wird versuchen, Blöcke mit extra Daten, beispielsweise Truhen, nicht zu ersetzen.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Die Kanone wird ausschließlich nicht feste Blöcke und Luft in ihrem Arbeitsbereich ersetzen.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Die Kanone wird feste Blöcke nur dann ersetzen, wenn an der Position vorher bereits ein fester Block war.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Die Kanone wird feste Blöcke ersetzen, wenn der Bauplan an der Position einen Block enthält.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1059",
|
||||
"_": "Missing Localizations: 1061",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Reemplazar Sólido con cualquier cosa",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Reemplazar Sólido con Vacío",
|
||||
"create.gui.schematicannon.option.skipMissing": "Saltarse objetos faltantes",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Proteject objetos con información",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Añade pólvora para alimentar el cañon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Coloca libros aquí para imprimir una lista de verificación para tu esquema",
|
||||
"create.gui.schematicannon.slot.schematic": "Pon tu Esquema aquí. Asegurate de haberlo desplegado en la ubicación deseada.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Si el cañón no puede encontrar un Bloque requerido para colocarlo, saltará a la siguiente Ubicación.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "El cañón evitará reemplazar bloques con almacenamiento de datos como cofres o máquinas.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "El cañón nunca reemplazará ningún bloque sólido en su área de trabajo, solo no-sólidos y aire.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "El cañón solo reemplazará los bloques sólidos en su área de trabajo si el esquema contiene un bloque sólido en esa ubicación.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "El cañón reemplazará los bloques sólidos en su área de trabajo si el esquema contiene algún bloque de cualquier tipo en la ubicación.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 104",
|
||||
"_": "Missing Localizations: 106",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Sustituir sólido por cualquiera",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Sustituir sólido por vacío",
|
||||
"create.gui.schematicannon.option.skipMissing": "Omitir los bloques que faltan",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Proteger a las entidades",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Añade pólvora para alimentar el cañón",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Coloque los libros aquí para imprimir una lista de comprobación para su esquema",
|
||||
"create.gui.schematicannon.slot.schematic": "Añada su esquema aquí. Asegúrese de que se despliega en un lugar específico.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Si el cañón no encuentra un bloque necesario para su colocación, continuará en la siguiente ubicación.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "El cañón evitará reemplazar los bloques que contienen datos, como los cofres.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "El cañón nunca sustituirá ningún bloque sólido en su zona de trabajo, sólo los no sólidos y el aire.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "El cañón sólo reemplazará los bloques sólidos en su área de trabajo si el esquema contiene un bloque sólido en la ubicación.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "El cañón reemplazará los bloques sólidos en su área de trabajo si el esquema contiene algún bloque en la ubicación.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 104",
|
||||
"_": "Missing Localizations: 106",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Sustituir sólido por cualquiera",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Sustituir sólido por vacío",
|
||||
"create.gui.schematicannon.option.skipMissing": "Omitir los bloques que faltan",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Proteger a las entidades",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Añade pólvora para alimentar el cañón",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Coloque los libros aquí para imprimir una lista de comprobación para su esquema",
|
||||
"create.gui.schematicannon.slot.schematic": "Añada su esquema aquí. Asegúrese de que se despliega en un lugar específico.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Si el cañón no encuentra un bloque necesario para su colocación, continuará en la siguiente ubicación.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "El cañón evitará reemplazar los bloques que contienen datos, como los cofres.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "El cañón nunca sustituirá ningún bloque sólido en su zona de trabajo, sólo los no sólidos y el aire.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "El cañón sólo reemplazará los bloques sólidos en su área de trabajo si el esquema contiene un bloque sólido en la ubicación.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "El cañón reemplazará los bloques sólidos en su área de trabajo si el esquema contiene algún bloque en la ubicación.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 40",
|
||||
"_": "Missing Localizations: 42",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Remplacer le solide par n'importe quoi",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Remplacer le solide par rien",
|
||||
"create.gui.schematicannon.option.skipMissing": "Ignorer les blocs manquants",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Protéger les entités de blocs",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Ajouter de la poudre à canon pour alimenter le canon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Placez des livres ici pour imprimer une liste des matériaux de votre schéma",
|
||||
"create.gui.schematicannon.slot.schematic": "Ajoutez votre schéma ici. Soyez sûr qu'il est déployé à un emplacement spécifique.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Si le canon ne peut pas trouver un bloc requis pour le placement, il continuera au prochain emplacement.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Le canon évitera de remplacer les blocs de stockage de données tels que les coffres.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Le canon ne remplacera jamais les blocs solides dans sa zone de travail, seulement non solides et air.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Le canon ne remplacera les blocs solides dans sa zone de travail que si le schéma contient un bloc solide à l'emplacement.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Le canon remplacera les blocs solides dans sa zone de travail si le schéma contient un bloc à l'emplacement.",
|
||||
|
|
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Tömör blokk kicserélése bármire",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Tömör blokk kicserélése üresre",
|
||||
"create.gui.schematicannon.option.skipMissing": "Hiányzó blokkok kihagyása",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Az ágyú tüzeléséhez adj hozzá puskaport",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Helyezz ide könyveket, hogy a tervrajzod számára ellenőrzőlistát nyomtass",
|
||||
"create.gui.schematicannon.slot.schematic": "A tervrajzod ide rakd. Bizonyosodj meg arról, hogy egy megadott helyre van lehelyezve.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "UNLOCALIZED: If the cannon cannot find a required Block for placement, it will continue at the next Location.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "A löveg a munkaterületen soha sem fog kicserélni egyetlen tömör blokkot sem, csak nem-tömör és levegő blokkokat.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "UNLOCALIZED: The cannon will only replace Solid blocks in its working area if the Schematic contains a solid Block at the Location.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "UNLOCALIZED: The cannon will replace Solid blocks in its working area if the Schematic contains any Block at the Location.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 40",
|
||||
"_": "Missing Localizations: 42",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Sostituisci solidi con qualsiasi",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Sostituisci solidi con il vuoto",
|
||||
"create.gui.schematicannon.option.skipMissing": "Salta i blocchi mancanti",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Proteggi i blocchi entità",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Aggiungi polvere da sparo per alimentare il cannone",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Piazza qui i libri per stampare una lista di controllo per il tuo progetto",
|
||||
"create.gui.schematicannon.slot.schematic": "Aggiungi qui il tuo progetto. Assicurati che sia piazzato in una posizione specifica.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Se il cannone non riesce a trovare un blocco richiesto per il posizionamento, continuerà nella posizione successiva.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Il cannone eviterà di sostituire i blocchi entità come bauli o fornaci.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Il cannone non sostituirà mai alcun blocco solido nella sua area di lavoro, solo non-solidi e aria.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Il cannone sostituirà i blocchi solidi nella sua area di lavoro se lo schema contiene un blocco solido in quella posizione.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Il cannone sostituirà i blocchi solidi nella sua area di lavoro se lo schema contiene un blocco qualunque in quella posizione.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 69",
|
||||
"_": "Missing Localizations: 71",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "固体ブロックを任意のブロックに置き換える",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "固体ブロックを空気に置き換える",
|
||||
"create.gui.schematicannon.option.skipMissing": "不足しているブロックをスキップ",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "タイルエンティティを保護する",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "火薬を燃料として概略図砲に入れてください。",
|
||||
"create.gui.schematicannon.slot.listPrinter": "本をここに入れると概略図の材料チェックリストを印刷します。",
|
||||
"create.gui.schematicannon.slot.schematic": "概略図をここに入れてください。特定の場所に配置されていることを確認してください。",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "配置に必要なブロックを見つけられない場合、次の場所に進みます。",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "チェストなどのデータ保持ブロックの置き換えによる消滅を回避します。",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "その作業範囲の固体ブロックを置き換えることはなく、非固体ブロックと空気のみを置き換えます。",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "固体ブロックを設置する場合にのみ、その位置の固体ブロックを置き換えます。",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "任意のブロックを設置する場合に、その位置の固体ブロックを置き換えます。",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 48",
|
||||
"_": "Missing Localizations: 50",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움",
|
||||
"create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "블록 엔티티 보호",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요",
|
||||
"create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요",
|
||||
"create.gui.schematicannon.slot.schematic": "여기에 설계도를 넣으세요. 건설 구역이 설정되어 있어야 합니다.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "대포가 상자, 화로같이 데이터가 담긴 블록을 설치하지 않습니다.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "대포가 작업구역의 온전한 블록을 대체하지 않습니다.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "대포가 작업구역의 온전한 블록을 대포가 가진 재료로 대체합니다.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "대포가 작업구역의 온전한 블록을 대포가 가진 어떠한 재료로든 대체합니다.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1830",
|
||||
"_": "Missing Localizations: 1832",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Vervang vast met alles",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Vervang vast met leeg",
|
||||
"create.gui.schematicannon.option.skipMissing": "Sla missende blokken over",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Bescherm Tile Entities",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Als het Bouwtekeningkannon niet een geschikt blok kan vinden om te plaatsen gaat hij door naar de volgende positie.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Het Bouwtekeningkannon probeert blokken met data zoals kisten te vermijden",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Het Bouwtekeningkannon zal nooit vaste blokken in zijn gebied vervangen, alleen niet-vaste blokken en lucht",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Het Bouwtekeningkannon zal alleen vaste blokken in zijn gebied veranderen als de bouwtekening een vast blok bevat op zijn positie.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Het Bouwtekeningkannon zal vaste blokken in zijn gebied vervangen als de bouwtekening een blok op bevat op zijn positie.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2359",
|
||||
"_": "Missing Localizations: 2360",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "UNLOCALIZED: Replace Solid with Any",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "UNLOCALIZED: Replace Solid with Empty",
|
||||
"create.gui.schematicannon.option.skipMissing": "UNLOCALIZED: Skip missing Blocks",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "UNLOCALIZED: If the cannon cannot find a required Block for placement, it will continue at the next Location.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Kanonen vil unngå å erstatte blokker som inneholder data, slik som kister.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Kanonen vil aldri erstatte solide blokker i arbeidsområdet, bare ikke usolide blokker og luft.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Kanonen vil bare erstatte solide blokker i arbeidsområdet om byggeplanen inneholder en solid blokk på samme posisjon.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Kanonen vil erstatte solide blokker i arbeidsområdet hvis bygeplanen inneholder uansett type blokk på samme posisjon.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 49",
|
||||
"_": "Missing Localizations: 51",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Zastępuj stałe dowolnymi",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Zastępuj stałe pustymi",
|
||||
"create.gui.schematicannon.option.skipMissing": "Pomijaj brakujące bloki",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Chroń byty bloków",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Dodaj prochu, aby załadować armatę",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Daj tu książki, aby wydrukować listę",
|
||||
"create.gui.schematicannon.slot.schematic": "Daj tu swój schemat. Upewnij się, że jest postawiony w odpowiednim miejscu.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Jeśli armata nie znajdzie wymaganego bloku, przejdzie w następne miejsce",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Armata będzie unikać zastępowania bloków przechowujących dane, takich jak skrzynie.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Armata nigdy nie będzie zastępować jakichkolwiek stałych bloków, jedynie nie-stałe i powietrze.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Armata będzie zastępować stałe bloki jedynie, jeśli schemat zawiera stały blok w tym miejscu.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Armata będzie zastępować stałe bloki jedynie, jeśli schemat zawiera dowolny blok w tym miejscu.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 45",
|
||||
"_": "Missing Localizations: 47",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Substituir Sólidos com Vazio",
|
||||
"create.gui.schematicannon.option.skipMissing": "Pulando Blocos faltantes",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Proteger tile entities",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Adicionar pólvora para carregar o canhão",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Coloque livros aqui para imprimir uma lista para o seu esquema",
|
||||
"create.gui.schematicannon.slot.schematic": "Adicione o seu esquema aqui. Tenha certeza que ele está colocado em um lugar especifico.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próxima. Posição.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baús.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "O Canhão de esquema nunca irá substituir Blocos sólidos na área em trabalho, apenas não-Sólidos e Ar.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "O Canhão de esquema irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "O Canhão de esquema irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2252",
|
||||
"_": "Missing Localizations: 2254",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Substituir Sólidos com Vazio",
|
||||
"create.gui.schematicannon.option.skipMissing": "Pulando Blocos faltantes",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Proteger Entidades Entalhadas",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próx. Posição.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baus.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "O Canhão de esquema nunca irá substituir Blocos sólidos na área em trabalho, apenas não-Sólidos e Ar.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "O Canhão de esquema irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "O Canhão de esquema irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 739",
|
||||
"_": "Missing Localizations: 741",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Înlocuiește Solid cu Orice",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Înlocuiește Solid cu Gol",
|
||||
"create.gui.schematicannon.option.skipMissing": "Ocolește Blocuri lipsă",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Protejează Entități",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Adaugă praf de pușcă pentru a alimenta tunul",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Plasează cărți aici pentru a imprima o listă de verificare pentru Schema ta",
|
||||
"create.gui.schematicannon.slot.schematic": "Adaugă-ti Schema aici. Asigură-te că este instalată la o locație specifică.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Dacă tunul nu poate găsi un bloc necesar pentru plasare, va continua la locația următoare.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Tunul va evita să înlocuiască blocuri care țin date, cum ar fi Cuferele..",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Tunul nu va înlocui niciodată orice bloc Solid în zona lui de locru, doar non-Solid și Aer.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Tunul va înlocui daor blocuri Solide în zona lui de lucru dacă Schema conține un Bloc solid la acea Locație.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Tunul va înlocui blocuri Solide în zona lui de lucru dacă Schema conține orice Bloc la acea Locație.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 45",
|
||||
"_": "Missing Localizations: 47",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Заменять твёрдые блоки любыми блоками",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Заменять твёрдые блоки воздухом",
|
||||
"create.gui.schematicannon.option.skipMissing": "Пропускать отсутствующие блоки",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Защитить имущество",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Добавьте порох, чтобы заправить пушку",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Положите книгу, чтобы создать список предметов для схематики",
|
||||
"create.gui.schematicannon.slot.schematic": "Положите свою схематику здесь. Убедитесь что она размещена в правильном месте",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Если пушка не сможет найти требуемый блок, то она перейдёт к следующему.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Пушка не будет заменять блоки-хранилища, такие как сундуки.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Пушка не будет заменять твёрдые блоки, только нетвёрдые и воздух.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Пушка будет заменять твёрдые блоки только в случае, если в схеме в этом месте расположен другой твёрдый блок.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Пушка будет заменять любые твёрдые блоки, кроме замены на воздух.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1248",
|
||||
"_": "Missing Localizations: 1250",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Ersätt Fast med Valfri",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Ersätt Fast med Tom",
|
||||
"create.gui.schematicannon.option.skipMissing": "Hoppa över saknande Block",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Skydda Block Enheter",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Tillsätt krut för att driva kanonen",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Placera böcker här för att skriva ut en Checklista för din Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "Lägg till din Schematic här. Dubbelkolla så att den blir utplacerat på en specifik plats.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Om kanonen ej kan hitta ett nödvändigt block för placering, kommer den att fortsätta på nästa plats.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Kanonen kommer undvika att ersätta informationsinnehavande block såsom kistor.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Kanonen kommer aldrig att ersätta fasta block i dess arbetsområde, endast ej fasta block och luft.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Kanonen kommer bara ersätta fasta block i dess arbetsområde om Schematic innehåller ett fast block på platsen.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Kanonen kommer att ersätta fasta block i dess arbetsområde om Schematic innehåller något block på platsen.",
|
||||
|
|
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "UNLOCALIZED: Replace Solid with Any",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "UNLOCALIZED: Replace Solid with Empty",
|
||||
"create.gui.schematicannon.option.skipMissing": "UNLOCALIZED: Skip missing Blocks",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon",
|
||||
"create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic",
|
||||
"create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "UNLOCALIZED: If the cannon cannot find a required Block for placement, it will continue at the next Location.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "UNLOCALIZED: The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "UNLOCALIZED: The cannon will only replace Solid blocks in its working area if the Schematic contains a solid Block at the Location.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "UNLOCALIZED: The cannon will replace Solid blocks in its working area if the Schematic contains any Block at the Location.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 213",
|
||||
"_": "Missing Localizations: 215",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "Замінювати суцільні блоки будь-якими блоками",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "Замінювати суцільні блоки повітрям",
|
||||
"create.gui.schematicannon.option.skipMissing": "Пропускати відсутні блоки",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "Захищати блоки-сутності",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "Додайте порох, щоб заправити гармату",
|
||||
"create.gui.schematicannon.slot.listPrinter": "Покладіть книгу, щоб створити список предметів для схематики",
|
||||
"create.gui.schematicannon.slot.schematic": "Покладіть вашу схему сюди. Переконайтеся, що схематика розташована у конкретному місці.",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "Якщо гармата не може знайти необхідний блок, вона будуватиме в наступному місці.",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "Гармата не замінюватиме блоки, які зберігають данні, такі як скрині.",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "Гармата ніколи не замінюватиме суцільні блоки, тільки замінюватиме несуцільні блоки та повітря.",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "Гармата замінюватиме суцільні блоки лише у випадку, якщо у схемі в цьому місці розташований суцільний блок.",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "Гармата замінюватиме суцільні блоки у випадку, якщо у схемі в цьому місці розташований будь-який блок.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 48",
|
||||
"_": "Missing Localizations: 50",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "用任何方块替换工作区域内的方块",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "用空气替换工作区域内的方块",
|
||||
"create.gui.schematicannon.option.skipMissing": "跳过缺少的方块",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "保护存储方块",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "向蓝图加农炮添加火药以提供动力",
|
||||
"create.gui.schematicannon.slot.listPrinter": "在此处放置书以打印蓝图所需的材料清单",
|
||||
"create.gui.schematicannon.slot.schematic": "在此处添加你的蓝图,务必确保其已经被部署在特定位置",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "如果缺失材料,蓝图加农炮将忽略当前缺失材料并且使用其他已有材料继续工作",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "蓝图加农炮将避免替换存储数据的方块,如箱子",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "蓝图加农炮将不会替换工作范围内的任何固体方块",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "蓝图加农炮会使用所提供的固体方块来替换工作区域内的其他固体方块",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "蓝图加农炮会使用任何所提供的方块来替换工作区域内的固体方块",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 46",
|
||||
"_": "Missing Localizations: 48",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1199,12 +1199,12 @@
|
|||
"create.gui.schematicannon.option.replaceWithAny": "用任何方塊替換工作區域內的方塊",
|
||||
"create.gui.schematicannon.option.replaceWithEmpty": "用空氣替換工作區域內的方塊",
|
||||
"create.gui.schematicannon.option.skipMissing": "繞過缺少的方塊",
|
||||
"create.gui.schematicannon.option.skipTileEntities": "保護儲存方塊",
|
||||
"create.gui.schematicannon.option.skipBlockEntities": "UNLOCALIZED: Protect Block Entities",
|
||||
"create.gui.schematicannon.slot.gunpowder": "向藍圖加農炮裝填火藥以提供動能",
|
||||
"create.gui.schematicannon.slot.listPrinter": "在此處放置書以列印藍圖所需的材料清單",
|
||||
"create.gui.schematicannon.slot.schematic": "在此處放置你的藍圖,務必確保其已被部署在特定位置",
|
||||
"create.gui.schematicannon.option.skipMissing.description": "如果材料不夠,藍圖大炮將忽略目前不夠的材料並且使用其他已有材料繼續工作",
|
||||
"create.gui.schematicannon.option.skipTileEntities.description": "藍圖將避免更換儲存方塊,如箱子",
|
||||
"create.gui.schematicannon.option.skipBlockEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
|
||||
"create.gui.schematicannon.option.dontReplaceSolid.description": "藍圖加農炮將不會替換工作範圍內的任何固體方塊",
|
||||
"create.gui.schematicannon.option.replaceWithSolid.description": "藍圖加農炮會使用所提供的固體方塊來替換工作區域內的其他固體方塊",
|
||||
"create.gui.schematicannon.option.replaceWithAny.description": "藍圖加農炮會使用任何所提供的方塊來替換工作區域內的固體方塊",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -111,7 +111,7 @@ public class Create {
|
|||
AllPaletteBlocks.register();
|
||||
AllMenuTypes.register();
|
||||
AllEntityTypes.register();
|
||||
AllTileEntities.register();
|
||||
AllBlockEntityTypes.register();
|
||||
AllEnchantments.register();
|
||||
AllRecipeTypes.register(modEventBus);
|
||||
AllParticleTypes.register(modEventBus);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.simibubi.create;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueSelectionHandler;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.TrainHUD;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
|
@ -76,10 +76,10 @@ public class CreateClient {
|
|||
}
|
||||
|
||||
public static void clientInit(final FMLClientSetupEvent event) {
|
||||
BUFFER_CACHE.registerCompartment(CachedBufferer.GENERIC_TILE);
|
||||
BUFFER_CACHE.registerCompartment(CachedBufferer.GENERIC_BLOCK);
|
||||
BUFFER_CACHE.registerCompartment(CachedBufferer.PARTIAL);
|
||||
BUFFER_CACHE.registerCompartment(CachedBufferer.DIRECTIONAL_PARTIAL);
|
||||
BUFFER_CACHE.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE);
|
||||
BUFFER_CACHE.registerCompartment(KineticBlockEntityRenderer.KINETIC_BLOCK);
|
||||
BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20);
|
||||
BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import java.util.function.Consumer;
|
|||
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.compat.tconstruct.SpoutCasting;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.SpoutBlockEntity;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
@ -43,7 +43,7 @@ public abstract class BlockSpoutingBehaviour {
|
|||
* @param simulate whether the spout is testing or actually performing this behaviour
|
||||
* @return amount filled into the block, 0 to idle/cancel
|
||||
*/
|
||||
public abstract int fillBlock(Level world, BlockPos pos, SpoutTileEntity spout, FluidStack availableFluid,
|
||||
public abstract int fillBlock(Level world, BlockPos pos, SpoutBlockEntity spout, FluidStack availableFluid,
|
||||
boolean simulate);
|
||||
|
||||
public static void registerDefaults() {
|
||||
|
|
|
@ -13,8 +13,8 @@ import javax.annotation.Nullable;
|
|||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.IMultiTileContainer;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -31,14 +31,14 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
|||
|
||||
public class ConnectivityHandler {
|
||||
|
||||
public static <T extends BlockEntity & IMultiTileContainer> void formMulti(T be) {
|
||||
public static <T extends BlockEntity & IMultiBlockEntityContainer> void formMulti(T be) {
|
||||
SearchCache<T> cache = new SearchCache<>();
|
||||
List<T> frontier = new ArrayList<>();
|
||||
frontier.add(be);
|
||||
formMulti(be.getType(), be.getLevel(), cache, frontier);
|
||||
}
|
||||
|
||||
private static <T extends BlockEntity & IMultiTileContainer> void formMulti(BlockEntityType<?> type,
|
||||
private static <T extends BlockEntity & IMultiBlockEntityContainer> void formMulti(BlockEntityType<?> type,
|
||||
BlockGetter level, SearchCache<T> cache, List<T> frontier) {
|
||||
PriorityQueue<Pair<Integer, T>> creationQueue = makeCreationQueue();
|
||||
Set<BlockPos> visited = new HashSet<>();
|
||||
|
@ -110,7 +110,7 @@ public class ConnectivityHandler {
|
|||
}
|
||||
}
|
||||
|
||||
private static <T extends BlockEntity & IMultiTileContainer> int tryToFormNewMulti(T be, SearchCache<T> cache,
|
||||
private static <T extends BlockEntity & IMultiBlockEntityContainer> int tryToFormNewMulti(T be, SearchCache<T> cache,
|
||||
boolean simulate) {
|
||||
int bestWidth = 1;
|
||||
int bestAmount = -1;
|
||||
|
@ -132,7 +132,7 @@ public class ConnectivityHandler {
|
|||
return bestAmount;
|
||||
|
||||
splitMultiAndInvalidate(be, cache, false);
|
||||
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank())
|
||||
if (be instanceof IMultiBlockEntityContainer.Fluid ifluid && ifluid.hasTank())
|
||||
ifluid.setTankSize(0, bestAmount);
|
||||
|
||||
tryToFormNewMultiOfWidth(be, bestWidth, cache, false);
|
||||
|
@ -145,7 +145,7 @@ public class ConnectivityHandler {
|
|||
return bestAmount;
|
||||
}
|
||||
|
||||
private static <T extends BlockEntity & IMultiTileContainer> int tryToFormNewMultiOfWidth(T be, int width,
|
||||
private static <T extends BlockEntity & IMultiBlockEntityContainer> int tryToFormNewMultiOfWidth(T be, int width,
|
||||
SearchCache<T> cache, boolean simulate) {
|
||||
int amount = 0;
|
||||
int height = 0;
|
||||
|
@ -158,7 +158,7 @@ public class ConnectivityHandler {
|
|||
// optional fluid handling
|
||||
IFluidTank beTank = null;
|
||||
FluidStack fluid = FluidStack.EMPTY;
|
||||
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) {
|
||||
if (be instanceof IMultiBlockEntityContainer.Fluid ifluid && ifluid.hasTank()) {
|
||||
beTank = ifluid.getTank(0);
|
||||
fluid = beTank.getFluid();
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ public class ConnectivityHandler {
|
|||
break Search;
|
||||
}
|
||||
}
|
||||
if (controller instanceof IMultiTileContainer.Fluid ifluidCon && ifluidCon.hasTank()) {
|
||||
if (controller instanceof IMultiBlockEntityContainer.Fluid ifluidCon && ifluidCon.hasTank()) {
|
||||
FluidStack otherFluid = ifluidCon.getFluid(0);
|
||||
if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid))
|
||||
break Search;
|
||||
|
@ -245,17 +245,17 @@ public class ConnectivityHandler {
|
|||
|
||||
extraData = be.modifyExtraData(extraData);
|
||||
|
||||
if (part instanceof IMultiTileContainer.Fluid ifluidPart && ifluidPart.hasTank()) {
|
||||
if (part instanceof IMultiBlockEntityContainer.Fluid ifluidPart && ifluidPart.hasTank()) {
|
||||
IFluidTank tankAt = ifluidPart.getTank(0);
|
||||
FluidStack fluidAt = tankAt.getFluid();
|
||||
if (!fluidAt.isEmpty()) {
|
||||
// making this generic would be a rather large mess, unfortunately
|
||||
if (beTank != null && fluid.isEmpty()
|
||||
&& beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) {
|
||||
((CreativeFluidTankTileEntity.CreativeSmartFluidTank) beTank)
|
||||
&& beTank instanceof CreativeFluidTankBlockEntity.CreativeSmartFluidTank) {
|
||||
((CreativeFluidTankBlockEntity.CreativeSmartFluidTank) beTank)
|
||||
.setContainedFluid(fluidAt);
|
||||
}
|
||||
if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank()
|
||||
if (be instanceof IMultiBlockEntityContainer.Fluid ifluidBE && ifluidBE.hasTank()
|
||||
&& beTank != null) {
|
||||
beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE);
|
||||
}
|
||||
|
@ -278,18 +278,18 @@ public class ConnectivityHandler {
|
|||
return amount;
|
||||
}
|
||||
|
||||
public static <T extends BlockEntity & IMultiTileContainer> void splitMulti(T be) {
|
||||
public static <T extends BlockEntity & IMultiBlockEntityContainer> void splitMulti(T be) {
|
||||
splitMultiAndInvalidate(be, null, false);
|
||||
}
|
||||
|
||||
// tryReconnect helps whenever only a few tanks have been removed
|
||||
private static <T extends BlockEntity & IMultiTileContainer> void splitMultiAndInvalidate(T be,
|
||||
private static <T extends BlockEntity & IMultiBlockEntityContainer> void splitMultiAndInvalidate(T be,
|
||||
@Nullable SearchCache<T> cache, boolean tryReconnect) {
|
||||
Level level = be.getLevel();
|
||||
if (level == null)
|
||||
return;
|
||||
|
||||
be = be.getControllerTE();
|
||||
be = be.getControllerBE();
|
||||
if (be == null)
|
||||
return;
|
||||
|
||||
|
@ -305,7 +305,7 @@ public class ConnectivityHandler {
|
|||
// fluid handling, if present
|
||||
FluidStack toDistribute = FluidStack.EMPTY;
|
||||
int maxCapacity = 0;
|
||||
if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank()) {
|
||||
if (be instanceof IMultiBlockEntityContainer.Fluid ifluidBE && ifluidBE.hasTank()) {
|
||||
toDistribute = ifluidBE.getFluid(0);
|
||||
maxCapacity = ifluidBE.getTankSize(0);
|
||||
if (!toDistribute.isEmpty() && !be.isRemoved())
|
||||
|
@ -330,16 +330,16 @@ public class ConnectivityHandler {
|
|||
.equals(origin))
|
||||
continue;
|
||||
|
||||
T controllerBE = partAt.getControllerTE();
|
||||
T controllerBE = partAt.getControllerBE();
|
||||
partAt.setExtraData((controllerBE == null ? null : controllerBE.getExtraData()));
|
||||
partAt.removeController(true);
|
||||
|
||||
if (!toDistribute.isEmpty() && partAt != be) {
|
||||
FluidStack copy = toDistribute.copy();
|
||||
IFluidTank tank =
|
||||
(partAt instanceof IMultiTileContainer.Fluid ifluidPart ? ifluidPart.getTank(0) : null);
|
||||
(partAt instanceof IMultiBlockEntityContainer.Fluid ifluidPart ? ifluidPart.getTank(0) : null);
|
||||
// making this generic would be a rather large mess, unfortunately
|
||||
if (tank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank creativeTank) {
|
||||
if (tank instanceof CreativeFluidTankBlockEntity.CreativeSmartFluidTank creativeTank) {
|
||||
if (creativeTank.isEmpty())
|
||||
creativeTank.setContainedFluid(toDistribute);
|
||||
} else {
|
||||
|
@ -360,10 +360,10 @@ public class ConnectivityHandler {
|
|||
}
|
||||
}
|
||||
|
||||
if (be instanceof IMultiTileContainer.Inventory inv && inv.hasInventory())
|
||||
if (be instanceof IMultiBlockEntityContainer.Inventory inv && inv.hasInventory())
|
||||
be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||
.invalidate();
|
||||
if (be instanceof IMultiTileContainer.Fluid fluid && fluid.hasTank())
|
||||
if (be instanceof IMultiBlockEntityContainer.Fluid fluid && fluid.hasTank())
|
||||
be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
|
||||
.invalidate();
|
||||
|
||||
|
@ -371,12 +371,12 @@ public class ConnectivityHandler {
|
|||
formMulti(be.getType(), level, cache == null ? new SearchCache<>() : cache, frontier);
|
||||
}
|
||||
|
||||
private static <T extends BlockEntity & IMultiTileContainer> PriorityQueue<Pair<Integer, T>> makeCreationQueue() {
|
||||
private static <T extends BlockEntity & IMultiBlockEntityContainer> PriorityQueue<Pair<Integer, T>> makeCreationQueue() {
|
||||
return new PriorityQueue<>((one, two) -> two.getKey() - one.getKey());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static <T extends BlockEntity & IMultiTileContainer> T partAt(BlockEntityType<?> type, BlockGetter level,
|
||||
public static <T extends BlockEntity & IMultiBlockEntityContainer> T partAt(BlockEntityType<?> type, BlockGetter level,
|
||||
BlockPos pos) {
|
||||
BlockEntity be = level.getBlockEntity(pos);
|
||||
if (be != null && be.getType() == type && !be.isRemoved())
|
||||
|
@ -384,7 +384,7 @@ public class ConnectivityHandler {
|
|||
return null;
|
||||
}
|
||||
|
||||
public static <T extends BlockEntity & IMultiTileContainer> boolean isConnected(BlockGetter level, BlockPos pos,
|
||||
public static <T extends BlockEntity & IMultiBlockEntityContainer> boolean isConnected(BlockGetter level, BlockPos pos,
|
||||
BlockPos other) {
|
||||
T one = checked(level.getBlockEntity(pos));
|
||||
T two = checked(level.getBlockEntity(other));
|
||||
|
@ -396,13 +396,13 @@ public class ConnectivityHandler {
|
|||
|
||||
@Nullable
|
||||
@SuppressWarnings("unchecked")
|
||||
private static <T extends BlockEntity & IMultiTileContainer> T checked(BlockEntity be) {
|
||||
if (be instanceof IMultiTileContainer)
|
||||
private static <T extends BlockEntity & IMultiBlockEntityContainer> T checked(BlockEntity be) {
|
||||
if (be instanceof IMultiBlockEntityContainer)
|
||||
return (T) be;
|
||||
return null;
|
||||
}
|
||||
|
||||
private static class SearchCache<T extends BlockEntity & IMultiTileContainer> {
|
||||
private static class SearchCache<T extends BlockEntity & IMultiBlockEntityContainer> {
|
||||
Map<BlockPos, Optional<T>> controllerMap;
|
||||
|
||||
public SearchCache() {
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
package com.simibubi.create.api.event;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.Map;
|
||||
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
|
||||
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.eventbus.api.GenericEvent;
|
||||
|
||||
/**
|
||||
* Event that is fired just before a SmartBlockEntity is being deserialized<br>
|
||||
* Also if a new one is placed<br>
|
||||
* Use it to attach a new {@link BlockEntityBehaviour} or replace existing ones
|
||||
* (with caution)<br>
|
||||
* <br>
|
||||
* Actual setup of the behaviours internal workings and data should be done in
|
||||
* BlockEntityBehaviour#read() and BlockEntityBehaviour#initialize()
|
||||
* respectively.<br>
|
||||
* <br>
|
||||
* Because of the earliness of this event, the added behaviours will have access
|
||||
* to the initial NBT read (unless the BE was placed, not loaded), thereby
|
||||
* allowing block entities to store and retrieve data for injected behaviours.
|
||||
*/
|
||||
public class BlockEntityBehaviourEvent<T extends SmartBlockEntity> extends GenericEvent<T> {
|
||||
|
||||
private T smartBlockEntity;
|
||||
private Map<BehaviourType<?>, BlockEntityBehaviour> behaviours;
|
||||
|
||||
public BlockEntityBehaviourEvent(T blockEntity, Map<BehaviourType<?>, BlockEntityBehaviour> behaviours) {
|
||||
smartBlockEntity = blockEntity;
|
||||
this.behaviours = behaviours;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getGenericType() {
|
||||
return smartBlockEntity.getClass();
|
||||
}
|
||||
|
||||
public void attach(BlockEntityBehaviour behaviour) {
|
||||
behaviours.put(behaviour.getType(), behaviour);
|
||||
}
|
||||
|
||||
public BlockEntityBehaviour remove(BehaviourType<?> type) {
|
||||
return behaviours.remove(type);
|
||||
}
|
||||
|
||||
public T getBlockEntity() {
|
||||
return smartBlockEntity;
|
||||
}
|
||||
|
||||
public BlockState getBlockState() {
|
||||
return smartBlockEntity.getBlockState();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
package com.simibubi.create.api.event;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.Map;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.eventbus.api.GenericEvent;
|
||||
|
||||
/**
|
||||
* Event that is fired just before a SmartTileEntity is being deserialized<br>
|
||||
* Also if a new one is placed<br>
|
||||
* Use it to attach a new {@link TileEntityBehaviour} or replace existing ones
|
||||
* (with caution)<br>
|
||||
* <br>
|
||||
* Actual setup of the behaviours internal workings and data should be done in
|
||||
* TileEntityBehaviour#read() and TileEntityBehaviour#initialize()
|
||||
* respectively.<br>
|
||||
* <br>
|
||||
* Because of the earliness of this event, the added behaviours will have access
|
||||
* to the initial NBT read (unless the TE was placed, not loaded), thereby
|
||||
* allowing tiles to store and retrieve data for injected behaviours.
|
||||
*/
|
||||
public class TileEntityBehaviourEvent<T extends SmartTileEntity> extends GenericEvent<T> {
|
||||
|
||||
private T smartTileEntity;
|
||||
private Map<BehaviourType<?>, TileEntityBehaviour> behaviours;
|
||||
|
||||
public TileEntityBehaviourEvent(T tileEntity, Map<BehaviourType<?>, TileEntityBehaviour> behaviours) {
|
||||
smartTileEntity = tileEntity;
|
||||
this.behaviours = behaviours;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getGenericType() {
|
||||
return smartTileEntity.getClass();
|
||||
}
|
||||
|
||||
public void attach(TileEntityBehaviour behaviour) {
|
||||
behaviours.put(behaviour.getType(), behaviour);
|
||||
}
|
||||
|
||||
public TileEntityBehaviour remove(BehaviourType<?> type) {
|
||||
return behaviours.remove(type);
|
||||
}
|
||||
|
||||
public T getTileEntity() {
|
||||
return smartTileEntity;
|
||||
}
|
||||
|
||||
public BlockState getBlockState() {
|
||||
return smartTileEntity.getBlockState();
|
||||
}
|
||||
|
||||
}
|
|
@ -46,10 +46,10 @@ import com.simibubi.create.content.contraptions.components.deployer.DeployerAppl
|
|||
import com.simibubi.create.content.contraptions.components.deployer.ManualApplicationRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.fan.HauntingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.press.PressingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
|
||||
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid;
|
||||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes;
|
||||
|
@ -177,7 +177,7 @@ public class CreateJEI implements IModPlugin {
|
|||
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
|
||||
&& r.getIngredients()
|
||||
.size() > 1
|
||||
&& !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||
&& !MechanicalPressBlockEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||
BasinRecipe::convertShapeless)
|
||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
|
@ -206,7 +206,7 @@ public class CreateJEI implements IModPlugin {
|
|||
.enableWhen(c -> c.allowShapedSquareInPress)
|
||||
.addAllRecipesIf(
|
||||
r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe)
|
||||
&& MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||
&& MechanicalPressBlockEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
|
||||
BasinRecipe::convertShapeless)
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
|
@ -232,7 +232,7 @@ public class CreateJEI implements IModPlugin {
|
|||
woodCutting = builder(CondensedBlockCuttingRecipe.class)
|
||||
.enableIf(c -> c.allowWoodcuttingOnSaw.get() && ModList.get()
|
||||
.isLoaded("druidcraft"))
|
||||
.addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding(SawTileEntity.woodcuttingRecipeType.get(), AllRecipeTypes::shouldIgnoreInAutomation)))
|
||||
.addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding(SawBlockEntity.woodcuttingRecipeType.get(), AllRecipeTypes::shouldIgnoreInAutomation)))
|
||||
.catalyst(AllBlocks.MECHANICAL_SAW::get)
|
||||
.doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.OAK_STAIRS)
|
||||
.emptyBackground(177, 70)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.simibubi.create.compat.storageDrawers;
|
||||
|
||||
import com.simibubi.create.compat.Mods;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour;
|
||||
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
@ -9,9 +9,9 @@ import net.minecraftforge.items.IItemHandler;
|
|||
|
||||
public class StorageDrawers {
|
||||
|
||||
public static boolean isDrawer(BlockEntity tile) {
|
||||
return tile != null && Mods.STORAGEDRAWERS.asId()
|
||||
.equals(tile.getType()
|
||||
public static boolean isDrawer(BlockEntity be) {
|
||||
return be != null && Mods.STORAGEDRAWERS.asId()
|
||||
.equals(be.getType()
|
||||
.getRegistryName()
|
||||
.getNamespace());
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.simibubi.create.compat.tconstruct;
|
|||
|
||||
import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour;
|
||||
import com.simibubi.create.compat.Mods;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.SpoutBlockEntity;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.fluid.FluidHelper;
|
||||
import com.simibubi.create.foundation.utility.RegisteredObjects;
|
||||
|
@ -25,23 +25,23 @@ public class SpoutCasting extends BlockSpoutingBehaviour {
|
|||
ResourceLocation BASIN = new ResourceLocation("tconstruct", "basin");
|
||||
|
||||
@Override
|
||||
public int fillBlock(Level level, BlockPos pos, SpoutTileEntity spout, FluidStack availableFluid,
|
||||
public int fillBlock(Level level, BlockPos pos, SpoutBlockEntity spout, FluidStack availableFluid,
|
||||
boolean simulate) {
|
||||
if (!enabled())
|
||||
return 0;
|
||||
|
||||
BlockEntity te = level.getBlockEntity(pos);
|
||||
if (te == null)
|
||||
BlockEntity blockEntity = level.getBlockEntity(pos);
|
||||
if (blockEntity == null)
|
||||
return 0;
|
||||
|
||||
IFluidHandler handler = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, Direction.UP)
|
||||
IFluidHandler handler = blockEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, Direction.UP)
|
||||
.orElse(null);
|
||||
if (handler == null)
|
||||
return 0;
|
||||
if (handler.getTanks() != 1)
|
||||
return 0;
|
||||
|
||||
ResourceLocation registryName = RegisteredObjects.getKeyOrThrow(te.getType());
|
||||
ResourceLocation registryName = RegisteredObjects.getKeyOrThrow(blockEntity.getType());
|
||||
if (!registryName.equals(TABLE) && !registryName.equals(BASIN))
|
||||
return 0;
|
||||
if (!handler.isFluidValid(0, availableFluid))
|
||||
|
|
|
@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions;
|
|||
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.utility.Color;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
@ -26,34 +26,34 @@ public class KineticDebugger {
|
|||
|
||||
public static void tick() {
|
||||
if (!isActive()) {
|
||||
if (KineticTileEntityRenderer.rainbowMode) {
|
||||
KineticTileEntityRenderer.rainbowMode = false;
|
||||
if (KineticBlockEntityRenderer.rainbowMode) {
|
||||
KineticBlockEntityRenderer.rainbowMode = false;
|
||||
CreateClient.BUFFER_CACHE.invalidate();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
KineticTileEntity te = getSelectedTE();
|
||||
if (te == null)
|
||||
KineticBlockEntity be = getSelectedBE();
|
||||
if (be == null)
|
||||
return;
|
||||
|
||||
Level world = Minecraft.getInstance().level;
|
||||
BlockPos toOutline = te.hasSource() ? te.source : te.getBlockPos();
|
||||
BlockState state = te.getBlockState();
|
||||
BlockPos toOutline = be.hasSource() ? be.source : be.getBlockPos();
|
||||
BlockState state = be.getBlockState();
|
||||
VoxelShape shape = world.getBlockState(toOutline)
|
||||
.getBlockSupportShape(world, toOutline);
|
||||
|
||||
if (te.getTheoreticalSpeed() != 0 && !shape.isEmpty())
|
||||
if (be.getTheoreticalSpeed() != 0 && !shape.isEmpty())
|
||||
CreateClient.OUTLINER.chaseAABB("kineticSource", shape.bounds()
|
||||
.move(toOutline))
|
||||
.lineWidth(1 / 16f)
|
||||
.colored(te.hasSource() ? Color.generateFromLong(te.network).getRGB() : 0xffcc00);
|
||||
.colored(be.hasSource() ? Color.generateFromLong(be.network).getRGB() : 0xffcc00);
|
||||
|
||||
if (state.getBlock() instanceof IRotate) {
|
||||
Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state);
|
||||
Vec3 vec = Vec3.atLowerCornerOf(Direction.get(AxisDirection.POSITIVE, axis)
|
||||
.getNormal());
|
||||
Vec3 center = VecHelper.getCenterOf(te.getBlockPos());
|
||||
Vec3 center = VecHelper.getCenterOf(be.getBlockPos());
|
||||
CreateClient.OUTLINER.showLine("rotationAxis", center.add(vec), center.subtract(vec))
|
||||
.lineWidth(1 / 16f);
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ public class KineticDebugger {
|
|||
return Minecraft.getInstance().options.renderDebug;
|
||||
}
|
||||
|
||||
public static KineticTileEntity getSelectedTE() {
|
||||
public static KineticBlockEntity getSelectedBE() {
|
||||
HitResult obj = Minecraft.getInstance().hitResult;
|
||||
ClientLevel world = Minecraft.getInstance().level;
|
||||
if (obj == null)
|
||||
|
@ -79,11 +79,11 @@ public class KineticDebugger {
|
|||
return null;
|
||||
|
||||
BlockHitResult ray = (BlockHitResult) obj;
|
||||
BlockEntity te = world.getBlockEntity(ray.getBlockPos());
|
||||
if (!(te instanceof KineticTileEntity))
|
||||
BlockEntity be = world.getBlockEntity(ray.getBlockPos());
|
||||
if (!(be instanceof KineticBlockEntity))
|
||||
return null;
|
||||
|
||||
return (KineticTileEntity) te;
|
||||
return (KineticBlockEntity) be;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,14 +4,14 @@ import java.util.HashMap;
|
|||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
|
||||
public class KineticNetwork {
|
||||
|
||||
public Long id;
|
||||
public boolean initialized;
|
||||
public Map<KineticTileEntity, Float> sources;
|
||||
public Map<KineticTileEntity, Float> members;
|
||||
public Map<KineticBlockEntity, Float> sources;
|
||||
public Map<KineticBlockEntity, Float> members;
|
||||
|
||||
private float currentCapacity;
|
||||
private float currentStress;
|
||||
|
@ -33,18 +33,18 @@ public class KineticNetwork {
|
|||
updateCapacity();
|
||||
}
|
||||
|
||||
public void addSilently(KineticTileEntity te, float lastCapacity, float lastStress) {
|
||||
if (members.containsKey(te))
|
||||
public void addSilently(KineticBlockEntity be, float lastCapacity, float lastStress) {
|
||||
if (members.containsKey(be))
|
||||
return;
|
||||
if (te.isSource()) {
|
||||
unloadedCapacity -= lastCapacity * getStressMultiplierForSpeed(te.getGeneratedSpeed());
|
||||
float addedStressCapacity = te.calculateAddedStressCapacity();
|
||||
sources.put(te, addedStressCapacity);
|
||||
if (be.isSource()) {
|
||||
unloadedCapacity -= lastCapacity * getStressMultiplierForSpeed(be.getGeneratedSpeed());
|
||||
float addedStressCapacity = be.calculateAddedStressCapacity();
|
||||
sources.put(be, addedStressCapacity);
|
||||
}
|
||||
|
||||
unloadedStress -= lastStress * getStressMultiplierForSpeed(te.getTheoreticalSpeed());
|
||||
float stressApplied = te.calculateStressApplied();
|
||||
members.put(te, stressApplied);
|
||||
unloadedStress -= lastStress * getStressMultiplierForSpeed(be.getTheoreticalSpeed());
|
||||
float stressApplied = be.calculateStressApplied();
|
||||
members.put(be, stressApplied);
|
||||
|
||||
unloadedMembers--;
|
||||
if (unloadedMembers < 0)
|
||||
|
@ -55,36 +55,36 @@ public class KineticNetwork {
|
|||
unloadedStress = 0;
|
||||
}
|
||||
|
||||
public void add(KineticTileEntity te) {
|
||||
if (members.containsKey(te))
|
||||
public void add(KineticBlockEntity be) {
|
||||
if (members.containsKey(be))
|
||||
return;
|
||||
if (te.isSource())
|
||||
sources.put(te, te.calculateAddedStressCapacity());
|
||||
members.put(te, te.calculateStressApplied());
|
||||
updateFromNetwork(te);
|
||||
te.networkDirty = true;
|
||||
if (be.isSource())
|
||||
sources.put(be, be.calculateAddedStressCapacity());
|
||||
members.put(be, be.calculateStressApplied());
|
||||
updateFromNetwork(be);
|
||||
be.networkDirty = true;
|
||||
}
|
||||
|
||||
public void updateCapacityFor(KineticTileEntity te, float capacity) {
|
||||
sources.put(te, capacity);
|
||||
public void updateCapacityFor(KineticBlockEntity be, float capacity) {
|
||||
sources.put(be, capacity);
|
||||
updateCapacity();
|
||||
}
|
||||
|
||||
public void updateStressFor(KineticTileEntity te, float stress) {
|
||||
members.put(te, stress);
|
||||
public void updateStressFor(KineticBlockEntity be, float stress) {
|
||||
members.put(be, stress);
|
||||
updateStress();
|
||||
}
|
||||
|
||||
public void remove(KineticTileEntity te) {
|
||||
if (!members.containsKey(te))
|
||||
public void remove(KineticBlockEntity be) {
|
||||
if (!members.containsKey(be))
|
||||
return;
|
||||
if (te.isSource())
|
||||
sources.remove(te);
|
||||
members.remove(te);
|
||||
te.updateFromNetwork(0, 0, 0);
|
||||
if (be.isSource())
|
||||
sources.remove(be);
|
||||
members.remove(be);
|
||||
be.updateFromNetwork(0, 0, 0);
|
||||
|
||||
if (members.isEmpty()) {
|
||||
TorquePropagator.networks.get(te.getLevel())
|
||||
TorquePropagator.networks.get(be.getLevel())
|
||||
.remove(this.id);
|
||||
return;
|
||||
}
|
||||
|
@ -96,12 +96,12 @@ public class KineticNetwork {
|
|||
}
|
||||
|
||||
public void sync() {
|
||||
for (KineticTileEntity te : members.keySet())
|
||||
updateFromNetwork(te);
|
||||
for (KineticBlockEntity be : members.keySet())
|
||||
updateFromNetwork(be);
|
||||
}
|
||||
|
||||
private void updateFromNetwork(KineticTileEntity te) {
|
||||
te.updateFromNetwork(currentCapacity, currentStress, getSize());
|
||||
private void updateFromNetwork(KineticBlockEntity be) {
|
||||
be.updateFromNetwork(currentCapacity, currentStress, getSize());
|
||||
}
|
||||
|
||||
public void updateCapacity() {
|
||||
|
@ -132,15 +132,15 @@ public class KineticNetwork {
|
|||
|
||||
public float calculateCapacity() {
|
||||
float presentCapacity = 0;
|
||||
for (Iterator<KineticTileEntity> iterator = sources.keySet()
|
||||
for (Iterator<KineticBlockEntity> iterator = sources.keySet()
|
||||
.iterator(); iterator.hasNext();) {
|
||||
KineticTileEntity te = iterator.next();
|
||||
if (te.getLevel()
|
||||
.getBlockEntity(te.getBlockPos()) != te) {
|
||||
KineticBlockEntity be = iterator.next();
|
||||
if (be.getLevel()
|
||||
.getBlockEntity(be.getBlockPos()) != be) {
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
presentCapacity += getActualCapacityOf(te);
|
||||
presentCapacity += getActualCapacityOf(be);
|
||||
}
|
||||
float newMaxStress = presentCapacity + unloadedCapacity;
|
||||
return newMaxStress;
|
||||
|
@ -148,26 +148,26 @@ public class KineticNetwork {
|
|||
|
||||
public float calculateStress() {
|
||||
float presentStress = 0;
|
||||
for (Iterator<KineticTileEntity> iterator = members.keySet()
|
||||
for (Iterator<KineticBlockEntity> iterator = members.keySet()
|
||||
.iterator(); iterator.hasNext();) {
|
||||
KineticTileEntity te = iterator.next();
|
||||
if (te.getLevel()
|
||||
.getBlockEntity(te.getBlockPos()) != te) {
|
||||
KineticBlockEntity be = iterator.next();
|
||||
if (be.getLevel()
|
||||
.getBlockEntity(be.getBlockPos()) != be) {
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
presentStress += getActualStressOf(te);
|
||||
presentStress += getActualStressOf(be);
|
||||
}
|
||||
float newStress = presentStress + unloadedStress;
|
||||
return newStress;
|
||||
}
|
||||
|
||||
public float getActualCapacityOf(KineticTileEntity te) {
|
||||
return sources.get(te) * getStressMultiplierForSpeed(te.getGeneratedSpeed());
|
||||
public float getActualCapacityOf(KineticBlockEntity be) {
|
||||
return sources.get(be) * getStressMultiplierForSpeed(be.getGeneratedSpeed());
|
||||
}
|
||||
|
||||
public float getActualStressOf(KineticTileEntity te) {
|
||||
return members.get(te) * getStressMultiplierForSpeed(te.getTheoreticalSpeed());
|
||||
public float getActualStressOf(KineticBlockEntity be) {
|
||||
return members.get(be) * getStressMultiplierForSpeed(be.getTheoreticalSpeed());
|
||||
}
|
||||
|
||||
private static float getStressMultiplierForSpeed(float speed) {
|
||||
|
|
|
@ -7,15 +7,15 @@ import java.util.List;
|
|||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock;
|
||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
||||
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.DirectionalShaftHalvesTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.DirectionalShaftHalvesBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.EncasedBeltBlock;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.SplitShaftTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.encased.SplitShaftBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlockEntity;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
|
@ -41,7 +41,7 @@ public class RotationPropagator {
|
|||
* @param to
|
||||
* @return
|
||||
*/
|
||||
private static float getRotationSpeedModifier(KineticTileEntity from, KineticTileEntity to) {
|
||||
private static float getRotationSpeedModifier(KineticBlockEntity from, KineticBlockEntity to) {
|
||||
final BlockState stateFrom = from.getBlockState();
|
||||
final BlockState stateTo = to.getBlockState();
|
||||
|
||||
|
@ -121,17 +121,17 @@ public class RotationPropagator {
|
|||
return 0;
|
||||
}
|
||||
|
||||
private static float getConveyedSpeed(KineticTileEntity from, KineticTileEntity to) {
|
||||
private static float getConveyedSpeed(KineticBlockEntity from, KineticBlockEntity to) {
|
||||
final BlockState stateFrom = from.getBlockState();
|
||||
final BlockState stateTo = to.getBlockState();
|
||||
|
||||
// Rotation Speed Controller <-> Large Gear
|
||||
if (isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos()
|
||||
.subtract(from.getBlockPos())))
|
||||
return SpeedControllerTileEntity.getConveyedSpeed(from, to, true);
|
||||
return SpeedControllerBlockEntity.getConveyedSpeed(from, to, true);
|
||||
if (isLargeCogToSpeedController(stateTo, stateFrom, from.getBlockPos()
|
||||
.subtract(to.getBlockPos())))
|
||||
return SpeedControllerTileEntity.getConveyedSpeed(to, from, false);
|
||||
return SpeedControllerBlockEntity.getConveyedSpeed(to, from, false);
|
||||
|
||||
float rotationSpeedModifier = getRotationSpeedModifier(from, to);
|
||||
return from.getTheoreticalSpeed() * rotationSpeedModifier;
|
||||
|
@ -156,17 +156,17 @@ public class RotationPropagator {
|
|||
return true;
|
||||
}
|
||||
|
||||
private static float getAxisModifier(KineticTileEntity te, Direction direction) {
|
||||
if (!(te.hasSource()||te.isSource()) || !(te instanceof DirectionalShaftHalvesTileEntity))
|
||||
private static float getAxisModifier(KineticBlockEntity be, Direction direction) {
|
||||
if (!(be.hasSource()||be.isSource()) || !(be instanceof DirectionalShaftHalvesBlockEntity))
|
||||
return 1;
|
||||
Direction source = ((DirectionalShaftHalvesTileEntity) te).getSourceFacing();
|
||||
Direction source = ((DirectionalShaftHalvesBlockEntity) be).getSourceFacing();
|
||||
|
||||
if (te instanceof GearboxTileEntity)
|
||||
if (be instanceof GearboxBlockEntity)
|
||||
return direction.getAxis() == source.getAxis() ? direction == source ? 1 : -1
|
||||
: direction.getAxisDirection() == source.getAxisDirection() ? -1 : 1;
|
||||
|
||||
if (te instanceof SplitShaftTileEntity)
|
||||
return ((SplitShaftTileEntity) te).getRotationSpeedModifier(direction);
|
||||
if (be instanceof SplitShaftBlockEntity)
|
||||
return ((SplitShaftBlockEntity) be).getRotationSpeedModifier(direction);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ public class RotationPropagator {
|
|||
* @param worldIn
|
||||
* @param pos
|
||||
*/
|
||||
public static void handleAdded(Level worldIn, BlockPos pos, KineticTileEntity addedTE) {
|
||||
public static void handleAdded(Level worldIn, BlockPos pos, KineticBlockEntity addedTE) {
|
||||
if (worldIn.isClientSide)
|
||||
return;
|
||||
if (!worldIn.isLoaded(pos))
|
||||
|
@ -218,11 +218,11 @@ public class RotationPropagator {
|
|||
*
|
||||
* @param currentTE
|
||||
*/
|
||||
private static void propagateNewSource(KineticTileEntity currentTE) {
|
||||
private static void propagateNewSource(KineticBlockEntity currentTE) {
|
||||
BlockPos pos = currentTE.getBlockPos();
|
||||
Level world = currentTE.getLevel();
|
||||
|
||||
for (KineticTileEntity neighbourTE : getConnectedNeighbours(currentTE)) {
|
||||
for (KineticBlockEntity neighbourTE : getConnectedNeighbours(currentTE)) {
|
||||
float speedOfCurrent = currentTE.getTheoreticalSpeed();
|
||||
float speedOfNeighbour = neighbourTE.getTheoreticalSpeed();
|
||||
float newSpeed = getConveyedSpeed(currentTE, neighbourTE);
|
||||
|
@ -306,29 +306,29 @@ public class RotationPropagator {
|
|||
*
|
||||
* @param worldIn
|
||||
* @param pos
|
||||
* @param removedTE
|
||||
* @param removedBE
|
||||
*/
|
||||
public static void handleRemoved(Level worldIn, BlockPos pos, KineticTileEntity removedTE) {
|
||||
public static void handleRemoved(Level worldIn, BlockPos pos, KineticBlockEntity removedBE) {
|
||||
if (worldIn.isClientSide)
|
||||
return;
|
||||
if (removedTE == null)
|
||||
if (removedBE == null)
|
||||
return;
|
||||
if (removedTE.getTheoreticalSpeed() == 0)
|
||||
if (removedBE.getTheoreticalSpeed() == 0)
|
||||
return;
|
||||
|
||||
for (BlockPos neighbourPos : getPotentialNeighbourLocations(removedTE)) {
|
||||
for (BlockPos neighbourPos : getPotentialNeighbourLocations(removedBE)) {
|
||||
BlockState neighbourState = worldIn.getBlockState(neighbourPos);
|
||||
if (!(neighbourState.getBlock() instanceof IRotate))
|
||||
continue;
|
||||
BlockEntity tileEntity = worldIn.getBlockEntity(neighbourPos);
|
||||
if (!(tileEntity instanceof KineticTileEntity))
|
||||
BlockEntity blockEntity = worldIn.getBlockEntity(neighbourPos);
|
||||
if (!(blockEntity instanceof KineticBlockEntity))
|
||||
continue;
|
||||
|
||||
final KineticTileEntity neighbourTE = (KineticTileEntity) tileEntity;
|
||||
if (!neighbourTE.hasSource() || !neighbourTE.source.equals(pos))
|
||||
final KineticBlockEntity neighbourBE = (KineticBlockEntity) blockEntity;
|
||||
if (!neighbourBE.hasSource() || !neighbourBE.source.equals(pos))
|
||||
continue;
|
||||
|
||||
propagateMissingSource(neighbourTE);
|
||||
propagateMissingSource(neighbourBE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -339,44 +339,44 @@ public class RotationPropagator {
|
|||
*
|
||||
* @param updateTE
|
||||
*/
|
||||
private static void propagateMissingSource(KineticTileEntity updateTE) {
|
||||
private static void propagateMissingSource(KineticBlockEntity updateTE) {
|
||||
final Level world = updateTE.getLevel();
|
||||
|
||||
List<KineticTileEntity> potentialNewSources = new LinkedList<>();
|
||||
List<KineticBlockEntity> potentialNewSources = new LinkedList<>();
|
||||
List<BlockPos> frontier = new LinkedList<>();
|
||||
frontier.add(updateTE.getBlockPos());
|
||||
BlockPos missingSource = updateTE.hasSource() ? updateTE.source : null;
|
||||
|
||||
while (!frontier.isEmpty()) {
|
||||
final BlockPos pos = frontier.remove(0);
|
||||
BlockEntity tileEntity = world.getBlockEntity(pos);
|
||||
if (!(tileEntity instanceof KineticTileEntity))
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof KineticBlockEntity))
|
||||
continue;
|
||||
final KineticTileEntity currentTE = (KineticTileEntity) tileEntity;
|
||||
final KineticBlockEntity currentBE = (KineticBlockEntity) blockEntity;
|
||||
|
||||
currentTE.removeSource();
|
||||
currentTE.sendData();
|
||||
currentBE.removeSource();
|
||||
currentBE.sendData();
|
||||
|
||||
for (KineticTileEntity neighbourTE : getConnectedNeighbours(currentTE)) {
|
||||
if (neighbourTE.getBlockPos()
|
||||
for (KineticBlockEntity neighbourBE : getConnectedNeighbours(currentBE)) {
|
||||
if (neighbourBE.getBlockPos()
|
||||
.equals(missingSource))
|
||||
continue;
|
||||
if (!neighbourTE.hasSource())
|
||||
if (!neighbourBE.hasSource())
|
||||
continue;
|
||||
|
||||
if (!neighbourTE.source.equals(pos)) {
|
||||
potentialNewSources.add(neighbourTE);
|
||||
if (!neighbourBE.source.equals(pos)) {
|
||||
potentialNewSources.add(neighbourBE);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (neighbourTE.isSource())
|
||||
potentialNewSources.add(neighbourTE);
|
||||
if (neighbourBE.isSource())
|
||||
potentialNewSources.add(neighbourBE);
|
||||
|
||||
frontier.add(neighbourTE.getBlockPos());
|
||||
frontier.add(neighbourBE.getBlockPos());
|
||||
}
|
||||
}
|
||||
|
||||
for (KineticTileEntity newSource : potentialNewSources) {
|
||||
for (KineticBlockEntity newSource : potentialNewSources) {
|
||||
if (newSource.hasSource() || newSource.isSource()) {
|
||||
propagateNewSource(newSource);
|
||||
return;
|
||||
|
@ -384,27 +384,27 @@ public class RotationPropagator {
|
|||
}
|
||||
}
|
||||
|
||||
private static KineticTileEntity findConnectedNeighbour(KineticTileEntity currentTE, BlockPos neighbourPos) {
|
||||
private static KineticBlockEntity findConnectedNeighbour(KineticBlockEntity currentTE, BlockPos neighbourPos) {
|
||||
BlockState neighbourState = currentTE.getLevel()
|
||||
.getBlockState(neighbourPos);
|
||||
if (!(neighbourState.getBlock() instanceof IRotate))
|
||||
return null;
|
||||
if (!neighbourState.hasBlockEntity())
|
||||
return null;
|
||||
BlockEntity neighbourTE = currentTE.getLevel()
|
||||
BlockEntity neighbourBE = currentTE.getLevel()
|
||||
.getBlockEntity(neighbourPos);
|
||||
if (!(neighbourTE instanceof KineticTileEntity))
|
||||
if (!(neighbourBE instanceof KineticBlockEntity))
|
||||
return null;
|
||||
KineticTileEntity neighbourKTE = (KineticTileEntity) neighbourTE;
|
||||
if (!(neighbourKTE.getBlockState()
|
||||
KineticBlockEntity neighbourKBE = (KineticBlockEntity) neighbourBE;
|
||||
if (!(neighbourKBE.getBlockState()
|
||||
.getBlock() instanceof IRotate))
|
||||
return null;
|
||||
if (!isConnected(currentTE, neighbourKTE) && !isConnected(neighbourKTE, currentTE))
|
||||
if (!isConnected(currentTE, neighbourKBE) && !isConnected(neighbourKBE, currentTE))
|
||||
return null;
|
||||
return neighbourKTE;
|
||||
return neighbourKBE;
|
||||
}
|
||||
|
||||
public static boolean isConnected(KineticTileEntity from, KineticTileEntity to) {
|
||||
public static boolean isConnected(KineticBlockEntity from, KineticBlockEntity to) {
|
||||
final BlockState stateFrom = from.getBlockState();
|
||||
final BlockState stateTo = to.getBlockState();
|
||||
return isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos()
|
||||
|
@ -412,34 +412,34 @@ public class RotationPropagator {
|
|||
|| from.isCustomConnection(to, stateFrom, stateTo);
|
||||
}
|
||||
|
||||
private static List<KineticTileEntity> getConnectedNeighbours(KineticTileEntity te) {
|
||||
List<KineticTileEntity> neighbours = new LinkedList<>();
|
||||
for (BlockPos neighbourPos : getPotentialNeighbourLocations(te)) {
|
||||
final KineticTileEntity neighbourTE = findConnectedNeighbour(te, neighbourPos);
|
||||
if (neighbourTE == null)
|
||||
private static List<KineticBlockEntity> getConnectedNeighbours(KineticBlockEntity be) {
|
||||
List<KineticBlockEntity> neighbours = new LinkedList<>();
|
||||
for (BlockPos neighbourPos : getPotentialNeighbourLocations(be)) {
|
||||
final KineticBlockEntity neighbourBE = findConnectedNeighbour(be, neighbourPos);
|
||||
if (neighbourBE == null)
|
||||
continue;
|
||||
|
||||
neighbours.add(neighbourTE);
|
||||
neighbours.add(neighbourBE);
|
||||
}
|
||||
return neighbours;
|
||||
}
|
||||
|
||||
private static List<BlockPos> getPotentialNeighbourLocations(KineticTileEntity te) {
|
||||
private static List<BlockPos> getPotentialNeighbourLocations(KineticBlockEntity be) {
|
||||
List<BlockPos> neighbours = new LinkedList<>();
|
||||
|
||||
if (!te.getLevel()
|
||||
.isAreaLoaded(te.getBlockPos(), 1))
|
||||
if (!be.getLevel()
|
||||
.isAreaLoaded(be.getBlockPos(), 1))
|
||||
return neighbours;
|
||||
|
||||
for (Direction facing : Iterate.directions)
|
||||
neighbours.add(te.getBlockPos()
|
||||
neighbours.add(be.getBlockPos()
|
||||
.relative(facing));
|
||||
|
||||
BlockState blockState = te.getBlockState();
|
||||
BlockState blockState = be.getBlockState();
|
||||
if (!(blockState.getBlock() instanceof IRotate))
|
||||
return neighbours;
|
||||
IRotate block = (IRotate) blockState.getBlock();
|
||||
return te.addPropagationLocations(block, blockState, neighbours);
|
||||
return be.addPropagationLocations(block, blockState, neighbours);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.foundation.utility.WorldHelper;
|
||||
|
||||
import net.minecraft.world.level.LevelAccessor;
|
||||
|
@ -23,16 +23,16 @@ public class TorquePropagator {
|
|||
Create.LOGGER.debug("Removed Kinetic Network Space for " + WorldHelper.getDimensionID(world));
|
||||
}
|
||||
|
||||
public KineticNetwork getOrCreateNetworkFor(KineticTileEntity te) {
|
||||
Long id = te.network;
|
||||
public KineticNetwork getOrCreateNetworkFor(KineticBlockEntity be) {
|
||||
Long id = be.network;
|
||||
KineticNetwork network;
|
||||
Map<Long, KineticNetwork> map = networks.computeIfAbsent(te.getLevel(), $ -> new HashMap<>());
|
||||
Map<Long, KineticNetwork> map = networks.computeIfAbsent(be.getLevel(), $ -> new HashMap<>());
|
||||
if (id == null)
|
||||
return null;
|
||||
|
||||
if (!map.containsKey(id)) {
|
||||
network = new KineticNetwork();
|
||||
network.id = te.network;
|
||||
network.id = be.network;
|
||||
map.put(id, network);
|
||||
}
|
||||
network = map.get(id);
|
||||
|
|
|
@ -6,8 +6,8 @@ import net.minecraft.core.Direction;
|
|||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
public class BackHalfShaftInstance extends HalfShaftInstance {
|
||||
public BackHalfShaftInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
public BackHalfShaftInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,8 +6,8 @@ import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
|
|||
import com.simibubi.create.foundation.render.AllMaterialSpecs;
|
||||
|
||||
public class CutoutRotatingInstance extends SingleRotatingInstance {
|
||||
public CutoutRotatingInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
public CutoutRotatingInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
protected Material<RotatingData> getRotatingMaterial() {
|
||||
|
|
|
@ -15,12 +15,12 @@ import net.minecraft.world.level.block.entity.BlockEntity;
|
|||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public abstract class GeneratingKineticTileEntity extends KineticTileEntity {
|
||||
public abstract class GeneratingKineticBlockEntity extends KineticBlockEntity {
|
||||
|
||||
public boolean reActivateSource;
|
||||
|
||||
public GeneratingKineticTileEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
|
||||
super(typeIn, pos, state);
|
||||
public GeneratingKineticBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
||||
protected void notifyStressCapacityChange(float capacity) {
|
||||
|
@ -37,11 +37,11 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity {
|
|||
@Override
|
||||
public void setSource(BlockPos source) {
|
||||
super.setSource(source);
|
||||
BlockEntity tileEntity = level.getBlockEntity(source);
|
||||
if (!(tileEntity instanceof KineticTileEntity))
|
||||
BlockEntity blockEntity = level.getBlockEntity(source);
|
||||
if (!(blockEntity instanceof KineticBlockEntity))
|
||||
return;
|
||||
KineticTileEntity sourceTe = (KineticTileEntity) tileEntity;
|
||||
if (reActivateSource && Math.abs(sourceTe.getSpeed()) >= Math.abs(getGeneratedSpeed()))
|
||||
KineticBlockEntity sourceBE = (KineticBlockEntity) blockEntity;
|
||||
if (reActivateSource && Math.abs(sourceBE.getSpeed()) >= Math.abs(getGeneratedSpeed()))
|
||||
reActivateSource = false;
|
||||
}
|
||||
|
|
@ -9,8 +9,8 @@ import net.minecraft.core.Direction;
|
|||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
public class HalfShaftInstance extends SingleRotatingInstance {
|
||||
public HalfShaftInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
public HalfShaftInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -7,8 +7,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|||
|
||||
public class HorizontalHalfShaftInstance extends HalfShaftInstance {
|
||||
|
||||
public HorizontalHalfShaftInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
public HorizontalHalfShaftInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.simibubi.create.content.contraptions.base;
|
||||
|
||||
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -22,15 +22,15 @@ public abstract class KineticBlock extends Block implements IRotate {
|
|||
|
||||
@Override
|
||||
public void onPlace(BlockState state, Level worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
// onBlockAdded is useless for init, as sometimes the TE gets re-instantiated
|
||||
// onBlockAdded is useless for init, as sometimes the BE gets re-instantiated
|
||||
|
||||
// however, if a block change occurs that does not change kinetic connections,
|
||||
// we can prevent a major re-propagation here
|
||||
|
||||
BlockEntity tileEntity = worldIn.getBlockEntity(pos);
|
||||
if (tileEntity instanceof KineticTileEntity) {
|
||||
KineticTileEntity kineticTileEntity = (KineticTileEntity) tileEntity;
|
||||
kineticTileEntity.preventSpeedUpdate = 0;
|
||||
BlockEntity blockEntity = worldIn.getBlockEntity(pos);
|
||||
if (blockEntity instanceof KineticBlockEntity) {
|
||||
KineticBlockEntity kineticBlockEntity = (KineticBlockEntity) blockEntity;
|
||||
kineticBlockEntity.preventSpeedUpdate = 0;
|
||||
|
||||
if (oldState.getBlock() != state.getBlock())
|
||||
return;
|
||||
|
@ -39,13 +39,13 @@ public abstract class KineticBlock extends Block implements IRotate {
|
|||
if (!areStatesKineticallyEquivalent(oldState, state))
|
||||
return;
|
||||
|
||||
kineticTileEntity.preventSpeedUpdate = 2;
|
||||
kineticBlockEntity.preventSpeedUpdate = 2;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) {
|
||||
ITE.onRemove(pState, pLevel, pPos, pNewState);
|
||||
IBE.onRemove(pState, pLevel, pPos, pNewState);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -65,18 +65,18 @@ public abstract class KineticBlock extends Block implements IRotate {
|
|||
if (worldIn.isClientSide())
|
||||
return;
|
||||
|
||||
BlockEntity tileEntity = worldIn.getBlockEntity(pos);
|
||||
if (!(tileEntity instanceof KineticTileEntity))
|
||||
BlockEntity blockEntity = worldIn.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof KineticBlockEntity))
|
||||
return;
|
||||
KineticTileEntity kte = (KineticTileEntity) tileEntity;
|
||||
KineticBlockEntity kbe = (KineticBlockEntity) blockEntity;
|
||||
|
||||
if (kte.preventSpeedUpdate > 0)
|
||||
if (kbe.preventSpeedUpdate > 0)
|
||||
return;
|
||||
|
||||
// Remove previous information when block is added
|
||||
kte.warnOfMovement();
|
||||
kte.clearKineticInformation();
|
||||
kte.updateSpeed = true;
|
||||
kbe.warnOfMovement();
|
||||
kbe.clearKineticInformation();
|
||||
kbe.updateSpeed = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -85,12 +85,12 @@ public abstract class KineticBlock extends Block implements IRotate {
|
|||
if (worldIn.isClientSide)
|
||||
return;
|
||||
|
||||
BlockEntity tileEntity = worldIn.getBlockEntity(pos);
|
||||
if (!(tileEntity instanceof KineticTileEntity))
|
||||
BlockEntity blockEntity = worldIn.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof KineticBlockEntity))
|
||||
return;
|
||||
|
||||
KineticTileEntity kte = (KineticTileEntity) tileEntity;
|
||||
kte.effects.queueRotationIndicators();
|
||||
KineticBlockEntity kbe = (KineticBlockEntity) blockEntity;
|
||||
kbe.effects.queueRotationIndicators();
|
||||
}
|
||||
|
||||
public float getParticleTargetRadius() {
|
||||
|
|
|
@ -18,12 +18,12 @@ import com.simibubi.create.content.contraptions.goggles.IHaveHoveringInformation
|
|||
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
|
||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock;
|
||||
import com.simibubi.create.foundation.block.BlockStressValues;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||
import com.simibubi.create.foundation.sound.SoundScapes;
|
||||
import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import net.minecraft.ChatFormatting;
|
||||
|
@ -46,7 +46,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.fml.DistExecutor;
|
||||
|
||||
public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInformation, IHaveHoveringInformation {
|
||||
public class KineticBlockEntity extends SmartBlockEntity implements IHaveGoggleInformation, IHaveHoveringInformation {
|
||||
|
||||
public @Nullable Long network;
|
||||
public @Nullable BlockPos source;
|
||||
|
@ -67,7 +67,7 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
|
|||
protected float lastStressApplied;
|
||||
protected float lastCapacityProvided;
|
||||
|
||||
public KineticTileEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
|
||||
public KineticBlockEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
|
||||
super(typeIn, pos, state);
|
||||
effects = new KineticEffectHandler(this);
|
||||
updateSpeed = true;
|
||||
|
@ -125,10 +125,10 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
|
|||
if (!level.isLoaded(source))
|
||||
return;
|
||||
|
||||
BlockEntity tileEntity = level.getBlockEntity(source);
|
||||
KineticTileEntity sourceTe =
|
||||
tileEntity instanceof KineticTileEntity ? (KineticTileEntity) tileEntity : null;
|
||||
if (sourceTe == null || sourceTe.speed == 0) {
|
||||
BlockEntity blockEntity = level.getBlockEntity(source);
|
||||
KineticBlockEntity sourceBE =
|
||||
blockEntity instanceof KineticBlockEntity ? (KineticBlockEntity) blockEntity : null;
|
||||
if (sourceBE == null || sourceBE.speed == 0) {
|
||||
removeSource();
|
||||
detachKinetics();
|
||||
return;
|
||||
|
@ -292,14 +292,14 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
|
|||
if (level == null || level.isClientSide)
|
||||
return;
|
||||
|
||||
BlockEntity tileEntity = level.getBlockEntity(source);
|
||||
if (!(tileEntity instanceof KineticTileEntity)) {
|
||||
BlockEntity blockEntity = level.getBlockEntity(source);
|
||||
if (!(blockEntity instanceof KineticBlockEntity)) {
|
||||
removeSource();
|
||||
return;
|
||||
}
|
||||
|
||||
KineticTileEntity sourceTe = (KineticTileEntity) tileEntity;
|
||||
setNetwork(sourceTe.network);
|
||||
KineticBlockEntity sourceBE = (KineticBlockEntity) blockEntity;
|
||||
setNetwork(sourceBE.network);
|
||||
}
|
||||
|
||||
public void removeSource() {
|
||||
|
@ -360,32 +360,32 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
|
|||
if (world.isClientSide)
|
||||
return;
|
||||
|
||||
BlockEntity tileEntityIn = world.getBlockEntity(pos);
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
BlockState currentState = world.getBlockState(pos);
|
||||
boolean isKinetic = tileEntityIn instanceof KineticTileEntity;
|
||||
boolean isKinetic = blockEntity instanceof KineticBlockEntity;
|
||||
|
||||
if (currentState == state)
|
||||
return;
|
||||
if (tileEntityIn == null || !isKinetic) {
|
||||
if (blockEntity == null || !isKinetic) {
|
||||
world.setBlock(pos, state, 3);
|
||||
return;
|
||||
}
|
||||
|
||||
KineticTileEntity tileEntity = (KineticTileEntity) tileEntityIn;
|
||||
KineticBlockEntity kineticBlockEntity = (KineticBlockEntity) blockEntity;
|
||||
if (state.getBlock() instanceof KineticBlock
|
||||
&& !((KineticBlock) state.getBlock()).areStatesKineticallyEquivalent(currentState, state)) {
|
||||
if (tileEntity.hasNetwork())
|
||||
tileEntity.getOrCreateNetwork()
|
||||
.remove(tileEntity);
|
||||
tileEntity.detachKinetics();
|
||||
tileEntity.removeSource();
|
||||
if (kineticBlockEntity.hasNetwork())
|
||||
kineticBlockEntity.getOrCreateNetwork()
|
||||
.remove(kineticBlockEntity);
|
||||
kineticBlockEntity.detachKinetics();
|
||||
kineticBlockEntity.removeSource();
|
||||
}
|
||||
|
||||
world.setBlock(pos, state, 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {}
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {}
|
||||
|
||||
@Override
|
||||
public boolean addToTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
|
||||
|
@ -500,18 +500,18 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
|
|||
* Specify ratio of transferred rotation from this kinetic component to a
|
||||
* specific other.
|
||||
*
|
||||
* @param target other Kinetic TE to transfer to
|
||||
* @param stateFrom this TE's blockstate
|
||||
* @param stateTo other TE's blockstate
|
||||
* @param target other Kinetic BE to transfer to
|
||||
* @param stateFrom this BE's blockstate
|
||||
* @param stateTo other BE's blockstate
|
||||
* @param diff difference in position (to.pos - from.pos)
|
||||
* @param connectedViaAxes whether these kinetic blocks are connected via mutual
|
||||
* IRotate.hasShaftTowards()
|
||||
* @param connectedViaCogs whether these kinetic blocks are connected via mutual
|
||||
* IRotate.hasIntegratedCogwheel()
|
||||
* @return factor of rotation speed from this TE to other. 0 if no rotation is
|
||||
* @return factor of rotation speed from this BE to other. 0 if no rotation is
|
||||
* transferred, or the standard rules apply (integrated shafts/cogs)
|
||||
*/
|
||||
public float propagateRotationTo(KineticTileEntity target, BlockState stateFrom, BlockState stateTo, BlockPos diff,
|
||||
public float propagateRotationTo(KineticBlockEntity target, BlockState stateFrom, BlockState stateTo, BlockPos diff,
|
||||
boolean connectedViaAxes, boolean connectedViaCogs) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -554,7 +554,7 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
|
|||
* @return true if this and the other component should check their propagation
|
||||
* factor and are not already connected via integrated cogs or shafts
|
||||
*/
|
||||
public boolean isCustomConnection(KineticTileEntity other, BlockState state, BlockState otherState) {
|
||||
public boolean isCustomConnection(KineticBlockEntity other, BlockState state, BlockState otherState) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -13,21 +13,21 @@ import net.minecraft.core.Direction;
|
|||
import net.minecraft.core.Direction.Axis;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public abstract class KineticTileInstance<T extends KineticTileEntity> extends BlockEntityInstance<T> {
|
||||
public abstract class KineticBlockEntityInstance<T extends KineticBlockEntity> extends BlockEntityInstance<T> {
|
||||
|
||||
protected final Direction.Axis axis;
|
||||
|
||||
public KineticTileInstance(MaterialManager modelManager, T tile) {
|
||||
super(modelManager, tile);
|
||||
axis = (blockState.getBlock()instanceof IRotate irotate) ? irotate.getRotationAxis(blockState) : Axis.Y;
|
||||
public KineticBlockEntityInstance(MaterialManager materialManager, T blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
axis = (blockState.getBlock() instanceof IRotate irotate) ? irotate.getRotationAxis(blockState) : Axis.Y;
|
||||
}
|
||||
|
||||
protected final void updateRotation(RotatingData instance) {
|
||||
updateRotation(instance, getRotationAxis(), getTileSpeed());
|
||||
updateRotation(instance, getRotationAxis(), getBlockEntitySpeed());
|
||||
}
|
||||
|
||||
protected final void updateRotation(RotatingData instance, Direction.Axis axis) {
|
||||
updateRotation(instance, axis, getTileSpeed());
|
||||
updateRotation(instance, axis, getBlockEntitySpeed());
|
||||
}
|
||||
|
||||
protected final void updateRotation(RotatingData instance, float speed) {
|
||||
|
@ -42,11 +42,11 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends B
|
|||
}
|
||||
|
||||
protected final RotatingData setup(RotatingData key) {
|
||||
return setup(key, getRotationAxis(), getTileSpeed());
|
||||
return setup(key, getRotationAxis(), getBlockEntitySpeed());
|
||||
}
|
||||
|
||||
protected final RotatingData setup(RotatingData key, Direction.Axis axis) {
|
||||
return setup(key, axis, getTileSpeed());
|
||||
return setup(key, axis, getBlockEntitySpeed());
|
||||
}
|
||||
|
||||
protected final RotatingData setup(RotatingData key, float speed) {
|
||||
|
@ -77,7 +77,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends B
|
|||
return axis;
|
||||
}
|
||||
|
||||
protected float getTileSpeed() {
|
||||
protected float getBlockEntitySpeed() {
|
||||
return blockEntity.getSpeed();
|
||||
}
|
||||
|
|
@ -8,10 +8,10 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
|
|||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.KineticDebugger;
|
||||
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
|
||||
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBufferCache;
|
||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.Color;
|
||||
|
||||
|
@ -26,9 +26,9 @@ import net.minecraft.core.Direction.AxisDirection;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTileEntity> {
|
||||
public class KineticBlockEntityRenderer extends SafeBlockEntityRenderer<KineticBlockEntity> {
|
||||
|
||||
public static final SuperByteBufferCache.Compartment<BlockState> KINETIC_TILE = new SuperByteBufferCache.Compartment<>();
|
||||
public static final SuperByteBufferCache.Compartment<BlockState> KINETIC_BLOCK = new SuperByteBufferCache.Compartment<>();
|
||||
public static boolean rainbowMode = false;
|
||||
|
||||
protected static final RenderType[] REVERSED_CHUNK_BUFFER_LAYERS = RenderType.chunkBufferLayers().toArray(RenderType[]::new);
|
||||
|
@ -36,71 +36,71 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
|||
ArrayUtils.reverse(REVERSED_CHUNK_BUFFER_LAYERS);
|
||||
}
|
||||
|
||||
public KineticTileEntityRenderer(BlockEntityRendererProvider.Context context) {
|
||||
public KineticBlockEntityRenderer(BlockEntityRendererProvider.Context context) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
protected void renderSafe(KineticBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light, int overlay) {
|
||||
if (Backend.canUseInstancing(te.getLevel())) return;
|
||||
if (Backend.canUseInstancing(be.getLevel())) return;
|
||||
|
||||
BlockState state = getRenderedBlockState(te);
|
||||
RenderType type = getRenderType(te, state);
|
||||
BlockState state = getRenderedBlockState(be);
|
||||
RenderType type = getRenderType(be, state);
|
||||
if (type != null)
|
||||
renderRotatingBuffer(te, getRotatedModel(te, state), ms, buffer.getBuffer(type), light);
|
||||
renderRotatingBuffer(be, getRotatedModel(be, state), ms, buffer.getBuffer(type), light);
|
||||
}
|
||||
|
||||
protected BlockState getRenderedBlockState(KineticTileEntity te) {
|
||||
return te.getBlockState();
|
||||
protected BlockState getRenderedBlockState(KineticBlockEntity be) {
|
||||
return be.getBlockState();
|
||||
}
|
||||
|
||||
protected RenderType getRenderType(KineticTileEntity te, BlockState state) {
|
||||
protected RenderType getRenderType(KineticBlockEntity be, BlockState state) {
|
||||
for (RenderType type : REVERSED_CHUNK_BUFFER_LAYERS)
|
||||
if (ItemBlockRenderTypes.canRenderInLayer(state, type))
|
||||
return type;
|
||||
return null;
|
||||
}
|
||||
|
||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||
return CachedBufferer.block(KINETIC_TILE, state);
|
||||
protected SuperByteBuffer getRotatedModel(KineticBlockEntity be, BlockState state) {
|
||||
return CachedBufferer.block(KINETIC_BLOCK, state);
|
||||
}
|
||||
|
||||
public static void renderRotatingKineticBlock(KineticTileEntity te, BlockState renderedState, PoseStack ms,
|
||||
public static void renderRotatingKineticBlock(KineticBlockEntity be, BlockState renderedState, PoseStack ms,
|
||||
VertexConsumer buffer, int light) {
|
||||
SuperByteBuffer superByteBuffer = CachedBufferer.block(KINETIC_TILE, renderedState);
|
||||
renderRotatingBuffer(te, superByteBuffer, ms, buffer, light);
|
||||
SuperByteBuffer superByteBuffer = CachedBufferer.block(KINETIC_BLOCK, renderedState);
|
||||
renderRotatingBuffer(be, superByteBuffer, ms, buffer, light);
|
||||
}
|
||||
|
||||
public static void renderRotatingBuffer(KineticTileEntity te, SuperByteBuffer superBuffer, PoseStack ms,
|
||||
public static void renderRotatingBuffer(KineticBlockEntity be, SuperByteBuffer superBuffer, PoseStack ms,
|
||||
VertexConsumer buffer, int light) {
|
||||
standardKineticRotationTransform(superBuffer, te, light).renderInto(ms, buffer);
|
||||
standardKineticRotationTransform(superBuffer, be, light).renderInto(ms, buffer);
|
||||
}
|
||||
|
||||
public static float getAngleForTe(KineticTileEntity te, final BlockPos pos, Axis axis) {
|
||||
float time = AnimationTickHolder.getRenderTime(te.getLevel());
|
||||
float offset = getRotationOffsetForPosition(te, pos, axis);
|
||||
float angle = ((time * te.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI;
|
||||
public static float getAngleForTe(KineticBlockEntity be, final BlockPos pos, Axis axis) {
|
||||
float time = AnimationTickHolder.getRenderTime(be.getLevel());
|
||||
float offset = getRotationOffsetForPosition(be, pos, axis);
|
||||
float angle = ((time * be.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI;
|
||||
return angle;
|
||||
}
|
||||
|
||||
public static SuperByteBuffer standardKineticRotationTransform(SuperByteBuffer buffer, KineticTileEntity te,
|
||||
public static SuperByteBuffer standardKineticRotationTransform(SuperByteBuffer buffer, KineticBlockEntity be,
|
||||
int light) {
|
||||
final BlockPos pos = te.getBlockPos();
|
||||
Axis axis = ((IRotate) te.getBlockState()
|
||||
.getBlock()).getRotationAxis(te.getBlockState());
|
||||
return kineticRotationTransform(buffer, te, axis, getAngleForTe(te, pos, axis), light);
|
||||
final BlockPos pos = be.getBlockPos();
|
||||
Axis axis = ((IRotate) be.getBlockState()
|
||||
.getBlock()).getRotationAxis(be.getBlockState());
|
||||
return kineticRotationTransform(buffer, be, axis, getAngleForTe(be, pos, axis), light);
|
||||
}
|
||||
|
||||
public static SuperByteBuffer kineticRotationTransform(SuperByteBuffer buffer, KineticTileEntity te, Axis axis,
|
||||
public static SuperByteBuffer kineticRotationTransform(SuperByteBuffer buffer, KineticBlockEntity be, Axis axis,
|
||||
float angle, int light) {
|
||||
buffer.light(light);
|
||||
buffer.rotateCentered(Direction.get(AxisDirection.POSITIVE, axis), angle);
|
||||
|
||||
if (KineticDebugger.isActive()) {
|
||||
rainbowMode = true;
|
||||
buffer.color(te.hasNetwork() ? Color.generateFromLong(te.network) : Color.WHITE);
|
||||
buffer.color(be.hasNetwork() ? Color.generateFromLong(be.network) : Color.WHITE);
|
||||
} else {
|
||||
float overStressedEffect = te.effects.overStressedEffect;
|
||||
float overStressedEffect = be.effects.overStressedEffect;
|
||||
if (overStressedEffect != 0)
|
||||
if (overStressedEffect > 0)
|
||||
buffer.color(Color.WHITE.mixWith(Color.RED, overStressedEffect));
|
||||
|
@ -113,13 +113,13 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
|||
return buffer;
|
||||
}
|
||||
|
||||
public static float getRotationOffsetForPosition(KineticTileEntity te, final BlockPos pos, final Axis axis) {
|
||||
float offset = ICogWheel.isLargeCog(te.getBlockState()) ? 11.25f : 0;
|
||||
public static float getRotationOffsetForPosition(KineticBlockEntity be, final BlockPos pos, final Axis axis) {
|
||||
float offset = ICogWheel.isLargeCog(be.getBlockState()) ? 11.25f : 0;
|
||||
double d = (((axis == Axis.X) ? 0 : pos.getX()) + ((axis == Axis.Y) ? 0 : pos.getY())
|
||||
+ ((axis == Axis.Z) ? 0 : pos.getZ())) % 2;
|
||||
if (d == 0)
|
||||
offset = 22.5f;
|
||||
return offset + te.getRotationAngleOffset(axis);
|
||||
return offset + be.getRotationAngleOffset(axis);
|
||||
}
|
||||
|
||||
public static BlockState shaft(Axis axis) {
|
||||
|
@ -127,9 +127,9 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
|||
.setValue(BlockStateProperties.AXIS, axis);
|
||||
}
|
||||
|
||||
public static Axis getRotationAxisOf(KineticTileEntity te) {
|
||||
return ((IRotate) te.getBlockState()
|
||||
.getBlock()).getRotationAxis(te.getBlockState());
|
||||
public static Axis getRotationAxisOf(KineticBlockEntity be) {
|
||||
return ((IRotate) be.getBlockState()
|
||||
.getBlock()).getRotationAxis(be.getBlockState());
|
||||
}
|
||||
|
||||
}
|
|
@ -21,9 +21,9 @@ public class KineticEffectHandler {
|
|||
int overStressedTime;
|
||||
float overStressedEffect;
|
||||
int particleSpawnCountdown;
|
||||
KineticTileEntity kte;
|
||||
KineticBlockEntity kte;
|
||||
|
||||
public KineticEffectHandler(KineticTileEntity kte) {
|
||||
public KineticEffectHandler(KineticBlockEntity kte) {
|
||||
this.kte = kte;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@ import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
|
|||
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntity> {
|
||||
public class SingleRotatingInstance extends KineticBlockEntityInstance<KineticBlockEntity> {
|
||||
|
||||
protected RotatingData rotatingModel;
|
||||
|
||||
public SingleRotatingInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
public SingleRotatingInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.base.flwdata;
|
|||
|
||||
import com.jozufozu.flywheel.core.materials.BasicData;
|
||||
import com.mojang.math.Vector3f;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.foundation.utility.Color;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -38,9 +38,9 @@ public class KineticData extends BasicData {
|
|||
return this;
|
||||
}
|
||||
|
||||
public KineticData setColor(KineticTileEntity te) {
|
||||
if (te.hasNetwork()) {
|
||||
setColor(Color.generateFromLong(te.network));
|
||||
public KineticData setColor(KineticBlockEntity blockEntity) {
|
||||
if (blockEntity.hasNetwork()) {
|
||||
setColor(Color.generateFromLong(blockEntity.network));
|
||||
}else {
|
||||
setColor(0xFF, 0xFF, 0xFF);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ import net.minecraft.world.phys.Vec3;
|
|||
public class BellMovementBehaviour implements MovementBehaviour {
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalTileEntity() {
|
||||
public boolean renderAsNormalBlockEntity() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
|
@ -18,7 +18,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
||||
public abstract class BlockBreakingKineticBlockEntity extends KineticBlockEntity {
|
||||
|
||||
public static final AtomicInteger NEXT_BREAKER_ID = new AtomicInteger();
|
||||
protected int ticksUntilNextProgress;
|
||||
|
@ -26,8 +26,8 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
|||
protected int breakerId = -NEXT_BREAKER_ID.incrementAndGet();
|
||||
protected BlockPos breakingPos;
|
||||
|
||||
public BlockBreakingKineticTileEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
|
||||
super(typeIn, pos, state);
|
||||
public BlockBreakingKineticBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
||||
@Override
|
|
@ -28,7 +28,7 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
|||
public void startMoving(MovementContext context) {
|
||||
if (context.world.isClientSide)
|
||||
return;
|
||||
context.data.putInt("BreakerId", -BlockBreakingKineticTileEntity.NEXT_BREAKER_ID.incrementAndGet());
|
||||
context.data.putInt("BreakerId", -BlockBreakingKineticBlockEntity.NEXT_BREAKER_ID.incrementAndGet());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -220,7 +220,7 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
|||
|
||||
public boolean canBreak(Level world, BlockPos breakingPos, BlockState state) {
|
||||
float blockHardness = state.getDestroySpeed(world, breakingPos);
|
||||
return BlockBreakingKineticTileEntity.isBreakable(state, blockHardness);
|
||||
return BlockBreakingKineticBlockEntity.isBreakable(state, blockHardness);
|
||||
}
|
||||
|
||||
protected void onBlockBroken(MovementContext context, BlockPos pos, BlockState brokenState) {
|
||||
|
|
|
@ -10,7 +10,7 @@ import net.minecraft.world.level.block.CampfireBlock;
|
|||
|
||||
public class CampfireMovementBehaviour implements MovementBehaviour {
|
||||
@Override
|
||||
public boolean renderAsNormalTileEntity() {
|
||||
public boolean renderAsNormalBlockEntity() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ public class CampfireMovementBehaviour implements MovementBehaviour {
|
|||
|| !context.state.getValue(CampfireBlock.LIT))
|
||||
return;
|
||||
|
||||
// Mostly copied from CampfireBlock and CampfireTileEntity
|
||||
// Mostly copied from CampfireBlock and CampfireBlockEntity
|
||||
Random random = context.world.random;
|
||||
if (random.nextFloat() < 0.11F) {
|
||||
for (int i = 0; i < random.nextInt(2) + 2; ++i) {
|
||||
|
|
|
@ -2,10 +2,10 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -36,7 +36,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
|
|||
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
public class DrillBlock extends DirectionalKineticBlock implements ITE<DrillTileEntity>, SimpleWaterloggedBlock {
|
||||
public class DrillBlock extends DirectionalKineticBlock implements IBE<DrillBlockEntity>, SimpleWaterloggedBlock {
|
||||
public static DamageSource damageSourceDrill = new DamageSource("create.mechanical_drill").bypassArmor();
|
||||
|
||||
public DrillBlock(Properties properties) {
|
||||
|
@ -51,10 +51,10 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE<DrillTile
|
|||
if (!new AABB(pos).deflate(.1f)
|
||||
.intersects(entityIn.getBoundingBox()))
|
||||
return;
|
||||
withTileEntityDo(worldIn, pos, te -> {
|
||||
if (te.getSpeed() == 0)
|
||||
withBlockEntityDo(worldIn, pos, be -> {
|
||||
if (be.getSpeed() == 0)
|
||||
return;
|
||||
entityIn.hurt(damageSourceDrill, (float) getDamage(te.getSpeed()));
|
||||
entityIn.hurt(damageSourceDrill, (float) getDamage(be.getSpeed()));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -66,7 +66,7 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE<DrillTile
|
|||
@Override
|
||||
public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||
boolean isMoving) {
|
||||
withTileEntityDo(worldIn, pos, DrillTileEntity::destroyNextTick);
|
||||
withBlockEntityDo(worldIn, pos, DrillBlockEntity::destroyNextTick);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -125,12 +125,12 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE<DrillTile
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<DrillTileEntity> getTileEntityClass() {
|
||||
return DrillTileEntity.class;
|
||||
public Class<DrillBlockEntity> getBlockEntityClass() {
|
||||
return DrillBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends DrillTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.DRILL.get();
|
||||
public BlockEntityType<? extends DrillBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.DRILL.get();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,9 +4,9 @@ import net.minecraft.core.BlockPos;
|
|||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class DrillTileEntity extends BlockBreakingKineticTileEntity {
|
||||
public class DrillBlockEntity extends BlockBreakingKineticBlockEntity {
|
||||
|
||||
public DrillTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public DrillBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||
import com.jozufozu.flywheel.api.Instancer;
|
||||
import com.jozufozu.flywheel.api.MaterialManager;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
|
||||
|
||||
|
@ -13,8 +13,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|||
|
||||
public class DrillInstance extends SingleRotatingInstance {
|
||||
|
||||
public DrillInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
public DrillInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||
|
||||
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
|
@ -19,14 +19,14 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
|||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class DrillRenderer extends KineticTileEntityRenderer {
|
||||
public class DrillRenderer extends KineticBlockEntityRenderer {
|
||||
|
||||
public DrillRenderer(BlockEntityRendererProvider.Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||
protected SuperByteBuffer getRotatedModel(KineticBlockEntity be, BlockState state) {
|
||||
return CachedBufferer.partialFacing(AllBlockPartials.DRILL_HEAD, state);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
||||
public class HarvesterBlock extends AttachedActorBlock implements ITE<HarvesterTileEntity> {
|
||||
public class HarvesterBlock extends AttachedActorBlock implements IBE<HarvesterBlockEntity> {
|
||||
|
||||
public HarvesterBlock(Properties p_i48377_1_) {
|
||||
super(p_i48377_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<HarvesterTileEntity> getTileEntityClass() {
|
||||
return HarvesterTileEntity.class;
|
||||
public Class<HarvesterBlockEntity> getBlockEntityClass() {
|
||||
return HarvesterBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends HarvesterTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.HARVESTER.get();
|
||||
public BlockEntityType<? extends HarvesterBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.HARVESTER.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.CachedRenderBBTileEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.CachedRenderBBBlockEntity;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
|
||||
public class HarvesterTileEntity extends CachedRenderBBTileEntity {
|
||||
public class HarvesterBlockEntity extends CachedRenderBBBlockEntity {
|
||||
|
||||
// For simulations such as Ponder
|
||||
private float manuallyAnimatedSpeed;
|
||||
|
||||
public HarvesterTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public HarvesterBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
|
@ -8,9 +8,9 @@ import com.simibubi.create.AllBlockPartials;
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
@ -24,18 +24,18 @@ import net.minecraft.world.level.Level;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntity> {
|
||||
public class HarvesterRenderer extends SafeBlockEntityRenderer<HarvesterBlockEntity> {
|
||||
|
||||
public HarvesterRenderer(BlockEntityRendererProvider.Context context) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(HarvesterTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
protected void renderSafe(HarvesterBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light, int overlay) {
|
||||
BlockState blockState = te.getBlockState();
|
||||
BlockState blockState = be.getBlockState();
|
||||
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.HARVESTER_BLADE, blockState);
|
||||
transform(te.getLevel(), blockState.getValue(HarvesterBlock.FACING), superBuffer,
|
||||
te.getAnimatedSpeed());
|
||||
transform(be.getLevel(), blockState.getValue(HarvesterBlock.FACING), superBuffer,
|
||||
be.getAnimatedSpeed());
|
||||
superBuffer.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped()));
|
||||
}
|
||||
|
|
|
@ -6,12 +6,12 @@ import com.jozufozu.flywheel.api.instance.TickableInstance;
|
|||
import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
public class PSIInstance extends BlockEntityInstance<PortableStorageInterfaceTileEntity> implements DynamicInstance, TickableInstance {
|
||||
public class PSIInstance extends BlockEntityInstance<PortableStorageInterfaceBlockEntity> implements DynamicInstance, TickableInstance {
|
||||
|
||||
private final PIInstance instance;
|
||||
|
||||
public PSIInstance(MaterialManager materialManager, PortableStorageInterfaceTileEntity tile) {
|
||||
super(materialManager, tile);
|
||||
public PSIInstance(MaterialManager materialManager, PortableStorageInterfaceBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
|
||||
instance = new PIInstance(materialManager, blockState, getInstancePosition());
|
||||
}
|
||||
|
|
|
@ -12,11 +12,11 @@ import net.minecraftforge.fluids.FluidStack;
|
|||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.templates.FluidTank;
|
||||
|
||||
public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTileEntity {
|
||||
public class PortableFluidInterfaceBlockEntity extends PortableStorageInterfaceBlockEntity {
|
||||
|
||||
protected LazyOptional<IFluidHandler> capability;
|
||||
|
||||
public PortableFluidInterfaceTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public PortableFluidInterfaceBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
capability = createEmptyHandler();
|
||||
}
|
|
@ -13,11 +13,11 @@ import net.minecraftforge.common.util.LazyOptional;
|
|||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
|
||||
public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTileEntity {
|
||||
public class PortableItemInterfaceBlockEntity extends PortableStorageInterfaceBlockEntity {
|
||||
|
||||
protected LazyOptional<IItemHandlerModifiable> capability;
|
||||
|
||||
public PortableItemInterfaceTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public PortableItemInterfaceBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
capability = createEmptyHandler();
|
||||
}
|
|
@ -2,10 +2,10 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
import com.simibubi.create.foundation.block.WrenchableDirectionalBlock;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
|
@ -25,7 +25,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
|
|||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
public class PortableStorageInterfaceBlock extends WrenchableDirectionalBlock
|
||||
implements ITE<PortableStorageInterfaceTileEntity> {
|
||||
implements IBE<PortableStorageInterfaceBlockEntity> {
|
||||
|
||||
boolean fluids;
|
||||
|
||||
|
@ -45,7 +45,7 @@ public class PortableStorageInterfaceBlock extends WrenchableDirectionalBlock
|
|||
@Override
|
||||
public void neighborChanged(BlockState state, Level world, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_,
|
||||
boolean p_220069_6_) {
|
||||
withTileEntityDo(world, pos, PortableStorageInterfaceTileEntity::neighbourChanged);
|
||||
withBlockEntityDo(world, pos, PortableStorageInterfaceBlockEntity::neighbourChanged);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -75,19 +75,19 @@ public class PortableStorageInterfaceBlock extends WrenchableDirectionalBlock
|
|||
|
||||
@Override
|
||||
public int getAnalogOutputSignal(BlockState blockState, Level worldIn, BlockPos pos) {
|
||||
return getTileEntityOptional(worldIn, pos).map(te -> te.isConnected() ? 15 : 0)
|
||||
return getBlockEntityOptional(worldIn, pos).map(be -> be.isConnected() ? 15 : 0)
|
||||
.orElse(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<PortableStorageInterfaceTileEntity> getTileEntityClass() {
|
||||
return PortableStorageInterfaceTileEntity.class;
|
||||
public Class<PortableStorageInterfaceBlockEntity> getBlockEntityClass() {
|
||||
return PortableStorageInterfaceBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends PortableStorageInterfaceTileEntity> getTileEntityType() {
|
||||
return fluids ? AllTileEntities.PORTABLE_FLUID_INTERFACE.get()
|
||||
: AllTileEntities.PORTABLE_STORAGE_INTERFACE.get();
|
||||
public BlockEntityType<? extends PortableStorageInterfaceBlockEntity> getBlockEntityType() {
|
||||
return fluids ? AllBlockEntityTypes.PORTABLE_FLUID_INTERFACE.get()
|
||||
: AllBlockEntityTypes.PORTABLE_STORAGE_INTERFACE.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,9 +5,9 @@ import java.util.List;
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -18,7 +18,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
|
||||
public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity {
|
||||
public abstract class PortableStorageInterfaceBlockEntity extends SmartBlockEntity {
|
||||
|
||||
public static final int ANIMATION = 4;
|
||||
protected int transferTimer;
|
||||
|
@ -29,7 +29,7 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
|
|||
|
||||
public int keepAlive = 0;
|
||||
|
||||
public PortableStorageInterfaceTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public PortableStorageInterfaceBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
transferTimer = 0;
|
||||
connectionAnimation = LerpedFloat.linear()
|
||||
|
@ -195,7 +195,7 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
registerAwardables(behaviours, AllAdvancements.PSI);
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ public class PortableStorageInterfaceMovement implements MovementBehaviour {
|
|||
if (!currentFacingIfValid.isPresent())
|
||||
return;
|
||||
|
||||
PortableStorageInterfaceTileEntity stationaryInterface =
|
||||
PortableStorageInterfaceBlockEntity stationaryInterface =
|
||||
getStationaryInterfaceAt(context.world, pos, context.state, currentFacingIfValid.get());
|
||||
if (stationaryInterface == null) {
|
||||
reset(context);
|
||||
|
@ -108,7 +108,7 @@ public class PortableStorageInterfaceMovement implements MovementBehaviour {
|
|||
if (stationaryInterface.connectedEntity == null)
|
||||
stationaryInterface.startTransferringTo(context.contraption, stationaryInterface.distance);
|
||||
|
||||
boolean timerBelow = stationaryInterface.transferTimer <= PortableStorageInterfaceTileEntity.ANIMATION;
|
||||
boolean timerBelow = stationaryInterface.transferTimer <= PortableStorageInterfaceBlockEntity.ANIMATION;
|
||||
stationaryInterface.keepAlive = 2;
|
||||
if (context.stall && timerBelow) {
|
||||
context.stall = false;
|
||||
|
@ -123,7 +123,7 @@ public class PortableStorageInterfaceMovement implements MovementBehaviour {
|
|||
return false;
|
||||
|
||||
Direction currentFacing = currentFacingIfValid.get();
|
||||
PortableStorageInterfaceTileEntity psi =
|
||||
PortableStorageInterfaceBlockEntity psi =
|
||||
findStationaryInterface(context.world, pos, context.state, currentFacing);
|
||||
|
||||
if (psi == null)
|
||||
|
@ -165,10 +165,10 @@ public class PortableStorageInterfaceMovement implements MovementBehaviour {
|
|||
getAnimation(context).chase(0, 0.25f, Chaser.LINEAR);
|
||||
}
|
||||
|
||||
private PortableStorageInterfaceTileEntity findStationaryInterface(Level world, BlockPos pos, BlockState state,
|
||||
private PortableStorageInterfaceBlockEntity findStationaryInterface(Level world, BlockPos pos, BlockState state,
|
||||
Direction facing) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
PortableStorageInterfaceTileEntity interfaceAt =
|
||||
PortableStorageInterfaceBlockEntity interfaceAt =
|
||||
getStationaryInterfaceAt(world, pos.relative(facing, i), state, facing);
|
||||
if (interfaceAt == null)
|
||||
continue;
|
||||
|
@ -177,10 +177,10 @@ public class PortableStorageInterfaceMovement implements MovementBehaviour {
|
|||
return null;
|
||||
}
|
||||
|
||||
private PortableStorageInterfaceTileEntity getStationaryInterfaceAt(Level world, BlockPos pos, BlockState state,
|
||||
private PortableStorageInterfaceBlockEntity getStationaryInterfaceAt(Level world, BlockPos pos, BlockState state,
|
||||
Direction facing) {
|
||||
BlockEntity te = world.getBlockEntity(pos);
|
||||
if (!(te instanceof PortableStorageInterfaceTileEntity psi))
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof PortableStorageInterfaceBlockEntity psi))
|
||||
return null;
|
||||
BlockState blockState = world.getBlockState(pos);
|
||||
if (blockState.getBlock() != state.getBlock())
|
||||
|
|
|
@ -12,9 +12,9 @@ import com.simibubi.create.AllBlocks;
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
|
@ -28,20 +28,20 @@ import net.minecraft.nbt.NbtUtils;
|
|||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<PortableStorageInterfaceTileEntity> {
|
||||
public class PortableStorageInterfaceRenderer extends SafeBlockEntityRenderer<PortableStorageInterfaceBlockEntity> {
|
||||
|
||||
public PortableStorageInterfaceRenderer(BlockEntityRendererProvider.Context context) {}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(PortableStorageInterfaceTileEntity te, float partialTicks, PoseStack ms,
|
||||
protected void renderSafe(PortableStorageInterfaceBlockEntity be, float partialTicks, PoseStack ms,
|
||||
MultiBufferSource buffer, int light, int overlay) {
|
||||
if (Backend.canUseInstancing(te.getLevel()))
|
||||
if (Backend.canUseInstancing(be.getLevel()))
|
||||
return;
|
||||
|
||||
BlockState blockState = te.getBlockState();
|
||||
float progress = te.getExtensionDistance(partialTicks);
|
||||
BlockState blockState = be.getBlockState();
|
||||
float progress = be.getExtensionDistance(partialTicks);
|
||||
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
|
||||
render(blockState, te.isConnected(), progress, null, sbb -> sbb.light(light)
|
||||
render(blockState, be.isConnected(), progress, null, sbb -> sbb.light(light)
|
||||
.renderInto(ms, vb));
|
||||
}
|
||||
|
||||
|
@ -86,14 +86,14 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
|
|||
.unCentre();
|
||||
}
|
||||
|
||||
static PortableStorageInterfaceTileEntity getTargetPSI(MovementContext context) {
|
||||
static PortableStorageInterfaceBlockEntity getTargetPSI(MovementContext context) {
|
||||
String _workingPos_ = PortableStorageInterfaceMovement._workingPos_;
|
||||
if (!context.data.contains(_workingPos_))
|
||||
return null;
|
||||
|
||||
BlockPos pos = NbtUtils.readBlockPos(context.data.getCompound(_workingPos_));
|
||||
BlockEntity tileEntity = context.world.getBlockEntity(pos);
|
||||
if (!(tileEntity instanceof PortableStorageInterfaceTileEntity psi))
|
||||
BlockEntity blockEntity = context.world.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof PortableStorageInterfaceBlockEntity psi))
|
||||
return null;
|
||||
|
||||
if (!psi.isTransferring())
|
||||
|
|
|
@ -4,8 +4,8 @@ import java.util.Optional;
|
|||
|
||||
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawBlock;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
|
||||
import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue;
|
||||
|
@ -59,7 +59,7 @@ public class SawMovementBehaviour extends BlockBreakingMovementBehaviour {
|
|||
|
||||
@Override
|
||||
public boolean canBreak(Level world, BlockPos breakingPos, BlockState state) {
|
||||
return super.canBreak(world, breakingPos, state) && SawTileEntity.isSawable(state);
|
||||
return super.canBreak(world, breakingPos, state) && SawBlockEntity.isSawable(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors.controls;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.ControlsBlock;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
|
@ -19,7 +19,7 @@ import net.minecraft.world.phys.BlockHitResult;
|
|||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class ContraptionControlsBlock extends ControlsBlock implements ITE<ContraptionControlsTileEntity> {
|
||||
public class ContraptionControlsBlock extends ControlsBlock implements IBE<ContraptionControlsBlockEntity> {
|
||||
|
||||
public ContraptionControlsBlock(Properties pProperties) {
|
||||
super(pProperties);
|
||||
|
@ -28,12 +28,12 @@ public class ContraptionControlsBlock extends ControlsBlock implements ITE<Contr
|
|||
@Override
|
||||
public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand,
|
||||
BlockHitResult pHit) {
|
||||
return onTileEntityUse(pLevel, pPos, cte -> {
|
||||
return onBlockEntityUse(pLevel, pPos, cte -> {
|
||||
cte.pressButton();
|
||||
cte.disabled = !cte.disabled;
|
||||
cte.notifyUpdate();
|
||||
if (!pLevel.isClientSide()) {
|
||||
ContraptionControlsTileEntity.sendStatus(pPlayer, cte.filtering.getFilter(), !cte.disabled);
|
||||
ContraptionControlsBlockEntity.sendStatus(pPlayer, cte.filtering.getFilter(), !cte.disabled);
|
||||
AllSoundEvents.CONTROLLER_CLICK.play(cte.getLevel(), null, cte.getBlockPos(), 1,
|
||||
cte.disabled ? 0.8f : 1.5f);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class ContraptionControlsBlock extends ControlsBlock implements ITE<Contr
|
|||
@Override
|
||||
public void neighborChanged(BlockState pState, Level pLevel, BlockPos pPos, Block pBlock, BlockPos pFromPos,
|
||||
boolean pIsMoving) {
|
||||
withTileEntityDo(pLevel, pPos, ContraptionControlsTileEntity::updatePoweredState);
|
||||
withBlockEntityDo(pLevel, pPos, ContraptionControlsBlockEntity::updatePoweredState);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -53,13 +53,13 @@ public class ContraptionControlsBlock extends ControlsBlock implements ITE<Contr
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<ContraptionControlsTileEntity> getTileEntityClass() {
|
||||
return ContraptionControlsTileEntity.class;
|
||||
public Class<ContraptionControlsBlockEntity> getBlockEntityClass() {
|
||||
return ContraptionControlsBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends ContraptionControlsTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.CONTRAPTION_CONTROLS.get();
|
||||
public BlockEntityType<? extends ContraptionControlsBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.CONTRAPTION_CONTROLS.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@ import java.util.List;
|
|||
import com.jozufozu.flywheel.util.transform.TransformStack;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.ControlsBlock;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.DyeHelper;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
@ -28,7 +28,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class ContraptionControlsTileEntity extends SmartTileEntity {
|
||||
public class ContraptionControlsBlockEntity extends SmartBlockEntity {
|
||||
|
||||
public FilteringBehaviour filtering;
|
||||
public boolean disabled;
|
||||
|
@ -37,7 +37,7 @@ public class ContraptionControlsTileEntity extends SmartTileEntity {
|
|||
public LerpedFloat indicator;
|
||||
public LerpedFloat button;
|
||||
|
||||
public ContraptionControlsTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public ContraptionControlsBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
indicator = LerpedFloat.angular()
|
||||
.startWithValue(0);
|
||||
|
@ -47,7 +47,7 @@ public class ContraptionControlsTileEntity extends SmartTileEntity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
behaviours.add(filtering = new FilteringBehaviour(this, new ControlsSlot()).moveText(new Vec3(-30, 20, 10)));
|
||||
}
|
||||
|
|
@ -29,15 +29,15 @@ public class ContraptionControlsMovement implements MovementBehaviour {
|
|||
|
||||
@Override
|
||||
public void startMoving(MovementContext context) {
|
||||
if (context.contraption instanceof ElevatorContraption && context.tileData != null)
|
||||
context.tileData.remove("Filter");
|
||||
if (context.contraption instanceof ElevatorContraption && context.blockEntityData != null)
|
||||
context.blockEntityData.remove("Filter");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopMoving(MovementContext context) {
|
||||
ItemStack filter = getFilter(context);
|
||||
if (filter != null)
|
||||
context.tileData.putBoolean("Disabled", context.contraption.isActorTypeDisabled(filter)
|
||||
context.blockEntityData.putBoolean("Disabled", context.contraption.isActorTypeDisabled(filter)
|
||||
|| context.contraption.isActorTypeDisabled(ItemStack.EMPTY));
|
||||
}
|
||||
|
||||
|
@ -48,14 +48,14 @@ public class ContraptionControlsMovement implements MovementBehaviour {
|
|||
}
|
||||
|
||||
public static ItemStack getFilter(MovementContext ctx) {
|
||||
CompoundTag tileData = ctx.tileData;
|
||||
if (tileData == null)
|
||||
CompoundTag blockEntityData = ctx.blockEntityData;
|
||||
if (blockEntityData == null)
|
||||
return null;
|
||||
return ItemStack.of(tileData.getCompound("Filter"));
|
||||
return ItemStack.of(blockEntityData.getCompound("Filter"));
|
||||
}
|
||||
|
||||
public static boolean isDisabledInitially(MovementContext ctx) {
|
||||
return ctx.tileData != null && ctx.tileData.getBoolean("Disabled");
|
||||
return ctx.blockEntityData != null && ctx.blockEntityData.getBoolean("Disabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -65,15 +65,15 @@ public class ContraptionControlsMovement implements MovementBehaviour {
|
|||
|
||||
Contraption contraption = ctx.contraption;
|
||||
if (!(contraption instanceof ElevatorContraption ec)) {
|
||||
if (!(contraption.presentTileEntities.get(ctx.localPos)instanceof ContraptionControlsTileEntity cte))
|
||||
if (!(contraption.presentBlockEntities.get(ctx.localPos) instanceof ContraptionControlsBlockEntity cbe))
|
||||
return;
|
||||
ItemStack filter = getFilter(ctx);
|
||||
int value =
|
||||
contraption.isActorTypeDisabled(filter) || contraption.isActorTypeDisabled(ItemStack.EMPTY) ? 4 * 45
|
||||
: 0;
|
||||
cte.indicator.setValue(value);
|
||||
cte.indicator.updateChaseTarget(value);
|
||||
cte.tickAnimations();
|
||||
cbe.indicator.setValue(value);
|
||||
cbe.indicator.updateChaseTarget(value);
|
||||
cbe.tickAnimations();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -83,15 +83,15 @@ public class ContraptionControlsMovement implements MovementBehaviour {
|
|||
ElevatorFloorSelection efs = (ElevatorFloorSelection) ctx.temporaryData;
|
||||
tickFloorSelection(efs, ec);
|
||||
|
||||
if (!(contraption.presentTileEntities.get(ctx.localPos)instanceof ContraptionControlsTileEntity cte))
|
||||
if (!(contraption.presentBlockEntities.get(ctx.localPos) instanceof ContraptionControlsBlockEntity cbe))
|
||||
return;
|
||||
|
||||
cte.tickAnimations();
|
||||
cbe.tickAnimations();
|
||||
|
||||
int currentY = (int) Math.round(contraption.entity.getY() + ec.getContactYOffset());
|
||||
boolean atTargetY = ec.clientYTarget == currentY;
|
||||
|
||||
LerpedFloat indicator = cte.indicator;
|
||||
LerpedFloat indicator = cbe.indicator;
|
||||
float currentIndicator = indicator.getChaseTarget();
|
||||
boolean below = atTargetY ? currentIndicator > 0 : ec.clientYTarget <= currentY;
|
||||
|
||||
|
@ -99,7 +99,7 @@ public class ContraptionControlsMovement implements MovementBehaviour {
|
|||
int startingPoint = below ? 181 : -181;
|
||||
indicator.setValue(startingPoint);
|
||||
indicator.updateChaseTarget(startingPoint);
|
||||
cte.tickAnimations();
|
||||
cbe.tickAnimations();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@ public class ContraptionControlsMovement implements MovementBehaviour {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalTileEntity() {
|
||||
public boolean renderAsNormalBlockEntity() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ public class ContraptionControlsMovingInteraction extends MovingInteractionBehav
|
|||
if (contraption instanceof ElevatorContraption ec)
|
||||
return elevatorInteraction(localPos, contraptionEntity, ec, ctx);
|
||||
if (contraptionEntity.level.isClientSide()) {
|
||||
if (contraption.presentTileEntities.get(ctx.localPos)instanceof ContraptionControlsTileEntity cte)
|
||||
if (contraption.presentBlockEntities.get(ctx.localPos)instanceof ContraptionControlsBlockEntity cte)
|
||||
cte.pressButton();
|
||||
return true;
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ public class ContraptionControlsMovingInteraction extends MovingInteractionBehav
|
|||
disabledActors.add(filter);
|
||||
|
||||
contraption.setActorsActive(filter, !disable);
|
||||
ContraptionControlsTileEntity.sendStatus(player, filter, !disable);
|
||||
ContraptionControlsBlockEntity.sendStatus(player, filter, !disable);
|
||||
send(contraptionEntity, filter, disable);
|
||||
|
||||
AllSoundEvents.CONTROLLER_CLICK.play(player.level, null,
|
||||
|
@ -119,7 +119,7 @@ public class ContraptionControlsMovingInteraction extends MovingInteractionBehav
|
|||
return false;
|
||||
|
||||
AllPackets.channel.sendToServer(new ElevatorTargetFloorPacket(contraptionEntity, efs.currentTargetY));
|
||||
if (contraption.presentTileEntities.get(ctx.localPos)instanceof ContraptionControlsTileEntity cte)
|
||||
if (contraption.presentBlockEntities.get(ctx.localPos)instanceof ContraptionControlsBlockEntity cte)
|
||||
cte.pressButton();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -12,8 +12,8 @@ import com.simibubi.create.content.contraptions.components.actors.controls.Contr
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
|
||||
import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer;
|
||||
import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.Color;
|
||||
|
@ -33,7 +33,7 @@ import net.minecraft.world.item.DyeColor;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class ContraptionControlsRenderer extends SmartTileEntityRenderer<ContraptionControlsTileEntity> {
|
||||
public class ContraptionControlsRenderer extends SmartBlockEntityRenderer<ContraptionControlsBlockEntity> {
|
||||
|
||||
private static Random r = new Random();
|
||||
|
||||
|
@ -42,17 +42,17 @@ public class ContraptionControlsRenderer extends SmartTileEntityRenderer<Contrap
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(ContraptionControlsTileEntity tileEntityIn, float pt, PoseStack ms,
|
||||
protected void renderSafe(ContraptionControlsBlockEntity blockEntity, float pt, PoseStack ms,
|
||||
MultiBufferSource buffer, int light, int overlay) {
|
||||
BlockState blockState = tileEntityIn.getBlockState();
|
||||
BlockState blockState = blockEntity.getBlockState();
|
||||
Direction facing = blockState.getValue(ContraptionControlsBlock.FACING)
|
||||
.getOpposite();
|
||||
Vec3 buttonAxis = VecHelper.rotate(new Vec3(0, 1, -.325), AngleHelper.horizontalAngle(facing), Axis.Y)
|
||||
.scale(-1 / 24f * tileEntityIn.button.getValue(pt));
|
||||
.scale(-1 / 24f * blockEntity.button.getValue(pt));
|
||||
|
||||
ms.pushPose();
|
||||
ms.translate(buttonAxis.x, buttonAxis.y, buttonAxis.z);
|
||||
super.renderSafe(tileEntityIn, pt, ms, buffer, light, overlay);
|
||||
super.renderSafe(blockEntity, pt, ms, buffer, light, overlay);
|
||||
|
||||
VertexConsumer vc = buffer.getBuffer(RenderType.solid());
|
||||
CachedBufferer.partialFacing(AllBlockPartials.CONTRAPTION_CONTROLS_BUTTON, blockState, facing)
|
||||
|
@ -61,7 +61,7 @@ public class ContraptionControlsRenderer extends SmartTileEntityRenderer<Contrap
|
|||
|
||||
ms.popPose();
|
||||
|
||||
int i = (((int) tileEntityIn.indicator.getValue(pt) / 45) % 8) + 8;
|
||||
int i = (((int) blockEntity.indicator.getValue(pt) / 45) % 8) + 8;
|
||||
CachedBufferer.partialFacing(AllBlockPartials.CONTRAPTION_CONTROLS_INDICATOR.get(i % 8), blockState, facing)
|
||||
.light(light)
|
||||
.renderInto(ms, vc);
|
||||
|
@ -101,7 +101,7 @@ public class ContraptionControlsRenderer extends SmartTileEntityRenderer<Contrap
|
|||
msr.rotate(Direction.WEST, AngleHelper.rad(67.5f));
|
||||
|
||||
float buttondepth = -.25f;
|
||||
if (ctx.contraption.presentTileEntities.get(ctx.localPos)instanceof ContraptionControlsTileEntity cte)
|
||||
if (ctx.contraption.presentBlockEntities.get(ctx.localPos)instanceof ContraptionControlsBlockEntity cte)
|
||||
buttondepth += -1 / 24f * cte.button.getValue(AnimationTickHolder.getPartialTicks(renderWorld));
|
||||
|
||||
if (!text.isBlank() && playerDistance < 100) {
|
||||
|
|
|
@ -79,7 +79,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour {
|
|||
return;
|
||||
}
|
||||
} catch (NullPointerException ignored) {
|
||||
itemStack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack
|
||||
itemStack = backup; // Something went wrong with the BE being null in ContraptionBlockSource, reset the stack
|
||||
}
|
||||
|
||||
setItemStackAt(location, DEFAULT_BEHAVIOUR.dispense(itemStack, context, pos), context); // the default: launch the item
|
||||
|
|
|
@ -50,7 +50,7 @@ public class DropperMovementBehaviour implements MovementBehaviour {
|
|||
private void updateTemporaryData(MovementContext context) {
|
||||
if (!(context.temporaryData instanceof NonNullList) && context.world != null) {
|
||||
NonNullList<ItemStack> stacks = NonNullList.withSize(getInvSize(), ItemStack.EMPTY);
|
||||
ContainerHelper.loadAllItems(context.tileData, stacks);
|
||||
ContainerHelper.loadAllItems(context.blockEntityData, stacks);
|
||||
context.temporaryData = stacks;
|
||||
}
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ public class DropperMovementBehaviour implements MovementBehaviour {
|
|||
NonNullList<ItemStack> stacks = getStacks(context);
|
||||
if (stacks == null)
|
||||
return;
|
||||
ContainerHelper.saveAllItems(context.tileData, stacks);
|
||||
ContainerHelper.saveAllItems(context.blockEntityData, stacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -20,12 +20,12 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp
|
|||
double x = pos.getX() + facing.x * .7 + .5;
|
||||
double y = pos.getY() + facing.y * .7 + .5;
|
||||
double z = pos.getZ() + facing.z * .7 + .5;
|
||||
Projectile ProjectileEntity = this.getProjectileEntity(context.world, x, y, z, itemStack.copy());
|
||||
if (ProjectileEntity == null)
|
||||
Projectile projectile = this.getProjectileEntity(context.world, x, y, z, itemStack.copy());
|
||||
if (projectile == null)
|
||||
return itemStack;
|
||||
Vec3 effectiveMovementVec = facing.scale(getProjectileVelocity()).add(context.motion);
|
||||
ProjectileEntity.shoot(effectiveMovementVec.x, effectiveMovementVec.y, effectiveMovementVec.z, (float) effectiveMovementVec.length(), this.getProjectileInaccuracy());
|
||||
context.world.addFreshEntity(ProjectileEntity);
|
||||
projectile.shoot(effectiveMovementVec.x, effectiveMovementVec.y, effectiveMovementVec.z, (float) effectiveMovementVec.length(), this.getProjectileInaccuracy());
|
||||
context.world.addFreshEntity(projectile);
|
||||
itemStack.shrink(1);
|
||||
return itemStack;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package com.simibubi.create.content.contraptions.components.clock;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
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 com.simibubi.create.foundation.block.IBE;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -21,7 +21,7 @@ import net.minecraft.world.level.pathfinder.PathComputationType;
|
|||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class CuckooClockBlock extends HorizontalKineticBlock implements ITE<CuckooClockTileEntity> {
|
||||
public class CuckooClockBlock extends HorizontalKineticBlock implements IBE<CuckooClockBlockEntity> {
|
||||
|
||||
private boolean mysterious;
|
||||
|
||||
|
@ -79,13 +79,13 @@ public class CuckooClockBlock extends HorizontalKineticBlock implements ITE<Cuck
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<CuckooClockTileEntity> getTileEntityClass() {
|
||||
return CuckooClockTileEntity.class;
|
||||
public Class<CuckooClockBlockEntity> getBlockEntityClass() {
|
||||
return CuckooClockBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends CuckooClockTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.CUCKOO_CLOCK.get();
|
||||
public BlockEntityType<? extends CuckooClockBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.CUCKOO_CLOCK.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,9 +2,9 @@ package com.simibubi.create.content.contraptions.components.clock;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
@ -24,7 +24,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class CuckooClockTileEntity extends KineticTileEntity {
|
||||
public class CuckooClockBlockEntity extends KineticBlockEntity {
|
||||
|
||||
public static DamageSource CUCKOO_SURPRISE = new DamageSource("create.cuckoo_clock_explosion").setExplosion();
|
||||
|
||||
|
@ -38,13 +38,13 @@ public class CuckooClockTileEntity extends KineticTileEntity {
|
|||
PIG, CREEPER, SURPRISE, NONE;
|
||||
}
|
||||
|
||||
public CuckooClockTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public CuckooClockBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
animationType = Animation.NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
registerAwardables(behaviours, AllAdvancements.CUCKOO_CLOCK);
|
||||
}
|
|
@ -4,9 +4,9 @@ import com.jozufozu.flywheel.core.PartialModel;
|
|||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity.Animation;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlockEntity.Animation;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
|
@ -18,21 +18,21 @@ import net.minecraft.core.Direction;
|
|||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class CuckooClockRenderer extends KineticTileEntityRenderer {
|
||||
public class CuckooClockRenderer extends KineticBlockEntityRenderer {
|
||||
|
||||
public CuckooClockRenderer(BlockEntityRendererProvider.Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
protected void renderSafe(KineticBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light, int overlay) {
|
||||
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
|
||||
if (!(te instanceof CuckooClockTileEntity))
|
||||
super.renderSafe(be, partialTicks, ms, buffer, light, overlay);
|
||||
if (!(be instanceof CuckooClockBlockEntity))
|
||||
return;
|
||||
|
||||
CuckooClockTileEntity clock = (CuckooClockTileEntity) te;
|
||||
BlockState blockState = te.getBlockState();
|
||||
CuckooClockBlockEntity clock = (CuckooClockBlockEntity) be;
|
||||
BlockState blockState = be.getBlockState();
|
||||
Direction direction = blockState.getValue(CuckooClockBlock.HORIZONTAL_FACING);
|
||||
|
||||
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
|
||||
|
@ -90,7 +90,7 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||
protected SuperByteBuffer getRotatedModel(KineticBlockEntity be, BlockState state) {
|
||||
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, state, state
|
||||
.getValue(CuckooClockBlock.HORIZONTAL_FACING)
|
||||
.getOpposite());
|
||||
|
|
|
@ -53,8 +53,8 @@ public class ConnectedInputHandler {
|
|||
}
|
||||
|
||||
public static void toggleConnection(Level world, BlockPos pos, BlockPos pos2) {
|
||||
MechanicalCrafterTileEntity crafter1 = CrafterHelper.getCrafter(world, pos);
|
||||
MechanicalCrafterTileEntity crafter2 = CrafterHelper.getCrafter(world, pos2);
|
||||
MechanicalCrafterBlockEntity crafter1 = CrafterHelper.getCrafter(world, pos);
|
||||
MechanicalCrafterBlockEntity crafter2 = CrafterHelper.getCrafter(world, pos2);
|
||||
|
||||
if (crafter1 == null || crafter2 == null)
|
||||
return;
|
||||
|
@ -65,7 +65,7 @@ public class ConnectedInputHandler {
|
|||
.offset(crafter2.input.data.get(0));
|
||||
|
||||
if (controllerPos1.equals(controllerPos2)) {
|
||||
MechanicalCrafterTileEntity controller = CrafterHelper.getCrafter(world, controllerPos1);
|
||||
MechanicalCrafterBlockEntity controller = CrafterHelper.getCrafter(world, controllerPos1);
|
||||
|
||||
Set<BlockPos> positions = controller.input.data.stream()
|
||||
.map(controllerPos1::offset)
|
||||
|
@ -114,7 +114,7 @@ public class ConnectedInputHandler {
|
|||
crafter2.connectivityChanged();
|
||||
}
|
||||
|
||||
public static void initAndAddAll(Level world, MechanicalCrafterTileEntity crafter, Collection<BlockPos> positions) {
|
||||
public static void initAndAddAll(Level world, MechanicalCrafterBlockEntity crafter, Collection<BlockPos> positions) {
|
||||
crafter.input = new ConnectedInput();
|
||||
positions.forEach(splitPos -> {
|
||||
modifyAndUpdate(world, splitPos, input -> {
|
||||
|
@ -124,8 +124,8 @@ public class ConnectedInputHandler {
|
|||
});
|
||||
}
|
||||
|
||||
public static void connectControllers(Level world, MechanicalCrafterTileEntity crafter1,
|
||||
MechanicalCrafterTileEntity crafter2) {
|
||||
public static void connectControllers(Level world, MechanicalCrafterBlockEntity crafter1,
|
||||
MechanicalCrafterBlockEntity crafter2) {
|
||||
|
||||
crafter1.input.data.forEach(offset -> {
|
||||
BlockPos connectedPos = crafter1.getBlockPos()
|
||||
|
@ -150,11 +150,11 @@ public class ConnectedInputHandler {
|
|||
}
|
||||
|
||||
private static void modifyAndUpdate(Level world, BlockPos pos, Consumer<ConnectedInput> callback) {
|
||||
BlockEntity te = world.getBlockEntity(pos);
|
||||
if (!(te instanceof MechanicalCrafterTileEntity))
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof MechanicalCrafterBlockEntity))
|
||||
return;
|
||||
|
||||
MechanicalCrafterTileEntity crafter = (MechanicalCrafterTileEntity) te;
|
||||
MechanicalCrafterBlockEntity crafter = (MechanicalCrafterBlockEntity) blockEntity;
|
||||
callback.accept(crafter.input);
|
||||
crafter.setChanged();
|
||||
crafter.connectivityChanged();
|
||||
|
|
|
@ -6,15 +6,15 @@ import net.minecraft.world.level.block.entity.BlockEntity;
|
|||
|
||||
public class CrafterHelper {
|
||||
|
||||
public static MechanicalCrafterTileEntity getCrafter(BlockAndTintGetter reader, BlockPos pos) {
|
||||
BlockEntity te = reader.getBlockEntity(pos);
|
||||
if (!(te instanceof MechanicalCrafterTileEntity))
|
||||
public static MechanicalCrafterBlockEntity getCrafter(BlockAndTintGetter reader, BlockPos pos) {
|
||||
BlockEntity blockEntity = reader.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof MechanicalCrafterBlockEntity))
|
||||
return null;
|
||||
return (MechanicalCrafterTileEntity) te;
|
||||
return (MechanicalCrafterBlockEntity) blockEntity;
|
||||
}
|
||||
|
||||
public static ConnectedInputHandler.ConnectedInput getInput(BlockAndTintGetter reader, BlockPos pos) {
|
||||
MechanicalCrafterTileEntity crafter = getCrafter(reader, pos);
|
||||
MechanicalCrafterBlockEntity crafter = getCrafter(reader, pos);
|
||||
return crafter == null ? null : crafter.input;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
package com.simibubi.create.content.contraptions.components.crafter;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.ConnectedInputHandler.ConnectedInput;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity.Phase;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlockEntity.Phase;
|
||||
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
|
@ -42,7 +42,7 @@ import net.minecraftforge.items.ItemHandlerHelper;
|
|||
import net.minecraftforge.items.ItemStackHandler;
|
||||
|
||||
public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
||||
implements ITE<MechanicalCrafterTileEntity>, ICogWheel {
|
||||
implements IBE<MechanicalCrafterBlockEntity>, ICogWheel {
|
||||
|
||||
public static final EnumProperty<Pointing> POINTING = EnumProperty.create("pointing", Pointing.class);
|
||||
|
||||
|
@ -89,14 +89,14 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
|||
public void onRemove(BlockState state, Level worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||
if (state.getBlock() == newState.getBlock()) {
|
||||
if (getTargetDirection(state) != getTargetDirection(newState)) {
|
||||
MechanicalCrafterTileEntity crafter = CrafterHelper.getCrafter(worldIn, pos);
|
||||
MechanicalCrafterBlockEntity crafter = CrafterHelper.getCrafter(worldIn, pos);
|
||||
if (crafter != null)
|
||||
crafter.blockChanged();
|
||||
}
|
||||
}
|
||||
|
||||
if (state.hasBlockEntity() && !state.is(newState.getBlock())) {
|
||||
MechanicalCrafterTileEntity crafter = CrafterHelper.getCrafter(worldIn, pos);
|
||||
MechanicalCrafterBlockEntity crafter = CrafterHelper.getCrafter(worldIn, pos);
|
||||
if (crafter != null) {
|
||||
if (crafter.covered)
|
||||
Block.popResource(worldIn, pos, AllItems.CRAFTER_SLOT_COVER.asStack());
|
||||
|
@ -145,7 +145,7 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
|||
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
|
||||
if (context.getClickedFace() == state.getValue(HORIZONTAL_FACING)) {
|
||||
if (!context.getLevel().isClientSide)
|
||||
KineticTileEntity.switchToBlockState(context.getLevel(), context.getClickedPos(),
|
||||
KineticBlockEntity.switchToBlockState(context.getLevel(), context.getClickedPos(),
|
||||
state.cycle(POINTING));
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
@ -156,8 +156,8 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
|||
@Override
|
||||
public InteractionResult use(BlockState state, Level worldIn, BlockPos pos, Player player, InteractionHand handIn,
|
||||
BlockHitResult hit) {
|
||||
BlockEntity te = worldIn.getBlockEntity(pos);
|
||||
if (!(te instanceof MechanicalCrafterTileEntity crafter))
|
||||
BlockEntity blockEntity = worldIn.getBlockEntity(pos);
|
||||
if (!(blockEntity instanceof MechanicalCrafterBlockEntity crafter))
|
||||
return InteractionResult.PASS;
|
||||
|
||||
ItemStack heldItem = player.getItemInHand(handIn);
|
||||
|
@ -236,7 +236,7 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
|||
@Override
|
||||
public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||
boolean isMoving) {
|
||||
InvManipulationBehaviour behaviour = TileEntityBehaviour.get(worldIn, pos, InvManipulationBehaviour.TYPE);
|
||||
InvManipulationBehaviour behaviour = BlockEntityBehaviour.get(worldIn, pos, InvManipulationBehaviour.TYPE);
|
||||
if (behaviour != null)
|
||||
behaviour.onNeighborChanged(fromPos);
|
||||
}
|
||||
|
@ -279,13 +279,13 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<MechanicalCrafterTileEntity> getTileEntityClass() {
|
||||
return MechanicalCrafterTileEntity.class;
|
||||
public Class<MechanicalCrafterBlockEntity> getBlockEntityClass() {
|
||||
return MechanicalCrafterBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends MechanicalCrafterTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.MECHANICAL_CRAFTER.get();
|
||||
public BlockEntityType<? extends MechanicalCrafterBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.MECHANICAL_CRAFTER.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,15 +12,15 @@ import org.apache.commons.lang3.tuple.Pair;
|
|||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.ConnectedInputHandler.ConnectedInput;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHandler.GroupedItems;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.edgeInteraction.EdgeInteractionBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.item.SmartInventory;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.edgeInteraction.EdgeInteractionBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.utility.BlockFace;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
@ -43,7 +43,7 @@ import net.minecraftforge.common.capabilities.Capability;
|
|||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
||||
public class MechanicalCrafterBlockEntity extends KineticBlockEntity {
|
||||
|
||||
enum Phase {
|
||||
IDLE, ACCEPTING, ASSEMBLING, EXPORTING, WAITING, CRAFTING, INSERTING;
|
||||
|
@ -51,30 +51,30 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
|
||||
public static class Inventory extends SmartInventory {
|
||||
|
||||
private MechanicalCrafterTileEntity te;
|
||||
private MechanicalCrafterBlockEntity blockEntity;
|
||||
|
||||
public Inventory(MechanicalCrafterTileEntity te) {
|
||||
super(1, te, 1, false);
|
||||
this.te = te;
|
||||
public Inventory(MechanicalCrafterBlockEntity blockEntity) {
|
||||
super(1, blockEntity, 1, false);
|
||||
this.blockEntity = blockEntity;
|
||||
forbidExtraction();
|
||||
whenContentsChanged(slot -> {
|
||||
if (getItem(slot).isEmpty())
|
||||
return;
|
||||
if (te.phase == Phase.IDLE)
|
||||
te.checkCompletedRecipe(false);
|
||||
if (blockEntity.phase == Phase.IDLE)
|
||||
blockEntity.checkCompletedRecipe(false);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
||||
if (te.phase != Phase.IDLE)
|
||||
if (blockEntity.phase != Phase.IDLE)
|
||||
return stack;
|
||||
if (te.covered)
|
||||
if (blockEntity.covered)
|
||||
return stack;
|
||||
ItemStack insertItem = super.insertItem(slot, stack, simulate);
|
||||
if (insertItem.getCount() != stack.getCount() && !simulate)
|
||||
te.getLevel()
|
||||
.playSound(null, te.getBlockPos(), SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, .25f, .5f);
|
||||
blockEntity.getLevel()
|
||||
.playSound(null, blockEntity.getBlockPos(), SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, .25f, .5f);
|
||||
return insertItem;
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
|
||||
private ItemStack scriptedResult = ItemStack.EMPTY;
|
||||
|
||||
public MechanicalCrafterTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public MechanicalCrafterBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
setLazyTickRate(20);
|
||||
phase = Phase.IDLE;
|
||||
|
@ -109,7 +109,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
inserting = new InvManipulationBehaviour(this, this::getTargetFace);
|
||||
connectivity = new EdgeInteractionBehaviour(this, ConnectedInputHandler::toggleConnection)
|
||||
|
@ -299,7 +299,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
if (!runLogic)
|
||||
return;
|
||||
|
||||
MechanicalCrafterTileEntity targetingCrafter = RecipeGridHandler.getTargetingCrafter(this);
|
||||
MechanicalCrafterBlockEntity targetingCrafter = RecipeGridHandler.getTargetingCrafter(this);
|
||||
if (targetingCrafter == null) {
|
||||
ejectWholeGrid();
|
||||
return;
|
||||
|
@ -387,7 +387,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
|
||||
protected DirectBeltInputBehaviour getTargetingBelt() {
|
||||
BlockPos targetPos = worldPosition.relative(getTargetDirection());
|
||||
return TileEntityBehaviour.get(level, targetPos, DirectBeltInputBehaviour.TYPE);
|
||||
return BlockEntityBehaviour.get(level, targetPos, DirectBeltInputBehaviour.TYPE);
|
||||
}
|
||||
|
||||
public void tryInsert() {
|
||||
|
@ -425,10 +425,10 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
public void ejectWholeGrid() {
|
||||
List<MechanicalCrafterTileEntity> chain = RecipeGridHandler.getAllCraftersOfChain(this);
|
||||
List<MechanicalCrafterBlockEntity> chain = RecipeGridHandler.getAllCraftersOfChain(this);
|
||||
if (chain == null)
|
||||
return;
|
||||
chain.forEach(MechanicalCrafterTileEntity::eject);
|
||||
chain.forEach(MechanicalCrafterBlockEntity::eject);
|
||||
}
|
||||
|
||||
public void eject() {
|
||||
|
@ -481,13 +481,13 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
return;
|
||||
if (level.isClientSide && !isVirtual())
|
||||
return;
|
||||
List<MechanicalCrafterTileEntity> chain = RecipeGridHandler.getAllCraftersOfChainIf(this,
|
||||
poweredStart ? MechanicalCrafterTileEntity::craftingItemPresent
|
||||
: MechanicalCrafterTileEntity::craftingItemOrCoverPresent,
|
||||
List<MechanicalCrafterBlockEntity> chain = RecipeGridHandler.getAllCraftersOfChainIf(this,
|
||||
poweredStart ? MechanicalCrafterBlockEntity::craftingItemPresent
|
||||
: MechanicalCrafterBlockEntity::craftingItemOrCoverPresent,
|
||||
poweredStart);
|
||||
if (chain == null)
|
||||
return;
|
||||
chain.forEach(MechanicalCrafterTileEntity::begin);
|
||||
chain.forEach(MechanicalCrafterBlockEntity::begin);
|
||||
}
|
||||
|
||||
protected void begin() {
|
||||
|
@ -503,14 +503,14 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
protected void continueIfAllPrecedingFinished() {
|
||||
List<MechanicalCrafterTileEntity> preceding = RecipeGridHandler.getPrecedingCrafters(this);
|
||||
List<MechanicalCrafterBlockEntity> preceding = RecipeGridHandler.getPrecedingCrafters(this);
|
||||
if (preceding == null) {
|
||||
ejectWholeGrid();
|
||||
return;
|
||||
}
|
||||
|
||||
for (MechanicalCrafterTileEntity mechanicalCrafterTileEntity : preceding)
|
||||
if (mechanicalCrafterTileEntity.phase != Phase.WAITING)
|
||||
for (MechanicalCrafterBlockEntity blockEntity : preceding)
|
||||
if (blockEntity.phase != Phase.WAITING)
|
||||
return;
|
||||
|
||||
phase = Phase.ASSEMBLING;
|
|
@ -7,7 +7,7 @@ import com.jozufozu.flywheel.api.MaterialManager;
|
|||
import com.jozufozu.flywheel.util.transform.TransformStack;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
|
||||
|
||||
|
@ -15,8 +15,8 @@ import net.minecraft.core.Direction;
|
|||
|
||||
public class MechanicalCrafterInstance extends SingleRotatingInstance {
|
||||
|
||||
public MechanicalCrafterInstance(MaterialManager modelManager, KineticTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
public MechanicalCrafterInstance(MaterialManager materialManager, KineticBlockEntity blockEntity) {
|
||||
super(materialManager, blockEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.simibubi.create.content.contraptions.components.crafter;
|
||||
|
||||
import static com.simibubi.create.content.contraptions.base.HorizontalKineticBlock.HORIZONTAL_FACING;
|
||||
import static com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer.standardKineticRotationTransform;
|
||||
import static com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer.standardKineticRotationTransform;
|
||||
|
||||
import com.jozufozu.flywheel.backend.Backend;
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
|
@ -11,11 +11,11 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
|
|||
import com.mojang.math.Vector3f;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.AllSpriteShifts;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity.Phase;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlockEntity.Phase;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHandler.GroupedItems;
|
||||
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
|
@ -32,25 +32,25 @@ import net.minecraft.world.item.ItemStack;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<MechanicalCrafterTileEntity> {
|
||||
public class MechanicalCrafterRenderer extends SafeBlockEntityRenderer<MechanicalCrafterBlockEntity> {
|
||||
|
||||
public MechanicalCrafterRenderer(BlockEntityRendererProvider.Context context) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(MechanicalCrafterTileEntity te, float partialTicks, PoseStack ms,
|
||||
protected void renderSafe(MechanicalCrafterBlockEntity be, float partialTicks, PoseStack ms,
|
||||
MultiBufferSource buffer, int light, int overlay) {
|
||||
ms.pushPose();
|
||||
Direction facing = te.getBlockState()
|
||||
Direction facing = be.getBlockState()
|
||||
.getValue(HORIZONTAL_FACING);
|
||||
Vec3 vec = Vec3.atLowerCornerOf(facing.getNormal())
|
||||
.scale(.58)
|
||||
.add(.5, .5, .5);
|
||||
|
||||
if (te.phase == Phase.EXPORTING) {
|
||||
Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(te.getBlockState());
|
||||
if (be.phase == Phase.EXPORTING) {
|
||||
Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(be.getBlockState());
|
||||
float progress =
|
||||
Mth.clamp((1000 - te.countDown + te.getCountDownSpeed() * partialTicks) / 1000f, 0, 1);
|
||||
Mth.clamp((1000 - be.countDown + be.getCountDownSpeed() * partialTicks) / 1000f, 0, 1);
|
||||
vec = vec.add(Vec3.atLowerCornerOf(targetDirection.getNormal())
|
||||
.scale(progress * .75f));
|
||||
}
|
||||
|
@ -59,16 +59,16 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
|
|||
ms.scale(1 / 2f, 1 / 2f, 1 / 2f);
|
||||
float yRot = AngleHelper.horizontalAngle(facing);
|
||||
ms.mulPose(Vector3f.YP.rotationDegrees(yRot));
|
||||
renderItems(te, partialTicks, ms, buffer, light, overlay);
|
||||
renderItems(be, partialTicks, ms, buffer, light, overlay);
|
||||
ms.popPose();
|
||||
|
||||
renderFast(te, partialTicks, ms, buffer, light);
|
||||
renderFast(be, partialTicks, ms, buffer, light);
|
||||
}
|
||||
|
||||
public void renderItems(MechanicalCrafterTileEntity te, float partialTicks, PoseStack ms,
|
||||
public void renderItems(MechanicalCrafterBlockEntity be, float partialTicks, PoseStack ms,
|
||||
MultiBufferSource buffer, int light, int overlay) {
|
||||
if (te.phase == Phase.IDLE) {
|
||||
ItemStack stack = te.getInventory()
|
||||
if (be.phase == Phase.IDLE) {
|
||||
ItemStack stack = be.getInventory()
|
||||
.getItem(0);
|
||||
if (!stack.isEmpty()) {
|
||||
ms.pushPose();
|
||||
|
@ -81,16 +81,16 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
|
|||
}
|
||||
} else {
|
||||
// render grouped items
|
||||
GroupedItems items = te.groupedItems;
|
||||
GroupedItems items = be.groupedItems;
|
||||
float distance = .5f;
|
||||
|
||||
ms.pushPose();
|
||||
|
||||
if (te.phase == Phase.CRAFTING) {
|
||||
items = te.groupedItemsBeforeCraft;
|
||||
if (be.phase == Phase.CRAFTING) {
|
||||
items = be.groupedItemsBeforeCraft;
|
||||
items.calcStats();
|
||||
float progress =
|
||||
Mth.clamp((2000 - te.countDown + te.getCountDownSpeed() * partialTicks) / 1000f, 0, 1);
|
||||
Mth.clamp((2000 - be.countDown + be.getCountDownSpeed() * partialTicks) / 1000f, 0, 1);
|
||||
float earlyProgress = Mth.clamp(progress * 2, 0, 1);
|
||||
float lateProgress = Mth.clamp(progress * 2 - 1, 0, 1);
|
||||
|
||||
|
@ -102,7 +102,7 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
|
|||
distance += (-4 * (progress - .5f) * (progress - .5f) + 1) * .25f;
|
||||
}
|
||||
|
||||
boolean onlyRenderFirst = te.phase == Phase.INSERTING || te.phase == Phase.CRAFTING && te.countDown < 1000;
|
||||
boolean onlyRenderFirst = be.phase == Phase.INSERTING || be.phase == Phase.CRAFTING && be.countDown < 1000;
|
||||
final float spacing = distance;
|
||||
items.grid.forEach((pair, stack) -> {
|
||||
if (onlyRenderFirst && (pair.getLeft()
|
||||
|
@ -117,8 +117,8 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
|
|||
ms.translate(x * spacing, y * spacing, 0);
|
||||
|
||||
int offset = 0;
|
||||
if (te.phase == Phase.EXPORTING && te.getBlockState().hasProperty(MechanicalCrafterBlock.POINTING)) {
|
||||
Pointing value = te.getBlockState().getValue(MechanicalCrafterBlock.POINTING);
|
||||
if (be.phase == Phase.EXPORTING && be.getBlockState().hasProperty(MechanicalCrafterBlock.POINTING)) {
|
||||
Pointing value = be.getBlockState().getValue(MechanicalCrafterBlock.POINTING);
|
||||
offset = value == Pointing.UP ? -1 : value == Pointing.LEFT ? 2 : value == Pointing.RIGHT ? -2 : 1;
|
||||
}
|
||||
|
||||
|
@ -133,10 +133,10 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
|
|||
|
||||
ms.popPose();
|
||||
|
||||
if (te.phase == Phase.CRAFTING) {
|
||||
items = te.groupedItems;
|
||||
if (be.phase == Phase.CRAFTING) {
|
||||
items = be.groupedItems;
|
||||
float progress =
|
||||
Mth.clamp((1000 - te.countDown + te.getCountDownSpeed() * partialTicks) / 1000f, 0, 1);
|
||||
Mth.clamp((1000 - be.countDown + be.getCountDownSpeed() * partialTicks) / 1000f, 0, 1);
|
||||
float earlyProgress = Mth.clamp(progress * 2, 0, 1);
|
||||
float lateProgress = Mth.clamp(progress * 2 - 1, 0, 1);
|
||||
|
||||
|
@ -164,14 +164,14 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
|
|||
}
|
||||
}
|
||||
|
||||
public void renderFast(MechanicalCrafterTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
public void renderFast(MechanicalCrafterBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light) {
|
||||
BlockState blockState = te.getBlockState();
|
||||
BlockState blockState = be.getBlockState();
|
||||
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
|
||||
|
||||
if (!Backend.canUseInstancing(te.getLevel())) {
|
||||
if (!Backend.canUseInstancing(be.getLevel())) {
|
||||
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState);
|
||||
standardKineticRotationTransform(superBuffer, te, light);
|
||||
standardKineticRotationTransform(superBuffer, be, light);
|
||||
superBuffer.rotateCentered(Direction.UP, (float) (blockState.getValue(HORIZONTAL_FACING)
|
||||
.getAxis() != Direction.Axis.X ? 0 : Math.PI / 2));
|
||||
superBuffer.rotateCentered(Direction.EAST, (float) (Math.PI / 2));
|
||||
|
@ -179,21 +179,21 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
|
|||
}
|
||||
|
||||
Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(blockState);
|
||||
BlockPos pos = te.getBlockPos();
|
||||
BlockPos pos = be.getBlockPos();
|
||||
|
||||
if ((te.covered || te.phase != Phase.IDLE) && te.phase != Phase.CRAFTING && te.phase != Phase.INSERTING) {
|
||||
if ((be.covered || be.phase != Phase.IDLE) && be.phase != Phase.CRAFTING && be.phase != Phase.INSERTING) {
|
||||
SuperByteBuffer lidBuffer = renderAndTransform(AllBlockPartials.MECHANICAL_CRAFTER_LID, blockState);
|
||||
lidBuffer.light(light)
|
||||
.renderInto(ms, vb);
|
||||
}
|
||||
|
||||
if (MechanicalCrafterBlock.isValidTarget(te.getLevel(), pos.relative(targetDirection), blockState)) {
|
||||
if (MechanicalCrafterBlock.isValidTarget(be.getLevel(), pos.relative(targetDirection), blockState)) {
|
||||
SuperByteBuffer beltBuffer = renderAndTransform(AllBlockPartials.MECHANICAL_CRAFTER_BELT, blockState);
|
||||
SuperByteBuffer beltFrameBuffer =
|
||||
renderAndTransform(AllBlockPartials.MECHANICAL_CRAFTER_BELT_FRAME, blockState);
|
||||
|
||||
if (te.phase == Phase.EXPORTING) {
|
||||
int textureIndex = (int) ((te.getCountDownSpeed() / 128f * AnimationTickHolder.getTicks()));
|
||||
if (be.phase == Phase.EXPORTING) {
|
||||
int textureIndex = (int) ((be.getCountDownSpeed() / 128f * AnimationTickHolder.getTicks()));
|
||||
beltBuffer.shiftUVtoSheet(AllSpriteShifts.CRAFTER_THINGIES, (textureIndex % 4) / 4f, 0, 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -34,20 +34,20 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
|
||||
public class RecipeGridHandler {
|
||||
|
||||
public static List<MechanicalCrafterTileEntity> getAllCraftersOfChain(MechanicalCrafterTileEntity root) {
|
||||
public static List<MechanicalCrafterBlockEntity> getAllCraftersOfChain(MechanicalCrafterBlockEntity root) {
|
||||
return getAllCraftersOfChainIf(root, Predicates.alwaysTrue());
|
||||
}
|
||||
|
||||
public static List<MechanicalCrafterTileEntity> getAllCraftersOfChainIf(MechanicalCrafterTileEntity root,
|
||||
Predicate<MechanicalCrafterTileEntity> test) {
|
||||
public static List<MechanicalCrafterBlockEntity> getAllCraftersOfChainIf(MechanicalCrafterBlockEntity root,
|
||||
Predicate<MechanicalCrafterBlockEntity> test) {
|
||||
return getAllCraftersOfChainIf(root, test, false);
|
||||
}
|
||||
|
||||
public static List<MechanicalCrafterTileEntity> getAllCraftersOfChainIf(MechanicalCrafterTileEntity root,
|
||||
Predicate<MechanicalCrafterTileEntity> test, boolean poweredStart) {
|
||||
List<MechanicalCrafterTileEntity> crafters = new ArrayList<>();
|
||||
List<Pair<MechanicalCrafterTileEntity, MechanicalCrafterTileEntity>> frontier = new ArrayList<>();
|
||||
Set<MechanicalCrafterTileEntity> visited = new HashSet<>();
|
||||
public static List<MechanicalCrafterBlockEntity> getAllCraftersOfChainIf(MechanicalCrafterBlockEntity root,
|
||||
Predicate<MechanicalCrafterBlockEntity> test, boolean poweredStart) {
|
||||
List<MechanicalCrafterBlockEntity> crafters = new ArrayList<>();
|
||||
List<Pair<MechanicalCrafterBlockEntity, MechanicalCrafterBlockEntity>> frontier = new ArrayList<>();
|
||||
Set<MechanicalCrafterBlockEntity> visited = new HashSet<>();
|
||||
frontier.add(Pair.of(root, null));
|
||||
|
||||
boolean powered = false;
|
||||
|
@ -55,9 +55,9 @@ public class RecipeGridHandler {
|
|||
boolean allEmpty = true;
|
||||
|
||||
while (!frontier.isEmpty()) {
|
||||
Pair<MechanicalCrafterTileEntity, MechanicalCrafterTileEntity> pair = frontier.remove(0);
|
||||
MechanicalCrafterTileEntity current = pair.getKey();
|
||||
MechanicalCrafterTileEntity last = pair.getValue();
|
||||
Pair<MechanicalCrafterBlockEntity, MechanicalCrafterBlockEntity> pair = frontier.remove(0);
|
||||
MechanicalCrafterBlockEntity current = pair.getKey();
|
||||
MechanicalCrafterBlockEntity last = pair.getValue();
|
||||
|
||||
if (visited.contains(current))
|
||||
return null;
|
||||
|
@ -72,10 +72,10 @@ public class RecipeGridHandler {
|
|||
crafters.add(current);
|
||||
visited.add(current);
|
||||
|
||||
MechanicalCrafterTileEntity target = getTargetingCrafter(current);
|
||||
MechanicalCrafterBlockEntity target = getTargetingCrafter(current);
|
||||
if (target != last && target != null)
|
||||
frontier.add(Pair.of(target, current));
|
||||
for (MechanicalCrafterTileEntity preceding : getPrecedingCrafters(current))
|
||||
for (MechanicalCrafterBlockEntity preceding : getPrecedingCrafters(current))
|
||||
if (preceding != last)
|
||||
frontier.add(Pair.of(preceding, current));
|
||||
}
|
||||
|
@ -83,29 +83,29 @@ public class RecipeGridHandler {
|
|||
return empty && !powered || allEmpty ? null : crafters;
|
||||
}
|
||||
|
||||
public static MechanicalCrafterTileEntity getTargetingCrafter(MechanicalCrafterTileEntity crafter) {
|
||||
public static MechanicalCrafterBlockEntity getTargetingCrafter(MechanicalCrafterBlockEntity crafter) {
|
||||
BlockState state = crafter.getBlockState();
|
||||
if (!isCrafter(state))
|
||||
return null;
|
||||
|
||||
BlockPos targetPos = crafter.getBlockPos()
|
||||
.relative(MechanicalCrafterBlock.getTargetDirection(state));
|
||||
MechanicalCrafterTileEntity targetTE = CrafterHelper.getCrafter(crafter.getLevel(), targetPos);
|
||||
if (targetTE == null)
|
||||
MechanicalCrafterBlockEntity targetBE = CrafterHelper.getCrafter(crafter.getLevel(), targetPos);
|
||||
if (targetBE == null)
|
||||
return null;
|
||||
|
||||
BlockState targetState = targetTE.getBlockState();
|
||||
BlockState targetState = targetBE.getBlockState();
|
||||
if (!isCrafter(targetState))
|
||||
return null;
|
||||
if (state.getValue(HORIZONTAL_FACING) != targetState.getValue(HORIZONTAL_FACING))
|
||||
return null;
|
||||
return targetTE;
|
||||
return targetBE;
|
||||
}
|
||||
|
||||
public static List<MechanicalCrafterTileEntity> getPrecedingCrafters(MechanicalCrafterTileEntity crafter) {
|
||||
public static List<MechanicalCrafterBlockEntity> getPrecedingCrafters(MechanicalCrafterBlockEntity crafter) {
|
||||
BlockPos pos = crafter.getBlockPos();
|
||||
Level world = crafter.getLevel();
|
||||
List<MechanicalCrafterTileEntity> crafters = new ArrayList<>();
|
||||
List<MechanicalCrafterBlockEntity> crafters = new ArrayList<>();
|
||||
BlockState blockState = crafter.getBlockState();
|
||||
if (!isCrafter(blockState))
|
||||
return crafters;
|
||||
|
@ -126,11 +126,11 @@ public class RecipeGridHandler {
|
|||
continue;
|
||||
if (blockFacing != neighbourState.getValue(HORIZONTAL_FACING))
|
||||
continue;
|
||||
MechanicalCrafterTileEntity te = CrafterHelper.getCrafter(world, neighbourPos);
|
||||
if (te == null)
|
||||
MechanicalCrafterBlockEntity be = CrafterHelper.getCrafter(world, neighbourPos);
|
||||
if (be == null)
|
||||
continue;
|
||||
|
||||
crafters.add(te);
|
||||
crafters.add(be);
|
||||
}
|
||||
|
||||
return crafters;
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package com.simibubi.create.content.contraptions.components.crank;
|
||||
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.utility.Couple;
|
||||
|
@ -36,7 +36,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
public class HandCrankBlock extends DirectionalKineticBlock
|
||||
implements ITE<HandCrankTileEntity>, ProperWaterloggedBlock {
|
||||
implements IBE<HandCrankBlockEntity>, ProperWaterloggedBlock {
|
||||
|
||||
public HandCrankBlock(Properties properties) {
|
||||
super(properties);
|
||||
|
@ -73,7 +73,7 @@ public class HandCrankBlock extends DirectionalKineticBlock
|
|||
if (player.isSpectator())
|
||||
return InteractionResult.PASS;
|
||||
|
||||
withTileEntityDo(worldIn, pos, te -> te.turn(player.isShiftKeyDown()));
|
||||
withBlockEntityDo(worldIn, pos, be -> be.turn(player.isShiftKeyDown()));
|
||||
player.causeFoodExhaustion(getRotationSpeed() * AllConfigs.SERVER.kinetics.crankHungerMultiplier.getF());
|
||||
|
||||
if (player.getFoodData()
|
||||
|
@ -143,13 +143,13 @@ public class HandCrankBlock extends DirectionalKineticBlock
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<HandCrankTileEntity> getTileEntityClass() {
|
||||
return HandCrankTileEntity.class;
|
||||
public Class<HandCrankBlockEntity> getBlockEntityClass() {
|
||||
return HandCrankBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends HandCrankTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.HAND_CRANK.get();
|
||||
public BlockEntityType<? extends HandCrankBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.HAND_CRANK.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.crank;
|
|||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.GeneratingKineticBlockEntity;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -13,14 +13,14 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
public class HandCrankTileEntity extends GeneratingKineticTileEntity {
|
||||
public class HandCrankBlockEntity extends GeneratingKineticBlockEntity {
|
||||
|
||||
public int inUse;
|
||||
public boolean backwards;
|
||||
public float independentAngle;
|
||||
public float chasingVelocity;
|
||||
|
||||
public HandCrankTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public HandCrankBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
|
@ -14,13 +14,13 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|||
|
||||
public class HandCrankInstance extends SingleRotatingInstance implements DynamicInstance {
|
||||
|
||||
private final HandCrankTileEntity tile;
|
||||
private final HandCrankBlockEntity blockEntity;
|
||||
private ModelData crank;
|
||||
private Direction facing;
|
||||
|
||||
public HandCrankInstance(MaterialManager modelManager, HandCrankTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
this.tile = tile;
|
||||
public HandCrankInstance(MaterialManager modelManager, HandCrankBlockEntity blockEntity) {
|
||||
super(modelManager, blockEntity);
|
||||
this.blockEntity = blockEntity;
|
||||
|
||||
Block block = blockState.getBlock();
|
||||
PartialModel renderedHandle = null;
|
||||
|
@ -46,7 +46,7 @@ public class HandCrankInstance extends SingleRotatingInstance implements Dynamic
|
|||
|
||||
private void rotateCrank() {
|
||||
Direction.Axis axis = facing.getAxis();
|
||||
float angle = (tile.independentAngle + AnimationTickHolder.getPartialTicks() * tile.chasingVelocity) / 360;
|
||||
float angle = (blockEntity.independentAngle + AnimationTickHolder.getPartialTicks() * blockEntity.chasingVelocity) / 360;
|
||||
|
||||
crank.loadIdentity()
|
||||
.translate(getInstancePosition())
|
||||
|
|
|
@ -5,8 +5,8 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert
|
|||
import com.jozufozu.flywheel.backend.Backend;
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
|
||||
|
@ -17,20 +17,20 @@ import net.minecraft.core.Direction;
|
|||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class HandCrankRenderer extends KineticTileEntityRenderer {
|
||||
public class HandCrankRenderer extends KineticBlockEntityRenderer {
|
||||
|
||||
public HandCrankRenderer(BlockEntityRendererProvider.Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
protected void renderSafe(KineticBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light, int overlay) {
|
||||
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
|
||||
super.renderSafe(be, partialTicks, ms, buffer, light, overlay);
|
||||
|
||||
if (Backend.canUseInstancing(te.getLevel())) return;
|
||||
if (Backend.canUseInstancing(be.getLevel())) return;
|
||||
|
||||
BlockState state = te.getBlockState();
|
||||
BlockState state = be.getBlockState();
|
||||
Block block = state.getBlock();
|
||||
PartialModel renderedHandle = null;
|
||||
if (block instanceof HandCrankBlock)
|
||||
|
@ -40,8 +40,8 @@ public class HandCrankRenderer extends KineticTileEntityRenderer {
|
|||
|
||||
Direction facing = state.getValue(FACING);
|
||||
SuperByteBuffer handle = CachedBufferer.partialFacing(renderedHandle, state, facing.getOpposite());
|
||||
HandCrankTileEntity crank = (HandCrankTileEntity) te;
|
||||
kineticRotationTransform(handle, te, facing.getAxis(),
|
||||
HandCrankBlockEntity crank = (HandCrankBlockEntity) be;
|
||||
kineticRotationTransform(handle, be, facing.getAxis(),
|
||||
(crank.independentAngle + partialTicks * crank.chasingVelocity) / 360, light);
|
||||
handle.renderInto(ms, buffer.getBuffer(RenderType.solid()));
|
||||
}
|
||||
|
|
|
@ -2,11 +2,11 @@ package com.simibubi.create.content.contraptions.components.crusher;
|
|||
|
||||
import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.VALID;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -24,7 +24,7 @@ import net.minecraft.world.phys.Vec3;
|
|||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE<CrushingWheelTileEntity> {
|
||||
public class CrushingWheelBlock extends RotatedPillarKineticBlock implements IBE<CrushingWheelBlockEntity> {
|
||||
|
||||
public CrushingWheelBlock(Properties properties) {
|
||||
super(properties);
|
||||
|
@ -80,14 +80,14 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
|
|||
if (AllBlocks.CRUSHING_WHEEL.has(otherState)) {
|
||||
controllerShouldExist = true;
|
||||
|
||||
CrushingWheelTileEntity te = getTileEntity(world, pos);
|
||||
CrushingWheelTileEntity otherTe = getTileEntity(world, otherWheelPos);
|
||||
CrushingWheelBlockEntity be = getBlockEntity(world, pos);
|
||||
CrushingWheelBlockEntity otherBE = getBlockEntity(world, otherWheelPos);
|
||||
|
||||
if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0)
|
||||
&& te.getSpeed() != 0) {
|
||||
if (be != null && otherBE != null && (be.getSpeed() > 0) != (otherBE.getSpeed() > 0)
|
||||
&& be.getSpeed() != 0) {
|
||||
Axis wheelAxis = state.getValue(AXIS);
|
||||
Axis sideAxis = side.getAxis();
|
||||
int controllerADO = Math.round(Math.signum(te.getSpeed())) * side.getAxisDirection()
|
||||
int controllerADO = Math.round(Math.signum(be.getSpeed())) * side.getAxisDirection()
|
||||
.getStep();
|
||||
Vec3 controllerDirVec = new Vec3(wheelAxis == Axis.X ? 1 : 0, wheelAxis == Axis.Y ? 1 : 0,
|
||||
wheelAxis == Axis.Z ? 1 : 0).cross(
|
||||
|
@ -132,7 +132,7 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
|
|||
if (entityIn.getY() < pos.getY() + 1.25f || !entityIn.isOnGround())
|
||||
return;
|
||||
|
||||
float speed = getTileEntityOptional(worldIn, pos).map(CrushingWheelTileEntity::getSpeed)
|
||||
float speed = getBlockEntityOptional(worldIn, pos).map(CrushingWheelBlockEntity::getSpeed)
|
||||
.orElse(0f);
|
||||
|
||||
double x = 0;
|
||||
|
@ -183,13 +183,13 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
|
|||
}
|
||||
|
||||
@Override
|
||||
public Class<CrushingWheelTileEntity> getTileEntityClass() {
|
||||
return CrushingWheelTileEntity.class;
|
||||
public Class<CrushingWheelBlockEntity> getBlockEntityClass() {
|
||||
return CrushingWheelBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends CrushingWheelTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.CRUSHING_WHEEL.get();
|
||||
public BlockEntityType<? extends CrushingWheelBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.CRUSHING_WHEEL.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,9 +2,9 @@ package com.simibubi.create.content.contraptions.components.crusher;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -21,18 +21,18 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
|
||||
@EventBusSubscriber
|
||||
public class CrushingWheelTileEntity extends KineticTileEntity {
|
||||
public class CrushingWheelBlockEntity extends KineticBlockEntity {
|
||||
|
||||
public static final DamageSource DAMAGE_SOURCE = new DamageSource("create.crush").bypassArmor()
|
||||
.setScalesWithDifficulty();
|
||||
|
||||
public CrushingWheelTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public CrushingWheelBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
setLazyTickRate(20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
registerAwardables(behaviours, AllAdvancements.CRUSHING_WHEEL, AllAdvancements.CRUSHER_MAXED);
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ public class CrushingWheelTileEntity extends KineticTileEntity {
|
|||
|
||||
@SubscribeEvent
|
||||
public static void handleCrushedMobDrops(LivingDropsEvent event) {
|
||||
if (event.getSource() != CrushingWheelTileEntity.DAMAGE_SOURCE)
|
||||
if (event.getSource() != CrushingWheelBlockEntity.DAMAGE_SOURCE)
|
||||
return;
|
||||
Vec3 outSpeed = Vec3.ZERO;
|
||||
for (ItemEntity outputItem : event.getDrops()) {
|
|
@ -2,11 +2,11 @@ package com.simibubi.create.content.contraptions.components.crusher;
|
|||
|
||||
import java.util.Random;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
|
@ -38,7 +38,7 @@ import net.minecraft.world.phys.shapes.EntityCollisionContext;
|
|||
import net.minecraft.world.phys.shapes.Shapes;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class CrushingWheelControllerBlock extends DirectionalBlock implements ITE<CrushingWheelControllerTileEntity> {
|
||||
public class CrushingWheelControllerBlock extends DirectionalBlock implements IBE<CrushingWheelControllerBlockEntity> {
|
||||
|
||||
public CrushingWheelControllerBlock(Properties p_i48440_1_) {
|
||||
super(p_i48440_1_);
|
||||
|
@ -72,8 +72,8 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
|
||||
checkEntityForProcessing(worldIn, pos, entityIn);
|
||||
|
||||
withTileEntityDo(worldIn, pos, te -> {
|
||||
if (te.processingEntity == entityIn)
|
||||
withBlockEntityDo(worldIn, pos, be -> {
|
||||
if (be.processingEntity == entityIn)
|
||||
|
||||
entityIn.makeStuckInBlock(state, new Vec3(axis == Axis.X ? (double) 0.05F : 0.25D,
|
||||
axis == Axis.Y ? (double) 0.05F : 0.25D, axis == Axis.Z ? (double) 0.05F : 0.25D));
|
||||
|
@ -81,10 +81,10 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
}
|
||||
|
||||
public void checkEntityForProcessing(Level worldIn, BlockPos pos, Entity entityIn) {
|
||||
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
|
||||
if (te == null)
|
||||
CrushingWheelControllerBlockEntity be = getBlockEntity(worldIn, pos);
|
||||
if (be == null)
|
||||
return;
|
||||
if (te.crushingspeed == 0)
|
||||
if (be.crushingspeed == 0)
|
||||
return;
|
||||
// if (entityIn instanceof ItemEntity)
|
||||
// ((ItemEntity) entityIn).setPickUpDelay(10);
|
||||
|
@ -93,7 +93,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
if (pos.equals(NbtUtils.readBlockPos(data.getCompound("BypassCrushingWheel"))))
|
||||
return;
|
||||
}
|
||||
if (te.isOccupied())
|
||||
if (be.isOccupied())
|
||||
return;
|
||||
boolean isPlayer = entityIn instanceof Player;
|
||||
if (isPlayer && ((Player) entityIn).isCreative())
|
||||
|
@ -101,7 +101,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
if (isPlayer && entityIn.level.getDifficulty() == Difficulty.PEACEFUL)
|
||||
return;
|
||||
|
||||
te.startCrushing(entityIn);
|
||||
be.startCrushing(entityIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -130,11 +130,11 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
}
|
||||
|
||||
public void updateSpeed(BlockState state, LevelAccessor world, BlockPos pos) {
|
||||
withTileEntityDo(world, pos, te -> {
|
||||
withBlockEntityDo(world, pos, be -> {
|
||||
if (!state.getValue(VALID)) {
|
||||
if (te.crushingspeed != 0) {
|
||||
te.crushingspeed = 0;
|
||||
te.sendData();
|
||||
if (be.crushingspeed != 0) {
|
||||
be.crushingspeed = 0;
|
||||
be.sendData();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -145,11 +145,11 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
continue;
|
||||
if (neighbour.getValue(BlockStateProperties.AXIS) == d.getAxis())
|
||||
continue;
|
||||
BlockEntity adjTe = world.getBlockEntity(pos.relative(d));
|
||||
if (!(adjTe instanceof CrushingWheelTileEntity cwte))
|
||||
BlockEntity adjBE = world.getBlockEntity(pos.relative(d));
|
||||
if (!(adjBE instanceof CrushingWheelBlockEntity cwte))
|
||||
continue;
|
||||
te.crushingspeed = Math.abs(cwte.getSpeed() / 50f);
|
||||
te.sendData();
|
||||
be.crushingspeed = Math.abs(cwte.getSpeed() / 50f);
|
||||
be.sendData();
|
||||
|
||||
cwte.award(AllAdvancements.CRUSHING_WHEEL);
|
||||
if (cwte.getSpeed() > 255)
|
||||
|
@ -179,8 +179,8 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
// than falling back through.
|
||||
return Shapes.empty();
|
||||
|
||||
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
|
||||
if (te != null && te.processingEntity == entity)
|
||||
CrushingWheelControllerBlockEntity be = getBlockEntity(worldIn, pos);
|
||||
if (be != null && be.processingEntity == entity)
|
||||
return Shapes.empty();
|
||||
|
||||
return standardShape;
|
||||
|
@ -191,18 +191,18 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT
|
|||
if (!state.hasBlockEntity() || state.getBlock() == newState.getBlock())
|
||||
return;
|
||||
|
||||
withTileEntityDo(worldIn, pos, te -> ItemHelper.dropContents(worldIn, pos, te.inventory));
|
||||
withBlockEntityDo(worldIn, pos, be -> ItemHelper.dropContents(worldIn, pos, be.inventory));
|
||||
worldIn.removeBlockEntity(pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<CrushingWheelControllerTileEntity> getTileEntityClass() {
|
||||
return CrushingWheelControllerTileEntity.class;
|
||||
public Class<CrushingWheelControllerBlockEntity> getBlockEntityClass() {
|
||||
return CrushingWheelControllerBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends CrushingWheelControllerTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.CRUSHING_WHEEL_CONTROLLER.get();
|
||||
public BlockEntityType<? extends CrushingWheelControllerBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.CRUSHING_WHEEL_CONTROLLER.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,13 +9,13 @@ import java.util.UUID;
|
|||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingInventory;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.sound.SoundScapes;
|
||||
import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
|
@ -47,7 +47,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
|||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||
|
||||
public class CrushingWheelControllerTileEntity extends SmartTileEntity {
|
||||
public class CrushingWheelControllerBlockEntity extends SmartBlockEntity {
|
||||
|
||||
public Entity processingEntity;
|
||||
private UUID entityUUID;
|
||||
|
@ -58,7 +58,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
|
|||
private RecipeWrapper wrapper;
|
||||
public float crushingspeed;
|
||||
|
||||
public CrushingWheelControllerTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public CrushingWheelControllerBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
inventory = new ProcessingInventory(this::itemInserted) {
|
||||
|
||||
|
@ -72,7 +72,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput));
|
||||
}
|
||||
|
||||
|
@ -148,7 +148,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
|
|||
BlockPos nextPos = worldPosition.offset(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f),
|
||||
facing.getAxis() == Axis.Z ? 1f * offset : 0f);
|
||||
DirectBeltInputBehaviour behaviour =
|
||||
TileEntityBehaviour.get(level, nextPos, DirectBeltInputBehaviour.TYPE);
|
||||
BlockEntityBehaviour.get(level, nextPos, DirectBeltInputBehaviour.TYPE);
|
||||
if (behaviour != null) {
|
||||
boolean changed = false;
|
||||
if (!behaviour.canInsertFromSide(facing))
|
||||
|
@ -230,7 +230,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
|
|||
processingEntity.setPos(entityOutPos.x, entityOutPos.y, entityOutPos.z);
|
||||
}
|
||||
}
|
||||
processingEntity.hurt(CrushingWheelTileEntity.DAMAGE_SOURCE, crusherDamage);
|
||||
processingEntity.hurt(CrushingWheelBlockEntity.DAMAGE_SOURCE, crusherDamage);
|
||||
if (!processingEntity.isAlive()) {
|
||||
processingEntity.setPos(entityOutPos.x, entityOutPos.y, entityOutPos.z);
|
||||
}
|
|
@ -8,8 +8,8 @@ import java.util.stream.Collectors;
|
|||
import com.simibubi.create.AllBlocks;
|
||||
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.components.deployer.DeployerBlockEntity.Mode;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerBlockEntity.State;
|
||||
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
|
||||
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
||||
|
@ -17,9 +17,9 @@ import com.simibubi.create.content.contraptions.relays.belt.transport.Transporte
|
|||
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.advancement.CreateAdvancement;
|
||||
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 com.simibubi.create.foundation.blockEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -35,66 +35,66 @@ import net.minecraftforge.items.ItemHandlerHelper;
|
|||
public class BeltDeployerCallbacks {
|
||||
|
||||
public static ProcessingResult onItemReceived(TransportedItemStack s, TransportedItemStackHandlerBehaviour i,
|
||||
DeployerTileEntity deployerTileEntity) {
|
||||
DeployerBlockEntity blockEntity) {
|
||||
|
||||
if (deployerTileEntity.getSpeed() == 0)
|
||||
if (blockEntity.getSpeed() == 0)
|
||||
return ProcessingResult.PASS;
|
||||
if (deployerTileEntity.mode == Mode.PUNCH)
|
||||
if (blockEntity.mode == Mode.PUNCH)
|
||||
return ProcessingResult.PASS;
|
||||
BlockState blockState = deployerTileEntity.getBlockState();
|
||||
BlockState blockState = blockEntity.getBlockState();
|
||||
if (!blockState.hasProperty(FACING) || blockState.getValue(FACING) != Direction.DOWN)
|
||||
return ProcessingResult.PASS;
|
||||
if (deployerTileEntity.state != State.WAITING)
|
||||
if (blockEntity.state != State.WAITING)
|
||||
return ProcessingResult.HOLD;
|
||||
if (deployerTileEntity.redstoneLocked)
|
||||
if (blockEntity.redstoneLocked)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
DeployerFakePlayer player = deployerTileEntity.getPlayer();
|
||||
DeployerFakePlayer player = blockEntity.getPlayer();
|
||||
ItemStack held = player == null ? ItemStack.EMPTY : player.getMainHandItem();
|
||||
|
||||
if (held.isEmpty())
|
||||
return ProcessingResult.HOLD;
|
||||
if (deployerTileEntity.getRecipe(s.stack) == null)
|
||||
if (blockEntity.getRecipe(s.stack) == null)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
deployerTileEntity.start();
|
||||
blockEntity.start();
|
||||
return ProcessingResult.HOLD;
|
||||
}
|
||||
|
||||
public static ProcessingResult whenItemHeld(TransportedItemStack s, TransportedItemStackHandlerBehaviour i,
|
||||
DeployerTileEntity deployerTileEntity) {
|
||||
DeployerBlockEntity blockEntity) {
|
||||
|
||||
if (deployerTileEntity.getSpeed() == 0)
|
||||
if (blockEntity.getSpeed() == 0)
|
||||
return ProcessingResult.PASS;
|
||||
BlockState blockState = deployerTileEntity.getBlockState();
|
||||
BlockState blockState = blockEntity.getBlockState();
|
||||
if (!blockState.hasProperty(FACING) || blockState.getValue(FACING) != Direction.DOWN)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
DeployerFakePlayer player = deployerTileEntity.getPlayer();
|
||||
DeployerFakePlayer player = blockEntity.getPlayer();
|
||||
ItemStack held = player == null ? ItemStack.EMPTY : player.getMainHandItem();
|
||||
if (held.isEmpty())
|
||||
return ProcessingResult.HOLD;
|
||||
|
||||
Recipe<?> recipe = deployerTileEntity.getRecipe(s.stack);
|
||||
Recipe<?> recipe = blockEntity.getRecipe(s.stack);
|
||||
if (recipe == null)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
if (deployerTileEntity.state == State.RETRACTING && deployerTileEntity.timer == 1000) {
|
||||
activate(s, i, deployerTileEntity, recipe);
|
||||
if (blockEntity.state == State.RETRACTING && blockEntity.timer == 1000) {
|
||||
activate(s, i, blockEntity, recipe);
|
||||
return ProcessingResult.HOLD;
|
||||
}
|
||||
|
||||
if (deployerTileEntity.state == State.WAITING) {
|
||||
if (deployerTileEntity.redstoneLocked)
|
||||
if (blockEntity.state == State.WAITING) {
|
||||
if (blockEntity.redstoneLocked)
|
||||
return ProcessingResult.PASS;
|
||||
deployerTileEntity.start();
|
||||
blockEntity.start();
|
||||
}
|
||||
|
||||
return ProcessingResult.HOLD;
|
||||
}
|
||||
|
||||
public static void activate(TransportedItemStack transported, TransportedItemStackHandlerBehaviour handler,
|
||||
DeployerTileEntity deployerTileEntity, Recipe<?> recipe) {
|
||||
DeployerBlockEntity blockEntity, Recipe<?> recipe) {
|
||||
|
||||
List<TransportedItemStack> collect =
|
||||
InWorldProcessing.applyRecipeOn(ItemHandlerHelper.copyStackWithSize(transported.stack, 1), recipe)
|
||||
|
@ -113,10 +113,10 @@ public class BeltDeployerCallbacks {
|
|||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
deployerTileEntity.award(AllAdvancements.DEPLOYER);
|
||||
blockEntity.award(AllAdvancements.DEPLOYER);
|
||||
|
||||
TransportedItemStack left = transported.copy();
|
||||
deployerTileEntity.player.spawnedItemEffects = transported.stack.copy();
|
||||
blockEntity.player.spawnedItemEffects = transported.stack.copy();
|
||||
left.stack.shrink(1);
|
||||
ItemStack resultItem = null;
|
||||
|
||||
|
@ -128,7 +128,7 @@ public class BeltDeployerCallbacks {
|
|||
handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(collect, left));
|
||||
}
|
||||
|
||||
ItemStack heldItem = deployerTileEntity.player.getMainHandItem();
|
||||
ItemStack heldItem = blockEntity.player.getMainHandItem();
|
||||
boolean unbreakable = heldItem.hasTag() && heldItem.getTag()
|
||||
.getBoolean("Unbreakable");
|
||||
boolean keepHeld =
|
||||
|
@ -136,27 +136,27 @@ public class BeltDeployerCallbacks {
|
|||
|
||||
if (!unbreakable && !keepHeld) {
|
||||
if (heldItem.isDamageableItem())
|
||||
heldItem.hurtAndBreak(1, deployerTileEntity.player,
|
||||
heldItem.hurtAndBreak(1, blockEntity.player,
|
||||
s -> s.broadcastBreakEvent(InteractionHand.MAIN_HAND));
|
||||
else
|
||||
heldItem.shrink(1);
|
||||
}
|
||||
|
||||
if (resultItem != null && !resultItem.isEmpty())
|
||||
awardAdvancements(deployerTileEntity, resultItem);
|
||||
awardAdvancements(blockEntity, resultItem);
|
||||
|
||||
BlockPos pos = deployerTileEntity.getBlockPos();
|
||||
Level world = deployerTileEntity.getLevel();
|
||||
BlockPos pos = blockEntity.getBlockPos();
|
||||
Level world = blockEntity.getLevel();
|
||||
if (heldItem.isEmpty())
|
||||
world.playSound(null, pos, SoundEvents.ITEM_BREAK, SoundSource.BLOCKS, .25f, 1);
|
||||
world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundSource.BLOCKS, .25f, .75f);
|
||||
if (recipe instanceof SandPaperPolishingRecipe)
|
||||
AllSoundEvents.SANDING_SHORT.playOnServer(world, pos, .35f, 1f);
|
||||
|
||||
deployerTileEntity.sendData();
|
||||
blockEntity.sendData();
|
||||
}
|
||||
|
||||
private static void awardAdvancements(DeployerTileEntity deployerTileEntity, ItemStack created) {
|
||||
private static void awardAdvancements(DeployerBlockEntity blockEntity, ItemStack created) {
|
||||
CreateAdvancement advancement = null;
|
||||
|
||||
if (AllBlocks.ANDESITE_CASING.isIn(created))
|
||||
|
@ -170,7 +170,7 @@ public class BeltDeployerCallbacks {
|
|||
else
|
||||
return;
|
||||
|
||||
deployerTileEntity.award(advancement);
|
||||
blockEntity.award(advancement);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ import com.jozufozu.flywheel.util.transform.TransformStack;
|
|||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntityInstance;
|
||||
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||
|
@ -50,7 +50,7 @@ public class DeployerActorInstance extends ActorInstance {
|
|||
.material(Materials.TRANSFORMED);
|
||||
|
||||
BlockState state = context.state;
|
||||
DeployerTileEntity.Mode mode = NBTHelper.readEnum(context.tileData, "Mode", DeployerTileEntity.Mode.class);
|
||||
DeployerBlockEntity.Mode mode = NBTHelper.readEnum(context.blockEntityData, "Mode", DeployerBlockEntity.Mode.class);
|
||||
PartialModel handPose = DeployerRenderer.getHandPose(mode);
|
||||
|
||||
stationaryTimer = context.data.contains("StationaryTimer");
|
||||
|
@ -67,7 +67,7 @@ public class DeployerActorInstance extends ActorInstance {
|
|||
Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state);
|
||||
shaft = materialManager.defaultSolid()
|
||||
.material(AllMaterialSpecs.ROTATING)
|
||||
.getModel(KineticTileInstance.shaft(axis))
|
||||
.getModel(KineticBlockEntityInstance.shaft(axis))
|
||||
.createInstance();
|
||||
|
||||
int blockLight = localBlockLight();
|
||||
|
|
|
@ -2,12 +2,12 @@ package com.simibubi.create.content.contraptions.components.deployer;
|
|||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
|
||||
import com.simibubi.create.content.contraptions.components.AssemblyOperatorUseContext;
|
||||
import com.simibubi.create.foundation.block.ITE;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -31,7 +31,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
|
|||
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE<DeployerTileEntity> {
|
||||
public class DeployerBlock extends DirectionalAxisKineticBlock implements IBE<DeployerBlockEntity> {
|
||||
|
||||
public DeployerBlock(Properties properties) {
|
||||
super(properties);
|
||||
|
@ -51,7 +51,7 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE<De
|
|||
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
|
||||
if (context.getClickedFace() == state.getValue(FACING)) {
|
||||
if (!context.getLevel().isClientSide)
|
||||
withTileEntityDo(context.getLevel(), context.getClickedPos(), DeployerTileEntity::changeMode);
|
||||
withBlockEntityDo(context.getLevel(), context.getClickedPos(), DeployerBlockEntity::changeMode);
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
return super.onWrenched(state, context);
|
||||
|
@ -60,7 +60,7 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE<De
|
|||
@Override
|
||||
public void onRemove(BlockState state, Level worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||
if (!isMoving && !state.is(newState.getBlock()))
|
||||
withTileEntityDo(worldIn, pos, DeployerTileEntity::discardPlayer);
|
||||
withBlockEntityDo(worldIn, pos, DeployerBlockEntity::discardPlayer);
|
||||
super.onRemove(state, worldIn, pos, newState, isMoving);
|
||||
}
|
||||
|
||||
|
@ -77,40 +77,40 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE<De
|
|||
if (worldIn.isClientSide)
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
withTileEntityDo(worldIn, pos, te -> {
|
||||
ItemStack heldByDeployer = te.player.getMainHandItem()
|
||||
withBlockEntityDo(worldIn, pos, be -> {
|
||||
ItemStack heldByDeployer = be.player.getMainHandItem()
|
||||
.copy();
|
||||
if (heldByDeployer.isEmpty() && heldByPlayer.isEmpty())
|
||||
return;
|
||||
|
||||
player.setItemInHand(handIn, heldByDeployer);
|
||||
te.player.setItemInHand(InteractionHand.MAIN_HAND, heldByPlayer);
|
||||
te.sendData();
|
||||
be.player.setItemInHand(InteractionHand.MAIN_HAND, heldByPlayer);
|
||||
be.sendData();
|
||||
});
|
||||
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<DeployerTileEntity> getTileEntityClass() {
|
||||
return DeployerTileEntity.class;
|
||||
public Class<DeployerBlockEntity> getBlockEntityClass() {
|
||||
return DeployerBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends DeployerTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.DEPLOYER.get();
|
||||
public BlockEntityType<? extends DeployerBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.DEPLOYER.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
super.onPlace(state, world, pos, oldState, isMoving);
|
||||
withTileEntityDo(world, pos, DeployerTileEntity::redstoneUpdate);
|
||||
withBlockEntityDo(world, pos, DeployerBlockEntity::redstoneUpdate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, Level world, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_,
|
||||
boolean p_220069_6_) {
|
||||
withTileEntityDo(world, pos, DeployerTileEntity::redstoneUpdate);
|
||||
withBlockEntityDo(world, pos, DeployerBlockEntity::redstoneUpdate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -13,16 +13,16 @@ import com.simibubi.create.AllBlockPartials;
|
|||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate.StressImpact;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe;
|
||||
import com.simibubi.create.content.curiosities.tools.SandPaperItem;
|
||||
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe.SandPaperInv;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.belt.BeltProcessingBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour;
|
||||
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.Components;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
|
@ -63,7 +63,7 @@ import net.minecraftforge.items.IItemHandlerModifiable;
|
|||
import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||
|
||||
public class DeployerTileEntity extends KineticTileEntity {
|
||||
public class DeployerBlockEntity extends KineticBlockEntity {
|
||||
|
||||
protected State state;
|
||||
protected Mode mode;
|
||||
|
@ -90,7 +90,7 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
PUNCH, USE
|
||||
}
|
||||
|
||||
public DeployerTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
public DeployerBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
this.state = State.WAITING;
|
||||
mode = Mode.USE;
|
||||
|
@ -101,7 +101,7 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
filtering = new FilteringBehaviour(this, new DeployerFilterSlot());
|
||||
behaviours.add(filtering);
|
||||
|
@ -251,14 +251,14 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
|
||||
public boolean startFistBump(Direction facing) {
|
||||
int i = 0;
|
||||
DeployerTileEntity partner = null;
|
||||
DeployerBlockEntity partner = null;
|
||||
|
||||
for (i = 2; i < 5; i++) {
|
||||
BlockPos otherDeployer = worldPosition.relative(facing, i);
|
||||
if (!level.isLoaded(otherDeployer))
|
||||
return false;
|
||||
BlockEntity otherTile = level.getBlockEntity(otherDeployer);
|
||||
if (otherTile instanceof DeployerTileEntity dpe) {
|
||||
BlockEntity other = level.getBlockEntity(otherDeployer);
|
||||
if (other instanceof DeployerBlockEntity dpe) {
|
||||
partner = dpe;
|
||||
break;
|
||||
}
|
||||
|
@ -274,12 +274,12 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
if (partner.getSpeed() == 0)
|
||||
return false;
|
||||
|
||||
for (DeployerTileEntity te : Arrays.asList(this, partner)) {
|
||||
te.fistBump = true;
|
||||
te.reach = ((i - 2)) * .5f;
|
||||
te.timer = 1000;
|
||||
te.state = State.EXPANDING;
|
||||
te.sendData();
|
||||
for (DeployerBlockEntity be : Arrays.asList(this, partner)) {
|
||||
be.fistBump = true;
|
||||
be.reach = ((i - 2)) * .5f;
|
||||
be.timer = 1000;
|
||||
be.state = State.EXPANDING;
|
||||
be.sendData();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -287,33 +287,33 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
|
||||
public void triggerFistBump() {
|
||||
int i = 0;
|
||||
DeployerTileEntity deployerTile = null;
|
||||
DeployerBlockEntity deployerBlockEntity = null;
|
||||
for (i = 2; i < 5; i++) {
|
||||
BlockPos pos = worldPosition.relative(getBlockState().getValue(FACING), i);
|
||||
if (!level.isLoaded(pos))
|
||||
return;
|
||||
if (level.getBlockEntity(pos) instanceof DeployerTileEntity dpe) {
|
||||
deployerTile = dpe;
|
||||
if (level.getBlockEntity(pos) instanceof DeployerBlockEntity dpe) {
|
||||
deployerBlockEntity = dpe;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (deployerTile == null)
|
||||
if (deployerBlockEntity == null)
|
||||
return;
|
||||
if (!deployerTile.fistBump || deployerTile.state != State.EXPANDING)
|
||||
if (!deployerBlockEntity.fistBump || deployerBlockEntity.state != State.EXPANDING)
|
||||
return;
|
||||
if (deployerTile.timer > 0)
|
||||
if (deployerBlockEntity.timer > 0)
|
||||
return;
|
||||
|
||||
fistBump = false;
|
||||
deployerTile.fistBump = false;
|
||||
deployerTile.state = State.RETRACTING;
|
||||
deployerTile.timer = 1000;
|
||||
deployerTile.sendData();
|
||||
deployerBlockEntity.fistBump = false;
|
||||
deployerBlockEntity.state = State.RETRACTING;
|
||||
deployerBlockEntity.timer = 1000;
|
||||
deployerBlockEntity.sendData();
|
||||
award(AllAdvancements.FIST_BUMP);
|
||||
|
||||
BlockPos soundLocation = new BlockPos(Vec3.atCenterOf(worldPosition)
|
||||
.add(Vec3.atCenterOf(deployerTile.getBlockPos()))
|
||||
.add(Vec3.atCenterOf(deployerBlockEntity.getBlockPos()))
|
||||
.scale(.5f));
|
||||
level.playSound(null, soundLocation, SoundEvents.PLAYER_ATTACK_NODAMAGE, SoundSource.BLOCKS, .75f, .75f);
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
player.setYRot(direction.toYRot());
|
||||
|
||||
if (direction == Direction.DOWN
|
||||
&& TileEntityBehaviour.get(level, clickedPos, TransportedItemStackHandlerBehaviour.TYPE) != null)
|
||||
&& BlockEntityBehaviour.get(level, clickedPos, TransportedItemStackHandlerBehaviour.TYPE) != null)
|
||||
return; // Belt processing handled in BeltDeployerCallbacks
|
||||
|
||||
DeployerHandler.activate(player, center, clickedPos, movementVector, mode);
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue