Merge pull request #1443 from TerraFirmaGreg-Team/dev

Release: 0.10.4
This commit is contained in:
Xikaro 2025-07-26 02:37:01 +05:00 committed by GitHub
commit 88ef885074
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
75 changed files with 13388 additions and 11047 deletions

View file

@ -17,6 +17,7 @@ jobs:
info:
name: 🖥️ Project Info
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'TerraFirmaGreg-Team' }}
outputs:
project_version: ${{ steps.check.outputs.project_version }}
project_name: ${{ steps.check.outputs.project_name }}
@ -27,9 +28,10 @@ jobs:
diff: ${{ steps.read_diff.outputs.diff }}
exists: ${{ steps.check.outputs.exists }}
make_release: ${{ steps.check.outputs.make_release }}
make_pr: ${{ steps.check.outputs.make_pr }}
steps:
- name: Checkout
- name: 📦 Checkout
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
@ -161,8 +163,6 @@ jobs:
id: check
shell: bash
run: |
echo "make_release=${{ steps.check_tag.outputs.exists == 'false' && env.DEV_ENVIRONMENT == 'false' }}" >> $GITHUB_OUTPUT
echo "exists=${{ steps.check_tag.outputs.exists }}" >> $GITHUB_OUTPUT
echo "project_name=${{ steps.pakku_info.outputs.name }}" >> $GITHUB_OUTPUT
MC_VERSIONS_JSON='${{ steps.pakku_lock_info.outputs.mc_versions }}'
MINECRAFT_VERSION=$(echo "$MC_VERSIONS_JSON" | jq -r '.[0]' | tr -d '[]"')
@ -170,12 +170,15 @@ jobs:
if ${{ env.DEV_ENVIRONMENT == 'true' }}; then
echo "project_version=build_#${{ github.run_number }}" >> $GITHUB_OUTPUT
echo "release_type=Unreleased" >> $GITHUB_OUTPUT
else
echo "project_version=${{ steps.changelog.outputs.version }}" >> $GITHUB_OUTPUT
echo "release_type=${{ steps.pakku_info.outputs.release_type }}" >> $GITHUB_OUTPUT
fi
echo "release_type=${{ steps.pakku_info.outputs.release_type }}" >> $GITHUB_OUTPUT
echo "exists=${{ steps.check_tag.outputs.exists }}" >> $GITHUB_OUTPUT
echo "make_release=${{ steps.check_tag.outputs.exists == 'false' && env.DEV_ENVIRONMENT == 'false' }}" >> $GITHUB_OUTPUT
echo "make_pr=${{ steps.check_tag.outputs.exists == 'false' && env.DEV_ENVIRONMENT == 'true' }}" >> $GITHUB_OUTPUT
- name: 📄 Format diff
id: format_diff
if: ${{ steps.read_diff.outputs.diff != '' }}
@ -186,29 +189,8 @@ jobs:
${{ steps.read_diff.outputs.diff }}
```
- name: 🔍 Create Pull Request if tag not found
id: create_pr
if: ${{ steps.check_tag.outputs.exists == 'false' && env.DEV_ENVIRONMENT == 'true' && github.repository == 'TerraFirmaGreg-Team/Modpack-Modern' }}
uses: devops-infra/action-pull-request@v0.6.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_branch: dev
target_branch: main
title: 'Release: ${{ steps.changelog.outputs.version }}'
body: |
**This is an automated Pull Request from the dev branch.**
📃 **Name**: ${{ steps.check.outputs.project_name }}
📃 **Release**: `${{ steps.changelog.outputs.version }}`
📃 **Release Type**: `${{ steps.pakku_info.outputs.release_type }}`
📃 **Game Version**: `${{ steps.check.outputs.minecraft_version }}`
${{ steps.changelog.outputs.description }}
reviewer: Xikaro
ignore_users: "dependabot"
- name: 📝 Generate Github Summary
uses: WcAServices/markdown-template-action@v1.1.1
uses: WcAServices/markdown-template-action@v1.1.0
with:
template: |
📃 **Name**: ${{ steps.check.outputs.project_name }}
@ -218,12 +200,73 @@ jobs:
📃 **Dev Environment**: `${{ env.DEV_ENVIRONMENT }}`
📃 **Tag Exists**: `${{ steps.check.outputs.exists }}`
📃 **Make Pull Request**: `${{ steps.check.outputs.make_pr }}`
📃 **Make Release**: `${{ steps.check.outputs.make_release }}`
${{ steps.changelog_dev.outputs.description }}
${{ steps.format_diff.outputs.text }}
create-pr:
name: 🤝 Create Release PR
needs: [info]
if: ${{ needs.info.outputs.make_pr == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
- name: 📄 Changelog Parser
id: changelog
uses: coditory/changelog-parser@v1.0.2
with:
path: CHANGELOG.md
continue-on-error: true
- name: 🔍 Check existing PRs
id: check_existing_pr
uses: actions/github-script@v7.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
result-encoding: string
script: |
try {
const { data: prs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
head: `${context.repo.owner}:dev`,
base: 'main'
});
core.setOutput('exists', prs.length > 0);
console.log(` PR exists: ${prs.length > 0}`);
} catch (error) {
core.setFailed(`❌ PR check failed: ${error}`);
core.setOutput('exists', true);
}
- name: 🔍 Create Pull Request if tag not found
if: ${{ steps.check_existing_pr.outputs.exists == 'false' }}
uses: devops-infra/action-pull-request@v0.6.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_branch: dev
target_branch: main
reviewer: Xikaro
ignore_users: "dependabot"
title: 'Release: ${{ steps.changelog.outputs.version }}'
body: |
**This is an automated Pull Request from the dev branch.**
📃 **Name**: ${{ needs.info.outputs.project_name }}
📃 **Release**: `${{ steps.changelog.outputs.version }}`
📃 **Release Type**: `${{ needs.info.outputs.release_type }}`
${{ needs.info.outputs.changelog }}
build-modpack:
name: 📦 Build Modpack

View file

@ -1,5 +1,22 @@
# Changelog
## [Unreleased]
### Changes
### Bug fixes
## [0.10.4] - 25-07-2025
### Changes
- Added block interactions for mossy cobble (#1434) @Redeix
- Clipboards are now craftable earlier (#1432) @Pyritie
### Bug fixes
- Fixed key bindings being reverted every time you started the game (#1430)
- Pushed a patch to fix registry errors on Linux machines. If you are still receiving these errors please report it [here](https://github.com/TerraFirmaGreg-Team/Modpack-Modern/issues/1431) (#1434) @Redeix
- Added a temporary workaround for the blue steel diving suit not protecting from lava (#1361) @Pyritie
- Fixed a broken link in the papermaking field guide entry (#1426) @Pyritie
- Fixed small springs melting into twice as much as they should (#1435) @Pyritie
- Fixed framed item frames having the same crafting ratio as regular ones (#1427) @Pyritie
- Fixed a recipe conflict with kaolinite powder and fire clay in an alloy smelter @Pyritie
- Fixed some mixing bowl recipes with too many outputs @Pyritie
## [0.10.3] - 23-07-2025
### Changes

View file

@ -1223,6 +1223,32 @@
x: 0.0d
y: -34.0d
}
{
dependencies: ["72B3EA6588E18CCC"]
dependency_requirement: "one_completed"
description: ["{quests.steam_age.organization.desc}"]
icon: "create:clipboard"
id: "044DD42F4F1E900F"
optional: true
shape: "heart"
subtitle: "{quests.steam_age.organization.subtitle}"
tasks: [
{
id: "5833752A9D35D343"
item: "create:clipboard"
type: "item"
}
{
id: "1196FF8041001E3B"
item: "create:crafting_blueprint"
optional_task: true
type: "item"
}
]
title: "{quests.steam_age.organization.title}"
x: 17.0d
y: -29.5d
}
]
subtitle: ["{quests.metal_age.subtitle}"]
title: "{quests.metal_age}"

View file

@ -1515,32 +1515,6 @@
x: -25.0d
y: 6.0d
}
{
dependencies: ["3E175E20C91F168B"]
dependency_requirement: "one_completed"
description: ["{quests.steam_age.organization.desc}"]
icon: "create:clipboard"
id: "03CCE899894A3364"
optional: true
shape: "heart"
subtitle: "{quests.steam_age.organization.subtitle}"
tasks: [
{
id: "2F56DA36512D2363"
item: "create:clipboard"
type: "item"
}
{
id: "6A41DD1F9FFD1781"
item: "create:crafting_blueprint"
optional_task: true
type: "item"
}
]
title: "{quests.steam_age.organization.title}"
x: -16.5d
y: 10.5d
}
{
dependencies: ["32046292AA5B0E30"]
description: ["{quests.steam_age.rotation_speed_controller.desc}"]

View file

@ -30,6 +30,12 @@
x: -4.5d
y: 8.5d
}
{
id: "338395C5F9B3A67D"
linked_quest: "044DD42F4F1E900F"
x: 2.5d
y: 3.5d
}
]
quests: [
{

View file

@ -5,7 +5,7 @@
"pages": [
{
"type": "patchouli:text",
"text": "$(thing)Paper$() is either made from the processed stalk of the $(l:mechanics/crops#papyrus)Papyrus$() crop, from $(l:mechanics/papermaking#parchment)Animal Hides$(), or $(l:mechanics/papermaking/paperfromwood)from a lengthy process using specific types of Wood$(). Paper is useful for written materials like $(thing)Books$() and $(thing)Maps$()."
"text": "$(thing)Paper$() is either made from the processed stalk of the $(l:mechanics/crops#papyrus)Papyrus$() crop, from $(l:mechanics/papermaking#parchment)Animal Hides$(), or $(l:mechanics/papermaking#paperfromwood)from a lengthy process using specific types of Wood$(). Paper is useful for written materials like $(thing)Books$() and $(thing)Maps$()."
},
{
"type": "patchouli:crafting",

View file

@ -5,7 +5,7 @@
"pages": [
{
"type": "patchouli:text",
"text": "$(thing)Папір$() виготовляється з оброблених стебел $(l:mechanics/crops#papyrus)Папірусу$(), з $(l:mechanics/papermaking#parchment)Шкур тварин$(), або $(l:mechanics/papermaking/paperfromwood)в результаті тривалого процесу з використанням певних видів деревини$(). Папір корисний для письмових матеріалів, таких як $(thing)Книги$() і $(thing)Карти$()."
"text": "$(thing)Папір$() виготовляється з оброблених стебел $(l:mechanics/crops#papyrus)Папірусу$(), з $(l:mechanics/papermaking#parchment)Шкур тварин$(), або $(l:mechanics/papermaking#paperfromwood)в результаті тривалого процесу з використанням певних видів деревини$(). Папір корисний для письмових матеріалів, таких як $(thing)Книги$() і $(thing)Карти$()."
},
{
"type": "patchouli:crafting",

View file

@ -0,0 +1,256 @@
{
"multipart": [
{
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"x": 90
}
},
{
"when": {
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270
},
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"snowy": true
},
"apply": [
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 90
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 180
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top"
}
},
{
"when": {
"east": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"y": 270
}
},
{
"when": {
"north": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top"
}
},
{
"when": {
"east": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1"
},
{
"model": "tfg:block/grass/amber_mycelium_side_2"
},
{
"model": "tfg:block/grass/amber_mycelium_side_3"
}
]
},
{
"when": {
"east": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1",
"y": 90
},
{
"model": "tfg:block/grass/amber_mycelium_side_2",
"y": 90
},
{
"model": "tfg:block/grass/amber_mycelium_side_3",
"y": 90
}
]
},
{
"when": {
"south": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1",
"y": 180
},
{
"model": "tfg:block/grass/amber_mycelium_side_2",
"y": 180
},
{
"model": "tfg:block/grass/amber_mycelium_side_3",
"y": 180
}
]
},
{
"when": {
"west": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1",
"y": 270
},
{
"model": "tfg:block/grass/amber_mycelium_side_2",
"y": 270
},
{
"model": "tfg:block/grass/amber_mycelium_side_3",
"y": 270
}
]
},
{
"when": {
"north": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side"
}
},
{
"when": {
"east": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 270
}
}
]
}

View file

@ -0,0 +1,21 @@
{
"variants": {
"": [
{
"model": "tfg:block/grass/mars_dirt"
},
{
"model": "tfg:block/grass/mars_dirt",
"y": 90
},
{
"model": "tfg:block/grass/mars_dirt",
"y": 180
},
{
"model": "tfg:block/grass/mars_dirt",
"y": 270
}
]
}
}

View file

@ -0,0 +1,283 @@
{
"multipart": [
{
"apply": {
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 90
}
},
{
"when": {
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270,
"y": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270,
"y": 270
}
]
},
{
"when": {
"snowy": true
},
"apply": [
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 90
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 180
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1"
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2"
}
]
},
{
"when": {
"east": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"y": 90
}
]
},
{
"when": {
"south": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"y": 180
}
]
},
{
"when": {
"west": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"y": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top"
}
},
{
"when": {
"east": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1"
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2"
}
]
},
{
"when": {
"east": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1",
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2",
"y": 90
}
]
},
{
"when": {
"south": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1",
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2",
"y": 180
}
]
},
{
"when": {
"west": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1",
"y": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2",
"y": 270
}
]
},
{
"when": {
"north": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side"
}
},
{
"when": {
"east": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 270
}
}
]
}

View file

@ -0,0 +1,221 @@
{
"multipart": [
{
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 90
}
},
{
"when": {
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270
},
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"snowy": true
},
"apply": [
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 90
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 180
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top"
}
},
{
"when": {
"east": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"y": 270
}
},
{
"when": {
"north": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top"
}
},
{
"when": {
"east": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side"
}
},
{
"when": {
"east": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side"
}
},
{
"when": {
"east": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 270
}
}
]
}

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "tfg:block/fluid/semiheavy_ammoniacal_water"
}
}
}

View file

@ -296,13 +296,14 @@
"block.tfg.electromagnetic_accelerator": "Electromagnetic Accelerator",
"block.tfg.superconductor_coil_large": "Large Superconductor Coil",
"block.tfg.superconductor_coil_small": "Small Superconductor Coil",
"tfg:nether_slurry": "Nether Slurry",
"tfg:enriched_nether_slurry": "Enriched Nether Slurry",
"tfg:ender_slurry": "Ender Slurry",
"tfg:enriched_ender_slurry": "Enriched Ender Slurry",
"tfg:semiheavy_ammoniacal_water": "Semiheavy Ammoniacal Water",
"tfg:sulfur_fumes": "Sulfur Fumes",
"tfg:super_heated_slurry": "Super Heated Slurry",
"fluid.tfg.nether_slurry": "Nether Slurry",
"fluid.tfg.enriched_nether_slurry": "Enriched Nether Slurry",
"fluid.tfg.ender_slurry": "Ender Slurry",
"fluid.tfg.enriched_ender_slurry": "Enriched Ender Slurry",
"fluid.tfg.semiheavy_ammoniacal_water": "Semiheavy Ammoniacal Water",
"fluid.tfg.heavy_water": "Heavy Water",
"fluid.tfg.sulfur_fumes": "Sulfur Fumes",
"fluid.tfg.super_heated_slurry": "Super Heated Slurry",
"item.tfg.antipoison_pill": "Antipoison Pill",
"item.tfg.haste_pill": "Haste Pill",
"item.tfg.night_vision_pill": "Night Vision Pill",

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/amber_side_1",
"particle": "tfg:block/grass/amber_side_1"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/amber_side_2",
"particle": "tfg:block/grass/amber_side_2"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/amber_side_3",
"particle": "tfg:block/grass/amber_side_3"
}
}

View file

@ -0,0 +1,27 @@
{
"parent": "block/block",
"textures": {
"overlay": "tfg:block/grass/amber_top",
"particle": "tfg:block/grass/amber_top"
},
"elements": [
{
"from": [
0,
0,
0
],
"to": [
16,
16,
0
],
"faces": {
"north": {
"texture": "#overlay",
"cullface": "north"
}
}
}
]
}

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "tfg:block/grass/mars_dirt"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "tfc:block/grass_snowy_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/rusticus_side_1",
"particle": "tfg:block/grass/rusticus_side_1"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/rusticus_side_2",
"particle": "tfg:block/grass/rusticus_side_2"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "tfc:block/grass_top",
"textures": {
"overlay": "tfg:block/grass/rusticus_top_1",
"particle": "tfg:block/grass/rusticus_top_1"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "tfc:block/grass_top",
"textures": {
"overlay": "tfg:block/grass/rusticus_top_2",
"particle": "tfg:block/grass/rusticus_top_2"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/sangnum_side",
"particle": "tfg:block/grass/sangnum_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "tfc:block/grass_top",
"textures": {
"overlay": "tfg:block/grass/sangnum_top",
"particle": "tfg:block/grass/sangnum_top"
}
}

View file

@ -0,0 +1,5 @@
{
"textures": {
"particle": "minecraft:block/water_still"
}
}

View file

@ -0,0 +1,36 @@
{
"parent": "minecraft:block/cube",
"textures": {
"0": "tfg:block/grass/mars_dirt",
"1": "tfg:block/grass/amber_side_1",
"2": "tfg:block/grass/amber_top",
"particle": "#2"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"north": {
"texture": "#1"
},
"east": {
"texture": "#1"
},
"south": {
"texture": "#1"
},
"west": {
"texture": "#1"
},
"up": {
"texture": "#2"
},
"down": {
"texture": "#0"
}
}
}
],
"display": {}
}

View file

@ -0,0 +1,3 @@
{
"parent": "tfg:block/grass/mars_dirt"
}

View file

@ -0,0 +1,36 @@
{
"parent": "minecraft:block/cube",
"textures": {
"0": "tfg:block/grass/mars_dirt",
"1": "tfg:block/grass/rusticus_side_1",
"2": "tfg:block/grass/rusticus_top_1",
"particle": "#2"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"north": {
"texture": "#1"
},
"east": {
"texture": "#1"
},
"south": {
"texture": "#1"
},
"west": {
"texture": "#1"
},
"up": {
"texture": "#2"
},
"down": {
"texture": "#0"
}
}
}
],
"display": {}
}

View file

@ -0,0 +1,36 @@
{
"parent": "minecraft:block/cube",
"textures": {
"0": "tfg:block/grass/mars_dirt",
"1": "tfg:block/grass/sangnum_side",
"2": "tfg:block/grass/sangnum_top",
"particle": "#2"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"north": {
"texture": "#1"
},
"east": {
"texture": "#1"
},
"south": {
"texture": "#1"
},
"west": {
"texture": "#1"
},
"up": {
"texture": "#2"
},
"down": {
"texture": "#0"
}
}
}
],
"display": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

View file

@ -75,7 +75,7 @@ const registerTooltips = (event) =>
text.add(3, text.of('§7Wear the full set to be §eFully Insulated§7 from ambient temperatures.'))
})
//supports
// Supports
global.TFC_WOOD_TYPES.forEach(wood => {
event.addAdvanced([`tfc:wood/support/${wood}`], (item, advanced, text) => {
text.add(1, text.of('§79 x 5 x 9'))
@ -112,17 +112,16 @@ const registerTooltips = (event) =>
})
// Solar Panel
// Solar Panel
event.addAdvanced(['ad_astra:solar_panel'], (item, advanced, text) => {
text.add(1, text.of('Produces §664 Eu/t§r on the §6moon§r during the §6day§r'))
})
// MEGA Deprecated 0.10
event.addAdvanced(['#megacells:mega_interface'], (item, advanced, text) => {
text.add(1, text.of('§cDeprecated cannot be craft anymore'))
text.add(1, text.of('§cDeprecated, cannot be crafted any more'))
})
event.addAdvanced(['#megacells:mega_pattern_provider'], (item, advanced, text) => {
text.add(1, text.of('§cDeprecated cannot be craft anymore'))
text.add(1, text.of('§cDeprecated, cannot be crafted any more'))
})
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,44 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "loot_pool",
"rolls": 1,
"entries": [
{
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"name": "gtceu:red_granite",
"conditions": [
{
"condition": "tfc:is_isolated"
}
]
},
{
"type": "minecraft:item",
"name": "tfg:loose/red_granite",
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1,
"max": 4,
"type": "minecraft:uniform"
}
}
]
}
]
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "loot_pool",
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "tfg:grass/mars_dirt"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "loot_pool",
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "tfg:grass/mars_dirt"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "loot_pool",
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "tfg:grass/mars_dirt"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "loot_pool",
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "tfg:grass/mars_dirt"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "loot_pool",
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "tfg:loose/red_granite",
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1,
"max": 4,
"type": "minecraft:uniform"
}
}
]
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,74 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,75 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,75 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,78 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
"tfg:mars/surface/aeronos_patch",
"tfg:mars/surface/strophar_patch",
"tfg:mars/surface/aeronos_huge",
"tfg:mars/surface/strophar_huge"
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,8 @@
{
"type": "tfc:flood_fill_lake",
"config": {
"state": "tfg:semiheavy_ammoniacal_water",
"replace_fluids": [],
"overfill": true
}
}

View file

@ -131,7 +131,7 @@
},
{
"derivative": 0.0,
"location": -0.47,
"location": -0.26,
"value": 1
},
{

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,24 @@
{
"feature": "tfg:mars/semiheavy_ammoniacal_water",
"placement": [
{
"type": "minecraft:count",
"count": 1
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
},
{
"type": "minecraft:random_offset",
"xz_spread": 0,
"y_spread": -3
},
{
"type": "minecraft:biome"
}
]
}

View file

@ -217,7 +217,9 @@ const registerAdAstraBlockTags = (event) => {
event.add('ad_astra:mars_stone_replaceables', 'tfc:sand/black')
event.add('ad_astra:mars_stone_replaceables', 'tfc:sand/red')
event.add('ad_astra:mars_stone_replaceables', 'tfc:sand/pink')
event.add('tfc:can_carve', '#ad_astra:moon_stone_replaceables')
event.add('tfc:can_carve', '#ad_astra:mars_stone_replaceables')
event.add('minecraft:rabbits_spawnable_on', '#ad_astra:moon_stone_replaceables')
event.add('species:limpet_spawnable_on', '#ad_astra:moon_stone_replaceables')
@ -265,7 +267,6 @@ const registerAdAstraBlockTags = (event) => {
event.add('tfg:rock_slabs', 'ad_astra:glacio_stone_slab')
event.add('ad_astra:destroyed_in_space', '#minecraft:saplings')
event.remove('ad_astra:destroyed_in_space', 'ad_astra:glacian_leaves')
}
const registerAdAstraBiomeTags = (event) => {

View file

@ -0,0 +1,13 @@
"use strict";
PlayerEvents.tick((event) => {
const { player } = event;
if (player.age % 100 == 0
&& player.headArmorItem == 'create:netherite_diving_helmet'
&& player.chestArmorItem == 'create:netherite_backtank'
&& player.legsArmorItem == 'minecraft:netherite_leggings'
&& player.feetArmorItem == 'create:netherite_diving_boots')
{
player.potionEffects.add("minecraft:fire_resistance", 350, 1, true, false);
}
});

View file

@ -1215,13 +1215,14 @@ const registerCreateRecipes = (event) => {
// Дневник
event.shaped('create:clipboard', [
'A',
'B',
'C'
' AD',
' B ',
' C '
], {
A: '#forge:bolts/wrought_iron',
B: '#forge:plates/wood',
C: 'minecraft:paper'
A: '#forge:small_springs',
B: '#tfc:lumber',
C: 'minecraft:paper',
D: '#forge:bolts'
}).id('tfg:create/shaped/clipboard')
// Лестница из железа

View file

@ -96,8 +96,10 @@ const registerCreateBlockTags = (event) => {
event.add('create:fan_processing_catalysts/splashing', 'tfc:fluid/river_water')
event.add('create:fan_processing_catalysts/splashing', 'tfc:fluid/salt_water')
event.add('create:fan_processing_catalysts/splashing', 'tfc:fluid/spring_water')
event.add('create:fan_processing_catalysts/splashing', 'tfg:semiheavy_ammoniacal_water')
event.add('create:chest_mounted_storage', '#forge:chests/wooden')
event.add('create:chest_mounted_storage', 'framedblocks:framed_chest')
}
@ -123,5 +125,6 @@ const registerCreateFluidTags = (event) => {
event.add('create:fan_processing_catalysts/splashing', 'tfc:spring_water')
//Hose Pulley Infinites
event.add('create:bottomless/allow', 'tfg:semiheavy_ammoniacal_water')
event.remove('create:bottomless/allow', 'minecraft:lava')
}

View file

@ -551,16 +551,6 @@ const registerFirmaLifeRecipes = (event) => {
.outputItem(`4x firmalife:food/${grain}_dough`)
.id(`tfg:mixing_bowl/${grain}_dough`)
event.recipes.firmalife.mixing_bowl()
.ingredients([
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`),
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`),
'#tfc:sweetener',
'#tfc:sweetener'],
Fluid.of('firmalife:yeast_starter', 400))
.outputItem(`8x firmalife:food/${grain}_dough`)
.id(`tfg:mixing_bowl/${grain}_dough_2`)
event.recipes.firmalife.mixing_bowl()
.ingredients([
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`)],
@ -575,25 +565,6 @@ const registerFirmaLifeRecipes = (event) => {
Fluid.of('minecraft:water', 200))
.outputItem(`4x tfc:food/${grain}_dough`)
.id(`tfg:mixing_bowl/${grain}_flatbread_dough_2`)
event.recipes.firmalife.mixing_bowl()
.ingredients([
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`),
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`),
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`)],
Fluid.of('minecraft:water', 300))
.outputItem(`6x tfc:food/${grain}_dough`)
.id(`tfg:mixing_bowl/${grain}_flatbread_dough_3`)
event.recipes.firmalife.mixing_bowl()
.ingredients([
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`),
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`),
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`),
TFC.ingredient.notRotten(`tfc:food/${grain}_flour`)],
Fluid.of('minecraft:water', 400))
.outputItem(`6x tfc:food/${grain}_dough`)
.id(`tfg:mixing_bowl/${grain}_flatbread_dough_4`)
})
event.recipes.firmalife.mixing_bowl()

