Merge branch 'mc1.18/0.5.1' into mc1.18/0.5.1-repolish

This commit is contained in:
simibubi 2023-02-24 22:29:10 +01:00
commit 51e3aadd34
1001 changed files with 27049 additions and 67113 deletions

View file

@ -49,6 +49,9 @@ body:
label: Mod Version label: Mod Version
description: The version of the mod you were using when the bug occured description: The version of the mod you were using when the bug occured
options: options:
- "0.5.0i"
- "0.5.0h"
- "0.5.0g"
- "0.5.0f" - "0.5.0f"
- "0.5.0e" - "0.5.0e"
- "0.5.0d" - "0.5.0d"

46
.github/workflows/localization.yml vendored Normal file
View file

@ -0,0 +1,46 @@
# This workflow will run Crowdin Action that will upload new texts to Crowdin, download the newest translations and create a PR
# For more information see: https://github.com/crowdin/github-action
name: Crowdin Action
# Controls when the action will run.
on:
# Only run when started manually
workflow_dispatch:
inputs:
uploadTranslations:
description: "Set to true to upload (changed) translations to Crowdin"
type: boolean
required: true
default: false
#schedule:
#- cron: '0 */6 * * *' # Every 6 hours - https://crontab.guru/#0_*/6_*_*_*
jobs:
synchronize-with-crowdin:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: crowdin action
uses: crowdin/github-action@1.4.9
with:
# Upload sources to Crowdin
upload_sources: true
# Upload translations to Crowdin, only use true at initial run
upload_translations: ${{ github.event.inputs.uploadTranslations }}
# Make pull request of Crowdin translations
download_translations: true
# To download translations to the specified version branch
localization_branch_name: l10n_crowdin_translations
# Create pull request after pushing to branch
create_pull_request: true
pull_request_title: 'New Crowdin translations'
pull_request_body: 'New Crowdin pull request with translations'
pull_request_base_branch_name: 'mc1.18/dev'
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}

View file

@ -5,7 +5,7 @@
<a href="https://github.com/Creators-of-Create/Create/blob/master/LICENSE"><img src="https://img.shields.io/github/license/Creators-of-Create/Create?style=flat&color=900c3f" alt="License"></a> <a href="https://github.com/Creators-of-Create/Create/blob/master/LICENSE"><img src="https://img.shields.io/github/license/Creators-of-Create/Create?style=flat&color=900c3f" alt="License"></a>
<a href="https://discord.gg/hmaD7Se"><img src="https://img.shields.io/discord/620934202875183104?color=5865f2&label=Discord&style=flat" alt="Discord"></a> <a href="https://discord.gg/hmaD7Se"><img src="https://img.shields.io/discord/620934202875183104?color=5865f2&label=Discord&style=flat" alt="Discord"></a>
<a href="https://www.curseforge.com/minecraft/mc-mods/create"><img src="http://cf.way2muchnoise.eu/328085.svg" alt="CF"></a> <a href="https://www.curseforge.com/minecraft/mc-mods/create"><img src="http://cf.way2muchnoise.eu/328085.svg" alt="CF"></a>
<a href="https://modrinth.com/mod/create"><img src="https://img.shields.io/badge/dynamic/json?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDUxMiA1MTQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM6c2VyaWY9Imh0dHA6Ly93d3cuc2VyaWYuY29tLyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyI+CiAgICA8Zz4KICAgICAgICA8ZyBpZD0ibW9kcmludGgiPgogICAgICAgICAgICA8cGF0aCBkPSJNNTAzLjE2LDMyMy41NkM1MTQuNTUsMjgxLjQ3IDUxNS4zMiwyMzUuOTEgNTAzLjIsMTkwLjc2QzQ2Ni41Nyw1NC4yMyAzMjYuMDQsLTI2LjggMTg5LjMzLDkuNzhDODMuODEsMzguMDIgMTEuMzksMTI4LjA3IDAuNjksMjMwLjQ3TDQzLjk5LDIzMC40N0M1NC4yOSwxNDcuMzMgMTEzLjc0LDc0LjczIDE5OS43NSw1MS43MUMzMDYuMDUsMjMuMjYgNDE1LjEzLDgwLjY3IDQ1My4xNywxODEuMzhMNDExLjAzLDE5Mi42NUMzOTEuNjQsMTQ1LjggMzUyLjU3LDExMS40NSAzMDYuMyw5Ni44MkwyOTguNTYsMTQwLjY2QzMzNS4wOSwxNTQuMTMgMzY0LjcyLDE4NC41IDM3NS41NiwyMjQuOTFDMzkxLjM2LDI4My44IDM2MS45NCwzNDQuMTQgMzA4LjU2LDM2OS4xN0wzMjAuMDksNDEyLjE2QzM5MC4yNSwzODMuMjEgNDMyLjQsMzEwLjMgNDIyLjQzLDIzNS4xNEw0NjQuNDEsMjIzLjkxQzQ2OC45MSwyNTIuNjIgNDY3LjM1LDI4MS4xNiA0NjAuNTUsMzA4LjA3TDUwMy4xNiwzMjMuNTZaIiBzdHlsZT0iZmlsbDpyZ2IoMjMsMjMsMjUpOyIvPgogICAgICAgICAgICA8cGF0aCBkPSJNMzIxLjk5LDUwNC4yMkMxODUuMjcsNTQwLjggNDQuNzUsNDU5Ljc3IDguMTEsMzIzLjI0QzMuODQsMzA3LjMxIDEuMTcsMjkxLjMzIDAsMjc1LjQ2TDQzLjI3LDI3NS40NkM0NC4zNiwyODcuMzcgNDYuNDcsMjk5LjM1IDQ5LjY4LDMxMS4yOUM1My4wNCwzMjMuOCA1Ny40NSwzMzUuNzUgNjIuNzksMzQ3LjA3TDEwMS4zOCwzMjMuOTJDOTguMTMsMzE2LjQyIDk1LjM5LDMwOC42IDkzLjIxLDMwMC40N0M2OS4xNywyMTAuODcgMTIyLjQxLDExOC43NyAyMTIuMTMsOTQuNzZDMjI5LjEzLDkwLjIxIDI0Ni4yMyw4OC40NCAyNjIuOTMsODkuMTVMMjU1LjE5LDEzM0MyNDQuNzMsMTMzLjA1IDIzNC4xMSwxMzQuNDIgMjIzLjUzLDEzNy4yNUMxNTcuMzEsMTU0Ljk4IDExOC4wMSwyMjIuOTUgMTM1Ljc1LDI4OS4wOUMxMzYuODUsMjkzLjE2IDEzOC4xMywyOTcuMTMgMTM5LjU5LDMwMC45OUwxODguOTQsMjcxLjM4TDE3NC4wNywyMzEuOTVMMjIwLjY3LDE4NC4wOEwyNzkuNTcsMTcxLjM5TDI5Ni42MiwxOTIuMzhMMjY5LjQ3LDIxOS44OEwyNDUuNzksMjI3LjMzTDIyOC44NywyNDQuNzJMMjM3LjE2LDI2Ny43OUMyMzcuMTYsMjY3Ljc5IDI1My45NSwyODUuNjMgMjUzLjk4LDI4NS42NEwyNzcuNywyNzkuMzNMMjk0LjU4LDI2MC43OUwzMzEuNDQsMjQ5LjEyTDM0Mi40MiwyNzMuODJMMzA0LjM5LDMyMC40NUwyNDAuNjYsMzQwLjYzTDIxMi4wOCwzMDguODFMMTYyLjI2LDMzOC43QzE4Ny44LDM2Ny43OCAyMjYuMiwzODMuOTMgMjY2LjAxLDM4MC41NkwyNzcuNTQsNDIzLjU1QzIxOC4xMyw0MzEuNDEgMTYwLjEsNDA2LjgyIDEyNC4wNSwzNjEuNjRMODUuNjQsMzg0LjY4QzEzNi4yNSw0NTEuMTcgMjIzLjg0LDQ4NC4xMSAzMDkuNjEsNDYxLjE2QzM3MS4zNSw0NDQuNjQgNDE5LjQsNDAyLjU2IDQ0NS40MiwzNDkuMzhMNDg4LjA2LDM2NC44OEM0NTcuMTcsNDMxLjE2IDM5OC4yMiw0ODMuODIgMzIxLjk5LDUwNC4yMloiIHN0eWxlPSJmaWxsOnJnYigyMywyMywyNSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K&label=&suffix=%20&query=downloads&url=https://api.modrinth.com/api/v1/mod/LNytGWDc&style=flat&color=242629&labelColor=5ca424" alt="Modrinth"></a> <a href="https://modrinth.com/mod/create"><img src="https://img.shields.io/modrinth/dt/create?logo=modrinth&label=&suffix=%20&style=flat&color=242629&labelColor=5ca424&logoColor=1c1c1c" alt="Modrinth"></a>
<br><br> <br><br>
</h1> </h1>

View file

@ -144,7 +144,7 @@ dependencies {
jarJar.pin(it, project.registrate_version) jarJar.pin(it, project.registrate_version)
} }
// Uncomment once Forge fixes mixins for included jars // Uncomment once Forge fixes mixins for included jars
//jarJar(group: 'com.jozufozu.flywheel', name: "flywheel-forge-${flywheel_minecraft_version}", version: '[0.6.4,0.6.5)') { //jarJar(group: 'com.jozufozu.flywheel', name: "flywheel-forge-${flywheel_minecraft_version}", version: '[0.6.8,0.6.9)') {
// jarJar.pin(it, project.flywheel_version) // jarJar.pin(it, project.flywheel_version)
//} //}

39
crowdin.yml Normal file
View file

@ -0,0 +1,39 @@
"project_id_env": "CROWDIN_PROJECT_ID"
"api_token_env": "CROWDIN_PERSONAL_TOKEN"
"base_path": "."
"preserve_hierarchy": true
"files": [
{
"source": "src/generated/resources/assets/create/lang/en_us.json",
"translation": "src/main/resources/assets/create/lang/%locale_with_underscore%.json",
"languages_mapping": {
"locale_with_underscore": {
"cs": "cs_cz",
"da": "da_dk",
"de": "de_de",
"es-CL": "es_cl",
"es-ES": "es_es",
"es-MX": "es_mx",
"fr": "fr_fr",
"hu": "hu_hu",
"it": "it_it",
"ja": "ja_jp",
"ko": "ko_kr",
"nl": "nl_nl",
"no": "no_no",
"pl": "pl_pl",
"pt-BR": "pt_br",
"pt-PT": "pt_pt",
"ro": "ro_ro",
"ru": "ru_ru",
"sv-SE": "sv_se",
"th": "th_th",
"uk": "uk_ua",
"zh-CN": "zh_cn",
"zh-TW": "zh_tw",
}
}
}
]

View file

@ -8,7 +8,7 @@ mod_version = 0.5.1
artifact_minecraft_version = 1.18.2 artifact_minecraft_version = 1.18.2
minecraft_version = 1.18.2 minecraft_version = 1.18.2
forge_version = 40.1.60 forge_version = 40.2.1
# build dependency versions # build dependency versions
forgegradle_version = 5.1.53 forgegradle_version = 5.1.53
@ -16,12 +16,12 @@ mixingradle_version = 0.7-SNAPSHOT
mixin_version = 0.8.5 mixin_version = 0.8.5
librarian_version = 1.+ librarian_version = 1.+
cursegradle_version = 1.4.0 cursegradle_version = 1.4.0
parchment_version = 2022.07.10 parchment_version = 2022.11.06
# dependency versions # dependency versions
registrate_version = MC1.18.2-1.1.3 registrate_version = MC1.18.2-1.1.3
flywheel_minecraft_version = 1.18.2 flywheel_minecraft_version = 1.18.2
flywheel_version = 0.6.5-91 flywheel_version = 0.6.8.a-99
jei_minecraft_version = 1.18.2 jei_minecraft_version = 1.18.2
jei_version = 9.7.0.209 jei_version = 9.7.0.209
curios_minecraft_version = 1.18.2 curios_minecraft_version = 1.18.2

View file

@ -573,23 +573,7 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
f7ccfdfb562774ed479b0eb4428b01c9370a0e82 assets/create/lang/en_ud.json f7ccfdfb562774ed479b0eb4428b01c9370a0e82 assets/create/lang/en_ud.json
a687bb0e852475b0767811d1ed312cea575c8d67 assets/create/lang/en_us.json 95b45943acc80d5269a1659d826c9037e85cf8a3 assets/create/lang/en_us.json
24ac91b8858450b43759a28f4e723770ff830f3e assets/create/lang/unfinished/de_de.json
03d654aa6010284357870c7182b09b0f3c002a36 assets/create/lang/unfinished/es_cl.json
5cc92870004fc51c4161e18fe47584c3ed007d95 assets/create/lang/unfinished/es_es.json
777b19874e306ff7cf15680daa09cb96f6932bac assets/create/lang/unfinished/fr_fr.json
6195558d5fab2313cbecdf6700cac56ba6cc01bc assets/create/lang/unfinished/it_it.json
ec44c15168f39ddef731a63c381334648d2c43ec assets/create/lang/unfinished/ja_jp.json
a748f9aa8e1a2e46a767534d108f45106d9ba1cd assets/create/lang/unfinished/ko_kr.json
f2b869014a5a09bb6afde268bca429d30678b513 assets/create/lang/unfinished/nl_nl.json
06ab4f23425ecdabd0f6d448cd4f3cce9c4b6340 assets/create/lang/unfinished/pl_pl.json
8e3c503979b094574aa63bfed38c49d8a89a38a2 assets/create/lang/unfinished/pt_br.json
1d0aaae3e650b5c0b5331b12fb65c0b9287510b3 assets/create/lang/unfinished/pt_pt.json
f9446a1fe1546c679553b6ae06afc52b77c1d249 assets/create/lang/unfinished/ro_ro.json
140a5ac56c031fe47aaedb1c3ee1e7d8ff363240 assets/create/lang/unfinished/ru_ru.json
3bc54c7c305a6f33e9c1eb84bfd7d4282c6e635d assets/create/lang/unfinished/uk_ua.json
7096c87595fa806088e0602cb165cc6c68336c96 assets/create/lang/unfinished/zh_cn.json
994886a932bc8cc19c8203273e2b0d5852c86fd5 assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
@ -5681,22 +5665,22 @@ d79c82bc6cf59b073b2f51f5fea9c98e81d14b68 data/create/recipes/weathered_copper_ti
452d480dd50b97fce72e0c89429cf68db534c6b2 data/create/recipes/weathered_copper_tile_slab_from_weathered_copper_tiles_stonecutting.json 452d480dd50b97fce72e0c89429cf68db534c6b2 data/create/recipes/weathered_copper_tile_slab_from_weathered_copper_tiles_stonecutting.json
ac265a674626e0e832330086fd18fe0be37fc327 data/create/recipes/weathered_copper_tile_stairs.json ac265a674626e0e832330086fd18fe0be37fc327 data/create/recipes/weathered_copper_tile_stairs.json
5942a571f79c40524bbf408775cf91de4715f2b6 data/create/recipes/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json 5942a571f79c40524bbf408775cf91de4715f2b6 data/create/recipes/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json
2d549ea56fb226c0e31e66c0391996093f8bece9 data/create/tags/blocks/brittle.json 2a2700b43614f86d3294726595cb28ed7dca4387 data/create/tags/blocks/brittle.json
d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/blocks/casing.json d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/blocks/casing.json
bc203f09dd7f48965d146d0bd035fb904cb75e7d data/create/tags/blocks/copycat_allow.json bc203f09dd7f48965d146d0bd035fb904cb75e7d data/create/tags/blocks/copycat_allow.json
d4a3b66f4b763b9a2dcdea74b7273f0ae85cb335 data/create/tags/blocks/copycat_deny.json d4a3b66f4b763b9a2dcdea74b7273f0ae85cb335 data/create/tags/blocks/copycat_deny.json
443f75adbf3d2f6fb0aad4b344372669470065b8 data/create/tags/blocks/fan_transparent.json 2b4c93e5a752ebf54217594766f30d8d60cb4343 data/create/tags/blocks/fan_transparent.json
ee6d2b53d81f2bed492662b6c06f46c4f2b9ef9b data/create/tags/blocks/movable_empty_collider.json
6e5d3b2123fbb00e7f439c091623619502551bca data/create/tags/blocks/non_movable.json 6e5d3b2123fbb00e7f439c091623619502551bca data/create/tags/blocks/non_movable.json
10781e8cfcbb3486327aace3aa00e437fb44b331 data/create/tags/blocks/ore_override_stone.json 10781e8cfcbb3486327aace3aa00e437fb44b331 data/create/tags/blocks/ore_override_stone.json
418c6da531d6206e3cbe4049dce3db23c4270bed data/create/tags/blocks/passive_boiler_heaters.json 760adb521c2e475a6414f97291f46c02d294fa74 data/create/tags/blocks/passive_boiler_heaters.json
3492722cffa53b96d7a91f8c04d792329d902c85 data/create/tags/blocks/safe_nbt.json 9751aa15c651a076024eb52fcffa8ce6aa7a405e data/create/tags/blocks/safe_nbt.json
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json
8861f982c335a1f17796df4af53a7d5dc91fc85a data/create/tags/blocks/tree_attachments.json 9460e92c8e483446318b849abe7e6f52dcd4a269 data/create/tags/blocks/tree_attachments.json
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json 50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json 96671fd75d4209280940ef774c4185f33610a64d data/create/tags/blocks/wrench_pickup.json
c71f8ee0103d0c1b0d1b0727f1ecdc4d1999f1f6 data/create/tags/blocks/wrench_pickup.json
a8bdc387cfa6296ebcc4af14323e2ddb632234dc data/create/tags/fluids/bottomless/allow.json a8bdc387cfa6296ebcc4af14323e2ddb632234dc data/create/tags/fluids/bottomless/allow.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/fluids/bottomless/deny.json 74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/fluids/bottomless/deny.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_fuel/regular.json 74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_fuel/regular.json
@ -5704,6 +5688,7 @@ a8bdc387cfa6296ebcc4af14323e2ddb632234dc data/create/tags/fluids/bottomless/allo
d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/items/casing.json d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/items/casing.json
c98ffdc2780c2a7690c590f46f014aeee7b0b504 data/create/tags/items/create_ingots.json c98ffdc2780c2a7690c590f46f014aeee7b0b504 data/create/tags/items/create_ingots.json
4480f211f4a37bfee193eba945bc9f5a8d2c6e34 data/create/tags/items/crushed_ores.json 4480f211f4a37bfee193eba945bc9f5a8d2c6e34 data/create/tags/items/crushed_ores.json
49847bfbea11808b5101c972023a7f5833fe5a14 data/create/tags/items/deployable_drink.json
67385d5198d0796ec8f0d2c6ae144c672f4317a1 data/create/tags/items/modded_stripped_logs.json 67385d5198d0796ec8f0d2c6ae144c672f4317a1 data/create/tags/items/modded_stripped_logs.json
27a1074a88a7b939c811341086afece325ed724c data/create/tags/items/modded_stripped_wood.json 27a1074a88a7b939c811341086afece325ed724c data/create/tags/items/modded_stripped_wood.json
8c8f6658ee72bdea2fcef77bade7bfa48de784c8 data/create/tags/items/pressurized_air_sources.json 8c8f6658ee72bdea2fcef77bade7bfa48de784c8 data/create/tags/items/pressurized_air_sources.json
@ -5744,7 +5729,6 @@ ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/blocks/storage_blocks/b
6b73c57912934d09233ad2966110968a6109f2c9 data/forge/tags/fluids/chocolate.json 6b73c57912934d09233ad2966110968a6109f2c9 data/forge/tags/fluids/chocolate.json
391c9b2be5740aea943a8a5fe27eb327e2d973b0 data/forge/tags/fluids/honey.json 391c9b2be5740aea943a8a5fe27eb327e2d973b0 data/forge/tags/fluids/honey.json
d6a4e4fe1204b718010543a28a9b9ec4e0977bd7 data/forge/tags/fluids/tea.json d6a4e4fe1204b718010543a28a9b9ec4e0977bd7 data/forge/tags/fluids/tea.json
d9ffc62a496946fc4848934e7c0a6e917337f8be data/forge/tags/items/beacon_payment.json
5af3164b14c92d2d6e235b5d4eebd93cbee37c0a data/forge/tags/items/buckets/honey.json 5af3164b14c92d2d6e235b5d4eebd93cbee37c0a data/forge/tags/items/buckets/honey.json
2f7cf5a2d485f25d451da9771ed466591cfa5204 data/forge/tags/items/dough.json 2f7cf5a2d485f25d451da9771ed466591cfa5204 data/forge/tags/items/dough.json
2f7cf5a2d485f25d451da9771ed466591cfa5204 data/forge/tags/items/dough/wheat.json 2f7cf5a2d485f25d451da9771ed466591cfa5204 data/forge/tags/items/dough/wheat.json
@ -5798,6 +5782,7 @@ d622e97373b1e96632ffb0a312ef04696da0ed4d data/minecraft/tags/blocks/trapdoors.js
0ec220675cbf8a6eeb47d42b7409395a0cb6ae6e data/minecraft/tags/blocks/walls.json 0ec220675cbf8a6eeb47d42b7409395a0cb6ae6e data/minecraft/tags/blocks/walls.json
e16d74571ae10007f06f3b86ddf05d3ca9b73559 data/minecraft/tags/blocks/wooden_doors.json e16d74571ae10007f06f3b86ddf05d3ca9b73559 data/minecraft/tags/blocks/wooden_doors.json
09d26bcd0f94459f945219997277c4fbf14adeb7 data/minecraft/tags/fluids/water.json 09d26bcd0f94459f945219997277c4fbf14adeb7 data/minecraft/tags/fluids/water.json
d9ffc62a496946fc4848934e7c0a6e917337f8be data/minecraft/tags/items/beacon_payment_items.json
e16d74571ae10007f06f3b86ddf05d3ca9b73559 data/minecraft/tags/items/doors.json e16d74571ae10007f06f3b86ddf05d3ca9b73559 data/minecraft/tags/items/doors.json
49cadea86f6b63d5065b859a0d0e7ad772cf51d6 data/minecraft/tags/items/piglin_loved.json 49cadea86f6b63d5065b859a0d0e7ad772cf51d6 data/minecraft/tags/items/piglin_loved.json
49a043b38ca8d4e2fa8cba9ceee3b69715a8476e data/minecraft/tags/items/slabs.json 49a043b38ca8d4e2fa8cba9ceee3b69715a8476e data/minecraft/tags/items/slabs.json

View file

@ -1142,6 +1142,7 @@
"create.schematicAndQuill.saved": "Saved as %1$s", "create.schematicAndQuill.saved": "Saved as %1$s",
"create.schematic.invalid": "[!] Invalid Item - Use the Schematic Table instead", "create.schematic.invalid": "[!] Invalid Item - Use the Schematic Table instead",
"create.schematic.error": "Schematic failed to Load - Check Game Logs",
"create.schematic.position": "Position", "create.schematic.position": "Position",
"create.schematic.rotation": "Rotation", "create.schematic.rotation": "Rotation",
"create.schematic.rotation.none": "None", "create.schematic.rotation.none": "None",
@ -1207,12 +1208,12 @@
"create.gui.schematicannon.option.replaceWithAny": "Replace Solid with Any", "create.gui.schematicannon.option.replaceWithAny": "Replace Solid with Any",
"create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty", "create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty",
"create.gui.schematicannon.option.skipMissing": "Skip missing Blocks", "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.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.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.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.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.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.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.", "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.",
@ -1235,6 +1236,8 @@
"create.schematicannon.status.schematicInvalid": "Schematic Invalid", "create.schematicannon.status.schematicInvalid": "Schematic Invalid",
"create.schematicannon.status.schematicNotPlaced": "Schematic not Positioned", "create.schematicannon.status.schematicNotPlaced": "Schematic not Positioned",
"create.schematicannon.status.schematicExpired": "Schematic File Expired", "create.schematicannon.status.schematicExpired": "Schematic File Expired",
"create.schematicannon.status.schematicErrored": "Incompatible Blocks",
"create.schematicannon.status.schematicErroredCheckLogs": "Check Server Logs",
"create.materialChecklist": "Material Checklist", "create.materialChecklist": "Material Checklist",
"create.materialChecklist.blocksNotLoaded": "* Disclaimer *\n\nMaterial List may be inaccurate due to relevant chunks not being loaded.", "create.materialChecklist.blocksNotLoaded": "* Disclaimer *\n\nMaterial List may be inaccurate due to relevant chunks not being loaded.",
@ -1781,6 +1784,9 @@
"create.contraption.minecart_contraption_too_big": "This Cart Contraption seems too big to pick up", "create.contraption.minecart_contraption_too_big": "This Cart Contraption seems too big to pick up",
"create.contraption.minecart_contraption_illegal_pickup": "A mystical force is binding this Cart Contraption to the world", "create.contraption.minecart_contraption_illegal_pickup": "A mystical force is binding this Cart Contraption to the world",
"enchantment.create.capacity.desc": "Increases Backtank air capacity.",
"enchantment.create.potato_recovery.desc": "Potato Cannon projectiles have a chance to be reused.",
"_": "->------------------------] Subtitles [------------------------<-", "_": "->------------------------] Subtitles [------------------------<-",