View file

@ -565,4 +565,54 @@ const registerFramedBlocksRecipes = (event) => {
count: 1
}
}).id('framedblocks:framing_saw/framed_glowing_cube')
// Item Frame
event.shaped('4x framedblocks:framed_item_frame', [
'AAA',
'ABA',
'AAA'
], {
A: 'framedblocks:framed_cube',
B: '#forge:leather'
}).id('framedblocks:framed_item_frame')
event.custom({
type: "framedblocks:frame",
additives: [
{
"count": 1,
"ingredient": { tag: "forge:leather" }
}
],
material: 6144*8,
result: {
item: "framedblocks:framed_item_frame",
count: 4
}
}).id('framedblocks:framing_saw/framed_item_frame')
// Glow Item Frame
event.shapeless('framedblocks:framed_glowing_item_frame', ['framedblocks:framed_item_frame', 'minecraft:glowstone_dust'])
.id('framedblocks:framed_glowing_item_frame')
event.custom({
type: "framedblocks:frame",
additives: [
{
"count": 1,
"ingredient": { tag: "forge:leather" }
},
{
"count": 4,
"ingredient": { item: "minecraft:glowstone_dust" }
}
],
material: 6144*8,
result: {
item: "framedblocks:framed_glowing_item_frame",
count: 4
}
}).id('framedblocks:framing_saw/framed_glowing_item_frame')
}