View file

@ -25,10 +25,10 @@
"create:redstone_link", "create:redstone_link",
"create:peculiar_bell", "create:peculiar_bell",
"create:haunted_bell", "create:haunted_bell",
"#minecraft:doors",
"#minecraft:beds",
"minecraft:flower_pot",
"minecraft:bell", "minecraft:bell",
"minecraft:cocoa" "minecraft:cocoa",
"minecraft:flower_pot",
"#minecraft:beds",
"#minecraft:doors"
] ]
} }

View file

@ -4,8 +4,9 @@
"create:blaze_burner", "create:blaze_burner",
"create:lit_blaze_burner", "create:lit_blaze_burner",
"create:sail_frame", "create:sail_frame",
"#minecraft:fences", "minecraft:iron_bars",
"#minecraft:campfires", "#minecraft:campfires",
"minecraft:iron_bars" "#minecraft:fences",
"#minecraft:leaves"
] ]
} }

View file

@ -0,0 +1,8 @@
{
"replace": false,
"values": [
"minecraft:cobweb",
"minecraft:powder_snow",
"#minecraft:fence_gates"
]
}

View file

@ -3,9 +3,9 @@
"values": [ "values": [
"create:blaze_burner", "create:blaze_burner",
"create:lit_blaze_burner", "create:lit_blaze_burner",
"#minecraft:fire",
"#minecraft:campfires",
"minecraft:magma_block", "minecraft:magma_block",
"minecraft:lava" "minecraft:lava",
"#minecraft:campfires",
"#minecraft:fire"
] ]
} }

View file

@ -27,7 +27,7 @@
"create:placard", "create:placard",
"create:pulse_repeater", "create:pulse_repeater",
"create:pulse_extender", "create:pulse_extender",
"#minecraft:signs", "#minecraft:banners",
"#minecraft:banners" "#minecraft:signs"
] ]
} }

View file

@ -2,9 +2,9 @@
"replace": false, "replace": false,
"values": [ "values": [
"minecraft:bee_nest", "minecraft:bee_nest",
"minecraft:vine", "minecraft:cocoa",
"minecraft:moss_carpet", "minecraft:moss_carpet",
"minecraft:shroomlight", "minecraft:shroomlight",
"minecraft:cocoa" "minecraft:vine"
] ]
} }

View file

@ -1,4 +0,0 @@
{
"replace": false,
"values": []
}

View file

@ -1,9 +1,6 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"#minecraft:rails",
"#minecraft:buttons",
"#minecraft:pressure_plates",
"minecraft:redstone_wire", "minecraft:redstone_wire",
"minecraft:redstone_torch", "minecraft:redstone_torch",
"minecraft:repeater", "minecraft:repeater",
@ -17,6 +14,9 @@
"minecraft:tripwire_hook", "minecraft:tripwire_hook",
"minecraft:daylight_detector", "minecraft:daylight_detector",
"minecraft:target", "minecraft:target",
"minecraft:hopper" "minecraft:hopper",
"#minecraft:buttons",
"#minecraft:pressure_plates",
"#minecraft:rails"
] ]
} }

View file

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"minecraft:milk_bucket",
"minecraft:potion"
]
}

View file