View file

@ -141,6 +141,7 @@ const registerTFCRecipes = (event) => {
// Kaolinite Clay - regular smelting recipes can't have multiple inputs
event.recipes.gtceu.alloy_smelter('tfg:kaolinite')
.itemInputs('tfc:kaolin_clay')
.circuit(1)
.chancedOutput('tfc:powder/kaolinite', 2000, 0)
.duration(100)
.EUt(16)

View file

@ -582,7 +582,7 @@ function registerTFCMaterialsRecipes(event) {
if (!smallSpringItem.isEmpty() && !rodItem.isEmpty()) {
event.recipes.tfc.heating(smallSpringItem, tfcProperty.getMeltTemp())
.resultFluid(Fluid.of(outputMaterial.getFluid(), 72))
.resultFluid(Fluid.of(outputMaterial.getFluid(), 36))
.id(`tfc:heating/metal/${material.getName()}_small_spring`)
event.recipes.tfc.anvil(smallSpringItem, rodItem, ['hit_last', 'bend_second_last', 'bend_third_last'])
@ -593,9 +593,14 @@ function registerTFCMaterialsRecipes(event) {
// Nugget
let nuggetItem = ChemicalHelper.get(TagPrefix.nugget, material, 6)
if (!nuggetItem.isEmpty()) {
event.recipes.tfc.heating(`#forge:nuggets/${material.getName()}`, tfcProperty.getMeltTemp())
.resultFluid(Fluid.of(outputMaterial.getFluid(), 144/9))
.id(`tfc:heating/metal/${material.getName()}_nugget`)
event.recipes.tfc.anvil(nuggetItem, ingotItem, ['punch_last', 'hit_second_last', 'punch_third_last'])
.tier(tfcProperty.getTier())
.id(`tfg:anvil/${material.getName()}_nugget`)
.id(`tfc:anvil/${material.getName()}_nugget`)
}
}

View file

@ -18,7 +18,7 @@
pill_event.forEach(pill_event => {
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:${pill_event}_pill`) return
item.count--
player.addItemCooldown(item, 100)
@ -27,7 +27,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:${pill_event}_tablet`) return
item.count--
player.addItemCooldown(item, 100)
@ -37,7 +37,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:antipoison_pill`) return
item.count--
player.addItemCooldown(item, 50)
@ -46,7 +46,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:antipoison_tablet`) return
item.count--
player.addItemCooldown(item, 50)
@ -75,7 +75,7 @@
salvo_event.forEach(salvo_event => {
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:${salvo_event}_salvo`) return
item.count--
player.addItemCooldown(item, 100)
@ -85,7 +85,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:absorption_salvo`) return
item.count--
player.addItemCooldown(item, 200)
@ -94,7 +94,7 @@ ItemEvents.rightClicked(event => {
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:instant_health_salvo`) return
item.count--
player.addItemCooldown(item, 100)
@ -107,7 +107,7 @@ ItemEvents.rightClicked(event => {
// Vase Sounds
global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
const {block,server,player} = event
if (block.id != `tfg:decorative_vase/${color}`) {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${player.username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}})
@ -115,7 +115,7 @@ global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
const {block,server,player} = event
if (block.id != 'tfg:decorative_vase') {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${player.username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}});
@ -246,12 +246,96 @@ function getTFGPersistentDataRoot(player)
//#region Block Interactions
/**
* @typedef {Object} BrickVariant
* @property {string} brick_type - The name of the brick variant.
* @property {string|null} brick - Main brick block ID.
* @property {string|null} brick_stairs - Brick stairs block ID.
* @property {string|null} brick_slab - Brick slab block ID.
* @property {string|null} brick_wall - Brick wall block ID.
* @property {string|null} cracked_brick - Cracked brick block ID.
* @property {string|null} cracked_stairs - Cracked brick stairs block ID.
* @property {string|null} cracked_slab - Cracked brick slab block ID.
* @property {string|null} cracked_wall - Cracked brick wall block ID.
* @property {string|null} mossy_brick - Mossy brick block ID.
* @property {string|null} mossy_stairs - Mossy brick stairs block ID.
* @property {string|null} mossy_slab - Mossy brick slab block ID.
* @property {string|null} mossy_wall - Mossy brick wall block ID.
* @property {string|null} smooth_brick - Smooth brick block ID.
* @property {string|null} smooth_stairs - Smooth brick stairs block ID.
* @property {string|null} smooth_slab - Smooth brick slab block ID.
* @property {string|null} smooth_wall - Smooth brick wall block ID.
* @property {string|null} chiseled_brick - Chiseled brick block ID.
*/
/** @type {BrickVariant[]} */
global.BRICK_INDEX = (global.TFC_STONE_TYPES ?? []).map(tfc_stone => ({
brick_type: tfc_stone,
brick: `tfc:rock/bricks/${tfc_stone}`, brick_stairs: `tfc:rock/bricks/${tfc_stone}_stairs`, brick_slab: `tfc:rock/bricks/${tfc_stone}_slab`, brick_wall: `tfc:rock/bricks/${tfc_stone}_wall`,
cracked_brick: `tfc:rock/cracked_bricks/${tfc_stone}`, cracked_stairs: `tfc:rock/cracked_bricks/${tfc_stone}_stairs`, cracked_slab: `tfc:rock/cracked_bricks/${tfc_stone}_slab`, cracked_wall: `tfc:rock/cracked_bricks/${tfc_stone}_wall`,
mossy_brick: `tfc:rock/mossy_bricks/${tfc_stone}`, mossy_stairs: `tfc:rock/mossy_bricks/${tfc_stone}_stairs`, mossy_slab: `tfc:rock/mossy_bricks/${tfc_stone}_slab`, mossy_wall: `tfc:rock/mossy_bricks/${tfc_stone}_wall`,
smooth_brick: `tfc:rock/smooth/${tfc_stone}`, smooth_stairs: `tfc:rock/smooth/${tfc_stone}_stairs`, smooth_slab: `tfc:rock/smooth/${tfc_stone}_slab`, smooth_wall: `tfc:rock/smooth/${tfc_stone}_wall`,
chiseled_brick: `tfc:rock/chiseled/${tfc_stone}`
}));
(global.CREATE_DECO_BRICK_TYPES ?? []).slice(0, -1).forEach(create_brick => {
global.BRICK_INDEX.push({
brick_type: create_brick,
brick: `createdeco:${create_brick}_bricks`, brick_stairs: `createdeco:${create_brick}_brick_stairs`, brick_slab: `createdeco:${create_brick}_brick_slab`, brick_wall: `createdeco:${create_brick}_brick_wall`,
cracked_brick: `createdeco:cracked_${create_brick}_bricks`, cracked_stairs: `createdeco:cracked_${create_brick}_brick_stairs`, cracked_slab: `createdeco:cracked_${create_brick}_brick_slab`, cracked_wall: `createdeco:cracked_${create_brick}_brick_wall`,
mossy_brick: `createdeco:mossy_${create_brick}_bricks`, mossy_stairs: `createdeco:mossy_${create_brick}_brick_stairs`, mossy_slab: `createdeco:mossy_${create_brick}_brick_slab`, mossy_wall: `createdeco:mossy_${create_brick}_brick_wall`,
smooth_brick: `createdeco:corner_${create_brick}_bricks`, smooth_stairs: `createdeco:corner_${create_brick}_brick_stairs`, smooth_slab: `createdeco:corner_${create_brick}_brick_slab`, smooth_wall: `createdeco:corner_${create_brick}_brick_wall`,
chiseled_brick: `createdeco:tiled_${create_brick}_bricks`
})
});
global.BRICK_INDEX = global.BRICK_INDEX.concat([
// {
// brick_type: '',
// brick: '', brick_stairs: '', brick_slab: '', brick_wall: '',
// cracked_brick: '', cracked_stairs: '', cracked_slab: '', cracked_wall: '',
// mossy_brick: '', mossy_stairs: '', mossy_slab: '', mossy_wallL: '',
// smooth_brick: '', smooth_stairs: '', smooth_slab: '', smooth_wall: '',
// chiseled_brick: ''
// },
{
brick_type: 'red',
brick: 'minecraft:bricks', brick_stairs: 'minecraft:brick_stairs', brick_slab: 'minecraft:brick_slab', brick_wall: 'minecraft:brick_wall',
cracked_brick: 'createdeco:cracked_red_bricks', cracked_stairs: 'createdeco:cracked_red_brick_stairs', cracked_slab: 'createdeco:cracked_red_brick_slab', cracked_wall: 'createdeco:cracked_red_brick_wall',
mossy_brick: 'createdeco:mossy_red_bricks', mossy_stairs: 'createdeco:mossy_red_brick_stairs', mossy_slab: 'createdeco:mossy_red_brick_slab', mossy_wall: 'createdeco:mossy_red_brick_wall',
smooth_brick: 'createdeco:corner_red_bricks', smooth_stairs: 'createdeco:corner_red_brick_stairs', smooth_slab: 'createdeco:corner_red_brick_slab', smooth_wall: 'createdeco:corner_red_brick_wall',
chiseled_brick: 'createdeco:tiled_red_bricks'
},
{
brick_type: 'light_concrete',
brick: 'gtceu:light_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_light_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_light_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_light_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_light_concrete'
},
{
brick_type: 'dark_concrete',
brick: 'gtceu:dark_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_dark_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_dark_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_dark_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_dark_concrete'
},
{
brick_type: 'red_granite',
brick: 'gtceu:red_granite_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_red_granite_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_red_granite_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_red_granite', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_red_granite'
}
]);
/**
* Function for replacing a block with another block by crouch-right-clicking with a tool.
*
*
* If input and output is null recipe will just return.
*
* @param {*} event
* @param {*} event
* @param {string} inputBlock -Block ID to be replaced. Accepts a Tag, but not recommended.
* @param {string} outputBlock -Block ID of the replacement.
* @param {string} toolId -Item ID of the tool.
@ -309,10 +393,10 @@ function transformBlockWithTool(event, inputBlock, outputBlock, toolId, damageTo
/**
* Function for replacing a block with another block by crouch-right-clicking with an item.
*
*
* If input and output is null recipe will just return.
*
* @param {*} event
* @param {*} event
* @param {string} inputBlock -Block ID to be replaced. Accepts a Tag, but not recommended.
* @param {string} outputBlock -Block ID of the replacement.
* @param {string} itemId -Item ID of the consumed item. Accepts Tags.
@ -415,6 +499,32 @@ BlockEvents.rightClicked(event => {
transformBlockWithTool(event, b.brick, b.smooth_brick, '#create:sandpaper', true, 'create:sanding_short', 'minecraft:crit', true);
transformBlockWithTool(event, b.mossy_brick, b.smooth_brick, '#create:sandpaper', true, 'create:sanding_short', 'minecraft:crit', true);
transformBlockWithTool(event, b.cracked_brick, b.smooth_brick, '#create:sandpaper', true, 'create:sanding_short', 'minecraft:crit', true);
// smooth ->
transformBlockWithTool(event, b.smooth_brick, b.cracked_brick, '#forge:tools/hammers',true, 'minecraft:block.copper.hit', 'minecraft:crit', true);
transformBlockWithItem(event, b.smooth_brick, b.mossy_brick, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, b.smooth_brick, b.mossy_brick, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithTool(event, b.smooth_brick, b.brick, '#forge:tools/files', true, 'minecraft:block.beehive.shear', 'minecraft:crit', true);
}
//Other TFC Blocks
global.TFC_STONE_TYPES.forEach(stone => {
//cobble -> mossy
transformBlockWithItem(event, `tfc:rock/cobble/${stone}`, `tfc:rock/mossy_cobble/${stone}`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}`, `tfc:rock/mossy_cobble/${stone}`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_stairs`, `tfc:rock/mossy_cobble/${stone}_stairs`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_stairs`, `tfc:rock/mossy_cobble/${stone}_stairs`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_slab`, `tfc:rock/mossy_cobble/${stone}_slab`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_slab`, `tfc:rock/mossy_cobble/${stone}_slab`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_wall`, `tfc:rock/mossy_cobble/${stone}_wall`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_wall`, `tfc:rock/mossy_cobble/${stone}_wall`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
//mossy -> cobble
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}`, `tfc:rock/cobble/${stone}`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}`, `tfc:rock/cobble/${stone}`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}_stairs`, `tfc:rock/cobble/${stone}_stairs`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}_stairs`, `tfc:rock/cobble/${stone}_stairs`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}_slab`, `tfc:rock/cobble/${stone}_slab`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}_slab`, `tfc:rock/cobble/${stone}_slab`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}_wall`, `tfc:rock/cobble/${stone}_wall`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}_wall`, `tfc:rock/cobble/${stone}_wall`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
});
});
//#endregion

View file

@ -58,5 +58,10 @@ function registerTFGCollapseRecipes(event) {
event.recipes.tfc.collapse('gtceu:red_granite_cobblestone', 'gtceu:red_granite')
event.recipes.tfc.collapse('gtceu:red_granite_cobblestone', 'tfg:rock/hardened_red_granite')
event.recipes.tfc.collapse('gtceu:red_granite_cobblestone', '#forge:ores_in_ground/red_granite')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/mars_dirt')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/amber_mycelium')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/rusticus_mycelium')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/sangnum_mycelium')
// #endregion
}

View file

@ -244,6 +244,12 @@ const registerTFGItemTags = (event) => {
// #region Space blocks
event.add('tfg:moon_plants', 'tfg:lunar_roots')
event.add('tfg:moon_plants', 'tfg:lunar_sprouts')
event.add('minecraft:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:grass', 'tfg:grass/amber_mycelium')
event.add('tfc:grass', 'tfg:grass/rusticus_mycelium')
event.add('tfc:grass', 'tfg:grass/sangnum_mycelium')
// #endregion
// #region 0.7.19 -> 0.9 conversion
@ -356,8 +362,8 @@ const registerTFGBlockTags = (event) => {
event.add('tfc:crops', 'tfg:sunflower')
event.add('tfc:mineable_with_sharp_tool','tfg:sunflower')
// #region Nether blocks
// #region Nether blocks
event.add('minecraft:nether_carver_replaceables', 'tfg:rock/hardened_deepslate')
event.add('minecraft:moss_replaceable', 'tfg:rock/hardened_deepslate')
event.add('minecraft:base_stone_nether', 'tfg:rock/hardened_deepslate')
@ -376,6 +382,22 @@ const registerTFGBlockTags = (event) => {
event.add('minecraft:nether_carver_replaceables', 'tfg:rock/hardened_dripstone')
event.add('minecraft:base_stone_nether', 'tfg:rock/hardened_dripstone')
event.add('tfc:rock/hardened', 'tfg:rock/hardened_dripstone')
// #endregion
// #region Mars blocks
event.add('minecraft:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:grass', 'tfg:grass/amber_mycelium')
event.add('tfc:grass', 'tfg:grass/rusticus_mycelium')
event.add('tfc:grass', 'tfg:grass/sangnum_mycelium')
event.add('tfg:do_not_destroy_in_space', 'tfg:grass/amber_mycelium')
event.add('tfg:do_not_destroy_in_space', 'tfg:grass/rusticus_mycelium')
event.add('tfg:do_not_destroy_in_space', 'tfg:grass/sangnum_mycelium')
event.add('tfc:can_landslide', 'tfg:grass/mars_dirt')
event.add('tfc:can_landslide', 'tfg:grass/amber_mycelium')
event.add('tfc:can_landslide', 'tfg:grass/rusticus_mycelium')
event.add('tfc:can_landslide', 'tfg:grass/sangnum_mycelium')
// #endregion
event.add('tfg:harvester_harvestable', '#tfc:fruit_tree_leaves')
event.add('tfg:harvester_harvestable', '#tfc:berry_bushes')
@ -388,7 +410,6 @@ const registerTFGBlockTags = (event) => {
event.add('forge:mineable/wrench', 'tfg:superconductor_coil_small')
event.add('forge:mineable/wrench', 'tfg:electromagnetic_accelerator')
// #endregion
}
//#endregion

View file

@ -1,175 +1,175 @@
"use strict";
const registerTFGBlocks = (event) => {
registerTFGNetherBlocks(event)
registerTFGSpaceBlocks(event)
registerTFGSupportBlocks(event)
registerTFGCrops(event)
event.create('tfg:artificial_end_portal_frame')
.stoneSoundType()
.tagBlock('minecraft:mineable/pickaxe')
.requiresTool(true)
.fullBlock(true)
.item(item => {
item.modelJson({ parent: 'minecraft:block/end_portal_frame' })
})
event.create('tfg:dry_ice', 'tfg:particle_emitter')
.textureAll('tfg:block/dry_ice')
.soundType('bone_block')
.hardness(1)
.resistance(1)
.tagBlock('minecraft:mineable/pickaxe')
.tagBlock('tfcambiental:cold_stuff')
.defaultTranslucent()
.mapColor('color_white')
.speedFactor(1.2)
.particleOffset(1, 1, 1)
.particleVelocity(0.05, 0, 0.05)
.particle('minecraft:campfire_cosy_smoke')
.particleCount(2)
.particleForced(false)
// #region Machine Casings
global.TFG_MACHINE_CASINGS.forEach(type => {
event.create(`tfg:casings/${type}`)
.translationKey(`block.tfg.casings.${type}`)
.model(`tfg:block/casings/${type}`)
.soundType('copper')
.hardness(5)
.resistance(6)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor('color_light_gray')
})
//#endregion
// #region Decorative vases
global.MINECRAFT_DYE_NAMES.forEach(color => {
event.create(`tfg:decorative_vase/generated/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/loot_vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
event.create(`tfg:decorative_vase/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create(`tfg:decorative_vase/unfired/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_unfired_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
})
event.create('tfg:decorative_vase', 'cardinal')
.model('tfg:block/decorative_vase/vase')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create('tfg:decorative_vase/unfired', 'cardinal')
.model('tfg:block/decorative_vase/vase_unfired')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
// #endregion
// #region Layer blocks
event.create('tfg:ash_pile', 'tfg:layer_block')
.existingItem('tfc:powder/wood_ash')
.mapColor('color_light_gray')
event.create('tfg:pile/black_sand', 'tfg:layer_block')
.existingItem('tfc:sand/black')
event.create('tfg:pile/brown_sand', 'tfg:layer_block')
.existingItem('tfc:sand/brown')
event.create('tfg:pile/green_sand', 'tfg:layer_block')
.existingItem('tfc:sand/green')
event.create('tfg:pile/pink_sand', 'tfg:layer_block')
.existingItem('tfc:sand/pink')
event.create('tfg:pile/red_sand', 'tfg:layer_block')
.existingItem('tfc:sand/red')
event.create('tfg:pile/white_sand', 'tfg:layer_block')
.existingItem('tfc:sand/white')
event.create('tfg:pile/yellow_sand', 'tfg:layer_block')
.existingItem('tfc:sand/yellow')
event.create('tfg:pile/mars_sand', 'tfg:layer_block')
.existingItem('ad_astra:mars_sand')
event.create('tfg:pile/moon_sand', 'tfg:layer_block')
.existingItem('ad_astra:moon_sand')
event.create('tfg:pile/venus_sand', 'tfg:layer_block')
.existingItem('ad_astra:venus_sand')
// #endregion
// #region Deprecated
event.create('treetap:tap')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
event.create('tfcea:refrigerator')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
// #endregion
}
"use strict";
const registerTFGBlocks = (event) => {
registerTFGNetherBlocks(event)
registerTFGSpaceBlocks(event)
registerTFGSupportBlocks(event)
registerTFGCrops(event)
event.create('tfg:artificial_end_portal_frame')
.stoneSoundType()
.tagBlock('minecraft:mineable/pickaxe')
.requiresTool(true)
.fullBlock(true)
.item(item => {
item.modelJson({ parent: 'minecraft:block/end_portal_frame' })
})
event.create('tfg:dry_ice', 'tfg:particle_emitter')
.textureAll('tfg:block/dry_ice')
.soundType('bone_block')
.hardness(1)
.resistance(1)
.tagBlock('minecraft:mineable/pickaxe')
.tagBlock('tfcambiental:cold_stuff')
.defaultTranslucent()
.mapColor('color_white')
.speedFactor(1.2)
.particleOffset(1, 1, 1)
.particleVelocity(0.05, 0, 0.05)
.particle('minecraft:campfire_cosy_smoke')
.particleCount(2)
.particleForced(false)
// #region Machine Casings
global.TFG_MACHINE_CASINGS.forEach(type => {
event.create(`tfg:casings/${type}`)
.translationKey(`block.tfg.casings.${type}`)
.model(`tfg:block/casings/${type}`)
.soundType('copper')
.hardness(5)
.resistance(6)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor('color_light_gray')
})
//#endregion
// #region Decorative vases
global.MINECRAFT_DYE_NAMES.forEach(color => {
event.create(`tfg:decorative_vase/generated/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/loot_vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
event.create(`tfg:decorative_vase/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create(`tfg:decorative_vase/unfired/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_unfired_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
})
event.create('tfg:decorative_vase', 'cardinal')
.model('tfg:block/decorative_vase/vase')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create('tfg:decorative_vase/unfired', 'cardinal')
.model('tfg:block/decorative_vase/vase_unfired')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
// #endregion
// #region Layer blocks
event.create('tfg:ash_pile', 'tfg:layer_block')
.existingItem('tfc:powder/wood_ash')
.mapColor('color_light_gray')
event.create('tfg:pile/black_sand', 'tfg:layer_block')
.existingItem('tfc:sand/black')
event.create('tfg:pile/brown_sand', 'tfg:layer_block')
.existingItem('tfc:sand/brown')
event.create('tfg:pile/green_sand', 'tfg:layer_block')
.existingItem('tfc:sand/green')
event.create('tfg:pile/pink_sand', 'tfg:layer_block')
.existingItem('tfc:sand/pink')
event.create('tfg:pile/red_sand', 'tfg:layer_block')
.existingItem('tfc:sand/red')
event.create('tfg:pile/white_sand', 'tfg:layer_block')
.existingItem('tfc:sand/white')
event.create('tfg:pile/yellow_sand', 'tfg:layer_block')
.existingItem('tfc:sand/yellow')
event.create('tfg:pile/mars_sand', 'tfg:layer_block')
.existingItem('ad_astra:mars_sand')
event.create('tfg:pile/moon_sand', 'tfg:layer_block')
.existingItem('ad_astra:moon_sand')
event.create('tfg:pile/venus_sand', 'tfg:layer_block')
.existingItem('ad_astra:venus_sand')
// #endregion
// #region Deprecated
event.create('treetap:tap')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
event.create('tfcea:refrigerator')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
// #endregion
}

View file

@ -1,6 +1,8 @@
"use strict";
/**
* @type {string[]} - Item Names
*/
global.AIRCRAFT_UPGRADES = [
"lv_aircraft_engine",
"hv_aircraft_engine",
@ -22,6 +24,9 @@ global.AIRCRAFT_UPGRADES = [
"titanium_hull_reinforcement"
]
/**
* @type {string[]} - Item IDs
*/
global.EXTRATERRESTRIAL_RAW_ROCKS = [
'ad_astra:moon_stone',
'ad_astra:moon_deepslate',
@ -32,6 +37,9 @@ global.EXTRATERRESTRIAL_RAW_ROCKS = [
'gtceu:red_granite'
]
/**
* @type {string[]} - Item IDs
*/
global.EXTRATERRESTRIAL_HARDENED_ROCKS = [
'tfg:rock/hardened_moon_stone',
'tfg:rock/hardened_moon_deepslate',
@ -42,6 +50,9 @@ global.EXTRATERRESTRIAL_HARDENED_ROCKS = [
'tfg:rock/hardened_red_granite'
]
/**
* @type {string[]} - Stone Names
*/
global.MOON_STONE_TYPES = [
"andesite",
"basalt",
@ -54,6 +65,9 @@ global.MOON_STONE_TYPES = [
"rhyolite"
]
/**
* @type {string[]} - Biome IDs
*/
global.MOON_BIOMES = [
'tfg:moon/lunar_plains',
'tfg:moon/lunar_sands',
@ -67,12 +81,28 @@ global.MOON_BIOMES = [
'tfg:moon/lunar_lights_sparse'
]
/**
* @type {string[]} - Biome IDs
*/
global.MARS_BIOMES = [
'tfg:mars/martian_plains',
'tfg:mars/martian_oasis',
'tfg:mars/martian_deep_desert',
'tfg:mars/martian_dunes',
'tfg:mars/martian_dune_edge',
'tfg:mars/martian_river',
'tfg:mars/martian_riverbed',
'tfg:mars/amber_plains',
'tfg:mars/amber_hills',
'tfg:mars/rusticus_plains',
'tfg:mars/rusticus_hills',
'tfg:mars/sangnum_plains',
'tfg:mars/sangnum_hills',
'tfg:mars/martian_mountains'
]
/**
* @type {string[]} - Block Names
*/
global.TFG_MACHINE_CASINGS = [
//'machine_casing_clean_stainless_steel_desh',
//'machine_casing_desh_ptfe',
@ -84,8 +114,22 @@ global.TFG_MACHINE_CASINGS = [
'machine_casing_red_solar_panel'
];
/**
* @type {string[]} - Circuit Tiers
*/
global.UNIVERSAL_CIRCUIT_TIERS = ["ulv", "lv", "mv", "hv", "ev", "iv", "luv", "zpm", "uv", "uhv"];
/**
* @typedef {Object} Fruit
* @property {string} name - Fruit Name
* @property {string} id - Fruit ID
* @property {number} saturation - Saturation Value
* @property {number} water - Water Value
* @property {number} fruit - Fruit Value
* @property {number} decay - Decay Modifier
*/
/** @type {Fruit[]} */
global.FOOD_FRUIT = [
{name: 'red_grapes', id: 'firmalife:food/red_grapes', saturation: 0.4, water: 2, fruit: 0.5, decay: 2.25},
{name: 'white_grapes', id: 'firmalife:food/white_grapes', saturation: 0.4, water: 2, fruit: 0.5, decay: 2.25},
@ -117,65 +161,3 @@ global.FOOD_FRUIT = [
{name: 'fig', id: 'firmalife:food/fig', saturation: 1, water: 5, fruit: 0.9, decay: 1},
{name: 'pineapple', id: 'firmalife:food/pineapple', saturation: 1, water: 1, fruit: 0.8, decay: 4.5}
];
/** @global */
global.BRICK_INDEX = global.TFC_STONE_TYPES.map(tfc_stone => ({
brick_type: tfc_stone,
brick: `tfc:rock/bricks/${tfc_stone}`, brick_stairs: `tfc:rock/bricks/${tfc_stone}_stairs`, brick_slab: `tfc:rock/bricks/${tfc_stone}_slab`, brick_wall: `tfc:rock/bricks/${tfc_stone}_wall`,
cracked_brick: `tfc:rock/cracked_bricks/${tfc_stone}`, cracked_stairs: `tfc:rock/cracked_bricks/${tfc_stone}_stairs`, cracked_slab: `tfc:rock/cracked_bricks/${tfc_stone}_slab`, cracked_wall: `tfc:rock/cracked_bricks/${tfc_stone}_wall`,
mossy_brick: `tfc:rock/mossy_bricks/${tfc_stone}`, mossy_stairs: `tfc:rock/mossy_bricks/${tfc_stone}_stairs`, mossy_slab: `tfc:rock/mossy_bricks/${tfc_stone}_slab`, mossy_wall: `tfc:rock/mossy_bricks/${tfc_stone}_wall`,
smooth_brick: `tfc:rock/smooth/${tfc_stone}`, smooth_stairs: `tfc:rock/smooth/${tfc_stone}_stairs`, smooth_slab: `tfc:rock/smooth/${tfc_stone}_slab`, smooth_wall: `tfc:rock/smooth/${tfc_stone}_wall`,
chiseled_brick: `tfc:rock/chiseled/${tfc_stone}`
}));
global.CREATE_DECO_BRICK_TYPES.slice(0, -1).forEach(create_brick => {
global.BRICK_INDEX.push({
brick_type: create_brick,
brick: `createdeco:${create_brick}_bricks`, brick_stairs: `createdeco:${create_brick}_brick_stairs`, brick_slab: `createdeco:${create_brick}_brick_slab`, brick_wall: `createdeco:${create_brick}_brick_wall`,
cracked_brick: `createdeco:cracked_${create_brick}_bricks`, cracked_stairs: `createdeco:cracked_${create_brick}_brick_stairs`, cracked_slab: `createdeco:cracked_${create_brick}_brick_slab`, cracked_wall: `createdeco:cracked_${create_brick}_brick_wall`,
mossy_brick: `createdeco:mossy_${create_brick}_bricks`, mossy_stairs: `createdeco:mossy_${create_brick}_brick_stairs`, mossy_slab: `createdeco:mossy_${create_brick}_brick_slab`, mossy_wall: `createdeco:mossy_${create_brick}_brick_wall`,
smooth_brick: `createdeco:corner_${create_brick}_bricks`, smooth_stairs: `createdeco:corner_${create_brick}_brick_stairs`, smooth_slab: `createdeco:corner_${create_brick}_brick_slab`, smooth_wall: `createdeco:corner_${create_brick}_brick_wall`,
chiseled_brick: `createdeco:tiled_${create_brick}_bricks`
})
});
global.BRICK_INDEX = global.BRICK_INDEX.concat([
// {
// brick_type: '',
// brick: '', brick_stairs: '', brick_slab: '', brick_wall: '',
// cracked_brick: '', cracked_stairs: '', cracked_slab: '', cracked_wall: '',
// mossy_brick: '', mossy_stairs: '', mossy_slab: '', mossy_wallL: '',
// smooth_brick: '', smooth_stairs: '', smooth_slab: '', smooth_wall: '',
// chiseled_brick: ''
// },
{
brick_type: 'red',
brick: 'minecraft:bricks', brick_stairs: 'minecraft:brick_stairs', brick_slab: 'minecraft:brick_slab', brick_wall: 'minecraft:brick_wall',
cracked_brick: 'createdeco:cracked_red_bricks', cracked_stairs: 'createdeco:cracked_red_brick_stairs', cracked_slab: 'createdeco:cracked_red_brick_slab', cracked_wall: 'createdeco:cracked_red_brick_wall',
mossy_brick: 'createdeco:mossy_red_bricks', mossy_stairs: 'createdeco:mossy_red_brick_stairs', mossy_slab: 'createdeco:mossy_red_brick_slab', mossy_wall: 'createdeco:mossy_red_brick_wall',
smooth_brick: 'createdeco:corner_red_bricks', smooth_stairs: 'createdeco:corner_red_brick_stairs', smooth_slab: 'createdeco:corner_red_brick_slab', smooth_wall: 'createdeco:corner_red_brick_wall',
chiseled_brick: 'createdeco:tiled_red_bricks'
},
{
brick_type: 'light_concrete',
brick: 'gtceu:light_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_light_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_light_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_light_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_light_concrete'
},
{
brick_type: 'dark_concrete',
brick: 'gtceu:dark_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_dark_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_dark_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_dark_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_dark_concrete'
},
{
brick_type: 'red_granite',
brick: 'gtceu:red_granite_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_red_granite_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_red_granite_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_red_granite', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_red_granite'
}
])

View file

@ -32,11 +32,6 @@ const registerTFGFluids = (event) => {
.noBlock()
//#region Mars
event.create('tfg:semiheavy_ammoniacal_water')
.thinTexture(0x704f786c)
.color(0x4f786c)
.temperature(213)
.renderType('translucent')
//#endregion
//#region Venus

View file

@ -4425,7 +4425,7 @@
"files": [
{
"type": "modrinth",
"file_name": "defaultoptions-forge-1.20.1-18.0.2.jar",
"file_name": "defaultoptions-forge-1.20.1-18.0.3.jar",
"mc_versions": [
"1.20",
"1.20.1"
@ -4434,22 +4434,22 @@
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/WEg59z5b/versions/qCfqBSp6/defaultoptions-forge-1.20.1-18.0.2.jar",
"id": "qCfqBSp6",
"url": "https://cdn.modrinth.com/data/WEg59z5b/versions/vNF6Yrv4/defaultoptions-forge-1.20.1-18.0.3.jar",
"id": "vNF6Yrv4",
"parent_id": "WEg59z5b",
"hashes": {
"sha512": "fa1dce631b50ef18b8c2ec5ac942dbb1c3b775a85a6bed045d1e26aea4d5aa8c13877ddc4aed059aa829684932e986fd4450b2215273225b6b278af6d5a80fe2",
"sha1": "30fb48d3884b33175644235bfe6f6d29c4248d19"
"sha512": "d3c13262743fb06d481a4755da9daa78350cf1e3ffe88b7f8ff86ad6c5c7bd729483e5890e4f6e2969dacf08649765277598251d4d5dff20f68a5690f352c750",
"sha1": "bbc80fc1a7f0e17b64fca56fcf7d55562db9783d"
},
"required_dependencies": [
"MBAkmtvl"
],
"size": 93386,
"date_published": "2025-07-22T15:03:48.450032Z"
"size": 94649,
"date_published": "2025-07-23T21:48:31.220228Z"
},
{
"type": "curseforge",
"file_name": "defaultoptions-forge-1.20.1-18.0.2.jar",
"file_name": "defaultoptions-forge-1.20.1-18.0.3.jar",
"mc_versions": [
"1.20.1",
"1.20"
@ -4458,18 +4458,18 @@
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6799/217/defaultoptions-forge-1.20.1-18.0.2.jar",
"id": "6799217",
"url": "https://edge.forgecdn.net/files/6804/680/defaultoptions-forge-1.20.1-18.0.3.jar",
"id": "6804680",
"parent_id": "232131",
"hashes": {
"sha1": "2dcb222998a3194d14aab49112824b3f514d42bd",
"md5": "bf35ff9db893d713d9b7d8c8291333e5"
"sha1": "a7bffd6bd5cff19793cede8c1b8bb0450eb25059",
"md5": "10d4a6afe004f72a965d0263583576db"
},
"required_dependencies": [
"531761"
],
"size": 93387,
"date_published": "2025-07-22T15:03:48.190Z"
"size": 94649,
"date_published": "2025-07-23T21:49:30.653Z"
}
]
},
@ -5617,7 +5617,7 @@
"files": [
{
"type": "curseforge",
"file_name": "ftb-library-forge-2001.2.9.jar",
"file_name": "ftb-library-forge-2001.2.10.jar",
"mc_versions": [
"1.20.1"
],
@ -5625,18 +5625,18 @@
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6164/53/ftb-library-forge-2001.2.9.jar",
"id": "6164053",
"url": "https://edge.forgecdn.net/files/6807/424/ftb-library-forge-2001.2.10.jar",
"id": "6807424",
"parent_id": "404465",
"hashes": {
"sha1": "42639a90f91c79d6b323ede5e229a79c050f4dc7",
"md5": "cdf8b270d3ee2c403a26206b10e0a749"
"sha1": "9472bb30d0e38cb774b9cc7852bdd8dbf845622b",
"md5": "ae5292127a5a0d85d793bbce8f1e24dd"
},
"required_dependencies": [
"419699"
],
"size": 791841,
"date_published": "2025-02-06T12:34:16.087Z"
"size": 791875,
"date_published": "2025-07-24T16:54:08.133Z"
}
]
},
@ -10437,7 +10437,7 @@
"3Hn4sTVbBvKyQJJS"
],
"type": "MOD",
"side": "BOTH",
"side": "CLIENT",
"slug": {
"curseforge": "pick-up-notifier",
"modrinth": "pick-up-notifier"
@ -11830,30 +11830,9 @@
"modrinth": "qyVF9oeo"
},
"files": [
{
"type": "curseforge",
"file_name": "sound-physics-remastered-forge-1.20.1-1.4.13.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "alpha",
"url": "https://edge.forgecdn.net/files/6399/601/sound-physics-remastered-forge-1.20.1-1.4.13.jar",
"id": "6399601",
"parent_id": "535489",
"hashes": {
"sha1": "0851097c159a0498620e8cd307ab7d26c6fcc57b",
"md5": "60f4782d630d473a4bc6547369c286db"
},
"required_dependencies": [],
"size": 204480,
"date_published": "2025-04-08T16:04:46.963Z"
},
{
"type": "modrinth",
"file_name": "sound-physics-remastered-forge-1.20.1-1.4.13.jar",
"file_name": "sound-physics-remastered-forge-1.20.1-1.4.15.jar",
"mc_versions": [
"1.20.1"
],
@ -11861,16 +11840,37 @@
"forge"
],
"release_type": "alpha",
"url": "https://cdn.modrinth.com/data/qyVF9oeo/versions/fqgMU03D/sound-physics-remastered-forge-1.20.1-1.4.13.jar",
"id": "fqgMU03D",
"url": "https://cdn.modrinth.com/data/qyVF9oeo/versions/o4QlRA76/sound-physics-remastered-forge-1.20.1-1.4.15.jar",
"id": "o4QlRA76",
"parent_id": "qyVF9oeo",
"hashes": {
"sha512": "3840428a7b9e065e380b5fc59a134e7c9aa3b46c0c491724534274eb709a1927be5ab6473a8a38f60bdb16e128174a1bae432e81e86a622b7d2b75e4aa961998",
"sha1": "d662aa77d89d48ce254421d064476d0f15c3f11f"
"sha512": "bf13d3ab4df46d446067b8bf648a84c57a5c0aa134118967a85397fc732df4689e6fa15db1728995ae06c39e0bdbd54bbdff7ee044b67a1f3f513a289e47fe60",
"sha1": "990bd9caa7c4394e66d379263139495a27147a67"
},
"required_dependencies": [],
"size": 204480,
"date_published": "2025-04-08T16:04:58.342578Z"
"size": 204487,
"date_published": "2025-07-25T07:23:13.030771Z"
},
{
"type": "curseforge",
"file_name": "sound-physics-remastered-forge-1.20.1-1.4.15.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "alpha",
"url": "https://edge.forgecdn.net/files/6809/408/sound-physics-remastered-forge-1.20.1-1.4.15.jar",
"id": "6809408",
"parent_id": "535489",
"hashes": {
"sha1": "a1678721a328eb2e68c259b208e8043cca606dd5",
"md5": "bf2e072b924a55422849f6c126bd2455"
},
"required_dependencies": [],
"size": 204486,
"date_published": "2025-07-25T07:22:50.880Z"
}
]
},
@ -12357,21 +12357,23 @@
]
},
{
"pakku_id": "zerUE7n4nmHdsmgn",
"pakku_id": "oKmbT8tEk75s2Dfq",
"pakku_links": [
"F6H99cZ4H6jZRpEK",
"fMkiGcRPRv1DdRC1",
"64uacGcEw697jVGs"
],
"type": "MOD",
"side": "BOTH",
"slug": {
"curseforge": "tfc-grooming-station"
"curseforge": "tfc-grooming-station",
"modrinth": "tfc-grooming-station"
},
"name": {
"curseforge": "TFC Grooming Station"
"curseforge": "TFC Grooming Station",
"modrinth": "TFC Grooming Station"
},
"id": {
"curseforge": "1003785"
"curseforge": "1003785",
"modrinth": "2yZ8ZSeO"
},
"files": [
{
@ -12396,6 +12398,27 @@
],
"size": 134178,
"date_published": "2025-01-23T23:02:18.440Z"
},
{
"type": "modrinth",
"file_name": "tfcgroomer-1.20.1-0.1.3.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/2yZ8ZSeO/versions/XkumbkLd/tfcgroomer-1.20.1-0.1.3.jar",
"id": "XkumbkLd",
"parent_id": "2yZ8ZSeO",
"hashes": {
"sha512": "0748272427ca889f733f51e14bebfefcb0d8dc02734ed4be34a75ab55085a835b6e80864a0e857ab2f4c8ed48a7523272d41a008697dc4d7c347806c0376845e",
"sha1": "292c57951e1fe01e2159287e0392e4afda1d8153"
},
"required_dependencies": [],
"size": 133849,
"date_published": "2025-07-20T10:58:34.516207Z"
}
]
},
@ -13351,7 +13374,7 @@
"files": [
{
"type": "modrinth",
"file_name": "TerraFirmaGreg-Core-Modern-0.7.4.jar",
"file_name": "TerraFirmaGreg-Core-Modern-0.7.5.jar",
"mc_versions": [
"1.20.1"
],
@ -13360,23 +13383,23 @@
"neoforge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/lNttW2Xl/versions/WS91llWg/TerraFirmaGreg-Core-Modern-0.7.4.jar",
"id": "WS91llWg",
"url": "https://cdn.modrinth.com/data/lNttW2Xl/versions/k3OZlwbT/TerraFirmaGreg-Core-Modern-0.7.5.jar",
"id": "k3OZlwbT",
"parent_id": "lNttW2Xl",
"hashes": {
"sha512": "9bc36f5bfcd91d8feedd3b8c4a4f16a73a66e6bd29d5aa69019ba542b6d52a982ddc002266514c65ba4760d3c191a579e269bc6a07c84381f47ba710b93aeca4",
"sha1": "80831501fc25852f9b8bc682efb84cf1d6477b25"
"sha512": "5092b312fd99c514096151737a01f846aab134c7ea3fd63398d18596fadb0452b1291f55d943249bf3f9e5e3d870dc78f7f21a73b812e5674cf55463a1acee67",
"sha1": "e601fec291fdcb93110d880b73a647201ab260b5"
},
"required_dependencies": [
"JaCEZUhg",
"7tG215v7"
],
"size": 453335,
"date_published": "2025-07-23T19:10:58.887028Z"
"size": 459039,
"date_published": "2025-07-25T20:21:55.177760Z"
},
{
"type": "curseforge",
"file_name": "TerraFirmaGreg-Core-Modern-0.7.4.jar",
"file_name": "TerraFirmaGreg-Core-Modern-0.7.5.jar",
"mc_versions": [
"1.20.1"
],
@ -13385,19 +13408,19 @@
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6804/121/TerraFirmaGreg-Core-Modern-0.7.4.jar",
"id": "6804121",
"url": "https://edge.forgecdn.net/files/6811/416/TerraFirmaGreg-Core-Modern-0.7.5.jar",
"id": "6811416",
"parent_id": "513402",
"hashes": {
"sha1": "80831501fc25852f9b8bc682efb84cf1d6477b25",
"md5": "f86aea5b855207ba7a50616e74c86579"
"sha1": "e601fec291fdcb93110d880b73a647201ab260b5",
"md5": "21d09a094c8f86f31f702113c6c3bf61"
},
"required_dependencies": [
"890405",
"302973"
],
"size": 453335,
"date_published": "2025-07-23T19:10:57.027Z"
"size": 459039,
"date_published": "2025-07-25T20:21:53.920Z"
}
]
},