@ -2,20 +2,19 @@ package com.simibubi.create;
import static com.simibubi.create.AllInteractionBehaviours.interactionBehaviour; import static com.simibubi.create.AllInteractionBehaviours.interactionBehaviour;
import static com.simibubi.create.AllMovementBehaviours.movementBehaviour; import static com.simibubi.create.AllMovementBehaviours.movementBehaviour;
import static com.simibubi.create.AllTags.axeOnly; import static com.simibubi.create.Create.REGISTRATE;
import static com.simibubi.create.AllTags.axeOrPickaxe;
import static com.simibubi.create.AllTags.pickaxeOnly;
import static com.simibubi.create.AllTags.tagBlockAndItem;
import static com.simibubi.create.content.AllSections.SCHEMATICS;
import static com.simibubi.create.content.logistics.block.display.AllDisplayBehaviours.assignDataBehaviour; import static com.simibubi.create.content.logistics.block.display.AllDisplayBehaviours.assignDataBehaviour;
import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock; import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock;
import static com.simibubi.create.foundation.data.BlockStateGen.simpleCubeAll; import static com.simibubi.create.foundation.data.BlockStateGen.simpleCubeAll;
import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures; import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures;
import static com.simibubi.create.foundation.data.ModelGen.customItemModel; import static com.simibubi.create.foundation.data.ModelGen.customItemModel;
import static com.simibubi.create.foundation.data.TagGen.axeOnly;
import static com.simibubi.create.foundation.data.TagGen.axeOrPickaxe;
import static com.simibubi.create.foundation.data.TagGen.pickaxeOnly;
import static com.simibubi.create.foundation.data.TagGen.tagBlockAndItem;
import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.AllTags.AllItemTags;
import com.simibubi.create.content.AllSections;
import com.simibubi.create.content.contraptions.base.CasingBlock; import com.simibubi.create.content.contraptions.base.CasingBlock;
import com.simibubi.create.content.contraptions.components.AssemblyOperatorBlockItem; import com.simibubi.create.content.contraptions.components.AssemblyOperatorBlockItem;
import com.simibubi.create.content.contraptions.components.actors.BellMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.BellMovementBehaviour;
@ -125,6 +124,7 @@ import com.simibubi.create.content.contraptions.relays.belt.BeltModel;
import com.simibubi.create.content.contraptions.relays.elementary.BracketedKineticBlockModel; import com.simibubi.create.content.contraptions.relays.elementary.BracketedKineticBlockModel;
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock; import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
import com.simibubi.create.content.contraptions.relays.elementary.CogwheelBlockItem; import com.simibubi.create.content.contraptions.relays.elementary.CogwheelBlockItem;
import com.simibubi.create.content.contraptions.relays.elementary.EncasingRegistry;
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyBlock; import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyBlock;
import com.simibubi.create.content.contraptions.relays.encased.ClutchBlock; import com.simibubi.create.content.contraptions.relays.encased.ClutchBlock;
@ -243,7 +243,7 @@ import com.simibubi.create.foundation.data.BuilderTransformers;
import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.data.ModelGen; import com.simibubi.create.foundation.data.ModelGen;
import com.simibubi.create.foundation.data.SharedProperties; import com.simibubi.create.foundation.data.SharedProperties;
import com.simibubi.create.foundation.item.TooltipHelper; import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.item.UncontainableBlockItem; import com.simibubi.create.foundation.item.UncontainableBlockItem;
import com.simibubi.create.foundation.utility.ColorHandlers; import com.simibubi.create.foundation.utility.ColorHandlers;
import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Couple;
@ -290,15 +290,12 @@ import net.minecraftforge.common.Tags;
public class AllBlocks { public class AllBlocks {
private static final CreateRegistrate REGISTRATE = Create.registrate() static {
.creativeModeTab(() -> Create.BASE_CREATIVE_TAB); REGISTRATE.creativeModeTab(() -> AllCreativeModeTabs.BASE_CREATIVE_TAB);
}
// Schematics // Schematics
static {
REGISTRATE.startSection(SCHEMATICS);
}
public static final BlockEntry<SchematicannonBlock> SCHEMATICANNON = public static final BlockEntry<SchematicannonBlock> SCHEMATICANNON =
REGISTRATE.block("schematicannon", SchematicannonBlock::new) REGISTRATE.block("schematicannon", SchematicannonBlock::new)
.initialProperties(() -> Blocks.DISPENSER) .initialProperties(() -> Blocks.DISPENSER)
@ -332,10 +329,6 @@ public class AllBlocks {
// Kinetics // Kinetics
static {
REGISTRATE.startSection(AllSections.KINETICS);
}
public static final BlockEntry<ShaftBlock> SHAFT = REGISTRATE.block("shaft", ShaftBlock::new) public static final BlockEntry<ShaftBlock> SHAFT = REGISTRATE.block("shaft", ShaftBlock::new)
.initialProperties(SharedProperties::stone) .initialProperties(SharedProperties::stone)
.properties(p -> p.color(MaterialColor.METAL)) .properties(p -> p.color(MaterialColor.METAL))
@ -372,23 +365,26 @@ public class AllBlocks {
.register(); .register();
public static final BlockEntry<EncasedShaftBlock> ANDESITE_ENCASED_SHAFT = public static final BlockEntry<EncasedShaftBlock> ANDESITE_ENCASED_SHAFT =
REGISTRATE.block("andesite_encased_shaft", EncasedShaftBlock::andesite) REGISTRATE.block("andesite_encased_shaft", p -> new EncasedShaftBlock(p, AllBlocks.ANDESITE_CASING::get))
.properties(p -> p.color(MaterialColor.PODZOL)) .properties(p -> p.color(MaterialColor.PODZOL))
.transform(BuilderTransformers.encasedShaft("andesite", () -> AllSpriteShifts.ANDESITE_CASING)) .transform(BuilderTransformers.encasedShaft("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.transform(EncasingRegistry.addVariantTo(AllBlocks.SHAFT))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
public static final BlockEntry<EncasedShaftBlock> BRASS_ENCASED_SHAFT = public static final BlockEntry<EncasedShaftBlock> BRASS_ENCASED_SHAFT =
REGISTRATE.block("brass_encased_shaft", EncasedShaftBlock::brass) REGISTRATE.block("brass_encased_shaft", p -> new EncasedShaftBlock(p, AllBlocks.BRASS_CASING::get))
.properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN)) .properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN))
.transform(BuilderTransformers.encasedShaft("brass", () -> AllSpriteShifts.BRASS_CASING)) .transform(BuilderTransformers.encasedShaft("brass", () -> AllSpriteShifts.BRASS_CASING))
.transform(EncasingRegistry.addVariantTo(AllBlocks.SHAFT))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_COGWHEEL = REGISTRATE public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_COGWHEEL = REGISTRATE
.block("andesite_encased_cogwheel", p -> EncasedCogwheelBlock.andesite(false, p)) .block("andesite_encased_cogwheel", p -> new EncasedCogwheelBlock(p, false, AllBlocks.ANDESITE_CASING::get))
.properties(p -> p.color(MaterialColor.PODZOL)) .properties(p -> p.color(MaterialColor.PODZOL))
.transform(BuilderTransformers.encasedCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING)) .transform(BuilderTransformers.encasedCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.transform(EncasingRegistry.addVariantTo(AllBlocks.COGWHEEL))
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.ANDESITE_CASING, .onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.ANDESITE_CASING,
Couple.create(AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_SIDE, Couple.create(AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_SIDE,
AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_OTHERSIDE)))) AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_OTHERSIDE))))
@ -396,9 +392,10 @@ public class AllBlocks {
.register(); .register();
public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_COGWHEEL = public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_COGWHEEL =
REGISTRATE.block("brass_encased_cogwheel", p -> EncasedCogwheelBlock.brass(false, p)) REGISTRATE.block("brass_encased_cogwheel", p -> new EncasedCogwheelBlock(p, false, AllBlocks.BRASS_CASING::get))
.properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN)) .properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN))
.transform(BuilderTransformers.encasedCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING)) .transform(BuilderTransformers.encasedCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING))
.transform(EncasingRegistry.addVariantTo(AllBlocks.COGWHEEL))
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.BRASS_CASING, .onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.BRASS_CASING,
Couple.create(AllSpriteShifts.BRASS_ENCASED_COGWHEEL_SIDE, Couple.create(AllSpriteShifts.BRASS_ENCASED_COGWHEEL_SIDE,
AllSpriteShifts.BRASS_ENCASED_COGWHEEL_OTHERSIDE)))) AllSpriteShifts.BRASS_ENCASED_COGWHEEL_OTHERSIDE))))
@ -406,16 +403,18 @@ public class AllBlocks {
.register(); .register();
public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_LARGE_COGWHEEL = public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_LARGE_COGWHEEL =
REGISTRATE.block("andesite_encased_large_cogwheel", p -> EncasedCogwheelBlock.andesite(true, p)) REGISTRATE.block("andesite_encased_large_cogwheel", p -> new EncasedCogwheelBlock(p, true, AllBlocks.ANDESITE_CASING::get))
.properties(p -> p.color(MaterialColor.PODZOL)) .properties(p -> p.color(MaterialColor.PODZOL))
.transform(BuilderTransformers.encasedLargeCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING)) .transform(BuilderTransformers.encasedLargeCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.transform(EncasingRegistry.addVariantTo(AllBlocks.LARGE_COGWHEEL))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_LARGE_COGWHEEL = public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_LARGE_COGWHEEL =
REGISTRATE.block("brass_encased_large_cogwheel", p -> EncasedCogwheelBlock.brass(true, p)) REGISTRATE.block("brass_encased_large_cogwheel", p -> new EncasedCogwheelBlock(p, true, AllBlocks.BRASS_CASING::get))
.properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN)) .properties(p -> p.color(MaterialColor.TERRACOTTA_BROWN))
.transform(BuilderTransformers.encasedLargeCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING)) .transform(BuilderTransformers.encasedLargeCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING))
.transform(EncasingRegistry.addVariantTo(AllBlocks.LARGE_COGWHEEL))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
@ -614,7 +613,7 @@ public class AllBlocks {
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.transform(BuilderTransformers.cuckooClock()) .transform(BuilderTransformers.cuckooClock())
.lang("Cuckoo Clock") .lang("Cuckoo Clock")
.onRegisterAfter(Registry.ITEM_REGISTRY, c -> TooltipHelper.referTo(c, CUCKOO_CLOCK)) .onRegisterAfter(Registry.ITEM_REGISTRY, c -> ItemDescription.referKey(c, CUCKOO_CLOCK))
.register(); .register();
public static final BlockEntry<MillstoneBlock> MILLSTONE = REGISTRATE.block("millstone", MillstoneBlock::new) public static final BlockEntry<MillstoneBlock> MILLSTONE = REGISTRATE.block("millstone", MillstoneBlock::new)
@ -881,7 +880,7 @@ public class AllBlocks {
.register(); .register();
public static final BlockEntry<EncasedPipeBlock> ENCASED_FLUID_PIPE = public static final BlockEntry<EncasedPipeBlock> ENCASED_FLUID_PIPE =
REGISTRATE.block("encased_fluid_pipe", EncasedPipeBlock::new) REGISTRATE.block("encased_fluid_pipe", p -> new EncasedPipeBlock(p, AllBlocks.COPPER_CASING::get))
.initialProperties(SharedProperties::copperMetal) .initialProperties(SharedProperties::copperMetal)
.properties(p -> p.color(MaterialColor.TERRACOTTA_LIGHT_GRAY)) .properties(p -> p.color(MaterialColor.TERRACOTTA_LIGHT_GRAY))
.properties(BlockBehaviour.Properties::noOcclusion) .properties(BlockBehaviour.Properties::noOcclusion)
@ -892,6 +891,7 @@ public class AllBlocks {
(s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f))))) (s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
.loot((p, b) -> p.dropOther(b, FLUID_PIPE.get())) .loot((p, b) -> p.dropOther(b, FLUID_PIPE.get()))
.transform(EncasingRegistry.addVariantTo(AllBlocks.FLUID_PIPE))
.register(); .register();
public static final BlockEntry<GlassFluidPipeBlock> GLASS_FLUID_PIPE = public static final BlockEntry<GlassFluidPipeBlock> GLASS_FLUID_PIPE =
@ -1444,7 +1444,7 @@ public class AllBlocks {
.unlockedBy("has_seat", RegistrateRecipeProvider.has(AllItemTags.SEATS.tag)) .unlockedBy("has_seat", RegistrateRecipeProvider.has(AllItemTags.SEATS.tag))
.save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat")); .save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat"));
}) })
.onRegisterAfter(Registry.ITEM_REGISTRY, v -> TooltipHelper.referTo(v, "block.create.brown_seat")) .onRegisterAfter(Registry.ITEM_REGISTRY, v -> ItemDescription.useKey(v, "block.create.seat"))
.tag(AllBlockTags.SEATS.tag) .tag(AllBlockTags.SEATS.tag)
.item() .item()
.tag(AllItemTags.SEATS.tag) .tag(AllItemTags.SEATS.tag)
@ -1579,10 +1579,6 @@ public class AllBlocks {
// Logistics // Logistics
static {
REGISTRATE.startSection(AllSections.LOGISTICS);
}
public static final BlockEntry<ArmBlock> MECHANICAL_ARM = REGISTRATE.block("mechanical_arm", ArmBlock::new) public static final BlockEntry<ArmBlock> MECHANICAL_ARM = REGISTRATE.block("mechanical_arm", ArmBlock::new)
.initialProperties(SharedProperties::softMetal) .initialProperties(SharedProperties::softMetal)
.properties(p -> p.color(MaterialColor.TERRACOTTA_YELLOW)) .properties(p -> p.color(MaterialColor.TERRACOTTA_YELLOW))
@ -2024,10 +2020,6 @@ public class AllBlocks {
// Curiosities // Curiosities
static {
REGISTRATE.startSection(AllSections.CURIOSITIES);
}
public static final BlockEntry<BacktankBlock> COPPER_BACKTANK = public static final BlockEntry<BacktankBlock> COPPER_BACKTANK =
REGISTRATE.block("copper_backtank", BacktankBlock::new) REGISTRATE.block("copper_backtank", BacktankBlock::new)
.initialProperties(SharedProperties::copperMetal) .initialProperties(SharedProperties::copperMetal)
@ -2079,7 +2071,7 @@ public class AllBlocks {
.withExistingParent(colourName + "_toolbox", p.modLoc("block/toolbox/block")) .withExistingParent(colourName + "_toolbox", p.modLoc("block/toolbox/block"))
.texture("0", p.modLoc("block/toolbox/" + colourName))); .texture("0", p.modLoc("block/toolbox/" + colourName)));
}) })
.onRegisterAfter(Registry.ITEM_REGISTRY, v -> TooltipHelper.referTo(v, "block.create.toolbox")) .onRegisterAfter(Registry.ITEM_REGISTRY, v -> ItemDescription.useKey(v, "block.create.toolbox"))
.tag(AllBlockTags.TOOLBOXES.tag) .tag(AllBlockTags.TOOLBOXES.tag)
.item(UncontainableBlockItem::new) .item(UncontainableBlockItem::new)
.model((c, p) -> p.withExistingParent(colourName + "_toolbox", p.modLoc("block/toolbox/item")) .model((c, p) -> p.withExistingParent(colourName + "_toolbox", p.modLoc("block/toolbox/item"))
@ -2091,10 +2083,6 @@ public class AllBlocks {
// Materials // Materials
static {
REGISTRATE.startSection(AllSections.PALETTES);
}
public static final BlockEntry<Block> ZINC_ORE = REGISTRATE.block("zinc_ore", Block::new) public static final BlockEntry<Block> ZINC_ORE = REGISTRATE.block("zinc_ore", Block::new)
.initialProperties(() -> Blocks.GOLD_ORE) .initialProperties(() -> Blocks.GOLD_ORE)
.properties(p -> p.color(MaterialColor.METAL)) .properties(p -> p.color(MaterialColor.METAL))

View file

@ -0,0 +1,14 @@
package com.simibubi.create;
import com.simibubi.create.content.palettes.PalettesCreativeModeTab;
import com.simibubi.create.foundation.item.BaseCreativeModeTab;
import net.minecraft.world.item.CreativeModeTab;
public class AllCreativeModeTabs {
public static final CreativeModeTab BASE_CREATIVE_TAB = new BaseCreativeModeTab();
public static final CreativeModeTab PALETTES_CREATIVE_TAB = new PalettesCreativeModeTab();
public static void init() {
}
}

View file

@ -1,8 +1,9 @@
package com.simibubi.create; package com.simibubi.create;
import static com.simibubi.create.Create.REGISTRATE;
import com.simibubi.create.content.curiosities.armor.CapacityEnchantment; import com.simibubi.create.content.curiosities.armor.CapacityEnchantment;
import com.simibubi.create.content.curiosities.weapons.PotatoRecoveryEnchantment; import com.simibubi.create.content.curiosities.weapons.PotatoRecoveryEnchantment;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.tterrag.registrate.util.entry.RegistryEntry; import com.tterrag.registrate.util.entry.RegistryEntry;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
@ -11,8 +12,6 @@ import net.minecraft.world.item.enchantment.EnchantmentCategory;
public class AllEnchantments { public class AllEnchantments {
private static final CreateRegistrate REGISTRATE = Create.registrate();
public static final RegistryEntry<PotatoRecoveryEnchantment> POTATO_RECOVERY = REGISTRATE.object("potato_recovery") public static final RegistryEntry<PotatoRecoveryEnchantment> POTATO_RECOVERY = REGISTRATE.object("potato_recovery")
.enchantment(EnchantmentCategory.BOW, PotatoRecoveryEnchantment::new) .enchantment(EnchantmentCategory.BOW, PotatoRecoveryEnchantment::new)
.addSlots(EquipmentSlot.MAINHAND, EquipmentSlot.OFFHAND) .addSlots(EquipmentSlot.MAINHAND, EquipmentSlot.OFFHAND)

View file

@ -73,7 +73,7 @@ public class AllEntityTypes {
MobCategory group, int range, int updateFrequency, boolean sendVelocity, boolean immuneToFire, MobCategory group, int range, int updateFrequency, boolean sendVelocity, boolean immuneToFire,
NonNullConsumer<EntityType.Builder<T>> propertyBuilder) { NonNullConsumer<EntityType.Builder<T>> propertyBuilder) {
String id = Lang.asId(name); String id = Lang.asId(name);
return (CreateEntityBuilder<T, ?>) Create.registrate() return (CreateEntityBuilder<T, ?>) Create.REGISTRATE
.entity(id, factory, group) .entity(id, factory, group)
.properties(b -> b.setTrackingRange(range) .properties(b -> b.setTrackingRange(range)
.setUpdateInterval(updateFrequency) .setUpdateInterval(updateFrequency)

View file

@ -1,5 +1,7 @@
package com.simibubi.create; package com.simibubi.create;
import static com.simibubi.create.Create.REGISTRATE;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.simibubi.create.AllTags.AllFluidTags; import com.simibubi.create.AllTags.AllFluidTags;
@ -7,7 +9,6 @@ import com.simibubi.create.content.contraptions.fluids.VirtualFluid;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid.PotionFluidAttributes; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid.PotionFluidAttributes;
import com.simibubi.create.content.palettes.AllPaletteStoneTypes; import com.simibubi.create.content.palettes.AllPaletteStoneTypes;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.tterrag.registrate.util.entry.FluidEntry; import com.tterrag.registrate.util.entry.FluidEntry;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -20,8 +21,6 @@ import net.minecraftforge.fluids.ForgeFlowingFluid;
public class AllFluids { public class AllFluids {
private static final CreateRegistrate REGISTRATE = Create.registrate();
public static final FluidEntry<PotionFluid> POTION = public static final FluidEntry<PotionFluid> POTION =
REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new) REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new)
.lang("Potion") .lang("Potion")

View file

@ -9,7 +9,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.DoorMovingInteraction; import com.simibubi.create.content.contraptions.components.structureMovement.interaction.DoorMovingInteraction;
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.LeverMovingInteraction; import com.simibubi.create.content.contraptions.components.structureMovement.interaction.LeverMovingInteraction;
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.TrapdoorMovingInteraction; import com.simibubi.create.content.contraptions.components.structureMovement.interaction.TrapdoorMovingInteraction;
import com.simibubi.create.foundation.utility.CreateRegistry; import com.simibubi.create.foundation.utility.AttachedRegistry;
import com.tterrag.registrate.util.nullness.NonNullConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -18,10 +18,9 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IRegistryDelegate;
public class AllInteractionBehaviours { public class AllInteractionBehaviours {
private static final CreateRegistry<Block, MovingInteractionBehaviour> BLOCK_BEHAVIOURS = new CreateRegistry<>(ForgeRegistries.BLOCKS); private static final AttachedRegistry<Block, MovingInteractionBehaviour> BLOCK_BEHAVIOURS = new AttachedRegistry<>(ForgeRegistries.BLOCKS);
private static final List<BehaviourProvider> GLOBAL_BEHAVIOURS = new ArrayList<>(); private static final List<BehaviourProvider> GLOBAL_BEHAVIOURS = new ArrayList<>();
public static void registerBehaviour(ResourceLocation block, MovingInteractionBehaviour provider) { public static void registerBehaviour(ResourceLocation block, MovingInteractionBehaviour provider) {
@ -32,11 +31,6 @@ public class AllInteractionBehaviours {
BLOCK_BEHAVIOURS.register(block, provider); BLOCK_BEHAVIOURS.register(block, provider);
} }
@Deprecated(forRemoval = true)
public static void registerBehaviour(IRegistryDelegate<Block> block, MovingInteractionBehaviour provider) {
registerBehaviour(block.name(), provider);
}
public static void registerBehaviourProvider(BehaviourProvider provider) { public static void registerBehaviourProvider(BehaviourProvider provider) {
GLOBAL_BEHAVIOURS.add(provider); GLOBAL_BEHAVIOURS.add(provider);
} }

View file

@ -4,11 +4,7 @@ import static com.simibubi.create.AllTags.forgeItemTag;
import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS; import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS;
import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES; import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES;
import static com.simibubi.create.AllTags.AllItemTags.PLATES; import static com.simibubi.create.AllTags.AllItemTags.PLATES;
import static com.simibubi.create.content.AllSections.CURIOSITIES; import static com.simibubi.create.Create.REGISTRATE;
import static com.simibubi.create.content.AllSections.KINETICS;
import static com.simibubi.create.content.AllSections.LOGISTICS;
import static com.simibubi.create.content.AllSections.MATERIALS;
import static com.simibubi.create.content.AllSections.SCHEMATICS;
import static com.simibubi.create.foundation.data.recipe.CompatMetals.ALUMINUM; import static com.simibubi.create.foundation.data.recipe.CompatMetals.ALUMINUM;
import static com.simibubi.create.foundation.data.recipe.CompatMetals.LEAD; import static com.simibubi.create.foundation.data.recipe.CompatMetals.LEAD;
import static com.simibubi.create.foundation.data.recipe.CompatMetals.NICKEL; import static com.simibubi.create.foundation.data.recipe.CompatMetals.NICKEL;
@ -58,8 +54,8 @@ import com.simibubi.create.foundation.data.AssetLookup;
import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.data.recipe.CompatMetals; import com.simibubi.create.foundation.data.recipe.CompatMetals;
import com.simibubi.create.foundation.item.HiddenIngredientItem; import com.simibubi.create.foundation.item.HiddenIngredientItem;
import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.item.TagDependentIngredientItem; import com.simibubi.create.foundation.item.TagDependentIngredientItem;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.tterrag.registrate.util.entry.ItemEntry; import com.tterrag.registrate.util.entry.ItemEntry;
import net.minecraft.tags.ItemTags; import net.minecraft.tags.ItemTags;
@ -72,15 +68,12 @@ import net.minecraftforge.common.Tags;
public class AllItems { public class AllItems {
private static final CreateRegistrate REGISTRATE = Create.registrate()
.creativeModeTab(() -> Create.BASE_CREATIVE_TAB);
// Schematics
static { static {
REGISTRATE.startSection(MATERIALS); REGISTRATE.creativeModeTab(() -> AllCreativeModeTabs.BASE_CREATIVE_TAB);
} }
// Materials
public static final ItemEntry<Item> WHEAT_FLOUR = public static final ItemEntry<Item> WHEAT_FLOUR =
taggedIngredient("wheat_flour", forgeItemTag("flour/wheat"), forgeItemTag("flour")), taggedIngredient("wheat_flour", forgeItemTag("flour/wheat"), forgeItemTag("flour")),
DOUGH = taggedIngredient("dough", forgeItemTag("dough"), forgeItemTag("dough/wheat")), DOUGH = taggedIngredient("dough", forgeItemTag("dough"), forgeItemTag("dough/wheat")),
@ -200,10 +193,6 @@ public class AllItems {
// Kinetics // Kinetics
static {
REGISTRATE.startSection(KINETICS);
}
public static final ItemEntry<BeltConnectorItem> BELT_CONNECTOR = public static final ItemEntry<BeltConnectorItem> BELT_CONNECTOR =
REGISTRATE.item("belt_connector", BeltConnectorItem::new) REGISTRATE.item("belt_connector", BeltConnectorItem::new)
.lang("Mechanical Belt") .lang("Mechanical Belt")
@ -259,7 +248,7 @@ public class AllItems {
.tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag) .tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag)
.register(), .register(),
NETHERITE_BACKTANK = REGISTRATE.item("netherite_backtank", p -> new BacktankItem.MultiLayered(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"), NETHERITE_BACKTANK_PLACEABLE)) NETHERITE_BACKTANK = REGISTRATE.item("netherite_backtank", p -> new BacktankItem.Layered(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"), NETHERITE_BACKTANK_PLACEABLE))
.model(AssetLookup.customGenericItemModel("_", "item")) .model(AssetLookup.customGenericItemModel("_", "item"))
.tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag) .tag(AllItemTags.PRESSURIZED_AIR_SOURCES.tag)
.register(); .register();
@ -269,7 +258,7 @@ public class AllItems {
COPPER_DIVING_HELMET = REGISTRATE.item("copper_diving_helmet", p -> new DivingHelmetItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"))) COPPER_DIVING_HELMET = REGISTRATE.item("copper_diving_helmet", p -> new DivingHelmetItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving")))
.register(), .register(),
NETHERITE_DIVING_HELMET = REGISTRATE.item("netherite_diving_helmet", p -> new DivingHelmetItem.MultiLayered(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) NETHERITE_DIVING_HELMET = REGISTRATE.item("netherite_diving_helmet", p -> new DivingHelmetItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving")))
.register(); .register();
public static final ItemEntry<? extends DivingBootsItem> public static final ItemEntry<? extends DivingBootsItem>
@ -277,7 +266,7 @@ public class AllItems {
COPPER_DIVING_BOOTS = REGISTRATE.item("copper_diving_boots", p -> new DivingBootsItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving"))) COPPER_DIVING_BOOTS = REGISTRATE.item("copper_diving_boots", p -> new DivingBootsItem(AllArmorMaterials.COPPER, p, Create.asResource("copper_diving")))
.register(), .register(),
NETHERITE_DIVING_BOOTS = REGISTRATE.item("netherite_diving_boots", p -> new DivingBootsItem.MultiLayered(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving"))) NETHERITE_DIVING_BOOTS = REGISTRATE.item("netherite_diving_boots", p -> new DivingBootsItem(ArmorMaterials.NETHERITE, p, Create.asResource("netherite_diving")))
.register(); .register();
public static final ItemEntry<SandPaperItem> SAND_PAPER = REGISTRATE.item("sand_paper", SandPaperItem::new) public static final ItemEntry<SandPaperItem> SAND_PAPER = REGISTRATE.item("sand_paper", SandPaperItem::new)
@ -286,7 +275,7 @@ public class AllItems {
public static final ItemEntry<SandPaperItem> RED_SAND_PAPER = REGISTRATE.item("red_sand_paper", SandPaperItem::new) public static final ItemEntry<SandPaperItem> RED_SAND_PAPER = REGISTRATE.item("red_sand_paper", SandPaperItem::new)
.tag(AllTags.AllItemTags.SANDPAPER.tag) .tag(AllTags.AllItemTags.SANDPAPER.tag)
.onRegister(s -> TooltipHelper.referTo(s, SAND_PAPER)) .onRegister(s -> ItemDescription.referKey(s, SAND_PAPER))
.register(); .register();
public static final ItemEntry<WrenchItem> WRENCH = REGISTRATE.item("wrench", WrenchItem::new) public static final ItemEntry<WrenchItem> WRENCH = REGISTRATE.item("wrench", WrenchItem::new)
@ -309,10 +298,6 @@ public class AllItems {
// Curiosities // Curiosities
static {
REGISTRATE.startSection(CURIOSITIES);
}
public static final ItemEntry<LinkedControllerItem> LINKED_CONTROLLER = public static final ItemEntry<LinkedControllerItem> LINKED_CONTROLLER =
REGISTRATE.item("linked_controller", LinkedControllerItem::new) REGISTRATE.item("linked_controller", LinkedControllerItem::new)
.properties(p -> p.stacksTo(1)) .properties(p -> p.stacksTo(1))
@ -349,10 +334,6 @@ public class AllItems {
// Logistics // Logistics
static {
REGISTRATE.startSection(LOGISTICS);
}
public static final ItemEntry<FilterItem> FILTER = REGISTRATE.item("filter", FilterItem::regular) public static final ItemEntry<FilterItem> FILTER = REGISTRATE.item("filter", FilterItem::regular)
.model(AssetLookup.existingItemModel()) .model(AssetLookup.existingItemModel())
.register(); .register();
@ -368,10 +349,6 @@ public class AllItems {
// Schematics // Schematics
static {
REGISTRATE.startSection(SCHEMATICS);
}
public static final ItemEntry<Item> EMPTY_SCHEMATIC = REGISTRATE.item("empty_schematic", Item::new) public static final ItemEntry<Item> EMPTY_SCHEMATIC = REGISTRATE.item("empty_schematic", Item::new)
.properties(p -> p.stacksTo(1)) .properties(p -> p.stacksTo(1))
.register(); .register();

View file

@ -1,20 +1,20 @@
package com.simibubi.create; package com.simibubi.create;
import com.simibubi.create.content.curiosities.toolbox.ToolboxContainer; import com.simibubi.create.content.curiosities.toolbox.ToolboxMenu;
import com.simibubi.create.content.curiosities.toolbox.ToolboxScreen; import com.simibubi.create.content.curiosities.toolbox.ToolboxScreen;
import com.simibubi.create.content.curiosities.tools.BlueprintContainer; import com.simibubi.create.content.curiosities.tools.BlueprintMenu;
import com.simibubi.create.content.curiosities.tools.BlueprintScreen; import com.simibubi.create.content.curiosities.tools.BlueprintScreen;
import com.simibubi.create.content.logistics.item.LinkedControllerContainer; import com.simibubi.create.content.logistics.item.LinkedControllerMenu;
import com.simibubi.create.content.logistics.item.LinkedControllerScreen; import com.simibubi.create.content.logistics.item.LinkedControllerScreen;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterContainer; import com.simibubi.create.content.logistics.item.filter.AttributeFilterMenu;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen; import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen;
import com.simibubi.create.content.logistics.item.filter.FilterContainer; import com.simibubi.create.content.logistics.item.filter.FilterMenu;
import com.simibubi.create.content.logistics.item.filter.FilterScreen; import com.simibubi.create.content.logistics.item.filter.FilterScreen;
import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleContainer; import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleMenu;
import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleScreen; import com.simibubi.create.content.logistics.trains.management.schedule.ScheduleScreen;
import com.simibubi.create.content.schematics.block.SchematicTableContainer; import com.simibubi.create.content.schematics.block.SchematicTableMenu;
import com.simibubi.create.content.schematics.block.SchematicTableScreen; import com.simibubi.create.content.schematics.block.SchematicTableScreen;
import com.simibubi.create.content.schematics.block.SchematicannonContainer; import com.simibubi.create.content.schematics.block.SchematicannonMenu;
import com.simibubi.create.content.schematics.block.SchematicannonScreen; import com.simibubi.create.content.schematics.block.SchematicannonScreen;
import com.tterrag.registrate.builders.MenuBuilder.ForgeMenuFactory; import com.tterrag.registrate.builders.MenuBuilder.ForgeMenuFactory;
import com.tterrag.registrate.builders.MenuBuilder.ScreenFactory; import com.tterrag.registrate.builders.MenuBuilder.ScreenFactory;
@ -25,35 +25,35 @@ import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.MenuAccess; import net.minecraft.client.gui.screens.inventory.MenuAccess;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
public class AllContainerTypes { public class AllMenuTypes {
public static final MenuEntry<SchematicTableContainer> SCHEMATIC_TABLE = public static final MenuEntry<SchematicTableMenu> SCHEMATIC_TABLE =
register("schematic_table", SchematicTableContainer::new, () -> SchematicTableScreen::new); register("schematic_table", SchematicTableMenu::new, () -> SchematicTableScreen::new);
public static final MenuEntry<SchematicannonContainer> SCHEMATICANNON = public static final MenuEntry<SchematicannonMenu> SCHEMATICANNON =
register("schematicannon", SchematicannonContainer::new, () -> SchematicannonScreen::new); register("schematicannon", SchematicannonMenu::new, () -> SchematicannonScreen::new);
public static final MenuEntry<FilterContainer> FILTER = public static final MenuEntry<FilterMenu> FILTER =
register("filter", FilterContainer::new, () -> FilterScreen::new); register("filter", FilterMenu::new, () -> FilterScreen::new);
public static final MenuEntry<AttributeFilterContainer> ATTRIBUTE_FILTER = public static final MenuEntry<AttributeFilterMenu> ATTRIBUTE_FILTER =
register("attribute_filter", AttributeFilterContainer::new, () -> AttributeFilterScreen::new); register("attribute_filter", AttributeFilterMenu::new, () -> AttributeFilterScreen::new);
public static final MenuEntry<BlueprintContainer> CRAFTING_BLUEPRINT = public static final MenuEntry<BlueprintMenu> CRAFTING_BLUEPRINT =
register("crafting_blueprint", BlueprintContainer::new, () -> BlueprintScreen::new); register("crafting_blueprint", BlueprintMenu::new, () -> BlueprintScreen::new);
public static final MenuEntry<LinkedControllerContainer> LINKED_CONTROLLER = public static final MenuEntry<LinkedControllerMenu> LINKED_CONTROLLER =
register("linked_controller", LinkedControllerContainer::new, () -> LinkedControllerScreen::new); register("linked_controller", LinkedControllerMenu::new, () -> LinkedControllerScreen::new);
public static final MenuEntry<ToolboxContainer> TOOLBOX = public static final MenuEntry<ToolboxMenu> TOOLBOX =
register("toolbox", ToolboxContainer::new, () -> ToolboxScreen::new); register("toolbox", ToolboxMenu::new, () -> ToolboxScreen::new);
public static final MenuEntry<ScheduleContainer> SCHEDULE = public static final MenuEntry<ScheduleMenu> SCHEDULE =
register("schedule", ScheduleContainer::new, () -> ScheduleScreen::new); register("schedule", ScheduleMenu::new, () -> ScheduleScreen::new);
private static <C extends AbstractContainerMenu, S extends Screen & MenuAccess<C>> MenuEntry<C> register( private static <C extends AbstractContainerMenu, S extends Screen & MenuAccess<C>> MenuEntry<C> register(
String name, ForgeMenuFactory<C> factory, NonNullSupplier<ScreenFactory<C, S>> screenFactory) { String name, ForgeMenuFactory<C> factory, NonNullSupplier<ScreenFactory<C, S>> screenFactory) {
return Create.registrate() return Create.REGISTRATE
.menu(name, factory, screenFactory) .menu(name, factory, screenFactory)
.register(); .register();
} }

View file

@ -10,7 +10,7 @@ import com.simibubi.create.content.contraptions.components.actors.CampfireMoveme
import com.simibubi.create.content.contraptions.components.actors.dispenser.DispenserMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.dispenser.DispenserMovementBehaviour;
import com.simibubi.create.content.contraptions.components.actors.dispenser.DropperMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.dispenser.DropperMovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
import com.simibubi.create.foundation.utility.CreateRegistry; import com.simibubi.create.foundation.utility.AttachedRegistry;
import com.tterrag.registrate.util.nullness.NonNullConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -18,10 +18,9 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IRegistryDelegate;
public class AllMovementBehaviours { public class AllMovementBehaviours {
private static final CreateRegistry<Block, MovementBehaviour> BLOCK_BEHAVIOURS = new CreateRegistry<>(ForgeRegistries.BLOCKS); private static final AttachedRegistry<Block, MovementBehaviour> BLOCK_BEHAVIOURS = new AttachedRegistry<>(ForgeRegistries.BLOCKS);
private static final List<BehaviourProvider> GLOBAL_BEHAVIOURS = new ArrayList<>(); private static final List<BehaviourProvider> GLOBAL_BEHAVIOURS = new ArrayList<>();
public static void registerBehaviour(ResourceLocation block, MovementBehaviour behaviour) { public static void registerBehaviour(ResourceLocation block, MovementBehaviour behaviour) {
@ -32,11 +31,6 @@ public class AllMovementBehaviours {
BLOCK_BEHAVIOURS.register(block, behaviour); BLOCK_BEHAVIOURS.register(block, behaviour);
} }
@Deprecated(forRemoval = true)
public static void registerBehaviour(IRegistryDelegate<Block> block, MovementBehaviour behaviour) {
registerBehaviour(block.name(), behaviour);
}
public static void registerBehaviourProvider(BehaviourProvider provider) { public static void registerBehaviourProvider(BehaviourProvider provider) {
GLOBAL_BEHAVIOURS.add(provider); GLOBAL_BEHAVIOURS.add(provider);
} }

View file

@ -14,7 +14,7 @@ import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.DyeColor;
public class AllBlockPartials { public class AllPartialModels {
public static final PartialModel public static final PartialModel

View file

@ -2,44 +2,29 @@ package com.simibubi.create;
import static com.simibubi.create.AllTags.NameSpace.FORGE; import static com.simibubi.create.AllTags.NameSpace.FORGE;
import static com.simibubi.create.AllTags.NameSpace.MOD; import static com.simibubi.create.AllTags.NameSpace.MOD;
import static com.simibubi.create.AllTags.NameSpace.QUARK;
import static com.simibubi.create.AllTags.NameSpace.TIC; import static com.simibubi.create.AllTags.NameSpace.TIC;
import java.util.Collections; import java.util.Collections;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.data.recipe.Mods;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import com.tterrag.registrate.builders.BlockBuilder;
import com.tterrag.registrate.builders.ItemBuilder;
import com.tterrag.registrate.providers.ProviderType;
import com.tterrag.registrate.util.nullness.NonNullFunction;
import net.minecraft.data.tags.TagsProvider.TagAppender;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.tags.FluidTags; import net.minecraft.tags.FluidTags;
import net.minecraft.tags.ItemTags; import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
import net.minecraftforge.common.Tags;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryEntry; import net.minecraftforge.registries.IForgeRegistryEntry;
public class AllTags { public class AllTags {
private static final CreateRegistrate REGISTRATE = Create.registrate()
.creativeModeTab(() -> Create.BASE_CREATIVE_TAB);
public static <T extends IForgeRegistryEntry<T>> TagKey<T> optionalTag(IForgeRegistry<T> registry, public static <T extends IForgeRegistryEntry<T>> TagKey<T> optionalTag(IForgeRegistry<T> registry,
ResourceLocation id) { ResourceLocation id) {
return registry.tags() return registry.tags()
@ -62,34 +47,11 @@ public class AllTags {
return forgeTag(ForgeRegistries.FLUIDS, path); return forgeTag(ForgeRegistries.FLUIDS, path);
} }
public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, BlockBuilder<T, P>> axeOrPickaxe() {
return b -> b.tag(BlockTags.MINEABLE_WITH_AXE)
.tag(BlockTags.MINEABLE_WITH_PICKAXE);
}
public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, BlockBuilder<T, P>> axeOnly() {
return b -> b.tag(BlockTags.MINEABLE_WITH_AXE);
}
public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, BlockBuilder<T, P>> pickaxeOnly() {
return b -> b.tag(BlockTags.MINEABLE_WITH_PICKAXE);
}
public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, ItemBuilder<BlockItem, BlockBuilder<T, P>>> tagBlockAndItem(
String... path) {
return b -> {
for (String p : path)
b.tag(forgeBlockTag(p));
ItemBuilder<BlockItem, BlockBuilder<T, P>> item = b.item();
for (String p : path)
item.tag(forgeItemTag(p));
return item;
};
}
public enum NameSpace { public enum NameSpace {
MOD(Create.ID, false, true),
MOD(Create.ID, false, true), FORGE("forge"), TIC("tconstruct"), QUARK("quark") FORGE("forge"),
TIC("tconstruct"),
QUARK("quark")
; ;
@ -106,25 +68,23 @@ public class AllTags {
this.optionalDefault = optionalDefault; this.optionalDefault = optionalDefault;
this.alwaysDatagenDefault = alwaysDatagenDefault; this.alwaysDatagenDefault = alwaysDatagenDefault;
} }
} }
public enum AllBlockTags { public enum AllBlockTags {
BRITTLE, BRITTLE,
CASING, CASING,
FAN_TRANSPARENT, FAN_TRANSPARENT,
NON_MOVABLE, NON_MOVABLE,
MOVABLE_EMPTY_COLLIDER,
ORE_OVERRIDE_STONE, ORE_OVERRIDE_STONE,
PASSIVE_BOILER_HEATERS, PASSIVE_BOILER_HEATERS,
SAFE_NBT, SAFE_NBT,
SEATS, SEATS,
TOOLBOXES, TOOLBOXES,
TREE_ATTACHMENTS,
VALVE_HANDLES, VALVE_HANDLES,
WINDMILL_SAILS, WINDMILL_SAILS,
WINDOWABLE,
WRENCH_PICKUP, WRENCH_PICKUP,
TREE_ATTACHMENTS,
COPYCAT_ALLOW, COPYCAT_ALLOW,
COPYCAT_DENY, COPYCAT_DENY,
@ -132,11 +92,12 @@ public class AllTags {
WG_STONE(FORGE), WG_STONE(FORGE),
SLIMY_LOGS(TIC), SLIMY_LOGS(TIC),
NON_DOUBLE_DOOR(NameSpace.QUARK), NON_DOUBLE_DOOR(QUARK),
; ;
public final TagKey<Block> tag; public final TagKey<Block> tag;
public final boolean alwaysDatagen;
AllBlockTags() { AllBlockTags() {
this(MOD); this(MOD);
@ -161,9 +122,7 @@ public class AllTags {
} else { } else {
tag = BlockTags.create(id); tag = BlockTags.create(id);
} }
if (alwaysDatagen) { this.alwaysDatagen = alwaysDatagen;
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag));
}
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -176,42 +135,18 @@ public class AllTags {
return state.is(tag); return state.is(tag);
} }
public void add(Block... values) { private static void init() {
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)
.add(values));
} }
public void addOptional(Mods mod, String... ids) {
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> {
TagAppender<Block> builder = prov.tag(tag);
for (String id : ids)
builder.addOptional(mod.asResource(id));
});
}
public void includeIn(TagKey<Block> parent) {
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent)
.addTag(tag));
}
public void includeIn(AllBlockTags parent) {
includeIn(parent.tag);
}
public void includeAll(TagKey<Block> child) {
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)
.addTag(child));
}
} }
public enum AllItemTags { public enum AllItemTags {
BLAZE_BURNER_FUEL_REGULAR(MOD, "blaze_burner_fuel/regular"), BLAZE_BURNER_FUEL_REGULAR(MOD, "blaze_burner_fuel/regular"),
BLAZE_BURNER_FUEL_SPECIAL(MOD, "blaze_burner_fuel/special"), BLAZE_BURNER_FUEL_SPECIAL(MOD, "blaze_burner_fuel/special"),
CASING, CASING,
CREATE_INGOTS, CREATE_INGOTS,
CRUSHED_ORES, CRUSHED_ORES,
MODDED_STRIPPED_LOGS,
MODDED_STRIPPED_WOOD,
PRESSURIZED_AIR_SOURCES, PRESSURIZED_AIR_SOURCES,
SANDPAPER, SANDPAPER,
SEATS, SEATS,
@ -221,18 +156,17 @@ public class AllTags {
VALVE_HANDLES, VALVE_HANDLES,
VANILLA_STRIPPED_LOGS, VANILLA_STRIPPED_LOGS,
VANILLA_STRIPPED_WOOD, VANILLA_STRIPPED_WOOD,
MODDED_STRIPPED_LOGS, DEPLOYABLE_DRINK,
MODDED_STRIPPED_WOOD,
STRIPPED_LOGS(FORGE), STRIPPED_LOGS(FORGE),
STRIPPED_WOOD(FORGE), STRIPPED_WOOD(FORGE),
BEACON_PAYMENT(FORGE),
PLATES(FORGE), PLATES(FORGE),
WRENCH(FORGE, "tools/wrench") WRENCH(FORGE, "tools/wrench")
; ;
public final TagKey<Item> tag; public final TagKey<Item> tag;
public final boolean alwaysDatagen;
AllItemTags() { AllItemTags() {
this(MOD); this(MOD);
@ -257,9 +191,7 @@ public class AllTags {
} else { } else {
tag = ItemTags.create(id); tag = ItemTags.create(id);
} }
if (alwaysDatagen) { this.alwaysDatagen = alwaysDatagen;
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag));
}
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -272,37 +204,11 @@ public class AllTags {
return stack.is(tag); return stack.is(tag);
} }
public void add(Item... values) { private static void init() {
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)
.add(values));
} }
public void addOptional(Mods mod, String... ids) {
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> {
TagAppender<Item> builder = prov.tag(tag);
for (String id : ids)
builder.addOptional(mod.asResource(id));
});
}
public void includeIn(TagKey<Item> parent) {
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent)
.addTag(tag));
}
public void includeIn(AllItemTags parent) {
includeIn(parent.tag);
}
public void includeAll(TagKey<Item> child) {
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)
.addTag(child));
}
} }
public enum AllFluidTags { public enum AllFluidTags {
BOTTOMLESS_ALLOW(MOD, "bottomless/allow"), BOTTOMLESS_ALLOW(MOD, "bottomless/allow"),
BOTTOMLESS_DENY(MOD, "bottomless/deny"), BOTTOMLESS_DENY(MOD, "bottomless/deny"),
@ -311,6 +217,7 @@ public class AllTags {
; ;
public final TagKey<Fluid> tag; public final TagKey<Fluid> tag;
public final boolean alwaysDatagen;
AllFluidTags() { AllFluidTags() {
this(MOD); this(MOD);
@ -335,9 +242,7 @@ public class AllTags {
} else { } else {
tag = FluidTags.create(id); tag = FluidTags.create(id);
} }
if (alwaysDatagen) { this.alwaysDatagen = alwaysDatagen;
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag));
}
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -349,128 +254,13 @@ public class AllTags {
return state.is(tag); return state.is(tag);
} }
public void add(Fluid... values) { private static void init() {
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)
.add(values));
}
public void includeIn(TagKey<Fluid> parent) {
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(parent)
.addTag(tag));
}
public void includeIn(AllFluidTags parent) {
includeIn(parent.tag);
}
public void includeAll(TagKey<Fluid> child) {
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)
.addTag(child));
}
}
public static void register() {
AllFluidTags.BOTTOMLESS_ALLOW.add(Fluids.WATER, Fluids.LAVA);
AllItemTags.VANILLA_STRIPPED_LOGS.add(Items.STRIPPED_ACACIA_LOG, Items.STRIPPED_BIRCH_LOG,
Items.STRIPPED_CRIMSON_STEM, Items.STRIPPED_DARK_OAK_LOG, Items.STRIPPED_JUNGLE_LOG, Items.STRIPPED_OAK_LOG,
Items.STRIPPED_SPRUCE_LOG, Items.STRIPPED_WARPED_STEM);
AllItemTags.VANILLA_STRIPPED_LOGS.includeIn(AllItemTags.STRIPPED_LOGS);
AllItemTags.VANILLA_STRIPPED_WOOD.add(Items.STRIPPED_ACACIA_WOOD, Items.STRIPPED_BIRCH_WOOD,
Items.STRIPPED_CRIMSON_HYPHAE, Items.STRIPPED_DARK_OAK_WOOD, Items.STRIPPED_JUNGLE_WOOD,
Items.STRIPPED_OAK_WOOD, Items.STRIPPED_SPRUCE_WOOD, Items.STRIPPED_WARPED_HYPHAE);
AllItemTags.VANILLA_STRIPPED_WOOD.includeIn(AllItemTags.STRIPPED_WOOD);
AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT);
AllItemTags.CREATE_INGOTS.includeIn(Tags.Items.INGOTS);
AllItemTags.UPRIGHT_ON_BELT.add(Items.GLASS_BOTTLE, Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION,
Items.HONEY_BOTTLE, Items.CAKE);
AllItemTags.SLEEPERS.add(Items.STONE_SLAB, Items.SMOOTH_STONE_SLAB, Items.ANDESITE_SLAB);
AllBlockTags.WINDMILL_SAILS.includeAll(BlockTags.WOOL);
AllBlockTags.BRITTLE.includeAll(BlockTags.DOORS);
AllBlockTags.BRITTLE.includeAll(BlockTags.BEDS);
AllBlockTags.BRITTLE.add(Blocks.FLOWER_POT, Blocks.BELL, Blocks.COCOA);
AllBlockTags.FAN_TRANSPARENT.includeAll(BlockTags.FENCES);
AllBlockTags.FAN_TRANSPARENT.includeAll(BlockTags.CAMPFIRES);
AllBlockTags.FAN_TRANSPARENT.add(Blocks.IRON_BARS);
AllBlockTags.PASSIVE_BOILER_HEATERS.includeAll(BlockTags.FIRE);
AllBlockTags.PASSIVE_BOILER_HEATERS.includeAll(BlockTags.CAMPFIRES);
AllBlockTags.PASSIVE_BOILER_HEATERS.add(Blocks.MAGMA_BLOCK, Blocks.LAVA);
AllBlockTags.SAFE_NBT.includeAll(BlockTags.SIGNS);
AllBlockTags.SAFE_NBT.includeAll(BlockTags.BANNERS);
AllBlockTags.COPYCAT_ALLOW.add(Blocks.BARREL);
AllBlockTags.COPYCAT_DENY.includeAll(BlockTags.CAULDRONS);
AllBlockTags.COPYCAT_DENY.includeAll(BlockTags.SAPLINGS);
AllBlockTags.COPYCAT_DENY.includeAll(BlockTags.CLIMBABLE);
AllBlockTags.WRENCH_PICKUP.includeAll(BlockTags.RAILS);
AllBlockTags.WRENCH_PICKUP.includeAll(BlockTags.BUTTONS);
AllBlockTags.WRENCH_PICKUP.includeAll(BlockTags.PRESSURE_PLATES);
AllBlockTags.WRENCH_PICKUP.add(Blocks.REDSTONE_WIRE, Blocks.REDSTONE_TORCH, Blocks.REPEATER, Blocks.LEVER,
Blocks.COMPARATOR, Blocks.OBSERVER, Blocks.REDSTONE_WALL_TORCH, Blocks.PISTON, Blocks.STICKY_PISTON,
Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET, Blocks.HOPPER);
AllBlockTags.TREE_ATTACHMENTS.add(Blocks.BEE_NEST, Blocks.VINE, Blocks.MOSS_CARPET, Blocks.SHROOMLIGHT,
Blocks.COCOA);
AllBlockTags.ORE_OVERRIDE_STONE.includeAll(BlockTags.STONE_ORE_REPLACEABLES);
registerCompat();
}
private static void registerCompat() {
AllBlockTags.NON_MOVABLE.addOptional(Mods.IE, "connector_lv", "connector_lv_relay", "connector_mv",
"connector_mv_relay", "connector_hv", "connector_hv_relay", "connector_bundled", "connector_structural",
"connector_redstone", "connector_probe", "breaker_switch");
strippedWoodCompat(Mods.ARS_N, "blue_archwood", "purple_archwood", "green_archwood", "red_archwood");
strippedWoodCompat(Mods.BTN, "livingwood", "dreamwood");
strippedWoodCompat(Mods.FA, "cherrywood", "mysterywood");
strippedWoodCompat(Mods.HEX, "akashic");
strippedWoodCompat(Mods.ID, "menril");
strippedWoodCompat(Mods.BYG, "aspen", "baobab", "enchanted", "cherry", "cika", "cypress", "ebony", "ether",
"fir", "green_enchanted", "holly", "jacaranda", "lament", "mahogany", "mangrove", "maple", "nightshade",
"palm", "palo_verde", "pine", "rainbow_eucalyptus", "redwood", "skyris", "willow", "witch_hazel",
"zelkova");
strippedWoodCompat(Mods.SG, "netherwood");
strippedWoodCompat(Mods.TF, "twilight_oak", "canopy", "mangrove", "dark", "time", "transformation", "mining",
"sorting");
strippedWoodCompat(Mods.TIC, "greenheart", "skyroot", "bloodshroom");
strippedWoodCompat(Mods.AP, "twisted");
strippedWoodCompat(Mods.Q, "azalea", "blossom");
strippedWoodCompat(Mods.ECO, "coconut", "walnut", "azalea");
strippedWoodCompat(Mods.BOP, "fir", "redwood", "cherry", "mahogany", "jacaranda", "palm", "willow", "dead",
"magic", "umbran", "hellbark");
strippedWoodCompat(Mods.BSK, "bluebright", "starlit", "frostbright", "lunar", "dusk", "maple", "cherry");
AllItemTags.MODDED_STRIPPED_LOGS.addOptional(Mods.BYG, "stripped_bulbis_stem");
AllItemTags.MODDED_STRIPPED_WOOD.addOptional(Mods.BYG, "stripped_bulbis_wood");
AllItemTags.MODDED_STRIPPED_LOGS.includeIn(AllItemTags.STRIPPED_LOGS);
AllItemTags.MODDED_STRIPPED_WOOD.includeIn(AllItemTags.STRIPPED_WOOD);
}
private static void strippedWoodCompat(Mods mod, String... woodtypes) {
for (int i = 0; i < woodtypes.length; i++) {
String type = woodtypes[i];
String strippedPre = mod.strippedIsSuffix ? "" : "stripped_";
String strippedPost = mod.strippedIsSuffix ? "_stripped" : "";
AllItemTags.MODDED_STRIPPED_LOGS.addOptional(mod, strippedPre + type + "_log" + strippedPost);
AllItemTags.MODDED_STRIPPED_WOOD.addOptional(mod,
strippedPre + type + (mod.omitWoodSuffix ? "" : "_wood") + strippedPost);
} }
} }
public static void init() {
AllBlockTags.init();
AllItemTags.init();
AllFluidTags.init();
}
} }

View file

@ -2,15 +2,14 @@ package com.simibubi.create;
import java.util.Random; import java.util.Random;
import org.apache.logging.log4j.LogManager; import org.slf4j.Logger;
import org.apache.logging.log4j.Logger;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.mojang.logging.LogUtils;
import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour; import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour;
import com.simibubi.create.compat.Mods; import com.simibubi.create.compat.Mods;
import com.simibubi.create.compat.curios.Curios; import com.simibubi.create.compat.curios.Curios;
import com.simibubi.create.content.CreateItemGroup;
import com.simibubi.create.content.contraptions.TorquePropagator; import com.simibubi.create.content.contraptions.TorquePropagator;
import com.simibubi.create.content.contraptions.fluids.tank.BoilerHeaters; import com.simibubi.create.content.contraptions.fluids.tank.BoilerHeaters;
import com.simibubi.create.content.curiosities.deco.SlidingDoorBlock; import com.simibubi.create.content.curiosities.deco.SlidingDoorBlock;
@ -20,7 +19,6 @@ import com.simibubi.create.content.logistics.block.display.AllDisplayBehaviours;
import com.simibubi.create.content.logistics.block.mechanicalArm.AllArmInteractionPointTypes; import com.simibubi.create.content.logistics.block.mechanicalArm.AllArmInteractionPointTypes;
import com.simibubi.create.content.logistics.trains.GlobalRailwayManager; import com.simibubi.create.content.logistics.trains.GlobalRailwayManager;
import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.content.palettes.AllPaletteBlocks;
import com.simibubi.create.content.palettes.PalettesItemGroup;
import com.simibubi.create.content.schematics.ServerSchematicLoader; import com.simibubi.create.content.schematics.ServerSchematicLoader;
import com.simibubi.create.content.schematics.filtering.SchematicInstances; import com.simibubi.create.content.schematics.filtering.SchematicInstances;
import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.advancement.AllAdvancements;
@ -29,25 +27,29 @@ import com.simibubi.create.foundation.block.CopperRegistries;
import com.simibubi.create.foundation.command.ServerLagger; import com.simibubi.create.foundation.command.ServerLagger;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.config.ContraptionMovementSetting; import com.simibubi.create.foundation.config.ContraptionMovementSetting;
import com.simibubi.create.foundation.data.AllLangPartials;
import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.data.LangMerger; import com.simibubi.create.foundation.data.LangMerger;
import com.simibubi.create.foundation.data.TagGen;
import com.simibubi.create.foundation.data.recipe.MechanicalCraftingRecipeGen; import com.simibubi.create.foundation.data.recipe.MechanicalCraftingRecipeGen;
import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen; import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen;
import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen; import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen;
import com.simibubi.create.foundation.data.recipe.StandardRecipeGen; import com.simibubi.create.foundation.data.recipe.StandardRecipeGen;
import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.item.KineticStats;
import com.simibubi.create.foundation.item.TooltipHelper.Palette;
import com.simibubi.create.foundation.item.TooltipModifier;
import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.CreateRegistry; import com.simibubi.create.foundation.utility.AttachedRegistry;
import com.simibubi.create.foundation.worldgen.AllFeatures; import com.simibubi.create.foundation.worldgen.AllFeatures;
import com.simibubi.create.foundation.worldgen.AllOreFeatureConfigEntries; import com.simibubi.create.foundation.worldgen.AllOreFeatureConfigEntries;
import com.simibubi.create.foundation.worldgen.AllPlacementModifiers; import com.simibubi.create.foundation.worldgen.AllPlacementModifiers;
import com.simibubi.create.foundation.worldgen.BuiltinRegistration; import com.simibubi.create.foundation.worldgen.BuiltinRegistration;
import com.tterrag.registrate.util.nullness.NonNullSupplier;
import net.minecraft.data.DataGenerator; import net.minecraft.data.DataGenerator;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.ForgeMod;
@ -68,25 +70,31 @@ public class Create {
public static final String NAME = "Create"; public static final String NAME = "Create";
public static final String VERSION = "0.5.1-unstable"; public static final String VERSION = "0.5.1-unstable";
public static final Logger LOGGER = LogManager.getLogger(); public static final Logger LOGGER = LogUtils.getLogger();
public static final Gson GSON = new GsonBuilder().setPrettyPrinting() public static final Gson GSON = new GsonBuilder().setPrettyPrinting()
.disableHtmlEscaping() .disableHtmlEscaping()
.create(); .create();
public static final CreativeModeTab BASE_CREATIVE_TAB = new CreateItemGroup(); /** Use the {@link Random} of a local {@link Level} or {@link Entity} or create one */
public static final CreativeModeTab PALETTES_CREATIVE_TAB = new PalettesItemGroup(); @Deprecated
public static final Random RANDOM = new Random();
public static final CreateRegistrate REGISTRATE = CreateRegistrate.create(ID);
static {
// TODO 0.5.1: choose color palette
REGISTRATE.setTooltipModifierFactory(item -> {
return new ItemDescription.Modifier(item, Palette.BLUE)
.andThen(TooltipModifier.mapNull(KineticStats.create(item)));
});
}
public static final ServerSchematicLoader SCHEMATIC_RECEIVER = new ServerSchematicLoader(); public static final ServerSchematicLoader SCHEMATIC_RECEIVER = new ServerSchematicLoader();
public static final RedstoneLinkNetworkHandler REDSTONE_LINK_NETWORK_HANDLER = new RedstoneLinkNetworkHandler(); public static final RedstoneLinkNetworkHandler REDSTONE_LINK_NETWORK_HANDLER = new RedstoneLinkNetworkHandler();
public static final TorquePropagator TORQUE_PROPAGATOR = new TorquePropagator(); public static final TorquePropagator TORQUE_PROPAGATOR = new TorquePropagator();
public static final GlobalRailwayManager RAILWAYS = new GlobalRailwayManager(); public static final GlobalRailwayManager RAILWAYS = new GlobalRailwayManager();
public static final ServerLagger LAGGER = new ServerLagger(); public static final ServerLagger LAGGER = new ServerLagger();
/** Use the {@link Random} of a local {@link Level} or {@link Entity} or create one */
@Deprecated
public static final Random RANDOM = new Random();
private static final NonNullSupplier<CreateRegistrate> REGISTRATE = CreateRegistrate.lazy(ID);
public Create() { public Create() {
onCtor(); onCtor();
@ -99,15 +107,18 @@ public class Create {
.getModEventBus(); .getModEventBus();
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
REGISTRATE.registerEventListeners(modEventBus);
AllSoundEvents.prepare(); AllSoundEvents.prepare();
AllTags.init();
AllCreativeModeTabs.init();
AllBlocks.register(); AllBlocks.register();
AllItems.register(); AllItems.register();
AllFluids.register(); AllFluids.register();
AllTags.register();
AllPaletteBlocks.register(); AllPaletteBlocks.register();
AllContainerTypes.register(); AllMenuTypes.register();
AllEntityTypes.register(); AllEntityTypes.register();
AllTileEntities.register(); AllBlockEntityTypes.register();
AllEnchantments.register(); AllEnchantments.register();
AllRecipeTypes.register(modEventBus); AllRecipeTypes.register(modEventBus);
AllParticleTypes.register(modEventBus); AllParticleTypes.register(modEventBus);
@ -138,16 +149,16 @@ public class Create {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.onCtorClient(modEventBus, forgeEventBus)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.onCtorClient(modEventBus, forgeEventBus));
Mods.CURIOS.executeIfInstalled(() -> Curios::init); Mods.CURIOS.executeIfInstalled(() -> () -> Curios.init(modEventBus, forgeEventBus));
} }
public static void init(final FMLCommonSetupEvent event) { public static void init(final FMLCommonSetupEvent event) {
CreateRegistry.unwrapAll();
AllPackets.registerPackets(); AllPackets.registerPackets();
SchematicInstances.register(); SchematicInstances.register();
BuiltinPotatoProjectileTypes.register(); BuiltinPotatoProjectileTypes.register();
event.enqueueWork(() -> { event.enqueueWork(() -> {
AttachedRegistry.unwrapAll();
AllAdvancements.register(); AllAdvancements.register();
AllTriggers.register(); AllTriggers.register();
BoilerHeaters.registerDefaults(); BoilerHeaters.registerDefaults();
@ -155,9 +166,10 @@ public class Create {
} }
public static void gatherData(GatherDataEvent event) { public static void gatherData(GatherDataEvent event) {
TagGen.datagen();
DataGenerator gen = event.getGenerator(); DataGenerator gen = event.getGenerator();
if (event.includeClient()) { if (event.includeClient()) {
gen.addProvider(new LangMerger(gen)); gen.addProvider(new LangMerger(gen, ID, NAME, AllLangPartials.values()));
gen.addProvider(AllSoundEvents.provider(gen)); gen.addProvider(AllSoundEvents.provider(gen));
} }
if (event.includeServer()) { if (event.includeServer()) {
@ -170,10 +182,6 @@ public class Create {
} }
} }
public static CreateRegistrate registrate() {
return REGISTRATE.get();
}
public static ResourceLocation asResource(String path) { public static ResourceLocation asResource(String path) {
return new ResourceLocation(ID, path); return new ResourceLocation(ID, path);
} }

View file

@ -1,6 +1,6 @@
package com.simibubi.create; 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.glue.SuperGlueSelectionHandler;
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.TrainHUD; import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.TrainHUD;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
@ -76,15 +76,15 @@ public class CreateClient {
} }
public static void clientInit(final FMLClientSetupEvent event) { 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.PARTIAL);
BUFFER_CACHE.registerCompartment(CachedBufferer.DIRECTIONAL_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(SBBContraptionManager.CONTRAPTION, 20);
BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20); BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
AllKeys.register(); AllKeys.register();
AllBlockPartials.init(); AllPartialModels.init();
AllStitchedTextures.init(); AllStitchedTextures.init();
PonderIndex.register(); PonderIndex.register();
@ -121,7 +121,7 @@ public class CreateClient {
if (mc.options.graphicsMode != GraphicsStatus.FABULOUS) if (mc.options.graphicsMode != GraphicsStatus.FABULOUS)
return; return;
if (AllConfigs.CLIENT.ignoreFabulousWarning.get()) if (AllConfigs.client().ignoreFabulousWarning.get())
return; return;
MutableComponent text = ComponentUtils.wrapInSquareBrackets(Components.literal("WARN")) MutableComponent text = ComponentUtils.wrapInSquareBrackets(Components.literal("WARN"))

View file

@ -6,7 +6,7 @@ import java.util.function.Consumer;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.compat.tconstruct.SpoutCasting; 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.core.BlockPos;
import net.minecraft.resources.ResourceLocation; 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 * @param simulate whether the spout is testing or actually performing this behaviour
* @return amount filled into the block, 0 to idle/cancel * @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); boolean simulate);
public static void registerDefaults() { public static void registerDefaults() {

View file

@ -13,8 +13,8 @@ import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankBlockEntity;
import com.simibubi.create.foundation.tileEntity.IMultiTileContainer; import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -31,14 +31,14 @@ import net.minecraftforge.items.CapabilityItemHandler;
public class ConnectivityHandler { 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<>(); SearchCache<T> cache = new SearchCache<>();
List<T> frontier = new ArrayList<>(); List<T> frontier = new ArrayList<>();
frontier.add(be); frontier.add(be);
formMulti(be.getType(), be.getLevel(), cache, frontier); 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) { BlockGetter level, SearchCache<T> cache, List<T> frontier) {
PriorityQueue<Pair<Integer, T>> creationQueue = makeCreationQueue(); PriorityQueue<Pair<Integer, T>> creationQueue = makeCreationQueue();
Set<BlockPos> visited = new HashSet<>(); 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) { boolean simulate) {
int bestWidth = 1; int bestWidth = 1;
int bestAmount = -1; int bestAmount = -1;
@ -132,7 +132,7 @@ public class ConnectivityHandler {
return bestAmount; return bestAmount;
splitMultiAndInvalidate(be, cache, false); splitMultiAndInvalidate(be, cache, false);
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) if (be instanceof IMultiBlockEntityContainer.Fluid ifluid && ifluid.hasTank())
ifluid.setTankSize(0, bestAmount); ifluid.setTankSize(0, bestAmount);
tryToFormNewMultiOfWidth(be, bestWidth, cache, false); tryToFormNewMultiOfWidth(be, bestWidth, cache, false);
@ -145,7 +145,7 @@ public class ConnectivityHandler {
return bestAmount; 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) { SearchCache<T> cache, boolean simulate) {
int amount = 0; int amount = 0;
int height = 0; int height = 0;
@ -158,7 +158,7 @@ public class ConnectivityHandler {
// optional fluid handling // optional fluid handling
IFluidTank beTank = null; IFluidTank beTank = null;
FluidStack fluid = FluidStack.EMPTY; FluidStack fluid = FluidStack.EMPTY;
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) { if (be instanceof IMultiBlockEntityContainer.Fluid ifluid && ifluid.hasTank()) {
beTank = ifluid.getTank(0); beTank = ifluid.getTank(0);
fluid = beTank.getFluid(); fluid = beTank.getFluid();
} }
@ -213,7 +213,7 @@ public class ConnectivityHandler {
break Search; break Search;
} }
} }
if (controller instanceof IMultiTileContainer.Fluid ifluidCon && ifluidCon.hasTank()) { if (controller instanceof IMultiBlockEntityContainer.Fluid ifluidCon && ifluidCon.hasTank()) {
FluidStack otherFluid = ifluidCon.getFluid(0); FluidStack otherFluid = ifluidCon.getFluid(0);
if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid))
break Search; break Search;
@ -245,17 +245,17 @@ public class ConnectivityHandler {
extraData = be.modifyExtraData(extraData); 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); IFluidTank tankAt = ifluidPart.getTank(0);
FluidStack fluidAt = tankAt.getFluid(); FluidStack fluidAt = tankAt.getFluid();
if (!fluidAt.isEmpty()) { if (!fluidAt.isEmpty()) {
// making this generic would be a rather large mess, unfortunately // making this generic would be a rather large mess, unfortunately
if (beTank != null && fluid.isEmpty() if (beTank != null && fluid.isEmpty()
&& beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) { && beTank instanceof CreativeFluidTankBlockEntity.CreativeSmartFluidTank) {
((CreativeFluidTankTileEntity.CreativeSmartFluidTank) beTank) ((CreativeFluidTankBlockEntity.CreativeSmartFluidTank) beTank)
.setContainedFluid(fluidAt); .setContainedFluid(fluidAt);
} }
if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank() if (be instanceof IMultiBlockEntityContainer.Fluid ifluidBE && ifluidBE.hasTank()
&& beTank != null) { && beTank != null) {
beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE); beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE);
} }
@ -278,18 +278,18 @@ public class ConnectivityHandler {
return amount; 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); splitMultiAndInvalidate(be, null, false);
} }
// tryReconnect helps whenever only a few tanks have been removed // 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) { @Nullable SearchCache<T> cache, boolean tryReconnect) {
Level level = be.getLevel(); Level level = be.getLevel();
if (level == null) if (level == null)
return; return;
be = be.getControllerTE(); be = be.getControllerBE();
if (be == null) if (be == null)
return; return;
@ -305,7 +305,7 @@ public class ConnectivityHandler {
// fluid handling, if present // fluid handling, if present
FluidStack toDistribute = FluidStack.EMPTY; FluidStack toDistribute = FluidStack.EMPTY;
int maxCapacity = 0; int maxCapacity = 0;
if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank()) { if (be instanceof IMultiBlockEntityContainer.Fluid ifluidBE && ifluidBE.hasTank()) {
toDistribute = ifluidBE.getFluid(0); toDistribute = ifluidBE.getFluid(0);
maxCapacity = ifluidBE.getTankSize(0); maxCapacity = ifluidBE.getTankSize(0);
if (!toDistribute.isEmpty() && !be.isRemoved()) if (!toDistribute.isEmpty() && !be.isRemoved())
@ -330,16 +330,16 @@ public class ConnectivityHandler {
.equals(origin)) .equals(origin))
continue; continue;
T controllerBE = partAt.getControllerTE(); T controllerBE = partAt.getControllerBE();
partAt.setExtraData((controllerBE == null ? null : controllerBE.getExtraData())); partAt.setExtraData((controllerBE == null ? null : controllerBE.getExtraData()));
partAt.removeController(true); partAt.removeController(true);
if (!toDistribute.isEmpty() && partAt != be) { if (!toDistribute.isEmpty() && partAt != be) {
FluidStack copy = toDistribute.copy(); FluidStack copy = toDistribute.copy();
IFluidTank tank = 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 // 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()) if (creativeTank.isEmpty())
creativeTank.setContainedFluid(toDistribute); creativeTank.setContainedFluid(toDistribute);
} else { } else {
@ -360,10 +360,10 @@ public class ConnectivityHandler {
} }
} }
if (be instanceof IMultiTileContainer.Inventory iinv && iinv.hasInventory()) if (be instanceof IMultiBlockEntityContainer.Inventory inv && inv.hasInventory())
be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
.invalidate(); .invalidate();
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) if (be instanceof IMultiBlockEntityContainer.Fluid fluid && fluid.hasTank())
be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
.invalidate(); .invalidate();
@ -371,12 +371,12 @@ public class ConnectivityHandler {
formMulti(be.getType(), level, cache == null ? new SearchCache<>() : cache, frontier); 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()); return new PriorityQueue<>((one, two) -> two.getKey() - one.getKey());
} }
@Nullable @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) { BlockPos pos) {
BlockEntity be = level.getBlockEntity(pos); BlockEntity be = level.getBlockEntity(pos);
if (be != null && be.getType() == type && !be.isRemoved()) if (be != null && be.getType() == type && !be.isRemoved())
@ -384,7 +384,7 @@ public class ConnectivityHandler {
return null; 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) { BlockPos other) {
T one = checked(level.getBlockEntity(pos)); T one = checked(level.getBlockEntity(pos));
T two = checked(level.getBlockEntity(other)); T two = checked(level.getBlockEntity(other));
@ -396,13 +396,13 @@ public class ConnectivityHandler {
@Nullable @Nullable
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static <T extends BlockEntity & IMultiTileContainer> T checked(BlockEntity be) { private static <T extends BlockEntity & IMultiBlockEntityContainer> T checked(BlockEntity be) {
if (be instanceof IMultiTileContainer) if (be instanceof IMultiBlockEntityContainer)
return (T) be; return (T) be;
return null; return null;
} }
private static class SearchCache<T extends BlockEntity & IMultiTileContainer> { private static class SearchCache<T extends BlockEntity & IMultiBlockEntityContainer> {
Map<BlockPos, Optional<T>> controllerMap; Map<BlockPos, Optional<T>> controllerMap;
public SearchCache() { public SearchCache() {

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -13,7 +13,9 @@ import net.minecraftforge.fml.ModList;
public enum Mods { public enum Mods {
DYNAMICTREES, DYNAMICTREES,
TCONSTRUCT, TCONSTRUCT,
CURIOS; CURIOS,
STORAGEDRAWERS,
XLPACKETS;
/** /**
* @return a boolean of whether the mod is loaded or not based on mod id * @return a boolean of whether the mod is loaded or not based on mod id

View file

@ -1,40 +1,44 @@
package com.simibubi.create.compat.curios; package com.simibubi.create.compat.curios;
import java.util.concurrent.atomic.AtomicBoolean;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.content.contraptions.goggles.GogglesItem; import com.simibubi.create.content.contraptions.goggles.GogglesItem;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import top.theillusivec4.curios.api.CuriosCapability; import top.theillusivec4.curios.api.CuriosCapability;
import top.theillusivec4.curios.api.SlotTypeMessage; import top.theillusivec4.curios.api.SlotTypeMessage;
import top.theillusivec4.curios.api.SlotTypePreset; import top.theillusivec4.curios.api.SlotTypePreset;
import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler;
public class Curios { public class Curios {
public static void init() { public static void init(IEventBus modEventBus, IEventBus forgeEventBus) {
FMLJavaModLoadingContext.get().getModEventBus().addListener(Curios::onInterModEnqueue); modEventBus.addListener(Curios::onInterModEnqueue);
FMLJavaModLoadingContext.get().getModEventBus().addListener(Curios::onClientSetup); modEventBus.addListener(Curios::onClientSetup);
GogglesItem.addIsWearingPredicate(player -> { GogglesItem.addIsWearingPredicate(player -> player.getCapability(CuriosCapability.INVENTORY)
AtomicBoolean hasGoggles = new AtomicBoolean(false); .map(handler -> {
player.getCapability(CuriosCapability.INVENTORY).ifPresent(handler -> { ICurioStacksHandler stacksHandler = handler.getCurios()
ICurioStacksHandler stacksHandler = handler.getCurios().get("head"); .get("head");
if(stacksHandler != null) hasGoggles.set(stacksHandler.getStacks().getStackInSlot(0).getItem() == AllItems.GOGGLES.get()); if (stacksHandler == null)
}); return false;
return hasGoggles.get(); if (stacksHandler.getSlots() == 0)
}); return false;
return AllItems.GOGGLES.isIn(stacksHandler.getStacks()
.getStackInSlot(0));
})
.orElse(false));
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().addListener(CuriosRenderers::onLayerRegister)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
() -> () -> modEventBus.addListener(CuriosRenderers::onLayerRegister));
} }
private static void onInterModEnqueue(final InterModEnqueueEvent event) { private static void onInterModEnqueue(final InterModEnqueueEvent event) {
InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> SlotTypePreset.HEAD.getMessageBuilder().build()); InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> SlotTypePreset.HEAD.getMessageBuilder()
.build());
} }
private static void onClientSetup(final FMLClientSetupEvent event) { private static void onClientSetup(final FMLClientSetupEvent event) {

View file

@ -5,7 +5,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.simibubi.create.content.curiosities.tools.BlueprintAssignCompleteRecipePacket; import com.simibubi.create.content.curiosities.tools.BlueprintAssignCompleteRecipePacket;
import com.simibubi.create.content.curiosities.tools.BlueprintContainer; import com.simibubi.create.content.curiosities.tools.BlueprintMenu;
import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.networking.AllPackets;
import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
@ -17,11 +17,11 @@ import net.minecraft.world.item.crafting.CraftingRecipe;
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault @MethodsReturnNonnullByDefault
public class BlueprintTransferHandler implements IRecipeTransferHandler<BlueprintContainer, CraftingRecipe> { public class BlueprintTransferHandler implements IRecipeTransferHandler<BlueprintMenu, CraftingRecipe> {
@Override @Override
public Class<BlueprintContainer> getContainerClass() { public Class<BlueprintMenu> getContainerClass() {
return BlueprintContainer.class; return BlueprintMenu.class;
} }
@Override @Override
@ -30,11 +30,11 @@ public class BlueprintTransferHandler implements IRecipeTransferHandler<Blueprin
} }
@Override @Override
public @Nullable IRecipeTransferError transferRecipe(BlueprintContainer container, CraftingRecipe craftingRecipe, IRecipeSlotsView recipeSlots, Player player, boolean maxTransfer, boolean doTransfer) { public @Nullable IRecipeTransferError transferRecipe(BlueprintMenu menu, CraftingRecipe craftingRecipe, IRecipeSlotsView recipeSlots, Player player, boolean maxTransfer, boolean doTransfer) {
if (!doTransfer) if (!doTransfer)
return null; return null;
AllPackets.channel.sendToServer(new BlueprintAssignCompleteRecipePacket(craftingRecipe.getId())); AllPackets.getChannel().sendToServer(new BlueprintAssignCompleteRecipePacket(craftingRecipe.getId()));
return null; return null;
} }

View file

@ -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.deployer.ManualApplicationRecipe;
import com.simibubi.create.content.contraptions.components.fan.HauntingRecipe; 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.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.press.PressingRecipe;
import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; 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.actors.FillingRecipe;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes; import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes;
@ -66,7 +66,7 @@ import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.config.CRecipes; import com.simibubi.create.foundation.config.CRecipes;
import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; import com.simibubi.create.foundation.config.ConfigBase.ConfigBool;
import com.simibubi.create.foundation.data.recipe.LogStrippingFakeRecipes; import com.simibubi.create.foundation.data.recipe.LogStrippingFakeRecipes;
import com.simibubi.create.foundation.gui.container.AbstractSimiContainerScreen; import com.simibubi.create.foundation.gui.menu.AbstractSimiContainerScreen;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
@ -177,7 +177,7 @@ public class CreateJEI implements IModPlugin {
.addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>) .addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe<?>)
&& r.getIngredients() && r.getIngredients()
.size() > 1 .size() > 1
&& !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r), && !MechanicalPressBlockEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
BasinRecipe::convertShapeless) BasinRecipe::convertShapeless)
.catalyst(AllBlocks.MECHANICAL_MIXER::get) .catalyst(AllBlocks.MECHANICAL_MIXER::get)
.catalyst(AllBlocks.BASIN::get) .catalyst(AllBlocks.BASIN::get)
@ -206,7 +206,7 @@ public class CreateJEI implements IModPlugin {
.enableWhen(c -> c.allowShapedSquareInPress) .enableWhen(c -> c.allowShapedSquareInPress)
.addAllRecipesIf( .addAllRecipesIf(
r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe) r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe)
&& MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r), && MechanicalPressBlockEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r),
BasinRecipe::convertShapeless) BasinRecipe::convertShapeless)
.catalyst(AllBlocks.MECHANICAL_PRESS::get) .catalyst(AllBlocks.MECHANICAL_PRESS::get)
.catalyst(AllBlocks.BASIN::get) .catalyst(AllBlocks.BASIN::get)
@ -232,7 +232,7 @@ public class CreateJEI implements IModPlugin {
woodCutting = builder(CondensedBlockCuttingRecipe.class) woodCutting = builder(CondensedBlockCuttingRecipe.class)
.enableIf(c -> c.allowWoodcuttingOnSaw.get() && ModList.get() .enableIf(c -> c.allowWoodcuttingOnSaw.get() && ModList.get()
.isLoaded("druidcraft")) .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) .catalyst(AllBlocks.MECHANICAL_SAW::get)
.doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.OAK_STAIRS) .doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.OAK_STAIRS)
.emptyBackground(177, 70) .emptyBackground(177, 70)
@ -503,7 +503,7 @@ public class CreateJEI implements IModPlugin {
public CreateRecipeCategory<T> build(String name, CreateRecipeCategory.Factory<T> factory) { public CreateRecipeCategory<T> build(String name, CreateRecipeCategory.Factory<T> factory) {
Supplier<List<T>> recipesSupplier; Supplier<List<T>> recipesSupplier;
if (predicate.test(AllConfigs.SERVER.recipes)) { if (predicate.test(AllConfigs.server().recipes)) {
recipesSupplier = () -> { recipesSupplier = () -> {
List<T> recipes = new ArrayList<>(); List<T> recipes = new ArrayList<>();
for (Consumer<List<T>> consumer : recipeListConsumers) for (Consumer<List<T>> consumer : recipeListConsumers)

View file

@ -6,9 +6,9 @@ import java.util.List;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen; import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen;
import com.simibubi.create.foundation.gui.container.AbstractSimiContainerScreen; import com.simibubi.create.foundation.gui.menu.AbstractSimiContainerScreen;
import com.simibubi.create.foundation.gui.container.GhostItemContainer; import com.simibubi.create.foundation.gui.menu.GhostItemMenu;
import com.simibubi.create.foundation.gui.container.GhostItemSubmitPacket; import com.simibubi.create.foundation.gui.menu.GhostItemSubmitPacket;
import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.networking.AllPackets;
import mezz.jei.api.gui.handlers.IGhostIngredientHandler; import mezz.jei.api.gui.handlers.IGhostIngredientHandler;
@ -19,7 +19,7 @@ import net.minecraft.world.item.ItemStack;
@MethodsReturnNonnullByDefault @MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public class GhostIngredientHandler<T extends GhostItemContainer<?>> public class GhostIngredientHandler<T extends GhostItemMenu<?>>
implements IGhostIngredientHandler<AbstractSimiContainerScreen<T>> { implements IGhostIngredientHandler<AbstractSimiContainerScreen<T>> {
@Override @Override
@ -52,7 +52,7 @@ public class GhostIngredientHandler<T extends GhostItemContainer<?>>
return true; return true;
} }
private static class GhostTarget<I, T extends GhostItemContainer<?>> implements Target<I> { private static class GhostTarget<I, T extends GhostItemMenu<?>> implements Target<I> {
private final Rect2i area; private final Rect2i area;
private final AbstractSimiContainerScreen<T> gui; private final AbstractSimiContainerScreen<T> gui;
@ -82,7 +82,7 @@ public class GhostIngredientHandler<T extends GhostItemContainer<?>>
return; return;
// sync new filter contents with server // sync new filter contents with server
AllPackets.channel.sendToServer(new GhostItemSubmitPacket(stack, slotIndex)); AllPackets.getChannel().sendToServer(new GhostItemSubmitPacket(stack, slotIndex));
} }
} }
} }

View file

@ -2,7 +2,7 @@ package com.simibubi.create.compat.jei;
import java.util.List; import java.util.List;
import com.simibubi.create.foundation.gui.container.AbstractSimiContainerScreen; import com.simibubi.create.foundation.gui.menu.AbstractSimiContainerScreen;
import mezz.jei.api.gui.handlers.IGuiContainerHandler; import mezz.jei.api.gui.handlers.IGuiContainerHandler;
import net.minecraft.client.renderer.Rect2i; import net.minecraft.client.renderer.Rect2i;

View file

@ -1,10 +1,13 @@
package com.simibubi.create.compat.jei.category; package com.simibubi.create.compat.jei.category;
import java.util.List;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer; import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe; import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
@ -34,22 +37,28 @@ public class DeployingCategory extends CreateRecipeCategory<DeployerApplicationR
.addSlot(RecipeIngredientRole.INPUT, 51, 5) .addSlot(RecipeIngredientRole.INPUT, 51, 5)
.setBackground(getRenderedSlot(), -1, -1) .setBackground(getRenderedSlot(), -1, -1)
.addIngredients(recipe.getRequiredHeldItem()); .addIngredients(recipe.getRequiredHeldItem());
builder
.addSlot(RecipeIngredientRole.OUTPUT, 132, 51)
.setBackground(getRenderedSlot(recipe.getRollableResults().get(0)), -1, -1)
.addItemStack(recipe.getResultItem())
.addTooltipCallback(addStochasticTooltip(recipe.getRollableResults().get(0)));
if (recipe.shouldKeepHeldItem()) { List<ProcessingOutput> results = recipe.getRollableResults();
handItemSlot.addTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(1, Lang.translateDirect("recipe.deploying.not_consumed").withStyle(ChatFormatting.GOLD))); boolean single = results.size() == 1;
for (int i = 0; i < results.size(); i++) {
ProcessingOutput output = results.get(i);
int xOffset = i % 2 == 0 ? 0 : 19;
int yOffset = (i / 2) * -19;
builder.addSlot(RecipeIngredientRole.OUTPUT, single ? 132 : 132 + xOffset, 51 + yOffset)
.setBackground(getRenderedSlot(output), -1, -1)
.addItemStack(output.getStack())
.addTooltipCallback(addStochasticTooltip(output));
} }
if (recipe.shouldKeepHeldItem())
handItemSlot.addTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(1, Lang.translateDirect("recipe.deploying.not_consumed").withStyle(ChatFormatting.GOLD)));
} }
@Override @Override
public void draw(DeployerApplicationRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack matrixStack, double mouseX, double mouseY) { public void draw(DeployerApplicationRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack matrixStack, double mouseX, double mouseY) {
AllGuiTextures.JEI_SHADOW.render(matrixStack, 62, 57); AllGuiTextures.JEI_SHADOW.render(matrixStack, 62, 57);
AllGuiTextures.JEI_DOWN_ARROW.render(matrixStack, 126, 29); AllGuiTextures.JEI_DOWN_ARROW.render(matrixStack, 126, 29 + (recipe.getRollableResults().size() > 2 ? -19 : 0));
deployer.draw(matrixStack, getBackground().getWidth() / 2 - 13, 22); deployer.draw(matrixStack, getBackground().getWidth() / 2 - 13, 22);
} }

View file

@ -1,5 +1,6 @@
package com.simibubi.create.compat.jei.category; package com.simibubi.create.compat.jei.category;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
@ -8,6 +9,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe; import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.element.GuiGameElement; import com.simibubi.create.foundation.gui.element.GuiGameElement;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
@ -46,10 +48,17 @@ public class ItemApplicationCategory extends CreateRecipeCategory<ItemApplicatio
: (view, tooltip) -> {} : (view, tooltip) -> {}
); );
builder.addSlot(RecipeIngredientRole.OUTPUT, 132, 38) List<ProcessingOutput> results = recipe.getRollableResults();
.setBackground(getRenderedSlot(recipe.getRollableResults().get(0)), -1, -1) boolean single = results.size() == 1;
.addItemStack(recipe.getResultItem()) for (int i = 0; i < results.size(); i++) {
.addTooltipCallback(addStochasticTooltip(recipe.getRollableResults().get(0))); ProcessingOutput output = results.get(i);
int xOffset = i % 2 == 0 ? 0 : 19;
int yOffset = (i / 2) * -19;
builder.addSlot(RecipeIngredientRole.OUTPUT, single ? 132 : 132 + xOffset, 38 + yOffset)
.setBackground(getRenderedSlot(output), -1, -1)
.addItemStack(output.getStack())
.addTooltipCallback(addStochasticTooltip(output));
}
} }
@Override @Override

View file

@ -7,8 +7,8 @@ import javax.annotation.ParametersAreNonnullByDefault;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
@ -57,7 +57,7 @@ public abstract class ProcessingViaFanCategory<T extends Recipe<?>> extends Crea
matrixStack.mulPose(Vector3f.XP.rotationDegrees(-12.5f)); matrixStack.mulPose(Vector3f.XP.rotationDegrees(-12.5f));
matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f));
AnimatedKinetics.defaultBlockElement(AllBlockPartials.ENCASED_FAN_INNER) AnimatedKinetics.defaultBlockElement(AllPartialModels.ENCASED_FAN_INNER)
.rotateBlock(180, 0, AnimatedKinetics.getCurrentAngle() * 16) .rotateBlock(180, 0, AnimatedKinetics.getCurrentAngle() * 16)
.scale(SCALE) .scale(SCALE)
.render(matrixStack); .render(matrixStack);

View file

@ -4,8 +4,8 @@ import com.jozufozu.flywheel.core.PartialModel;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.AllSpriteShifts; import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
@ -42,9 +42,9 @@ public class AnimatedBlazeBurner extends AnimatedKinetics {
.render(matrixStack); .render(matrixStack);
PartialModel blaze = PartialModel blaze =
heatLevel == HeatLevel.SEETHING ? AllBlockPartials.BLAZE_SUPER : AllBlockPartials.BLAZE_ACTIVE; heatLevel == HeatLevel.SEETHING ? AllPartialModels.BLAZE_SUPER : AllPartialModels.BLAZE_ACTIVE;
PartialModel rods2 = heatLevel == HeatLevel.SEETHING ? AllBlockPartials.BLAZE_BURNER_SUPER_RODS_2 PartialModel rods2 = heatLevel == HeatLevel.SEETHING ? AllPartialModels.BLAZE_BURNER_SUPER_RODS_2
: AllBlockPartials.BLAZE_BURNER_RODS_2; : AllPartialModels.BLAZE_BURNER_RODS_2;
blockElement(blaze).atLocal(1, 1.8, 1) blockElement(blaze).atLocal(1, 1.8, 1)
.rotate(0, 180, 0) .rotate(0, 180, 0)
@ -86,7 +86,7 @@ public class AnimatedBlazeBurner extends AnimatedKinetics {
MultiBufferSource.BufferSource buffer = mc.renderBuffers() MultiBufferSource.BufferSource buffer = mc.renderBuffers()
.bufferSource(); .bufferSource();
VertexConsumer vb = buffer.getBuffer(RenderType.cutoutMipped()); VertexConsumer vb = buffer.getBuffer(RenderType.cutoutMipped());
CachedBufferer.partial(AllBlockPartials.BLAZE_BURNER_FLAME, Blocks.AIR.defaultBlockState()) CachedBufferer.partial(AllPartialModels.BLAZE_BURNER_FLAME, Blocks.AIR.defaultBlockState())
.shiftUVScrolling(spriteShift, (float) uScroll, (float) vScroll) .shiftUVScrolling(spriteShift, (float) uScroll, (float) vScroll)
.light(LightTexture.FULL_BRIGHT) .light(LightTexture.FULL_BRIGHT)
.renderInto(matrixStack, vb); .renderInto(matrixStack, vb);

View file

@ -2,8 +2,8 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock; import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -37,11 +37,11 @@ public class AnimatedDeployer extends AnimatedKinetics {
matrixStack.pushPose(); matrixStack.pushPose();
matrixStack.translate(0, offset * 17, 0); matrixStack.translate(0, offset * 17, 0);
blockElement(AllBlockPartials.DEPLOYER_POLE) blockElement(AllPartialModels.DEPLOYER_POLE)
.rotateBlock(90, 0, 0) .rotateBlock(90, 0, 0)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
blockElement(AllBlockPartials.DEPLOYER_HAND_HOLDING) blockElement(AllPartialModels.DEPLOYER_HAND_HOLDING)
.rotateBlock(90, 0, 0) .rotateBlock(90, 0, 0)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);

View file

@ -1,8 +1,8 @@
package com.simibubi.create.compat.jei.category.animations; package com.simibubi.create.compat.jei.category.animations;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.foundation.gui.CustomLightingSettings; import com.simibubi.create.foundation.gui.CustomLightingSettings;
import com.simibubi.create.foundation.gui.ILightingSettings; import com.simibubi.create.foundation.gui.ILightingSettings;
import com.simibubi.create.foundation.gui.element.GuiGameElement; import com.simibubi.create.foundation.gui.element.GuiGameElement;
@ -49,7 +49,7 @@ public abstract class AnimatedKinetics implements IDrawable {
} }
protected PartialModel cogwheel() { protected PartialModel cogwheel() {
return AllBlockPartials.SHAFTLESS_COGWHEEL; return AllPartialModels.SHAFTLESS_COGWHEEL;
} }
protected GuiGameElement.GuiRenderBuilder blockElement(BlockState state) { protected GuiGameElement.GuiRenderBuilder blockElement(BlockState state) {

View file

@ -1,8 +1,8 @@
package com.simibubi.create.compat.jei.category.animations; package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllGuiTextures;
public class AnimatedMillstone extends AnimatedKinetics { public class AnimatedMillstone extends AnimatedKinetics {
@ -15,7 +15,7 @@ public class AnimatedMillstone extends AnimatedKinetics {
matrixStack.translate(-2, 18, 0); matrixStack.translate(-2, 18, 0);
int scale = 22; int scale = 22;
blockElement(AllBlockPartials.MILLSTONE_COG) blockElement(AllPartialModels.MILLSTONE_COG)
.rotateBlock(22.5, getCurrentAngle() * 2, 0) .rotateBlock(22.5, getCurrentAngle() * 2, 0)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);

View file

@ -2,8 +2,8 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -31,12 +31,12 @@ public class AnimatedMixer extends AnimatedKinetics {
float animation = ((Mth.sin(AnimationTickHolder.getRenderTime() / 32f) + 1) / 5) + .5f; float animation = ((Mth.sin(AnimationTickHolder.getRenderTime() / 32f) + 1) / 5) + .5f;
blockElement(AllBlockPartials.MECHANICAL_MIXER_POLE) blockElement(AllPartialModels.MECHANICAL_MIXER_POLE)
.atLocal(0, animation, 0) .atLocal(0, animation, 0)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
blockElement(AllBlockPartials.MECHANICAL_MIXER_HEAD) blockElement(AllPartialModels.MECHANICAL_MIXER_HEAD)
.rotateBlock(0, getCurrentAngle() * 4, 0) .rotateBlock(0, getCurrentAngle() * 4, 0)
.atLocal(0, animation, 0) .atLocal(0, animation, 0)
.scale(scale) .scale(scale)

View file

@ -2,8 +2,8 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.Axis;
@ -33,7 +33,7 @@ public class AnimatedPress extends AnimatedKinetics {
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
blockElement(AllBlockPartials.MECHANICAL_PRESS_HEAD) blockElement(AllPartialModels.MECHANICAL_PRESS_HEAD)
.atLocal(0, -getAnimatedHeadOffset(), 0) .atLocal(0, -getAnimatedHeadOffset(), 0)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);

View file

@ -2,8 +2,8 @@ package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.saw.SawBlock;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -32,7 +32,7 @@ public class AnimatedSaw extends AnimatedKinetics {
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
blockElement(AllBlockPartials.SAW_BLADE_VERTICAL_ACTIVE) blockElement(AllPartialModels.SAW_BLADE_VERTICAL_ACTIVE)
.rotateBlock(0, -90, -90) .rotateBlock(0, -90, -90)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);

View file

@ -6,8 +6,8 @@ import com.mojang.blaze3d.platform.Lighting;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.gui.UIRenderHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
@ -45,15 +45,15 @@ public class AnimatedSpout extends AnimatedKinetics {
matrixStack.pushPose(); matrixStack.pushPose();
blockElement(AllBlockPartials.SPOUT_TOP) blockElement(AllPartialModels.SPOUT_TOP)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0); matrixStack.translate(0, -3 * squeeze / 32f, 0);
blockElement(AllBlockPartials.SPOUT_MIDDLE) blockElement(AllPartialModels.SPOUT_MIDDLE)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0); matrixStack.translate(0, -3 * squeeze / 32f, 0);
blockElement(AllBlockPartials.SPOUT_BOTTOM) blockElement(AllPartialModels.SPOUT_BOTTOM)
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0); matrixStack.translate(0, -3 * squeeze / 32f, 0);

View file

@ -0,0 +1,41 @@
package com.simibubi.create.compat.storageDrawers;
import com.simibubi.create.compat.Mods;
import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.items.IItemHandler;
public class StorageDrawers {
public static boolean isDrawer(BlockEntity be) {
return be != null && Mods.STORAGEDRAWERS.asId()
.equals(be.getType()
.getRegistryName()
.getNamespace());
}
public static float getTrueFillLevel(IItemHandler inv, FilteringBehaviour filtering) {
float occupied = 0;
float totalSpace = 0;
for (int slot = 1; slot < inv.getSlots(); slot++) {
ItemStack stackInSlot = inv.getStackInSlot(slot);
int space = inv.getSlotLimit(slot);
int count = stackInSlot.getCount();
if (space == 0)
continue;
totalSpace += 1;
if (filtering.test(stackInSlot))
occupied += count * (1f / space);
}
if (totalSpace == 0)
return 0;
return occupied / totalSpace;
}
}

View file

@ -2,7 +2,7 @@ package com.simibubi.create.compat.tconstruct;
import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour; import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour;
import com.simibubi.create.compat.Mods; 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.config.AllConfigs;
import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.utility.RegisteredObjects; import com.simibubi.create.foundation.utility.RegisteredObjects;
@ -25,23 +25,23 @@ public class SpoutCasting extends BlockSpoutingBehaviour {
ResourceLocation BASIN = new ResourceLocation("tconstruct", "basin"); ResourceLocation BASIN = new ResourceLocation("tconstruct", "basin");
@Override @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) { boolean simulate) {
if (!enabled()) if (!enabled())
return 0; return 0;
BlockEntity te = level.getBlockEntity(pos); BlockEntity blockEntity = level.getBlockEntity(pos);
if (te == null) if (blockEntity == null)
return 0; return 0;
IFluidHandler handler = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, Direction.UP) IFluidHandler handler = blockEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, Direction.UP)
.orElse(null); .orElse(null);
if (handler == null) if (handler == null)
return 0; return 0;
if (handler.getTanks() != 1) if (handler.getTanks() != 1)
return 0; return 0;
ResourceLocation registryName = RegisteredObjects.getKeyOrThrow(te.getType()); ResourceLocation registryName = RegisteredObjects.getKeyOrThrow(blockEntity.getType());
if (!registryName.equals(TABLE) && !registryName.equals(BASIN)) if (!registryName.equals(TABLE) && !registryName.equals(BASIN))
return 0; return 0;
if (!handler.isFluidValid(0, availableFluid)) if (!handler.isFluidValid(0, availableFluid))
@ -66,7 +66,7 @@ public class SpoutCasting extends BlockSpoutingBehaviour {
TICON_PRESENT = Mods.TCONSTRUCT.isLoaded(); TICON_PRESENT = Mods.TCONSTRUCT.isLoaded();
if (!TICON_PRESENT) if (!TICON_PRESENT)
return false; return false;
return AllConfigs.SERVER.recipes.allowCastingBySpout.get(); return AllConfigs.server().recipes.allowCastingBySpout.get();
} }
} }

View file

@ -1,63 +0,0 @@
package com.simibubi.create.content;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.item.ItemDescription.Palette;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
public enum AllSections {
/** Create's kinetic mechanisms */
KINETICS(Palette.Red),
/** Item transport and other Utility */
LOGISTICS(Palette.Yellow),
/** Tools for strucuture movement and replication */
SCHEMATICS(Palette.Blue),
/** Decorative blocks */
PALETTES(Palette.Green),
/** Helpful gadgets and other shenanigans */
CURIOSITIES(Palette.Purple),
/** Base materials, ingredients and tools */
MATERIALS(Palette.Green),
/** Fallback section */
UNASSIGNED(Palette.Gray)
;
private Palette tooltipPalette;
private AllSections(Palette tooltipPalette) {
this.tooltipPalette = tooltipPalette;
}
public Palette getTooltipPalette() {
return tooltipPalette;
}
public static AllSections of(ItemStack stack) {
Item item = stack.getItem();
if (item instanceof BlockItem)
return ofBlock(((BlockItem) item).getBlock());
return ofItem(item);
}
static AllSections ofItem(Item item) {
return Create.registrate()
.getSection(item);
}
static AllSections ofBlock(Block block) {
return Create.registrate()
.getSection(block);
}
}

View file

@ -1,26 +0,0 @@
package com.simibubi.create.content;
import java.util.EnumSet;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.item.CreateItemGroupBase;
import net.minecraft.world.item.ItemStack;
public class CreateItemGroup extends CreateItemGroupBase {
public CreateItemGroup() {
super("base");
}
@Override
protected EnumSet<AllSections> getSections() {
return EnumSet.complementOf(EnumSet.of(AllSections.PALETTES));
}
@Override
public ItemStack makeIcon() {
return AllBlocks.COGWHEEL.asStack();
}
}

View file

@ -2,8 +2,8 @@ package com.simibubi.create.content.contraptions;
import com.simibubi.create.CreateClient; import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.base.IRotate; 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.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.Color;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
@ -26,34 +26,34 @@ public class KineticDebugger {
public static void tick() { public static void tick() {
if (!isActive()) { if (!isActive()) {
if (KineticTileEntityRenderer.rainbowMode) { if (KineticBlockEntityRenderer.rainbowMode) {
KineticTileEntityRenderer.rainbowMode = false; KineticBlockEntityRenderer.rainbowMode = false;
CreateClient.BUFFER_CACHE.invalidate(); CreateClient.BUFFER_CACHE.invalidate();
} }
return; return;
} }
KineticTileEntity te = getSelectedTE(); KineticBlockEntity be = getSelectedBE();
if (te == null) if (be == null)
return; return;
Level world = Minecraft.getInstance().level; Level world = Minecraft.getInstance().level;
BlockPos toOutline = te.hasSource() ? te.source : te.getBlockPos(); BlockPos toOutline = be.hasSource() ? be.source : be.getBlockPos();
BlockState state = te.getBlockState(); BlockState state = be.getBlockState();
VoxelShape shape = world.getBlockState(toOutline) VoxelShape shape = world.getBlockState(toOutline)
.getBlockSupportShape(world, toOutline); .getBlockSupportShape(world, toOutline);
if (te.getTheoreticalSpeed() != 0 && !shape.isEmpty()) if (be.getTheoreticalSpeed() != 0 && !shape.isEmpty())
CreateClient.OUTLINER.chaseAABB("kineticSource", shape.bounds() CreateClient.OUTLINER.chaseAABB("kineticSource", shape.bounds()
.move(toOutline)) .move(toOutline))
.lineWidth(1 / 16f) .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) { if (state.getBlock() instanceof IRotate) {
Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state);
Vec3 vec = Vec3.atLowerCornerOf(Direction.get(AxisDirection.POSITIVE, axis) Vec3 vec = Vec3.atLowerCornerOf(Direction.get(AxisDirection.POSITIVE, axis)
.getNormal()); .getNormal());
Vec3 center = VecHelper.getCenterOf(te.getBlockPos()); Vec3 center = VecHelper.getCenterOf(be.getBlockPos());
CreateClient.OUTLINER.showLine("rotationAxis", center.add(vec), center.subtract(vec)) CreateClient.OUTLINER.showLine("rotationAxis", center.add(vec), center.subtract(vec))
.lineWidth(1 / 16f); .lineWidth(1 / 16f);
} }
@ -61,10 +61,14 @@ public class KineticDebugger {
} }
public static boolean isActive() { public static boolean isActive() {
return Minecraft.getInstance().options.renderDebug && AllConfigs.CLIENT.rainbowDebug.get(); return isF3DebugModeActive() && AllConfigs.client().rainbowDebug.get();
} }
public static KineticTileEntity getSelectedTE() { public static boolean isF3DebugModeActive() {
return Minecraft.getInstance().options.renderDebug;
}
public static KineticBlockEntity getSelectedBE() {
HitResult obj = Minecraft.getInstance().hitResult; HitResult obj = Minecraft.getInstance().hitResult;
ClientLevel world = Minecraft.getInstance().level; ClientLevel world = Minecraft.getInstance().level;
if (obj == null) if (obj == null)
@ -75,11 +79,11 @@ public class KineticDebugger {
return null; return null;
BlockHitResult ray = (BlockHitResult) obj; BlockHitResult ray = (BlockHitResult) obj;
BlockEntity te = world.getBlockEntity(ray.getBlockPos()); BlockEntity be = world.getBlockEntity(ray.getBlockPos());
if (!(te instanceof KineticTileEntity)) if (!(be instanceof KineticBlockEntity))
return null; return null;
return (KineticTileEntity) te; return (KineticBlockEntity) be;
} }
} }

View file

@ -4,14 +4,14 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticBlockEntity;
public class KineticNetwork { public class KineticNetwork {
public Long id; public Long id;
public boolean initialized; public boolean initialized;
public Map<KineticTileEntity, Float> sources; public Map<KineticBlockEntity, Float> sources;
public Map<KineticTileEntity, Float> members; public Map<KineticBlockEntity, Float> members;
private float currentCapacity; private float currentCapacity;
private float currentStress; private float currentStress;
@ -33,18 +33,18 @@ public class KineticNetwork {
updateCapacity(); updateCapacity();
} }
public void addSilently(KineticTileEntity te, float lastCapacity, float lastStress) { public void addSilently(KineticBlockEntity be, float lastCapacity, float lastStress) {
if (members.containsKey(te)) if (members.containsKey(be))
return; return;
if (te.isSource()) { if (be.isSource()) {
unloadedCapacity -= lastCapacity * getStressMultiplierForSpeed(te.getGeneratedSpeed()); unloadedCapacity -= lastCapacity * getStressMultiplierForSpeed(be.getGeneratedSpeed());
float addedStressCapacity = te.calculateAddedStressCapacity(); float addedStressCapacity = be.calculateAddedStressCapacity();
sources.put(te, addedStressCapacity); sources.put(be, addedStressCapacity);
} }
unloadedStress -= lastStress * getStressMultiplierForSpeed(te.getTheoreticalSpeed()); unloadedStress -= lastStress * getStressMultiplierForSpeed(be.getTheoreticalSpeed());
float stressApplied = te.calculateStressApplied(); float stressApplied = be.calculateStressApplied();
members.put(te, stressApplied); members.put(be, stressApplied);
unloadedMembers--; unloadedMembers--;
if (unloadedMembers < 0) if (unloadedMembers < 0)
@ -55,36 +55,36 @@ public class KineticNetwork {
unloadedStress = 0; unloadedStress = 0;
} }
public void add(KineticTileEntity te) { public void add(KineticBlockEntity be) {
if (members.containsKey(te)) if (members.containsKey(be))
return; return;
if (te.isSource()) if (be.isSource())
sources.put(te, te.calculateAddedStressCapacity()); sources.put(be, be.calculateAddedStressCapacity());
members.put(te, te.calculateStressApplied()); members.put(be, be.calculateStressApplied());
updateFromNetwork(te); updateFromNetwork(be);
te.networkDirty = true; be.networkDirty = true;
} }
public void updateCapacityFor(KineticTileEntity te, float capacity) { public void updateCapacityFor(KineticBlockEntity be, float capacity) {
sources.put(te, capacity); sources.put(be, capacity);
updateCapacity(); updateCapacity();
} }
public void updateStressFor(KineticTileEntity te, float stress) { public void updateStressFor(KineticBlockEntity be, float stress) {
members.put(te, stress); members.put(be, stress);
updateStress(); updateStress();
} }
public void remove(KineticTileEntity te) { public void remove(KineticBlockEntity be) {
if (!members.containsKey(te)) if (!members.containsKey(be))
return; return;
if (te.isSource()) if (be.isSource())
sources.remove(te); sources.remove(be);
members.remove(te); members.remove(be);
te.updateFromNetwork(0, 0, 0); be.updateFromNetwork(0, 0, 0);
if (members.isEmpty()) { if (members.isEmpty()) {
TorquePropagator.networks.get(te.getLevel()) TorquePropagator.networks.get(be.getLevel())
.remove(this.id); .remove(this.id);
return; return;
} }
@ -96,12 +96,12 @@ public class KineticNetwork {
} }
public void sync() { public void sync() {
for (KineticTileEntity te : members.keySet()) for (KineticBlockEntity be : members.keySet())
updateFromNetwork(te); updateFromNetwork(be);
} }
private void updateFromNetwork(KineticTileEntity te) { private void updateFromNetwork(KineticBlockEntity be) {
te.updateFromNetwork(currentCapacity, currentStress, getSize()); be.updateFromNetwork(currentCapacity, currentStress, getSize());
} }
public void updateCapacity() { public void updateCapacity() {
@ -132,15 +132,15 @@ public class KineticNetwork {
public float calculateCapacity() { public float calculateCapacity() {
float presentCapacity = 0; float presentCapacity = 0;
for (Iterator<KineticTileEntity> iterator = sources.keySet() for (Iterator<KineticBlockEntity> iterator = sources.keySet()
.iterator(); iterator.hasNext();) { .iterator(); iterator.hasNext();) {
KineticTileEntity te = iterator.next(); KineticBlockEntity be = iterator.next();
if (te.getLevel() if (be.getLevel()
.getBlockEntity(te.getBlockPos()) != te) { .getBlockEntity(be.getBlockPos()) != be) {
iterator.remove(); iterator.remove();
continue; continue;
} }
presentCapacity += getActualCapacityOf(te); presentCapacity += getActualCapacityOf(be);
} }
float newMaxStress = presentCapacity + unloadedCapacity; float newMaxStress = presentCapacity + unloadedCapacity;
return newMaxStress; return newMaxStress;
@ -148,26 +148,26 @@ public class KineticNetwork {
public float calculateStress() { public float calculateStress() {
float presentStress = 0; float presentStress = 0;
for (Iterator<KineticTileEntity> iterator = members.keySet() for (Iterator<KineticBlockEntity> iterator = members.keySet()
.iterator(); iterator.hasNext();) { .iterator(); iterator.hasNext();) {
KineticTileEntity te = iterator.next(); KineticBlockEntity be = iterator.next();
if (te.getLevel() if (be.getLevel()
.getBlockEntity(te.getBlockPos()) != te) { .getBlockEntity(be.getBlockPos()) != be) {
iterator.remove(); iterator.remove();
continue; continue;
} }
presentStress += getActualStressOf(te); presentStress += getActualStressOf(be);
} }
float newStress = presentStress + unloadedStress; float newStress = presentStress + unloadedStress;
return newStress; return newStress;
} }
public float getActualCapacityOf(KineticTileEntity te) { public float getActualCapacityOf(KineticBlockEntity be) {
return sources.get(te) * getStressMultiplierForSpeed(te.getGeneratedSpeed()); return sources.get(be) * getStressMultiplierForSpeed(be.getGeneratedSpeed());
} }
public float getActualStressOf(KineticTileEntity te) { public float getActualStressOf(KineticBlockEntity be) {
return members.get(te) * getStressMultiplierForSpeed(te.getTheoreticalSpeed()); return members.get(be) * getStressMultiplierForSpeed(be.getTheoreticalSpeed());
} }
private static float getStressMultiplierForSpeed(float speed) { private static float getStressMultiplierForSpeed(float speed) {

View file

@ -7,15 +7,15 @@ import java.util.List;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.base.IRotate; 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.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.CogWheelBlock;
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel; 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.EncasedBeltBlock;
import com.simibubi.create.content.contraptions.relays.encased.SplitShaftTileEntity; import com.simibubi.create.content.contraptions.relays.encased.SplitShaftBlockEntity;
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlockEntity;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
@ -41,7 +41,7 @@ public class RotationPropagator {
* @param to * @param to
* @return * @return
*/ */
private static float getRotationSpeedModifier(KineticTileEntity from, KineticTileEntity to) { private static float getRotationSpeedModifier(KineticBlockEntity from, KineticBlockEntity to) {
final BlockState stateFrom = from.getBlockState(); final BlockState stateFrom = from.getBlockState();
final BlockState stateTo = to.getBlockState(); final BlockState stateTo = to.getBlockState();
@ -121,17 +121,17 @@ public class RotationPropagator {
return 0; 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 stateFrom = from.getBlockState();
final BlockState stateTo = to.getBlockState(); final BlockState stateTo = to.getBlockState();
// Rotation Speed Controller <-> Large Gear // Rotation Speed Controller <-> Large Gear
if (isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos() if (isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos()
.subtract(from.getBlockPos()))) .subtract(from.getBlockPos())))
return SpeedControllerTileEntity.getConveyedSpeed(from, to, true); return SpeedControllerBlockEntity.getConveyedSpeed(from, to, true);
if (isLargeCogToSpeedController(stateTo, stateFrom, from.getBlockPos() if (isLargeCogToSpeedController(stateTo, stateFrom, from.getBlockPos()
.subtract(to.getBlockPos()))) .subtract(to.getBlockPos())))
return SpeedControllerTileEntity.getConveyedSpeed(to, from, false); return SpeedControllerBlockEntity.getConveyedSpeed(to, from, false);
float rotationSpeedModifier = getRotationSpeedModifier(from, to); float rotationSpeedModifier = getRotationSpeedModifier(from, to);
return from.getTheoreticalSpeed() * rotationSpeedModifier; return from.getTheoreticalSpeed() * rotationSpeedModifier;
@ -156,17 +156,17 @@ public class RotationPropagator {
return true; return true;
} }
private static float getAxisModifier(KineticTileEntity te, Direction direction) { private static float getAxisModifier(KineticBlockEntity be, Direction direction) {
if (!(te.hasSource()||te.isSource()) || !(te instanceof DirectionalShaftHalvesTileEntity)) if (!(be.hasSource()||be.isSource()) || !(be instanceof DirectionalShaftHalvesBlockEntity))
return 1; 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 return direction.getAxis() == source.getAxis() ? direction == source ? 1 : -1
: direction.getAxisDirection() == source.getAxisDirection() ? -1 : 1; : direction.getAxisDirection() == source.getAxisDirection() ? -1 : 1;
if (te instanceof SplitShaftTileEntity) if (be instanceof SplitShaftBlockEntity)
return ((SplitShaftTileEntity) te).getRotationSpeedModifier(direction); return ((SplitShaftBlockEntity) be).getRotationSpeedModifier(direction);
return 1; return 1;
} }
@ -205,7 +205,7 @@ public class RotationPropagator {
* @param worldIn * @param worldIn
* @param pos * @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) if (worldIn.isClientSide)
return; return;
if (!worldIn.isLoaded(pos)) if (!worldIn.isLoaded(pos))
@ -218,11 +218,11 @@ public class RotationPropagator {
* *
* @param currentTE * @param currentTE
*/ */
private static void propagateNewSource(KineticTileEntity currentTE) { private static void propagateNewSource(KineticBlockEntity currentTE) {
BlockPos pos = currentTE.getBlockPos(); BlockPos pos = currentTE.getBlockPos();
Level world = currentTE.getLevel(); Level world = currentTE.getLevel();
for (KineticTileEntity neighbourTE : getConnectedNeighbours(currentTE)) { for (KineticBlockEntity neighbourTE : getConnectedNeighbours(currentTE)) {
float speedOfCurrent = currentTE.getTheoreticalSpeed(); float speedOfCurrent = currentTE.getTheoreticalSpeed();
float speedOfNeighbour = neighbourTE.getTheoreticalSpeed(); float speedOfNeighbour = neighbourTE.getTheoreticalSpeed();
float newSpeed = getConveyedSpeed(currentTE, neighbourTE); float newSpeed = getConveyedSpeed(currentTE, neighbourTE);
@ -234,8 +234,8 @@ public class RotationPropagator {
boolean incompatible = boolean incompatible =
Math.signum(newSpeed) != Math.signum(speedOfNeighbour) && (newSpeed != 0 && speedOfNeighbour != 0); Math.signum(newSpeed) != Math.signum(speedOfNeighbour) && (newSpeed != 0 && speedOfNeighbour != 0);
boolean tooFast = Math.abs(newSpeed) > AllConfigs.SERVER.kinetics.maxRotationSpeed.get() boolean tooFast = Math.abs(newSpeed) > AllConfigs.server().kinetics.maxRotationSpeed.get()
|| Math.abs(oppositeSpeed) > AllConfigs.SERVER.kinetics.maxRotationSpeed.get(); || Math.abs(oppositeSpeed) > AllConfigs.server().kinetics.maxRotationSpeed.get();
// Check for both the new speed and the opposite speed, just in case // Check for both the new speed and the opposite speed, just in case
boolean speedChangedTooOften = currentTE.getFlickerScore() > MAX_FLICKER_SCORE; boolean speedChangedTooOften = currentTE.getFlickerScore() > MAX_FLICKER_SCORE;
@ -306,29 +306,29 @@ public class RotationPropagator {
* *
* @param worldIn * @param worldIn
* @param pos * @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) if (worldIn.isClientSide)
return; return;
if (removedTE == null) if (removedBE == null)
return; return;
if (removedTE.getTheoreticalSpeed() == 0) if (removedBE.getTheoreticalSpeed() == 0)
return; return;
for (BlockPos neighbourPos : getPotentialNeighbourLocations(removedTE)) { for (BlockPos neighbourPos : getPotentialNeighbourLocations(removedBE)) {
BlockState neighbourState = worldIn.getBlockState(neighbourPos); BlockState neighbourState = worldIn.getBlockState(neighbourPos);
if (!(neighbourState.getBlock() instanceof IRotate)) if (!(neighbourState.getBlock() instanceof IRotate))
continue; continue;
BlockEntity tileEntity = worldIn.getBlockEntity(neighbourPos); BlockEntity blockEntity = worldIn.getBlockEntity(neighbourPos);
if (!(tileEntity instanceof KineticTileEntity)) if (!(blockEntity instanceof KineticBlockEntity))
continue; continue;
final KineticTileEntity neighbourTE = (KineticTileEntity) tileEntity; final KineticBlockEntity neighbourBE = (KineticBlockEntity) blockEntity;
if (!neighbourTE.hasSource() || !neighbourTE.source.equals(pos)) if (!neighbourBE.hasSource() || !neighbourBE.source.equals(pos))
continue; continue;
propagateMissingSource(neighbourTE); propagateMissingSource(neighbourBE);
} }
} }
@ -339,44 +339,44 @@ public class RotationPropagator {
* *
* @param updateTE * @param updateTE
*/ */
private static void propagateMissingSource(KineticTileEntity updateTE) { private static void propagateMissingSource(KineticBlockEntity updateTE) {
final Level world = updateTE.getLevel(); final Level world = updateTE.getLevel();
List<KineticTileEntity> potentialNewSources = new LinkedList<>(); List<KineticBlockEntity> potentialNewSources = new LinkedList<>();
List<BlockPos> frontier = new LinkedList<>(); List<BlockPos> frontier = new LinkedList<>();
frontier.add(updateTE.getBlockPos()); frontier.add(updateTE.getBlockPos());
BlockPos missingSource = updateTE.hasSource() ? updateTE.source : null; BlockPos missingSource = updateTE.hasSource() ? updateTE.source : null;
while (!frontier.isEmpty()) { while (!frontier.isEmpty()) {
final BlockPos pos = frontier.remove(0); final BlockPos pos = frontier.remove(0);
BlockEntity tileEntity = world.getBlockEntity(pos); BlockEntity blockEntity = world.getBlockEntity(pos);
if (!(tileEntity instanceof KineticTileEntity)) if (!(blockEntity instanceof KineticBlockEntity))
continue; continue;
final KineticTileEntity currentTE = (KineticTileEntity) tileEntity; final KineticBlockEntity currentBE = (KineticBlockEntity) blockEntity;
currentTE.removeSource(); currentBE.removeSource();
currentTE.sendData(); currentBE.sendData();
for (KineticTileEntity neighbourTE : getConnectedNeighbours(currentTE)) { for (KineticBlockEntity neighbourBE : getConnectedNeighbours(currentBE)) {
if (neighbourTE.getBlockPos() if (neighbourBE.getBlockPos()
.equals(missingSource)) .equals(missingSource))
continue; continue;
if (!neighbourTE.hasSource()) if (!neighbourBE.hasSource())
continue; continue;
if (!neighbourTE.source.equals(pos)) { if (!neighbourBE.source.equals(pos)) {
potentialNewSources.add(neighbourTE); potentialNewSources.add(neighbourBE);
continue; continue;
} }
if (neighbourTE.isSource()) if (neighbourBE.isSource())
potentialNewSources.add(neighbourTE); potentialNewSources.add(neighbourBE);
frontier.add(neighbourTE.getBlockPos()); frontier.add(neighbourBE.getBlockPos());
} }
} }
for (KineticTileEntity newSource : potentialNewSources) { for (KineticBlockEntity newSource : potentialNewSources) {
if (newSource.hasSource() || newSource.isSource()) { if (newSource.hasSource() || newSource.isSource()) {
propagateNewSource(newSource); propagateNewSource(newSource);
return; 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() BlockState neighbourState = currentTE.getLevel()
.getBlockState(neighbourPos); .getBlockState(neighbourPos);
if (!(neighbourState.getBlock() instanceof IRotate)) if (!(neighbourState.getBlock() instanceof IRotate))
return null; return null;
if (!neighbourState.hasBlockEntity()) if (!neighbourState.hasBlockEntity())
return null; return null;
BlockEntity neighbourTE = currentTE.getLevel() BlockEntity neighbourBE = currentTE.getLevel()
.getBlockEntity(neighbourPos); .getBlockEntity(neighbourPos);
if (!(neighbourTE instanceof KineticTileEntity)) if (!(neighbourBE instanceof KineticBlockEntity))
return null; return null;
KineticTileEntity neighbourKTE = (KineticTileEntity) neighbourTE; KineticBlockEntity neighbourKBE = (KineticBlockEntity) neighbourBE;
if (!(neighbourKTE.getBlockState() if (!(neighbourKBE.getBlockState()
.getBlock() instanceof IRotate)) .getBlock() instanceof IRotate))
return null; return null;
if (!isConnected(currentTE, neighbourKTE) && !isConnected(neighbourKTE, currentTE)) if (!isConnected(currentTE, neighbourKBE) && !isConnected(neighbourKBE, currentTE))
return null; 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 stateFrom = from.getBlockState();
final BlockState stateTo = to.getBlockState(); final BlockState stateTo = to.getBlockState();
return isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos() return isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos()
@ -412,34 +412,34 @@ public class RotationPropagator {
|| from.isCustomConnection(to, stateFrom, stateTo); || from.isCustomConnection(to, stateFrom, stateTo);
} }
private static List<KineticTileEntity> getConnectedNeighbours(KineticTileEntity te) { private static List<KineticBlockEntity> getConnectedNeighbours(KineticBlockEntity be) {
List<KineticTileEntity> neighbours = new LinkedList<>(); List<KineticBlockEntity> neighbours = new LinkedList<>();
for (BlockPos neighbourPos : getPotentialNeighbourLocations(te)) { for (BlockPos neighbourPos : getPotentialNeighbourLocations(be)) {
final KineticTileEntity neighbourTE = findConnectedNeighbour(te, neighbourPos); final KineticBlockEntity neighbourBE = findConnectedNeighbour(be, neighbourPos);
if (neighbourTE == null) if (neighbourBE == null)
continue; continue;
neighbours.add(neighbourTE); neighbours.add(neighbourBE);
} }
return neighbours; return neighbours;
} }
private static List<BlockPos> getPotentialNeighbourLocations(KineticTileEntity te) { private static List<BlockPos> getPotentialNeighbourLocations(KineticBlockEntity be) {
List<BlockPos> neighbours = new LinkedList<>(); List<BlockPos> neighbours = new LinkedList<>();
if (!te.getLevel() if (!be.getLevel()
.isAreaLoaded(te.getBlockPos(), 1)) .isAreaLoaded(be.getBlockPos(), 1))
return neighbours; return neighbours;
for (Direction facing : Iterate.directions) for (Direction facing : Iterate.directions)
neighbours.add(te.getBlockPos() neighbours.add(be.getBlockPos()
.relative(facing)); .relative(facing));
BlockState blockState = te.getBlockState(); BlockState blockState = be.getBlockState();
if (!(blockState.getBlock() instanceof IRotate)) if (!(blockState.getBlock() instanceof IRotate))
return neighbours; return neighbours;
IRotate block = (IRotate) blockState.getBlock(); IRotate block = (IRotate) blockState.getBlock();
return te.addPropagationLocations(block, blockState, neighbours); return be.addPropagationLocations(block, blockState, neighbours);
} }
} }

View file

@ -4,7 +4,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import com.simibubi.create.Create; 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 com.simibubi.create.foundation.utility.WorldHelper;
import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelAccessor;
@ -23,16 +23,16 @@ public class TorquePropagator {
Create.LOGGER.debug("Removed Kinetic Network Space for " + WorldHelper.getDimensionID(world)); Create.LOGGER.debug("Removed Kinetic Network Space for " + WorldHelper.getDimensionID(world));
} }
public KineticNetwork getOrCreateNetworkFor(KineticTileEntity te) { public KineticNetwork getOrCreateNetworkFor(KineticBlockEntity be) {
Long id = te.network; Long id = be.network;
KineticNetwork 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) if (id == null)
return null; return null;
if (!map.containsKey(id)) { if (!map.containsKey(id)) {
network = new KineticNetwork(); network = new KineticNetwork();
network.id = te.network; network.id = be.network;
map.put(id, network); map.put(id, network);
} }
network = map.get(id); network = map.get(id);

View file

@ -5,9 +5,9 @@ import com.jozufozu.flywheel.api.MaterialManager;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class BackHalfShaftInstance extends HalfShaftInstance { public class BackHalfShaftInstance<T extends KineticBlockEntity> extends HalfShaftInstance<T> {
public BackHalfShaftInstance(MaterialManager modelManager, KineticTileEntity tile) { public BackHalfShaftInstance(MaterialManager materialManager, T blockEntity) {
super(modelManager, tile); super(materialManager, blockEntity);
} }
@Override @Override

View file

@ -5,9 +5,9 @@ import com.jozufozu.flywheel.api.MaterialManager;
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData; import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
import com.simibubi.create.foundation.render.AllMaterialSpecs; import com.simibubi.create.foundation.render.AllMaterialSpecs;
public class CutoutRotatingInstance extends SingleRotatingInstance { public class CutoutRotatingInstance<T extends KineticBlockEntity> extends SingleRotatingInstance<T> {
public CutoutRotatingInstance(MaterialManager modelManager, KineticTileEntity tile) { public CutoutRotatingInstance(MaterialManager materialManager, T blockEntity) {
super(modelManager, tile); super(materialManager, blockEntity);
} }
protected Material<RotatingData> getRotatingMaterial() { protected Material<RotatingData> getRotatingMaterial() {

View file

@ -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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public abstract class GeneratingKineticTileEntity extends KineticTileEntity { public abstract class GeneratingKineticBlockEntity extends KineticBlockEntity {
public boolean reActivateSource; public boolean reActivateSource;
public GeneratingKineticTileEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) { public GeneratingKineticBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(typeIn, pos, state); super(type, pos, state);
} }
protected void notifyStressCapacityChange(float capacity) { protected void notifyStressCapacityChange(float capacity) {
@ -37,11 +37,11 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity {
@Override @Override
public void setSource(BlockPos source) { public void setSource(BlockPos source) {
super.setSource(source); super.setSource(source);
BlockEntity tileEntity = level.getBlockEntity(source); BlockEntity blockEntity = level.getBlockEntity(source);
if (!(tileEntity instanceof KineticTileEntity)) if (!(blockEntity instanceof KineticBlockEntity))
return; return;
KineticTileEntity sourceTe = (KineticTileEntity) tileEntity; KineticBlockEntity sourceBE = (KineticBlockEntity) blockEntity;
if (reActivateSource && Math.abs(sourceTe.getSpeed()) >= Math.abs(getGeneratedSpeed())) if (reActivateSource && Math.abs(sourceBE.getSpeed()) >= Math.abs(getGeneratedSpeed()))
reActivateSource = false; reActivateSource = false;
} }

View file

@ -2,21 +2,21 @@ package com.simibubi.create.content.contraptions.base;
import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.Instancer;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData; import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class HalfShaftInstance extends SingleRotatingInstance { public class HalfShaftInstance<T extends KineticBlockEntity> extends SingleRotatingInstance<T> {
public HalfShaftInstance(MaterialManager modelManager, KineticTileEntity tile) { public HalfShaftInstance(MaterialManager materialManager, T blockEntity) {
super(modelManager, tile); super(materialManager, blockEntity);
} }
@Override @Override
protected Instancer<RotatingData> getModel() { protected Instancer<RotatingData> getModel() {
Direction dir = getShaftDirection(); Direction dir = getShaftDirection();
return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, dir); return getRotatingMaterial().getModel(AllPartialModels.SHAFT_HALF, blockState, dir);
} }
protected Direction getShaftDirection() { protected Direction getShaftDirection() {

View file

@ -5,10 +5,10 @@ import com.jozufozu.flywheel.api.MaterialManager;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class HorizontalHalfShaftInstance extends HalfShaftInstance { public class HorizontalHalfShaftInstance<T extends KineticBlockEntity> extends HalfShaftInstance<T> {
public HorizontalHalfShaftInstance(MaterialManager modelManager, KineticTileEntity tile) { public HorizontalHalfShaftInstance(MaterialManager materialManager, T blockEntity) {
super(modelManager, tile); super(materialManager, blockEntity);
} }
@Override @Override

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.item.ItemDescription; import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.LangBuilder; import com.simibubi.create.foundation.utility.LangBuilder;
@ -46,10 +46,10 @@ public interface IRotate extends IWrenchable {
public float getSpeedValue() { public float getSpeedValue() {
switch (this) { switch (this) {
case FAST: case FAST:
return AllConfigs.SERVER.kinetics.fastSpeed.get() return AllConfigs.server().kinetics.fastSpeed.get()
.floatValue(); .floatValue();
case MEDIUM: case MEDIUM:
return AllConfigs.SERVER.kinetics.mediumSpeed.get() return AllConfigs.server().kinetics.mediumSpeed.get()
.floatValue(); .floatValue();
case SLOW: case SLOW:
return 1; return 1;
@ -62,9 +62,9 @@ public interface IRotate extends IWrenchable {
public static SpeedLevel of(float speed) { public static SpeedLevel of(float speed) {
speed = Math.abs(speed); speed = Math.abs(speed);
if (speed >= AllConfigs.SERVER.kinetics.fastSpeed.get()) if (speed >= AllConfigs.server().kinetics.fastSpeed.get())
return FAST; return FAST;
if (speed >= AllConfigs.SERVER.kinetics.mediumSpeed.get()) if (speed >= AllConfigs.server().kinetics.mediumSpeed.get())
return MEDIUM; return MEDIUM;
if (speed >= 1) if (speed >= 1)
return SLOW; return SLOW;
@ -73,7 +73,7 @@ public interface IRotate extends IWrenchable {
public static LangBuilder getFormattedSpeedText(float speed, boolean overstressed) { public static LangBuilder getFormattedSpeedText(float speed, boolean overstressed) {
SpeedLevel speedLevel = of(speed); SpeedLevel speedLevel = of(speed);
LangBuilder builder = Lang.text(ItemDescription.makeProgressBar(3, speedLevel.ordinal())); LangBuilder builder = Lang.text(TooltipHelper.makeProgressBar(3, speedLevel.ordinal()));
builder.translate("tooltip.speedRequirement." + Lang.asId(speedLevel.name())) builder.translate("tooltip.speedRequirement." + Lang.asId(speedLevel.name()))
.space() .space()
@ -128,12 +128,12 @@ public interface IRotate extends IWrenchable {
} }
public static boolean isEnabled() { public static boolean isEnabled() {
return !AllConfigs.SERVER.kinetics.disableStress.get(); return !AllConfigs.server().kinetics.disableStress.get();
} }
public static LangBuilder getFormattedStressText(double stressPercent) { public static LangBuilder getFormattedStressText(double stressPercent) {
StressImpact stressLevel = of(stressPercent); StressImpact stressLevel = of(stressPercent);
return Lang.text(ItemDescription.makeProgressBar(3, Math.min(stressLevel.ordinal() + 1, 3))) return Lang.text(TooltipHelper.makeProgressBar(3, Math.min(stressLevel.ordinal() + 1, 3)))
.translate("tooltip.stressImpact." + Lang.asId(stressLevel.name())) .translate("tooltip.stressImpact." + Lang.asId(stressLevel.name()))
.text(String.format(" (%s%%) ", (int) (stressPercent * 100))) .text(String.format(" (%s%%) ", (int) (stressPercent * 100)))
.style(stressLevel.getRelativeColor()); .style(stressLevel.getRelativeColor());

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.base; package com.simibubi.create.content.contraptions.base;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour; import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.item.ItemDescription.Palette; import com.simibubi.create.foundation.block.IBE;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -16,23 +16,21 @@ import net.minecraft.world.level.block.state.BlockState;
public abstract class KineticBlock extends Block implements IRotate { public abstract class KineticBlock extends Block implements IRotate {
protected static final Palette color = Palette.Red;
public KineticBlock(Properties properties) { public KineticBlock(Properties properties) {
super(properties); super(properties);
} }
@Override @Override
public void onPlace(BlockState state, Level worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { 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, // however, if a block change occurs that does not change kinetic connections,
// we can prevent a major re-propagation here // we can prevent a major re-propagation here
BlockEntity tileEntity = worldIn.getBlockEntity(pos); BlockEntity blockEntity = worldIn.getBlockEntity(pos);
if (tileEntity instanceof KineticTileEntity) { if (blockEntity instanceof KineticBlockEntity) {
KineticTileEntity kineticTileEntity = (KineticTileEntity) tileEntity; KineticBlockEntity kineticBlockEntity = (KineticBlockEntity) blockEntity;
kineticTileEntity.preventSpeedUpdate = 0; kineticBlockEntity.preventSpeedUpdate = 0;
if (oldState.getBlock() != state.getBlock()) if (oldState.getBlock() != state.getBlock())
return; return;
@ -41,10 +39,15 @@ public abstract class KineticBlock extends Block implements IRotate {
if (!areStatesKineticallyEquivalent(oldState, state)) if (!areStatesKineticallyEquivalent(oldState, state))
return; return;
kineticTileEntity.preventSpeedUpdate = 2; kineticBlockEntity.preventSpeedUpdate = 2;
} }
} }
@Override
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) {
IBE.onRemove(pState, pLevel, pPos, pNewState);
}
@Override @Override
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) { public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
return false; return false;
@ -62,18 +65,18 @@ public abstract class KineticBlock extends Block implements IRotate {
if (worldIn.isClientSide()) if (worldIn.isClientSide())
return; return;
BlockEntity tileEntity = worldIn.getBlockEntity(pos); BlockEntity blockEntity = worldIn.getBlockEntity(pos);
if (!(tileEntity instanceof KineticTileEntity)) if (!(blockEntity instanceof KineticBlockEntity))
return; return;
KineticTileEntity kte = (KineticTileEntity) tileEntity; KineticBlockEntity kbe = (KineticBlockEntity) blockEntity;
if (kte.preventSpeedUpdate > 0) if (kbe.preventSpeedUpdate > 0)
return; return;
// Remove previous information when block is added // Remove previous information when block is added
kte.warnOfMovement(); kbe.warnOfMovement();
kte.clearKineticInformation(); kbe.clearKineticInformation();
kte.updateSpeed = true; kbe.updateSpeed = true;
} }
@Override @Override
@ -82,12 +85,12 @@ public abstract class KineticBlock extends Block implements IRotate {
if (worldIn.isClientSide) if (worldIn.isClientSide)
return; return;
BlockEntity tileEntity = worldIn.getBlockEntity(pos); BlockEntity blockEntity = worldIn.getBlockEntity(pos);
if (!(tileEntity instanceof KineticTileEntity)) if (!(blockEntity instanceof KineticBlockEntity))
return; return;
KineticTileEntity kte = (KineticTileEntity) tileEntity; KineticBlockEntity kbe = (KineticBlockEntity) blockEntity;
kte.effects.queueRotationIndicators(); kbe.effects.queueRotationIndicators();
} }
public float getParticleTargetRadius() { public float getParticleTargetRadius() {

View file

@ -18,12 +18,13 @@ import com.simibubi.create.content.contraptions.goggles.IHaveHoveringInformation
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel; import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock;
import com.simibubi.create.foundation.block.BlockStressValues; 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.config.AllConfigs;
import com.simibubi.create.foundation.item.TooltipHelper; import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.item.TooltipHelper.Palette;
import com.simibubi.create.foundation.sound.SoundScapes; import com.simibubi.create.foundation.sound.SoundScapes;
import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup; 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 com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
@ -46,7 +47,7 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor; 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 Long network;
public @Nullable BlockPos source; public @Nullable BlockPos source;
@ -67,7 +68,7 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
protected float lastStressApplied; protected float lastStressApplied;
protected float lastCapacityProvided; protected float lastCapacityProvided;
public KineticTileEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) { public KineticBlockEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
super(typeIn, pos, state); super(typeIn, pos, state);
effects = new KineticEffectHandler(this); effects = new KineticEffectHandler(this);
updateSpeed = true; updateSpeed = true;
@ -101,7 +102,7 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
} }
if (validationCountdown-- <= 0) { if (validationCountdown-- <= 0) {
validationCountdown = AllConfigs.SERVER.kinetics.kineticValidationFrequency.get(); validationCountdown = AllConfigs.server().kinetics.kineticValidationFrequency.get();
validateKinetics(); validateKinetics();
} }
@ -125,10 +126,10 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
if (!level.isLoaded(source)) if (!level.isLoaded(source))
return; return;
BlockEntity tileEntity = level.getBlockEntity(source); BlockEntity blockEntity = level.getBlockEntity(source);
KineticTileEntity sourceTe = KineticBlockEntity sourceBE =
tileEntity instanceof KineticTileEntity ? (KineticTileEntity) tileEntity : null; blockEntity instanceof KineticBlockEntity ? (KineticBlockEntity) blockEntity : null;
if (sourceTe == null || sourceTe.speed == 0) { if (sourceBE == null || sourceBE.speed == 0) {
removeSource(); removeSource();
detachKinetics(); detachKinetics();
return; return;
@ -184,18 +185,13 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
} }
@Override @Override
public void setRemoved() { public void remove() {
super.setRemoved();
}
@Override
protected void setRemovedNotDueToChunkUnload() {
if (!level.isClientSide) { if (!level.isClientSide) {
if (hasNetwork()) if (hasNetwork())
getOrCreateNetwork().remove(this); getOrCreateNetwork().remove(this);
detachKinetics(); detachKinetics();
} }
super.setRemovedNotDueToChunkUnload(); super.remove();
} }
@Override @Override
@ -297,14 +293,14 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
if (level == null || level.isClientSide) if (level == null || level.isClientSide)
return; return;
BlockEntity tileEntity = level.getBlockEntity(source); BlockEntity blockEntity = level.getBlockEntity(source);
if (!(tileEntity instanceof KineticTileEntity)) { if (!(blockEntity instanceof KineticBlockEntity)) {
removeSource(); removeSource();
return; return;
} }
KineticTileEntity sourceTe = (KineticTileEntity) tileEntity; KineticBlockEntity sourceBE = (KineticBlockEntity) blockEntity;
setNetwork(sourceTe.network); setNetwork(sourceBE.network);
} }
public void removeSource() { public void removeSource() {
@ -365,43 +361,43 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
if (world.isClientSide) if (world.isClientSide)
return; return;
BlockEntity tileEntityIn = world.getBlockEntity(pos); BlockEntity blockEntity = world.getBlockEntity(pos);
BlockState currentState = world.getBlockState(pos); BlockState currentState = world.getBlockState(pos);
boolean isKinetic = tileEntityIn instanceof KineticTileEntity; boolean isKinetic = blockEntity instanceof KineticBlockEntity;
if (currentState == state) if (currentState == state)
return; return;
if (tileEntityIn == null || !isKinetic) { if (blockEntity == null || !isKinetic) {
world.setBlock(pos, state, 3); world.setBlock(pos, state, 3);
return; return;
} }
KineticTileEntity tileEntity = (KineticTileEntity) tileEntityIn; KineticBlockEntity kineticBlockEntity = (KineticBlockEntity) blockEntity;
if (state.getBlock() instanceof KineticBlock if (state.getBlock() instanceof KineticBlock
&& !((KineticBlock) state.getBlock()).areStatesKineticallyEquivalent(currentState, state)) { && !((KineticBlock) state.getBlock()).areStatesKineticallyEquivalent(currentState, state)) {
if (tileEntity.hasNetwork()) if (kineticBlockEntity.hasNetwork())
tileEntity.getOrCreateNetwork() kineticBlockEntity.getOrCreateNetwork()
.remove(tileEntity); .remove(kineticBlockEntity);
tileEntity.detachKinetics(); kineticBlockEntity.detachKinetics();
tileEntity.removeSource(); kineticBlockEntity.removeSource();
} }
world.setBlock(pos, state, 3); world.setBlock(pos, state, 3);
} }
@Override @Override
public void addBehaviours(List<TileEntityBehaviour> behaviours) {} public void addBehaviours(List<BlockEntityBehaviour> behaviours) {}
@Override @Override
public boolean addToTooltip(List<Component> tooltip, boolean isPlayerSneaking) { public boolean addToTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
boolean notFastEnough = !isSpeedRequirementFulfilled() && getSpeed() != 0; boolean notFastEnough = !isSpeedRequirementFulfilled() && getSpeed() != 0;
if (overStressed && AllConfigs.CLIENT.enableOverstressedTooltip.get()) { if (overStressed && AllConfigs.client().enableOverstressedTooltip.get()) {
Lang.translate("gui.stressometer.overstressed") Lang.translate("gui.stressometer.overstressed")
.style(GOLD) .style(GOLD)
.forGoggles(tooltip); .forGoggles(tooltip);
Component hint = Lang.translateDirect("gui.contraptions.network_overstressed"); Component hint = Lang.translateDirect("gui.contraptions.network_overstressed");
List<Component> cutString = TooltipHelper.cutTextComponent(hint, GRAY, ChatFormatting.WHITE); List<Component> cutString = TooltipHelper.cutTextComponent(hint, Palette.GRAY_AND_WHITE);
for (int i = 0; i < cutString.size(); i++) for (int i = 0; i < cutString.size(); i++)
Lang.builder() Lang.builder()
.add(cutString.get(i) .add(cutString.get(i)
@ -417,7 +413,7 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
MutableComponent hint = MutableComponent hint =
Lang.translateDirect("gui.contraptions.not_fast_enough", I18n.get(getBlockState().getBlock() Lang.translateDirect("gui.contraptions.not_fast_enough", I18n.get(getBlockState().getBlock()
.getDescriptionId())); .getDescriptionId()));
List<Component> cutString = TooltipHelper.cutTextComponent(hint, GRAY, ChatFormatting.WHITE); List<Component> cutString = TooltipHelper.cutTextComponent(hint, Palette.GRAY_AND_WHITE);
for (int i = 0; i < cutString.size(); i++) for (int i = 0; i < cutString.size(); i++)
Lang.builder() Lang.builder()
.add(cutString.get(i) .add(cutString.get(i)
@ -505,18 +501,18 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
* Specify ratio of transferred rotation from this kinetic component to a * Specify ratio of transferred rotation from this kinetic component to a
* specific other. * specific other.
* *
* @param target other Kinetic TE to transfer to * @param target other Kinetic BE to transfer to
* @param stateFrom this TE's blockstate * @param stateFrom this BE's blockstate
* @param stateTo other TE's blockstate * @param stateTo other BE's blockstate
* @param diff difference in position (to.pos - from.pos) * @param diff difference in position (to.pos - from.pos)
* @param connectedViaAxes whether these kinetic blocks are connected via mutual * @param connectedViaAxes whether these kinetic blocks are connected via mutual
* IRotate.hasShaftTowards() * IRotate.hasShaftTowards()
* @param connectedViaCogs whether these kinetic blocks are connected via mutual * @param connectedViaCogs whether these kinetic blocks are connected via mutual
* IRotate.hasIntegratedCogwheel() * 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) * 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) { boolean connectedViaAxes, boolean connectedViaCogs) {
return 0; return 0;
} }
@ -559,7 +555,7 @@ public class KineticTileEntity extends SmartTileEntity implements IHaveGoggleInf
* @return true if this and the other component should check their propagation * @return true if this and the other component should check their propagation
* factor and are not already connected via integrated cogs or shafts * 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; return false;
} }

View file

@ -13,21 +13,21 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.Axis;
import net.minecraft.world.level.block.state.BlockState; 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; protected final Direction.Axis axis;
public KineticTileInstance(MaterialManager modelManager, T tile) { public KineticBlockEntityInstance(MaterialManager materialManager, T blockEntity) {
super(modelManager, tile); super(materialManager, blockEntity);
axis = (blockState.getBlock()instanceof IRotate irotate) ? irotate.getRotationAxis(blockState) : Axis.Y; axis = (blockState.getBlock() instanceof IRotate irotate) ? irotate.getRotationAxis(blockState) : Axis.Y;
} }
protected final void updateRotation(RotatingData instance) { protected final void updateRotation(RotatingData instance) {
updateRotation(instance, getRotationAxis(), getTileSpeed()); updateRotation(instance, getRotationAxis(), getBlockEntitySpeed());
} }
protected final void updateRotation(RotatingData instance, Direction.Axis axis) { 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) { 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) { 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) { 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) { protected final RotatingData setup(RotatingData key, float speed) {
@ -77,7 +77,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends B
return axis; return axis;
} }
protected float getTileSpeed() { protected float getBlockEntitySpeed() {
return blockEntity.getSpeed(); return blockEntity.getSpeed();
} }

View file

@ -8,10 +8,10 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.content.contraptions.KineticDebugger;
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel; 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.CachedBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.render.SuperByteBufferCache; 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.AnimationTickHolder;
import com.simibubi.create.foundation.utility.Color; 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.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTileEntity> { public class KineticBlockEntityRenderer<T extends KineticBlockEntity> extends SafeBlockEntityRenderer<T> {
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; public static boolean rainbowMode = false;
protected static final RenderType[] REVERSED_CHUNK_BUFFER_LAYERS = RenderType.chunkBufferLayers().toArray(RenderType[]::new); 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); ArrayUtils.reverse(REVERSED_CHUNK_BUFFER_LAYERS);
} }
public KineticTileEntityRenderer(BlockEntityRendererProvider.Context context) { public KineticBlockEntityRenderer(BlockEntityRendererProvider.Context context) {
} }
@Override @Override
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, protected void renderSafe(T be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) { int light, int overlay) {
if (Backend.canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(be.getLevel())) return;
BlockState state = getRenderedBlockState(te); BlockState state = getRenderedBlockState(be);
RenderType type = getRenderType(te, state); RenderType type = getRenderType(be, state);
if (type != null) 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) { protected BlockState getRenderedBlockState(T be) {
return te.getBlockState(); return be.getBlockState();
} }
protected RenderType getRenderType(KineticTileEntity te, BlockState state) { protected RenderType getRenderType(T be, BlockState state) {
for (RenderType type : REVERSED_CHUNK_BUFFER_LAYERS) for (RenderType type : REVERSED_CHUNK_BUFFER_LAYERS)
if (ItemBlockRenderTypes.canRenderInLayer(state, type)) if (ItemBlockRenderTypes.canRenderInLayer(state, type))
return type; return type;
return null; return null;
} }
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) { protected SuperByteBuffer getRotatedModel(T be, BlockState state) {
return CachedBufferer.block(KINETIC_TILE, 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) { VertexConsumer buffer, int light) {
SuperByteBuffer superByteBuffer = CachedBufferer.block(KINETIC_TILE, renderedState); SuperByteBuffer superByteBuffer = CachedBufferer.block(KINETIC_BLOCK, renderedState);
renderRotatingBuffer(te, superByteBuffer, ms, buffer, light); 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) { 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) { public static float getAngleForTe(KineticBlockEntity be, final BlockPos pos, Axis axis) {
float time = AnimationTickHolder.getRenderTime(te.getLevel()); float time = AnimationTickHolder.getRenderTime(be.getLevel());
float offset = getRotationOffsetForPosition(te, pos, axis); float offset = getRotationOffsetForPosition(be, pos, axis);
float angle = ((time * te.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI; float angle = ((time * be.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI;
return angle; return angle;
} }
public static SuperByteBuffer standardKineticRotationTransform(SuperByteBuffer buffer, KineticTileEntity te, public static SuperByteBuffer standardKineticRotationTransform(SuperByteBuffer buffer, KineticBlockEntity be,
int light) { int light) {
final BlockPos pos = te.getBlockPos(); final BlockPos pos = be.getBlockPos();
Axis axis = ((IRotate) te.getBlockState() Axis axis = ((IRotate) be.getBlockState()
.getBlock()).getRotationAxis(te.getBlockState()); .getBlock()).getRotationAxis(be.getBlockState());
return kineticRotationTransform(buffer, te, axis, getAngleForTe(te, pos, axis), light); 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) { float angle, int light) {
buffer.light(light); buffer.light(light);
buffer.rotateCentered(Direction.get(AxisDirection.POSITIVE, axis), angle); buffer.rotateCentered(Direction.get(AxisDirection.POSITIVE, axis), angle);
if (KineticDebugger.isActive()) { if (KineticDebugger.isActive()) {
rainbowMode = true; rainbowMode = true;
buffer.color(te.hasNetwork() ? Color.generateFromLong(te.network) : Color.WHITE); buffer.color(be.hasNetwork() ? Color.generateFromLong(be.network) : Color.WHITE);
} else { } else {
float overStressedEffect = te.effects.overStressedEffect; float overStressedEffect = be.effects.overStressedEffect;
if (overStressedEffect != 0) if (overStressedEffect != 0)
if (overStressedEffect > 0) if (overStressedEffect > 0)
buffer.color(Color.WHITE.mixWith(Color.RED, overStressedEffect)); buffer.color(Color.WHITE.mixWith(Color.RED, overStressedEffect));
@ -113,13 +113,13 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
return buffer; return buffer;
} }
public static float getRotationOffsetForPosition(KineticTileEntity te, final BlockPos pos, final Axis axis) { public static float getRotationOffsetForPosition(KineticBlockEntity be, final BlockPos pos, final Axis axis) {
float offset = ICogWheel.isLargeCog(te.getBlockState()) ? 11.25f : 0; float offset = ICogWheel.isLargeCog(be.getBlockState()) ? 11.25f : 0;
double d = (((axis == Axis.X) ? 0 : pos.getX()) + ((axis == Axis.Y) ? 0 : pos.getY()) double d = (((axis == Axis.X) ? 0 : pos.getX()) + ((axis == Axis.Y) ? 0 : pos.getY())
+ ((axis == Axis.Z) ? 0 : pos.getZ())) % 2; + ((axis == Axis.Z) ? 0 : pos.getZ())) % 2;
if (d == 0) if (d == 0)
offset = 22.5f; offset = 22.5f;
return offset + te.getRotationAngleOffset(axis); return offset + be.getRotationAngleOffset(axis);
} }
public static BlockState shaft(Axis axis) { public static BlockState shaft(Axis axis) {
@ -127,9 +127,9 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
.setValue(BlockStateProperties.AXIS, axis); .setValue(BlockStateProperties.AXIS, axis);
} }
public static Axis getRotationAxisOf(KineticTileEntity te) { public static Axis getRotationAxisOf(KineticBlockEntity be) {
return ((IRotate) te.getBlockState() return ((IRotate) be.getBlockState()
.getBlock()).getRotationAxis(te.getBlockState()); .getBlock()).getRotationAxis(be.getBlockState());
} }
} }

View file

@ -21,9 +21,9 @@ public class KineticEffectHandler {
int overStressedTime; int overStressedTime;
float overStressedEffect; float overStressedEffect;
int particleSpawnCountdown; int particleSpawnCountdown;
KineticTileEntity kte; KineticBlockEntity kte;
public KineticEffectHandler(KineticTileEntity kte) { public KineticEffectHandler(KineticBlockEntity kte) {
this.kte = kte; this.kte = kte;
} }

View file

@ -6,12 +6,12 @@ import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntity> { public class SingleRotatingInstance<T extends KineticBlockEntity> extends KineticBlockEntityInstance<T> {
protected RotatingData rotatingModel; protected RotatingData rotatingModel;
public SingleRotatingInstance(MaterialManager modelManager, KineticTileEntity tile) { public SingleRotatingInstance(MaterialManager materialManager, T blockEntity) {
super(modelManager, tile); super(materialManager, blockEntity);
} }
@Override @Override

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.base.flwdata;
import com.jozufozu.flywheel.core.materials.BasicData; import com.jozufozu.flywheel.core.materials.BasicData;
import com.mojang.math.Vector3f; 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 com.simibubi.create.foundation.utility.Color;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -38,9 +38,9 @@ public class KineticData extends BasicData {
return this; return this;
} }
public KineticData setColor(KineticTileEntity te) { public KineticData setColor(KineticBlockEntity blockEntity) {
if (te.hasNetwork()) { if (blockEntity.hasNetwork()) {
setColor(Color.generateFromLong(te.network)); setColor(Color.generateFromLong(blockEntity.network));
}else { }else {
setColor(0xFF, 0xFF, 0xFF); setColor(0xFF, 0xFF, 0xFF);
} }

View file

@ -15,7 +15,7 @@ import net.minecraft.world.phys.Vec3;
public class BellMovementBehaviour implements MovementBehaviour { public class BellMovementBehaviour implements MovementBehaviour {
@Override @Override
public boolean renderAsNormalTileEntity() { public boolean renderAsNormalBlockEntity() {
return true; return true;
} }

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
import java.util.concurrent.atomic.AtomicInteger; 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.BlockHelper;
import com.simibubi.create.foundation.utility.VecHelper; 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.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3; 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(); public static final AtomicInteger NEXT_BREAKER_ID = new AtomicInteger();
protected int ticksUntilNextProgress; protected int ticksUntilNextProgress;
@ -26,8 +26,8 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
protected int breakerId = -NEXT_BREAKER_ID.incrementAndGet(); protected int breakerId = -NEXT_BREAKER_ID.incrementAndGet();
protected BlockPos breakingPos; protected BlockPos breakingPos;
public BlockBreakingKineticTileEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) { public BlockBreakingKineticBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(typeIn, pos, state); super(type, pos, state);
} }
@Override @Override
@ -73,10 +73,10 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
} }
@Override @Override
public void setRemoved() { public void invalidate() {
super.invalidate();
if (!level.isClientSide && destroyProgress != 0) if (!level.isClientSide && destroyProgress != 0)
level.destroyBlockProgress(breakerId, breakingPos, -1); level.destroyBlockProgress(breakerId, breakingPos, -1);
super.setRemoved();
} }
@Override @Override

View file

@ -28,7 +28,7 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
public void startMoving(MovementContext context) { public void startMoving(MovementContext context) {
if (context.world.isClientSide) if (context.world.isClientSide)
return; return;
context.data.putInt("BreakerId", -BlockBreakingKineticTileEntity.NEXT_BREAKER_ID.incrementAndGet()); context.data.putInt("BreakerId", -BlockBreakingKineticBlockEntity.NEXT_BREAKER_ID.incrementAndGet());
} }
@Override @Override
@ -220,7 +220,7 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
public boolean canBreak(Level world, BlockPos breakingPos, BlockState state) { public boolean canBreak(Level world, BlockPos breakingPos, BlockState state) {
float blockHardness = state.getDestroySpeed(world, breakingPos); 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) { protected void onBlockBroken(MovementContext context, BlockPos pos, BlockState brokenState) {

View file

@ -10,7 +10,7 @@ import net.minecraft.world.level.block.CampfireBlock;
public class CampfireMovementBehaviour implements MovementBehaviour { public class CampfireMovementBehaviour implements MovementBehaviour {
@Override @Override
public boolean renderAsNormalTileEntity() { public boolean renderAsNormalBlockEntity() {
return true; return true;
} }
@ -20,7 +20,7 @@ public class CampfireMovementBehaviour implements MovementBehaviour {
|| !context.state.getValue(CampfireBlock.LIT)) || !context.state.getValue(CampfireBlock.LIT))
return; return;
// Mostly copied from CampfireBlock and CampfireTileEntity // Mostly copied from CampfireBlock and CampfireBlockEntity
Random random = context.world.random; Random random = context.world.random;
if (random.nextFloat() < 0.11F) { if (random.nextFloat() < 0.11F) {
for (int i = 0; i < random.nextInt(2) + 2; ++i) { for (int i = 0; i < random.nextInt(2) + 2; ++i) {

View file

@ -4,7 +4,7 @@ import com.jozufozu.flywheel.api.Material;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.contraptions.components.actors.flwdata.ActorData; import com.simibubi.create.content.contraptions.components.actors.flwdata.ActorData;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
@ -39,7 +39,7 @@ public class DrillActorInstance extends ActorInstance {
else else
eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0); eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0);
drillHead = material.getModel(AllBlockPartials.DRILL_HEAD, state).createInstance(); drillHead = material.getModel(AllPartialModels.DRILL_HEAD, state).createInstance();
drillHead.setPosition(context.localPos) drillHead.setPosition(context.localPos)
.setBlockLight(localBlockLight()) .setBlockLight(localBlockLight())

View file

@ -2,10 +2,10 @@ package com.simibubi.create.content.contraptions.components.actors;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllShapes; import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; 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.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -36,7 +36,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault @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 static DamageSource damageSourceDrill = new DamageSource("create.mechanical_drill").bypassArmor();
public DrillBlock(Properties properties) { public DrillBlock(Properties properties) {
@ -51,10 +51,10 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE<DrillTile
if (!new AABB(pos).deflate(.1f) if (!new AABB(pos).deflate(.1f)
.intersects(entityIn.getBoundingBox())) .intersects(entityIn.getBoundingBox()))
return; return;
withTileEntityDo(worldIn, pos, te -> { withBlockEntityDo(worldIn, pos, be -> {
if (te.getSpeed() == 0) if (be.getSpeed() == 0)
return; 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 @Override
public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) { boolean isMoving) {
withTileEntityDo(worldIn, pos, DrillTileEntity::destroyNextTick); withBlockEntityDo(worldIn, pos, DrillBlockEntity::destroyNextTick);
} }
@Override @Override
@ -125,12 +125,12 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE<DrillTile
} }
@Override @Override
public Class<DrillTileEntity> getTileEntityClass() { public Class<DrillBlockEntity> getBlockEntityClass() {
return DrillTileEntity.class; return DrillBlockEntity.class;
} }
@Override @Override
public BlockEntityType<? extends DrillTileEntity> getTileEntityType() { public BlockEntityType<? extends DrillBlockEntity> getBlockEntityType() {
return AllTileEntities.DRILL.get(); return AllBlockEntityTypes.DRILL.get();
} }
} }

View file

@ -4,9 +4,9 @@ import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; 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); super(type, pos, state);
} }

View file

@ -2,8 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.Instancer;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance; import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData; import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
@ -11,16 +10,16 @@ import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class DrillInstance extends SingleRotatingInstance { public class DrillInstance extends SingleRotatingInstance<DrillBlockEntity> {
public DrillInstance(MaterialManager modelManager, KineticTileEntity tile) { public DrillInstance(MaterialManager materialManager, DrillBlockEntity blockEntity) {
super(modelManager, tile); super(materialManager, blockEntity);
} }
@Override @Override
protected Instancer<RotatingData> getModel() { protected Instancer<RotatingData> getModel() {
BlockState referenceState = blockEntity.getBlockState(); BlockState referenceState = blockEntity.getBlockState();
Direction facing = referenceState.getValue(BlockStateProperties.FACING); Direction facing = referenceState.getValue(BlockStateProperties.FACING);
return getRotatingMaterial().getModel(AllBlockPartials.DRILL_HEAD, referenceState, facing); return getRotatingMaterial().getModel(AllPartialModels.DRILL_HEAD, referenceState, facing);
} }
} }

View file

@ -1,9 +1,8 @@
package com.simibubi.create.content.contraptions.components.actors; package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticBlockEntityRenderer;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; 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.ContraptionMatrices;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
@ -19,21 +18,21 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public class DrillRenderer extends KineticTileEntityRenderer { public class DrillRenderer extends KineticBlockEntityRenderer<DrillBlockEntity> {
public DrillRenderer(BlockEntityRendererProvider.Context context) { public DrillRenderer(BlockEntityRendererProvider.Context context) {
super(context); super(context);
} }
@Override @Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) { protected SuperByteBuffer getRotatedModel(DrillBlockEntity be, BlockState state) {
return CachedBufferer.partialFacing(AllBlockPartials.DRILL_HEAD, state); return CachedBufferer.partialFacing(AllPartialModels.DRILL_HEAD, state);
} }
public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
BlockState state = context.state; BlockState state = context.state;
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.DRILL_HEAD, state); SuperByteBuffer superBuffer = CachedBufferer.partial(AllPartialModels.DRILL_HEAD, state);
Direction facing = state.getValue(DrillBlock.FACING); Direction facing = state.getValue(DrillBlock.FACING);
float speed = (float) (context.contraption.stalled float speed = (float) (context.contraption.stalled

View file

@ -5,7 +5,7 @@ import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.Materials;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
@ -41,7 +41,7 @@ public class HarvesterActorInstance extends ActorInstance {
facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING);
harvester = material.getModel(AllBlockPartials.HARVESTER_BLADE, state).createInstance(); harvester = material.getModel(AllPartialModels.HARVESTER_BLADE, state).createInstance();
horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0);

View file

@ -1,24 +1,24 @@
package com.simibubi.create.content.contraptions.components.actors; package com.simibubi.create.content.contraptions.components.actors;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.IBE;
import net.minecraft.world.level.block.entity.BlockEntityType; 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_) { public HarvesterBlock(Properties p_i48377_1_) {
super(p_i48377_1_); super(p_i48377_1_);
} }
@Override @Override
public Class<HarvesterTileEntity> getTileEntityClass() { public Class<HarvesterBlockEntity> getBlockEntityClass() {
return HarvesterTileEntity.class; return HarvesterBlockEntity.class;
} }
@Override @Override
public BlockEntityType<? extends HarvesterTileEntity> getTileEntityType() { public BlockEntityType<? extends HarvesterBlockEntity> getBlockEntityType() {
return AllTileEntities.HARVESTER.get(); return AllBlockEntityTypes.HARVESTER.get();
} }
} }

Some files were not shown because too many files have changed in this diff Show more