Merge branch 'TerraFirmaGreg-Team:dev' into dev

This commit is contained in:
Redeix 2025-04-19 22:02:51 -05:00 committed by GitHub
commit 7dfdcc082d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
30 changed files with 493 additions and 403 deletions

View file

@ -1,31 +1,32 @@
name: Project Build
run-name: "Project Build #${{ github.run_number }}"
run-name: "📦 Project Build #${{ github.run_number }}"
on:
push:
branches:
- dev
- main
concurrency:
group: ${{ github.workflow }}
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RELEASE_TYPE: "release"
RELEASE_TYPE: "alpha"
MINECRAFT_VERSION: "1.20.1"
DEV_ENVIRONMENT: ${{ github.ref_name != 'main' }}
jobs:
info:
name: 🖥️ Project Info
runs-on: ubuntu-latest
outputs:
project_version: ${{ steps.project_version.outputs.value }}
project_name: ${{ steps.project_name.outputs.value }}
project_full_name: ${{ steps.project_name.outputs.value }}-${{ steps.project_version.outputs.value }}
project_version: ${{ steps.check.outputs.version }}
project_name: ${{ steps.pakku_info.outputs.name }}
project_full_name: ${{ steps.pakku_info.outputs.name }}-${{ steps.check.outputs.version }}
changelog: ${{ steps.changelog.outputs.description }}
diff: ${{ steps.read_diff.outputs.diff }}
release_type: ${{ env.RELEASE_TYPE }}
minecraft_version: ${{ env.MINECRAFT_VERSION }}
exists: ${{ steps.check_tag.outputs.exists }}
make_release: ${{ steps.check_tag.outputs.exists == 'false' && env.DEV_ENVIRONMENT == 'false' }}
steps:
- name: Checkout
@ -79,7 +80,7 @@ jobs:
- name: 📁 Check and copy pakku-lock.json from previous tag
id: check_copy_lock
if: steps.check_pakku_lock_prev.outputs.file_found == 'true'
if: steps.check_pakku_lock_prev.outputs.file_found
shell: bash
run: |
git show tags/${{ steps.latest_tag.outputs.tag }}:./pakku-lock.json > ./pakku-lock-prev.json
@ -91,7 +92,7 @@ jobs:
- name: 📦 Download pakku.jar
id: download_pakku
if: steps.check_pakku_lock_prev.outputs.file_found == 'true'
if: steps.check_pakku_lock_prev.outputs.file_found
shell: bash
run: |
curl https://github.com/juraj-hrivnak/pakku/releases/latest/download/pakku.jar -o pakku.jar -L -J
@ -99,7 +100,7 @@ jobs:
- name: 🔄 Run pakku diff
id: pakku_diff
if: steps.check_pakku_lock_prev.outputs.file_found == 'true'
if: steps.check_pakku_lock_prev.outputs.file_found
shell: bash
run: |
java -jar pakku.jar diff -v --markdown PROJECTS_DIFF.md ./pakku-lock-prev.json ./pakku-lock.json
@ -111,7 +112,7 @@ jobs:
- name: 📝 Read PROJECTS_DIFF.md to variable
id: read_diff
if: steps.check_pakku_lock_prev.outputs.file_found == 'true'
if: steps.check_pakku_lock_prev.outputs.file_found
shell: bash
run: |
echo "📝 Reading PROJECTS_DIFF.md to variable..."
@ -121,67 +122,87 @@ jobs:
echo EOF
} >> "$GITHUB_OUTPUT"
echo "✔️ Diff content read to variable"
- name: 📊 Get Project Name
id: project_name
uses: ActionsTools/read-json-action@v1.0.5
with:
file_path: "pakku.json"
prop_path: "name"
- name: 📊 Get Project Version
id: project_version
uses: ActionsTools/read-json-action@v1.0.5
with:
file_path: "pakku.json"
prop_path: "version"
- name: 📊 Get Minecraft Version
id: minecraft_version
- name: 📊 Get Pakku Info
id: pakku_info
uses: ActionsTools/read-json-action@v1.0.5
with:
file_path: "pakku.json"
- name: 📊 Get Pakku-lock Info
id: pakku_lock_info
uses: ActionsTools/read-json-action@v1.0.5
with:
file_path: "pakku-lock.json"
prop_path: "mc_versions"
- name: 🔍 Check if tag exists
uses: mukunku/tag-exists-action@v1.6.0
id: check_tag
with:
tag: ${{ steps.pakku_info.outputs.version }}
- name: 📝 Determine Version
id: determine_version
shell: bash
run: |
if [ ${{ env.DEV_ENVIRONMENT }} ]; then
echo "version=unreleased" >> $GITHUB_OUTPUT
else
echo "version=${{ steps.pakku_info.outputs.version }}" >> $GITHUB_OUTPUT
fi
- name: 📄 Changelog Parser
id: changelog
uses: coditory/changelog-parser@v1.0.2
with:
path: CHANGELOG.md
- name: 📈 Upload Diff
id: upload_diff
if: ${{ steps.read_diff.outputs.diff != '' }} && steps.check_pakku_lock_prev.outputs.file_found == 'true'
uses: actions/upload-artifact@v4.6.2
version: ${{ steps.determine_version.outputs.version }}
continue-on-error: true
- name: 🔍 Check if changelog is empty
id: check
shell: bash
run: |
if [ ${{ env.DEV_ENVIRONMENT || steps.changelog.outcome == 'failure' }} ]; then
echo "version=build_#${{ github.run_number }}" >> $GITHUB_OUTPUT
echo "status=Unreleased" >> $GITHUB_OUTPUT
else
echo "status=${{ env.RELEASE_TYPE }}" >> $GITHUB_OUTPUT
echo "version=${{ steps.pakku_info.outputs.version }}" >> $GITHUB_OUTPUT
fi
- name: 📄 Format diff
id: format_diff
if: ${{ steps.read_diff.outputs.diff != '' }}
uses: roamingowl/template-output-with-eta@v1.12.0
with:
name: Mods-diff
path: PROJECTS_DIFF.md
- name: 🔍 Check if tag exists
uses: mukunku/tag-exists-action@v1.6.0
id: check_tag
with:
tag: ${{ steps.project_version.outputs.value }}
template: |
```markdown
${{ steps.read_diff.outputs.diff }}
```
- name: 📝 Generate Github Summary
uses: WcAServices/markdown-template-action@v1.1.1
with:
template: |
📃 **Name**: ${{ steps.project_name.outputs.value }}
📃 **Release**: ${{ steps.project_version.outputs.value }}
📃 **Release Type**: ${{ env.RELEASE_TYPE }}
📃 **Game Version**: ${{ env.MINECRAFT_VERSION }}
📃 **Name**: ${{ steps.pakku_info.outputs.name }}
📃 **Release**: `${{ steps.check.outputs.version }}`
📃 **Release Type**: `${{ steps.check.outputs.status }}`
📃 **Game Version**: `${{ steps.pakku_lock_info.outputs.mc_versions }}`
📃 **Dev Environment**: `${{ env.DEV_ENVIRONMENT }}`
📃 **Tag Exists**: `${{ steps.check_tag.outputs.exists }}`
📃 **Make Release**: `${{ steps.check_tag.outputs.exists == 'false' && env.DEV_ENVIRONMENT == 'false' }}`
${{ steps.changelog.outputs.description }}
${{ steps.read_diff.outputs.diff }}
${{ steps.format_diff.outputs.text }}
build-modpack:
name: 📦 Build Modpack
needs: [info]
runs-on: ubuntu-latest
if: needs.info.outputs.exists != 'true'
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
@ -192,14 +213,16 @@ jobs:
set +e
VERSION=${{ needs.info.outputs.project_version }}
sed -i -e "s/\"version\": \"[0-9.]*\"/\"version\": \"${VERSION}\"/g" pakku.json
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt
# - name: Cache pakku
# uses: actions/cache@v4.1.2
# with:
# path: build/.cache
# key: ${{ runner.OS }}-pakku-cache-${{ hashFiles('build/.cache/') }}
# restore-keys: ${{ runner.OS }}-pakku-cache-
- name: 📝 Cache pakku
uses: actions/cache@v4.2.3
id: cache
with:
path: build/.cache
key: pakku-cache-${{ hashFiles('pakku-lock.json') }}
restore-keys: pakku-cache-
- name: 📦 Export modpack
run: |
@ -234,8 +257,6 @@ jobs:
name: 📦 Build Server
needs: [info]
runs-on: ubuntu-latest
if: needs.info.outputs.exists != 'true'
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
@ -246,14 +267,16 @@ jobs:
set +e
VERSION=${{ needs.info.outputs.project_version }}
sed -i -e "s/\"version\": \"[0-9.]*\"/\"version\": \"${VERSION}\"/g" pakku.json
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt
# - name: Cache pakku
# uses: actions/cache@v4.1.2
# with:
# path: build/.cache
# key: ${{ runner.OS }}-pakku-cache-${{ hashFiles('build/.cache/') }}
# restore-keys: ${{ runner.OS }}-pakku-cache-
- name: 📝 Cache pakku
uses: actions/cache@v4.2.3
id: cache
with:
path: build/.cache
key: pakku-cache-${{ hashFiles('pakku-lock.json') }}
restore-keys: pakku-cache-
- name: 📦 Export modpack
run: |
@ -277,8 +300,6 @@ jobs:
name: 📦 Build MultiMC
needs: [info]
runs-on: ubuntu-latest
if: needs.info.outputs.exists != 'true'
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
@ -289,15 +310,17 @@ jobs:
set +e
VERSION=${{ needs.info.outputs.project_version }}
sed -i -e "s/\"version\": \"[0-9.]*\"/\"version\": \"${VERSION}\"/g" pakku.json
sed -i -e "s/DEV/${VERSION}/g" config/fancymenu/customization/gui_main_menu.txt
sed -i -e "s/DEV/${VERSION}/g" .pakku/multimc-overrides/instance.cfg
# - name: Cache pakku
# uses: actions/cache@v4.1.2
# with:
# path: build/.cache
# key: ${{ runner.OS }}-pakku-cache-${{ hashFiles('build/.cache/') }}
# restore-keys: ${{ runner.OS }}-pakku-cache-
- name: 📝 Cache pakku
uses: actions/cache@v4.2.3
id: cache
with:
path: build/.cache
key: pakku-cache-${{ hashFiles('pakku-lock.json') }}
restore-keys: pakku-cache-
- name: 📦 Export
run: |
@ -311,7 +334,7 @@ jobs:
mkdir -p .pakku/multimc-overrides/flame
mv -vf ./build/.cache/curseforge/manifest.json .pakku/multimc-overrides/flame/manifest.json
mv -vf ./build/.cache/curseforge/overrides .pakku/multimc-overrides/.minecraft
mv -vf ./mods .pakku/multimc-overrides/.minecraft/mods
mv -vf ./mods/* .pakku/multimc-overrides/.minecraft/mods/
cd .pakku/multimc-overrides/
zip -r ${{ needs.info.outputs.project_full_name }}-multimc.zip icon.png mmc-pack.json instance.cfg .minecraft/ flame/
@ -327,6 +350,7 @@ jobs:
name: 🚀 Release to GitHub
needs: [info, build-modpack, build-server, build-multimc]
runs-on: ubuntu-latest
if: ${{ needs.info.outputs.make_release == 'true' }}
outputs:
url: ${{ steps.release.outputs.url }}
@ -339,6 +363,24 @@ jobs:
with:
merge-multiple: true
- name: 🔍 Check if artifact exist
id: check_artifact
shell: bash
run: |
if [ ! -f ${{ needs.info.outputs.project_full_name }}-curseforge.zip ]; then
echo '::error::No value found for artifact `curseforge.zip`.' && exit 1
fi
if [ ! -f ${{ needs.info.outputs.project_full_name }}-modrinth.mrpack ]; then
echo '::error::No value found for artifact `modrinth.mrpack`.' && exit 1
fi
if [ ! -f ${{ needs.info.outputs.project_full_name }}-serverpack.zip ]; then
echo '::error::No value found for artifact `serverpack.zip`.' && exit 1
fi
if [ ! -f ${{ needs.info.outputs.project_full_name }}-multimc.zip ]; then
echo '::error::No value found for artifact `multimc.zip`.' && exit 1
fi
echo "✔️ All artifacts found"
- name: 🚫 Сlose fixed in dev
uses: Xikaro/close-issues-based-on-label@master
env:
@ -346,7 +388,7 @@ jobs:
COMMENT: In ${{ needs.info.outputs.project_version }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Format diff
- name: 📄 Format diff
id: format_diff
if: ${{ needs.info.outputs.diff != '' }}
uses: roamingowl/template-output-with-eta@v1.12.0
@ -362,6 +404,7 @@ jobs:
with:
name: ${{ needs.info.outputs.project_version }}
tag_name: ${{ needs.info.outputs.project_version }}
target_commitish: ${{ github.ref_name }}
body: |
${{ needs.info.outputs.changelog }}
${{ steps.format_diff.outputs.text }}
@ -369,7 +412,7 @@ jobs:
${{ needs.info.outputs.project_full_name }}-curseforge.zip
${{ needs.info.outputs.project_full_name }}-serverpack.zip
${{ needs.info.outputs.project_full_name }}-multimc.zip
prerelease: ${{ needs.info.outputs.release_type != 'release' }}
prerelease: ${{ env.RELEASE_TYPE != 'release' }}
generate_release_notes: true
token: ${{ secrets.GITHUB_TOKEN }}
@ -377,6 +420,7 @@ jobs:
name: 🚀 Release to CurseForge
needs: [info, build-modpack, build-server, release-github]
runs-on: ubuntu-latest
if: ${{ needs.info.outputs.make_release == 'true' }}
outputs:
id: ${{ steps.release.outputs.id }}
@ -388,15 +432,22 @@ jobs:
echo '::error::No value found for secret key `CURSEFORGE_TOKEN`. See https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository' && exit 1
fi
- name: 📦 Download artifact curseforge
- name: 📦 Download artifact
uses: actions/download-artifact@v4.2.1
with:
name: ${{ needs.info.outputs.project_full_name }}-curseforge
merge-multiple: true
- name: 📦 Download artifact server
uses: actions/download-artifact@v4.2.1
with:
name: ${{ needs.info.outputs.project_full_name }}-serverpack
- name: 🔍 Check if artifact exist
id: check_artifact
shell: bash
run: |
if [ ! -f ${{ needs.info.outputs.project_full_name }}-curseforge.zip ]; then
echo '::error::No value found for artifact `curseforge.zip`.' && exit 1
fi
if [ ! -f ${{ needs.info.outputs.project_full_name }}-serverpack.zip ]; then
echo '::error::No value found for artifact `serverpack.zip`.' && exit 1
fi
echo "✔️ All artifacts found"
- name: 🚀 Upload Curseforge
id: release
@ -412,47 +463,56 @@ jobs:
${{ needs.info.outputs.changelog }}
${{ needs.info.outputs.diff }}
changelog-format: markdown
game-version: ${{ needs.info.outputs.minecraft_version }}
release-type: ${{ needs.info.outputs.release_type }}
game-version: ${{ env.MINECRAFT_VERSION }}
release-type: ${{ env.RELEASE_TYPE }}
# release-modrinth:
# name: 🚀 Release to Modrinth
# needs: [info, build-modpack, build-server, release-github]
# runs-on: ubuntu-latest
release-modrinth:
name: 🚀 Release to Modrinth
needs: [info, build-modpack, build-server, release-github]
runs-on: ubuntu-latest
if: false
outputs:
id: ${{ steps.release.outputs.id }}
# steps:
# - name: 🔒 Check if MODRINTH_API_TOKEN exist
# shell: bash
# run: |
# if [ "${{ secrets.MODRINTH_TOKEN }}" == '' ]; then
# echo '::error::No value found for secret key `MODRINTH_TOKEN`. See https://docs.github.com/en/ actionssecurity-guides/ encrypted-secrets#creating-encrypted-secrets-for-a-repository' && exit 1
# fi
steps:
- name: 🔒 Check if MODRINTH_API_TOKEN exist
shell: bash
run: |
if [ "${{ secrets.MODRINTH_TOKEN }}" == '' ]; then
echo '::error::No value found for secret key `MODRINTH_TOKEN`. See https://docs.github.com/en/ actionssecurity-guides/ encrypted-secrets#creating-encrypted-secrets-for-a-repository' && exit 1
fi
# - name: 📦 Download artifact modrinth
# uses: actions/download-artifact@v4.2.1
# with:
# name: ${{ needs.info.outputs.project_full_name }}-modrinth
# - name: 📦 Download artifact server
# uses: actions/download-artifact@v4.2.1
# with:
# name: ${{ needs.info.outputs.project_full_name }}-serverpack
# - name: 🚀 Upload Modrinth
# id: release
# uses: Xikaro/upload-curseforge-modpack-action@1.1.1
# with:
# api-token: ${{ secrets.MODRINTH_TOKEN }}
# project-id: ${{ vars.MODRINTH_ID }}
# modpack-path: ${{ needs.info.outputs.project_full_name }}-modrinth.mrpack
# modpack-server-path: ${{ needs.info.outputs.project_full_name }}-serverpack.zip
# changelog: ${{ needs.info.outputs.changelog }}
# changelog-format: markdown
# game-version: ${{ needs.info.outputs.minecraft_version }}
# display-name: ${{ needs.info.outputs.project_full_name }}
# server-display-name: ${{ needs.info.outputs.project_full_name }}-serverpack
# release-type: ${{ needs.info.outputs.release_type }}
- name: 📦 Download artifact
uses: actions/download-artifact@v4.2.1
with:
merge-multiple: true
- name: 🔍 Check if artifact exist
id: check_artifact
shell: bash
run: |
if [ ! -f ${{ needs.info.outputs.project_full_name }}-modrinth.mrpack ]; then
echo '::error::No value found for artifact `modrinth.mrpack`.' && exit 1
fi
if [ ! -f ${{ needs.info.outputs.project_full_name }}-serverpack.zip ]; then
echo '::error::No value found for artifact `serverpack.zip`.' && exit 1
fi
echo "✔️ All artifacts found"
- name: 🚀 Upload Modrinth
id: release
uses: Xikaro/upload-curseforge-modpack-action@1.1.1
with:
api-token: ${{ secrets.MODRINTH_TOKEN }}
project-id: ${{ vars.MODRINTH_ID }}
modpack-path: ${{ needs.info.outputs.project_full_name }}-modrinth.mrpack
modpack-server-path: ${{ needs.info.outputs.project_full_name }}-serverpack.zip
changelog: ${{ needs.info.outputs.changelog }}
changelog-format: markdown
game-version: ${{ env.MINECRAFT_VERSION }}
display-name: ${{ needs.info.outputs.project_full_name }}
server-display-name: ${{ needs.info.outputs.project_full_name }}-serverpack
release-type: ${{ env.RELEASE_TYPE }}
discord-message:
name: 📱 Discord Message
@ -475,8 +535,8 @@ jobs:
content_links_no_embed: .+
content: |
**Release**: `${{ needs.info.outputs.project_version }}`
**Release Type**: `${{ needs.info.outputs.release_type }}`
**Game Version**: `${{ needs.info.outputs.minecraft_version }}`
**Release Type**: `${{ env.RELEASE_TYPE }}`
**Game Version**: `${{ env.MINECRAFT_VERSION }}`
[CurseForge](https://www.curseforge.com/minecraft/modpacks/terrafirmagreg-modern/files/${{ needs.release-curseforge.outputs.id }}) • [GitHub](${{ needs.release-github.outputs.url }}) • [Issues](https://github.com/${{ github.repository }}/issues)
```markdown

View file

@ -1,20 +1,36 @@
# Changelog
## [Unreleased]
### Changes
## [0.9.1] - 18.04.2025
### Changes
- Manifest fix.
## [0.9.0] - 18.04.2025
### Warning for upgrading your world
- This is a major update that changes many things!
- It is safest to create a new instance and copy your world across, instead of trying to update your world in-place.
- Check that everything works before permanently changing over to the new version!
- GregTech has removed its kinetic machines, so they will disappear when upgrading. Please recycle your machines first!
- Several ores and ingots have changed. After upgrading, they will have a "REPLACE ME" texture. Put them in a crafting grid to change to the new version.
- Create mechanisms will stop working and will need to be replaced with "Greate" equivalents. This means that if you have any boilers running off of create THEY MAY EXPLODE!
- Tree tap has been replaced you will need to craft your old taps into the new ones.
- Gregicality Rocketry has been removed and will be replaced with Ad Astra soon. Please recycle whatever you can and make sure you are in the overworld.
### Changes
- Latest version of GregTech! Comes with new textures and a few new features, many bug fixes and much more stability.
- Early game overhaul! You start getting into some automation much earlier and gradually unlock more as you progress, instead of having it all dumped on you after steel.
- New dimension! The Beneath, basically a TFG-ified version of the nether. Stand on overworld bedrock for a bit to start exploring!
- Quest rewrite! The first few quest chapters have been totally remade from the ground up to be more readable, have fewer breaking dependencies, and reflect actual progression. Most of the optional but useful content has been put into its own dedicated section.
- The minimum amount of lava source blocks to be considered infinite has been increased from 1 to 2000. There's many lava lakes underground, and trains are more accessible.
- Many other bug fixes, too many to list!
- Create has changed completely with the addition of "Greate", "VintageImprovements", and "Horse Power".
- New structures have been added to the overworld. Some with loot!
- More cave supports have been added. Including stone, concrete, and steel supports. Higher tier supports can hold a larger area of blocks.
- Medicine had been added and can apply some helpful potion effects or be applied to arrows.
- Wax alternatives have been added, including paraffin wax and tree rosin.
- Planes! Snake-free.
- Many mods have been updated and include new features. Check out the mods list!
- Many other bug fixes, QoL features, mod integration, and recipes tweaks. too many to list!
## [0.7.19] - 25.01.2025
### Changes

View file

@ -1368,7 +1368,6 @@
"ftbfiltersystem:filter": "or(item(gtceu:lv_1a_energy_converter)item(gtceu:lv_4a_energy_converter)item(gtceu:lv_8a_energy_converter)item(gtceu:lv_16a_energy_converter))"
}
}
title: ""
type: "item"
}
]

View file

@ -89,12 +89,10 @@
subtitle: "{quests.stone_age.find_potable_water.subtitle}"
tasks: [{
icon: "minecraft:water_bucket"
id: "73E3594A5481E63F"
observe_type: 0
timer: 0L
title: "{quests.tasktype.lookat} {quests.stone_age.find_potable_water.task}"
to_observe: "minecraft:water"
type: "observation"
id: "3601D2311BB1383F"
stage: "tfg.stages.quests.drank_fresh_water_with_hand"
title: "{quests.stone_age.find_potable_water.task}"
type: "gamestage"
}]
title: "{quests.stone_age.find_potable_water.title}"
x: 4.5d
@ -1356,17 +1354,9 @@
type: "item"
}
{
count: 16L
id: "3C41311574D24CBC"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "ftbfiltersystem:item_tag(minecraft:planks)"
}
}
optional_task: true
title: "{quests.tasktype.item.any} #minecraft:planks"
count: 32L
id: "58388551672A8588"
item: { Count: 32, id: "minecraft:ladder" }
type: "item"
}
]
@ -1600,6 +1590,7 @@
{
id: "625810E1A0D28993"
item: "gtceu:wood_crate"
optional_task: true
type: "item"
}
{
@ -1611,6 +1602,7 @@
"ftbfiltersystem:filter": "ftbfiltersystem:item_tag(tfcastikorcarts:supply_cart)"
}
}
optional_task: true
title: "{quests.tasktype.item.any} #tfcastikorcarts:supply_cart"
type: "item"
}
@ -2069,6 +2061,16 @@
{
dependencies: ["5E186CD5E83BFDF0"]
description: ["{quests.stone_age.crush_ore.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:crushed_copper_ore"
}
id: "2621BF784BEB7033"
subtitle: "{quests.stone_age.crush_ore.subtitle}"
tasks: [{
@ -2090,20 +2092,45 @@
{
dependencies: ["2621BF784BEB7033"]
description: ["{quests.stone_age.crush_crushed_ore.desc}"]
id: "050444CE0EA04FDF"
subtitle: "{quests.stone_age.crush_crushed_ore.subtitle}"
tasks: [{
id: "3138448022A39769"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "ftbfiltersystem:item_tag(forge:impure_dusts)"
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
title: "Any #forge:impure_dusts"
type: "item"
}]
id: "gtceu:impure_copper_dust"
}
id: "050444CE0EA04FDF"
subtitle: "{quests.stone_age.crush_crushed_ore.subtitle}"
tasks: [
{
id: "3138448022A39769"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "ftbfiltersystem:item_tag(forge:impure_dusts)"
}
}
title: "Any #forge:impure_dusts"
type: "item"
}
{
disable_toast: true
id: "6D4743145560A61F"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "ftbfiltersystem:item_tag(forge:tools/hammers)"
}
}
title: "Any #forge:tools/hammers"
type: "item"
}
]
title: "{quests.stone_age.crush_crushed_ore.title}"
x: 17.0d
y: 11.0d
@ -2111,6 +2138,16 @@
{
dependencies: ["050444CE0EA04FDF"]
description: ["{quests.stone_age.clean_dust.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:copper_dust"
}
id: "3462FD6E24F9BE0B"
subtitle: "{quests.stone_age.clean_dust.subtitle}"
tasks: [{

View file

@ -87,7 +87,7 @@ recipes:
# Whether tools should have enchants or not. Like the flint sword getting fire aspect.
# Default: true
enchantedTools: true
enchantedTools: false
worldgen:
# Rubber Tree spawn chance (decimal % per chunk)

View file

@ -1,6 +1,4 @@
[general]
#If true, the tumbler and the pumping station work magically with a redstone signal and no power required.
mechanicalPowerCheatMode = true
#If true, sprinkler will not accept firmalife pipes and will instead require something that exposes a fluid capability, eg. a barrel.
usePipesForSprinklers = false

View file

@ -394,7 +394,7 @@
#
# Days for a kapok tree sapling to be ready to grow into a full tree.
#Range: > 0
kapokSaplingGrowthDays = 7
kapokSaplingGrowthDays = 9
#
# Days for a mangrove tree sapling to be ready to grow into a full tree.
#Range: > 0

View file

@ -5,6 +5,8 @@
"block.gtceu.ender_dome": "Enderarium",
"block.gtceu.greenhouse": "Greenhouse",
"block.gtceu.steam_bloomery": "Steam Bloomery",
"block.gtceu.copper_crate": "Copper Crate",
"block.gtceu.copper_drum": "Copper Drum",
"block.gtceu.black_bronze_crate": "Black Bronze Crate",
"block.gtceu.black_bronze_drum": "Black Bronze Drum",
"block.gtceu.bismuth_bronze_crate": "Bismuth Bronze Crate",

View file

@ -204,6 +204,7 @@
"tfg.disabled_portal": "Portal magic seems to be blocked by an unknown force, try reaching another dimension by going down or up",
"item.treetap.tap": "Deprecated Item, Craft to Upgrade",
"tfc.jei.flint_knapping": "Flint Knapping",
"tfc.recipe.barrel.tfg.barrel.soak_hardwood_strip": "Soaking Hardwood Strips",
"item.gtceu.zinc_ingot": "Deprecated Item, Craft to Upgrade",
"item.gtceu.brass_ingot": "Deprecated Item, Craft to Upgrade",
"item.gtceu.vanadium_ingot": "Deprecated Item, Craft to Upgrade",
@ -1076,8 +1077,8 @@
"quests.stone_age.garlic_bread.task": "1024 slices of Garlic Bread",
"quests.stone_age.find_potable_water.title": "Thirsty?",
"quests.stone_age.find_potable_water.subtitle": "Remember to drink water!",
"quests.stone_age.find_potable_water.desc": "Thirst is represented by the blue bar above your hunger. You can and will die of dehydration if you dont keep your thirst meter filled! The easiest way to have a drink is by drinking from natural ponds in the wild, by right-clicking on them with an empty hand.\n\nYou don't have to worry about purifying water here, though Salt Water will just make you more thirsty.",
"quests.stone_age.find_potable_water.task": "A source of fresh Water",
"quests.stone_age.find_potable_water.desc": "Thirst is represented by the blue bar above your hunger. You can and will die of dehydration if you dont keep your thirst meter filled! The easiest way to have a drink is by drinking from natural ponds in the wild, by right-clicking on them with an empty hand.\nTo complete this quest, you need to drink a Potable source of water, can be regular or river water. You may need to drink multiple times so the quest completes properly\n\nYou don't have to worry about purifying water here, though Salt Water will just make you more thirsty.",
"quests.stone_age.find_potable_water.task": "Drink from a Water Source with your Hand. (Not Salty or Hot)",
"quests.stone_age.hydration.title": "Mechanic: Hydration",
"quests.stone_age.hydration.subtitle": "Yet another bar to keep full...",
"quests.stone_age.hydration.desc": "Water is an important resource, not just for staying hydrated! Setting up a base near a fresh lake or river is recommended, so you have easy access to the stuff. Other items can quench your thirst, such as certain types of food or drinks.\n\nWater won't always be available when you go exploring, however, so here are some ways to carry drinks around with you. Drinking consumes 100mB from the container.",
@ -1228,8 +1229,8 @@
"quests.stone_age.crush_ore.subtitle": "Getting more from your ores",
"quests.stone_age.crush_ore.desc": "The Quern is only the first step into processing your ores! Proper ore processing is a large, complex beast that you'll learn more about as you progress, and can be used to extract much more usable metal and other byproducts per each ore you mine. To start with though, we'll turn those raw ores you mined into Crushed Ore by putting it through the Quern. Just this first step is enough to increase the amount of mB your ore will melt into.",
"quests.stone_age.crush_crushed_ore.title": "Early Ore Processing - Part 2",
"quests.stone_age.crush_crushed_ore.subtitle": "Quern it, again",
"quests.stone_age.crush_crushed_ore.desc": "Crushing a Crushed Ore again yields Impure Dust, further increasing it's mB yield.\n\nThis may be slow and tedious for now, but you'll soon unlock ways to do this faster and automatically!",
"quests.stone_age.crush_crushed_ore.subtitle": "Smash it with a hammer",
"quests.stone_age.crush_crushed_ore.desc": "Combine the Crushed Ore with a hammer in a crafting grid to turn it into Impure Dust, further increasing it's mB yield.\n\nThis may all be slow and tedious for now, but you'll soon unlock ways to do this faster and automatically!",
"quests.stone_age.clean_dust.title": "Early Ore Processing - Part 3",
"quests.stone_age.clean_dust.subtitle": "Wash that dirty dust",
"quests.stone_age.clean_dust.desc": "Finally, dropping Impure Dusts in some water and leaving them for a few seconds will wash them, yielding dust, which is your ore's final form. It might even be worth as much as a full ingot now!",

View file

@ -44,10 +44,10 @@ const registerCreateAdditionsRecipes = (event) => {
// Батарейный блок
event.recipes.gtceu.assembler('create_additions/battery')
.itemInputs('gtceu:bronze_frame', '6x #forge:plates/bronze', '24x #forge:screws/bronze', '#gtceu:batteries/hv')
.itemInputs('gtceu:bronze_frame', '4x #forge:plates/brass', '8x #forge:screws/bronze', '#gtceu:batteries/hv')
.itemOutputs('createaddition:modular_accumulator')
.duration(400)
.EUt(512)
.EUt(30)
// Колючая проволка
event.shapeless('4x createaddition:barbed_wire', [

View file

@ -1,19 +1,39 @@
// priority: 0
function registerDiggerHelmetRecipes(event) {
event.remove({ mod: 'diggerhelmet' })
event.shapeless('diggerhelmet:eternal_candle', ['#minecraft:candles', 'minecraft:glowstone_dust'])
.id('tfg:shapeless/eternal_candle')
event.shaped('diggerhelmet:digger_helmet', [
' E ',
'BA ',
' A ',
'EB ',
'DCD'
], {
A: '#minecraft:candles',
A: 'diggerhelmet:eternal_candle',
B: '#forge:rings',
C: 'minecraft:leather_helmet',
D: '#forge:rods/tin',
E: 'minecraft:glowstone_dust'
E: '#forge:tools/hammers'
})
.id('tfg:shaped/digger_helmet')
event.recipes.gtceu.assembler('tfg:mining_speed_modifier')
.itemInputs('#forge:plates/blue_steel', '#gtceu:circuits/lv', '2x tfg:haste_pill')
.inputFluids(Fluid.of('tfcagedalcohol:aged_whiskey', 1000))
.itemOutputs('diggerhelmet:mining_speed_modifier')
.EUt(16)
.duration(400)
event.shaped('diggerhelmet:auto_drink_modifier', [
' A ',
'BCB',
'DCD'
], {
A: 'waterflasks:leather_flask',
B: '#forge:string',
C: 'minecraft:bamboo',
D: 'tfc:glue'
}).id('tfg:shaped/auto_drink_modifier')
}

View file

@ -3,7 +3,7 @@
function registerDiggerHelmetItemTags(event) {
const DISABLED_ITEMS = [
'diggerhelmet:eternal_candle'
'diggerhelmet:wool_lining'
]
DISABLED_ITEMS.forEach(item => {

View file

@ -2,36 +2,13 @@
const registerFirmaLifeRecipes = (event) => {
//#region Удаление других рецептов
event.remove({ id: 'firmalife:crafting/compost_tumbler' })
event.remove({ id: 'firmalife:crafting/pumping_station' })
event.remove({ id: 'firmalife:crafting/pumping_station2' })
event.remove({ id: 'firmalife:crafting/pumping_station3' })
global.FIRMALIFE_DISABLED_ITEMS.forEach(item => {
event.remove({ input: item })
event.remove({ output: item })
})
// - Chromium
// Ingot
event.remove({ id: 'firmalife:casting/chromium_ingot' })
event.remove({ id: 'firmalife:casting/chromium_ingot_fire' })
event.remove({ id: 'firmalife:heating/metal/chromium_ingot' })
// Double Ingot
event.remove({ id: 'firmalife:welding/chromium_double_ingot' })
event.remove({ id: 'firmalife:heating/metal/chromium_double_ingot' })
// Sheet
event.remove({ id: 'firmalife:anvil/chromium_sheet' })
event.remove({ id: 'firmalife:heating/metal/chromium_sheet' })
// Double Sheet
event.remove({ id: 'firmalife:welding/chromium_double_sheet' })
event.remove({ id: 'firmalife:heating/metal/chromium_double_sheet' })
// Rod
event.remove({ id: 'firmalife:anvil/chromium_rod' })
event.remove({ id: 'firmalife:heating/metal/chromium_rod' })
// Ores
event.remove({ id: 'firmalife:heating/ore/small_chromite' })
event.remove({ id: 'firmalife:heating/ore/poor_chromite' })
@ -49,27 +26,6 @@ const registerFirmaLifeRecipes = (event) => {
// - Stainless Steel
event.remove({ id: 'firmalife:alloy/stainless_steel' })
// Ingot
event.remove({ id: 'firmalife:casting/stainless_steel_ingot' })
event.remove({ id: 'firmalife:casting/stainless_steel_ingot_fire' })
event.remove({ id: 'firmalife:heating/metal/stainless_steel_ingot' })
// Double Ingot
event.remove({ id: 'firmalife:welding/stainless_steel_double_ingot' })
event.remove({ id: 'firmalife:heating/metal/stainless_steel_double_ingot' })
// Sheet
event.remove({ id: 'firmalife:anvil/stainless_steel_sheet' })
event.remove({ id: 'firmalife:heating/metal/stainless_steel_sheet' })
// Double Sheet
event.remove({ id: 'firmalife:welding/stainless_steel_double_sheet' })
event.remove({ id: 'firmalife:heating/metal/stainless_steel_double_sheet' })
// Rod
event.remove({ id: 'firmalife:anvil/stainless_steel_rod' })
event.remove({ id: 'firmalife:heating/stainless_steel_rod' })
// Jar lid
event.remove({ id: 'firmalife:heating/stainless_steel_jar_lid' })
@ -176,48 +132,6 @@ const registerFirmaLifeRecipes = (event) => {
//#region Медная
event.shaped('firmalife:pumping_station',
[
' B ',
'ACA',
' D '
], {
A: 'firmalife:copper_pipe',
B: '#forge:plates/bronze',
C: '#tfc:barrels',
D: 'create:mechanical_pump'
}).id('tfg:shaped/pumping_station')
event.shaped('firmalife:pumping_station',
[
' B ',
'ACA',
' D '
], {
A: 'firmalife:copper_pipe',
B: '#forge:plates/black_bronze',
C: '#tfc:barrels',
D: 'create:mechanical_pump'
}).id('tfg:shaped/pumping_station2')
event.shaped('firmalife:pumping_station',
[
' B ',
'ACA',
' D '
], {
A: 'firmalife:copper_pipe',
B: '#forge:plates/bismuth_bronze',
C: '#tfc:barrels',
D: 'create:mechanical_pump'
}).id('tfg:shaped/pumping_station3')
event.recipes.gtceu.bender('tfg:firmalife/copper_pipe')
.itemInputs('#forge:plates/copper')
.itemOutputs('8x firmalife:copper_pipe')
.circuit(3)
.duration(40)
.EUt(8)
event.recipes.gtceu.bender('tfg:firmalife/sprinkler')
.itemInputs('#forge:plates/copper')
@ -294,17 +208,6 @@ const registerFirmaLifeRecipes = (event) => {
B: 'minecraft:glass'
}).id('firmalife:crafting/greenhouse/copper_greenhouse_door')
// Порт
event.shaped('firmalife:copper_greenhouse_port', [
'AA',
'BC',
'AA'
], {
A: 'firmalife:reinforced_glass',
B: '#forge:rods/copper',
C: 'firmalife:copper_pipe'
}).id('firmalife:crafting/greenhouse/copper_greenhouse_port')
//#endregion
//#region Железная
@ -377,17 +280,6 @@ const registerFirmaLifeRecipes = (event) => {
B: 'minecraft:glass'
}).id('firmalife:crafting/greenhouse/iron_greenhouse_door')
// Порт
event.shaped('firmalife:iron_greenhouse_port', [
'AA',
'BC',
'AA'
], {
A: 'firmalife:reinforced_glass',
B: '#forge:rods/wrought_iron',
C: 'firmalife:copper_pipe'
}).id('firmalife:crafting/greenhouse/iron_greenhouse_port')
//#endregion
//#region Нержавеющая теплица

View file

@ -0,0 +1,41 @@
// Handles the quest for drinking water. The drinking water quest checks if the player has this stage.
ItemEvents.firstRightClicked(evt =>
{
const FORGE_CAPS = "ForgeCaps";
const TFC_PLAYERDATA = "tfc:player_data";
const FOOD = "food";
const THIRST = "thirst";
const PREVIOUS_THIRST = "previous_thirst";
const STAGE = "tfg.stages.quests.drank_fresh_water_with_hand";
const {player, level} = evt;
if(evt.target.block == null)
return;
//We reach for the "food" compound tag, that contains the tfc thirst.
let forgecaps = player.nbt.getCompound(FORGE_CAPS);
let tfc_playerdata = forgecaps.getCompound(TFC_PLAYERDATA);
let food = tfc_playerdata.getCompound(FOOD);
let thirstValue = food.getFloat(THIRST);
//Do we already keep track of the previous thirst value? if not, put it and then return.
let customData = getTFGPersistentDataRoot(player);
let containsPreviousThirst = customData.contains(PREVIOUS_THIRST);
if(!containsPreviousThirst)
{
customData.putFloat(PREVIOUS_THIRST, thirstValue);
return;
}
let previousThirstValue = customData.getFloat(PREVIOUS_THIRST);
//As long as our new thirst is greater than our previous, it means we hydrated ourselves. OFC we need to make sure the block clicked was potable.
let blockID = evt.target.block.id;
let isFreshWater = blockID == "minecraft:water" || blockID == "tfc:fluid/river_water";
if(isFreshWater && thirstValue > previousThirstValue && !player.stages.has(STAGE))
{
player.stages.add(STAGE);
}
//Put it back in.
customData.putFloat(PREVIOUS_THIRST, thirstValue);
})

View file

@ -218,6 +218,20 @@ const registerGTCEURecipes = (event) => {
.duration(128)
.EUt(3)
event.recipes.gtceu.brewery('biomass_from_leaves')
.itemInputs('#minecraft:leaves')
.inputFluids(Fluid.of('minecraft:water', 20))
.outputFluids(Fluid.of('gtceu:biomass', 20))
.duration(128)
.EUt(3)
event.recipes.gtceu.brewery('biomass_from_fallen_leaves')
.itemInputs('#tfc:fallen_leaves')
.inputFluids(Fluid.of('minecraft:water', 20))
.outputFluids(Fluid.of('gtceu:biomass', 20))
.duration(128)
.EUt(3)
//#endregion
//#region Выход: Рыбье масло

View file

@ -291,7 +291,7 @@ function registerGTCEUMetalRecipes(event) {
const processNormalRawOre = (tagPrefix, material) => {
const normalOreItem = ChemicalHelper.get(tagPrefix, material, 1)
const crushedOreItem = ChemicalHelper.get(TagPrefix.crushed, material, 1)
const crushedOreItem = ChemicalHelper.get(TagPrefix.crushed, material, material.getProperty(PropertyKey.ORE).getOreMultiplier())
if (normalOreItem != null && crushedOreItem != null) {
event.recipes.tfc.quern(crushedOreItem, normalOreItem)
@ -301,7 +301,7 @@ function registerGTCEUMetalRecipes(event) {
const processRichRawOre = (tagPrefix, material) => {
const richOreItem = ChemicalHelper.get(tagPrefix, material, 1)
const crushedOreItem = ChemicalHelper.get(TagPrefix.crushed, material, 2)
const crushedOreItem = ChemicalHelper.get(TagPrefix.crushed, material, material.getProperty(PropertyKey.ORE).getOreMultiplier() * 2)
if (richOreItem != null && crushedOreItem != null) {
event.recipes.tfc.quern(crushedOreItem, richOreItem)

View file

@ -474,7 +474,7 @@ function registerImmersiveAircraftRecipes(event) {
A: '#forge:tools/hammers',
B: 'gtceu:black_steel_plate',
C: 'immersive_aircraft:hull',
D: '#forge:tools/wrench'
D: '#forge:tools/wrenches'
}).id('tfg:immersive_aircraft/shaped/hull_reinforcement');
generateRecyclingRecipe('immersive_aircraft:recycling/hull_reinforcement',
@ -495,7 +495,7 @@ function registerImmersiveAircraftRecipes(event) {
A: '#forge:tools/hammers',
B: 'gtceu:red_steel_plate',
C: 'immersive_aircraft:hull',
D: '#forge:tools/wrench',
D: '#forge:tools/wrenches',
E: 'gtceu:blue_steel_plate',
F: 'gtceu:red_alloy_dust'
}).id('tfg:shaped/redblu_steel_hull_reinforcement');
@ -522,7 +522,7 @@ function registerImmersiveAircraftRecipes(event) {
A: '#forge:tools/hammers',
B: 'vintageimprovements:aluminum_sheet',
C: 'immersive_aircraft:hull',
D: '#forge:tools/wrench'
D: '#forge:tools/wrenches'
}).id('tfg:shaped/aluminium_hull_reinforcement');
generateRecyclingRecipe('tfg:recycling/aluminium_hull_reinforcement',
@ -543,7 +543,7 @@ function registerImmersiveAircraftRecipes(event) {
A: '#forge:tools/hammers',
B: 'gtceu:stainless_steel_plate',
C: 'immersive_aircraft:hull',
D: '#forge:tools/wrench'
D: '#forge:tools/wrenches'
}).id('tfg:shaped/stainless_steel_hull_reinforcement');
generateRecyclingRecipe('tfg:recycling/stainless_steel_hull_reinforcement',
@ -564,7 +564,7 @@ function registerImmersiveAircraftRecipes(event) {
A: '#forge:tools/hammers',
B: 'gtceu:titanium_plate',
C: 'immersive_aircraft:hull',
D: '#forge:tools/wrench'
D: '#forge:tools/wrenches'
}).id('tfg:shaped/titanium_hull_reinforcement');
generateRecyclingRecipe('tfg:recycling/titanium_hull_reinforcement',

View file

@ -817,12 +817,11 @@ const registerMinecraftRecipes = (event) => {
//#region Glowstone
event.recipes.gtceu.mixer('gtceu:lv_glowstone')
.inputFluids(Fluid.of('gtceu:creosote', 1000))
.itemInputs('gtceu:gold_dust', 'minecraft:redstone', 'gtceu:sulfur_dust', 'gtceu:coal_dust')
.itemOutputs('minecraft:glowstone_dust')
.itemInputs('gtceu:gold_dust', 'minecraft:redstone', 'gtceu:sulfur_dust')
.itemOutputs('2x minecraft:glowstone_dust')
.circuit(32)
.duration(1200)
.EUt(32)
.EUt(30)
//#endregion

View file

@ -5,7 +5,7 @@ const registerRailWaysRecipes = (event) => {
// Удаление рецептов мода railways
event.remove({ mod: 'railways' });
railwaysLocometalIntegration(event)
registerRailwaysLocometalRecipes(event)
// Семафор
event.shaped('railways:semaphore', [

View file

@ -18,13 +18,13 @@ const locometalBase = {
flat_riveted_locometal: 'flat_riveted_locometal'
}
const railwaysLocometalIntegration = (event) => {
const registerRailwaysLocometalRecipes = (event) => {
for (var locometal in locometalBase) {
event.recipes.create.cutting(`8x railways:${locometal}`, '#forge:storage_blocks/iron').processingTime(200);
event.recipes.create.cutting(`16x railways:${locometal}`, '#forge:storage_blocks/wrought_iron').processingTime(200);
event.recipes.create.cutting(`24x railways:${locometal}`, '#forge:storage_blocks/steel').processingTime(200);
event.recipes.create.cutting(`railways:${locometal}`, `#railways:palettes/cycle_groups/base`).processingTime(20);
event.recipes.gtceu.chemical_bath(`gpedia:undying/locometal/${locometal}`)
event.recipes.gtceu.chemical_bath(`tfg:undying/locometal/${locometal}`)
.itemInputs(Item.of(locometalDyeGroups[`${locometal}`], 1))
.inputFluids(Fluid.of(`gtceu:chlorine`, 18))
.itemOutputs(Item.of(`railways:${locometal}`))
@ -37,21 +37,21 @@ const railwaysLocometalIntegration = (event) => {
event.recipes.create.item_application(`railways:copper_wrapped_locometal`, [`#railways:palettes/cycle_groups/base`, '#forge:plates/copper']);
event.recipes.create.item_application(`railways:brass_wrapped_locometal`, [`#railways:palettes/cycle_groups/base`, '#forge:plates/brass'])
event.recipes.gtceu.chemical_bath(`gpedia:undying/brass_wrapped_locometal`)
event.recipes.gtceu.chemical_bath(`tfg:undying/brass_wrapped_locometal`)
.itemInputs('#railways:palettes/dye_groups/brass_wrapped_slashed')
.inputFluids(Fluid.of(`gtceu:chlorine`, 18))
.itemOutputs(`railways:brass_wrapped_locometal`)
.duration(20)
.EUt(24)
.category(GTRecipeCategories.CHEM_DYES);
event.recipes.gtceu.chemical_bath(`gpedia:undying/copper_wrapped_locometal`)
event.recipes.gtceu.chemical_bath(`tfg:undying/copper_wrapped_locometal`)
.itemInputs('#railways:palettes/dye_groups/copper_wrapped_slashed')
.inputFluids(Fluid.of(`gtceu:chlorine`, 18))
.itemOutputs(`railways:copper_wrapped_locometal`)
.duration(20)
.EUt(24)
.category(GTRecipeCategories.CHEM_DYES);
event.recipes.gtceu.chemical_bath(`gpedia:undying/iron_wrapped_locometal`)
event.recipes.gtceu.chemical_bath(`tfg:undying/iron_wrapped_locometal`)
.itemInputs('#railways:palettes/dye_groups/iron_wrapped_slashed')
.inputFluids(Fluid.of(`gtceu:chlorine`, 18))
.itemOutputs(`railways:iron_wrapped_locometal`)
@ -89,7 +89,7 @@ const railwaysLocometalIntegration = (event) => {
global.MINECRAFT_DYE_NAMES.forEach(dye => {
for (var locometal in locometalBase) {
event.recipes.gtceu.chemical_bath(`gpedia:chemical_dying_locometal/${locometal}/${dye}`)
event.recipes.gtceu.chemical_bath(`tfg:chemical_dying_locometal/${locometal}/${dye}`)
.itemInputs(Item.of(locometalDyeGroups[`${locometal}`], 1))
.inputFluids(Fluid.of(`tfc:${dye}_dye`, 18))
.itemOutputs(Item.of(`railways:${dye}_${locometal}`))
@ -101,21 +101,21 @@ const railwaysLocometalIntegration = (event) => {
event.recipes.create.item_application(`railways:${dye}_copper_wrapped_locometal`, [`#railways:palettes/cycle_groups/${dye}`, '#forge:plates/copper']);
event.recipes.create.item_application(`railways:${dye}_brass_wrapped_locometal`, [`#railways:palettes/cycle_groups/${dye}`, '#forge:plates/brass']);
event.recipes.gtceu.chemical_bath(`gpedia:brass_locometal_bathing/${dye}`)
event.recipes.gtceu.chemical_bath(`tfg:brass_locometal_bathing/${dye}`)
.itemInputs('#railways:palettes/dye_groups/brass_wrapped_slashed')
.inputFluids(Fluid.of(`tfc:${dye}_dye`, 18))
.itemOutputs(`railways:${dye}_brass_wrapped_locometal`)
.duration(20)
.EUt(24)
.category(GTRecipeCategories.CHEM_DYES);
event.recipes.gtceu.chemical_bath(`gpedia:copper_locometal_bathing/${dye}`)
event.recipes.gtceu.chemical_bath(`tfg:copper_locometal_bathing/${dye}`)
.itemInputs('#railways:palettes/dye_groups/copper_wrapped_slashed')
.inputFluids(Fluid.of(`tfc:${dye}_dye`, 18))
.itemOutputs(`railways:${dye}_copper_wrapped_locometal`)
.duration(20)
.EUt(24)
.category(GTRecipeCategories.CHEM_DYES);
event.recipes.gtceu.chemical_bath(`gpedia:locometal_bathing/${dye}`)
event.recipes.gtceu.chemical_bath(`tfg:locometal_bathing/${dye}`)
.itemInputs('#railways:palettes/dye_groups/iron_wrapped_slashed')
.inputFluids(Fluid.of(`tfc:${dye}_dye`, 18))
.itemOutputs(`railways:${dye}_iron_wrapped_locometal`)

View file

@ -165,6 +165,17 @@ const registerSophisticatedBackpacksRecipes = (event) => {
D: '#forge:plates/steel'
}).id('tfg:sophisticated_backpacks/shaped/upgrade_base')
event.shaped('sophisticatedbackpacks:upgrade_base', [
'ABA',
'BCB',
'ADA'
], {
A: '#forge:string',
B: '#forge:rods/long/wrought_iron',
C: '#forge:plates/rubber',
D: '#forge:plates/steel'
}).id('tfg:sophisticated_backpacks/shaped/upgrade_base_rubber')
// Улучшение - подбиратель
event.shaped('sophisticatedbackpacks:pickup_upgrade', [
'ABA',

View file

@ -85,20 +85,31 @@ function registerTFCDirtRecipes(event) {
// Кирпич -> Блок кирпичей
event.shaped(`tfc:mud_bricks/${mud}`, [
'ABA',
'BAB',
'ABA'
'AA',
'AA'
], {
A: `tfc:mud_brick/${mud}`,
B: '#tfc:mortar'
A: `tfc:mud_brick/${mud}`
}).id(`tfc:crafting/soil/${mud}_mud_bricks`)
event.recipes.gtceu.assembler(`mud_bricks_${mud}`)
.itemInputs(`5x tfc:mud_brick/${mud}`)
.inputFluids(Fluid.of('gtceu:concrete', 72))
.itemOutputs(`4x tfc:mud_bricks/${mud}`)
.duration(50)
.EUt(2)
event.shaped(`tfc:mud_bricks/${mud}_stairs`, [
'A ',
'AA'
], {
A: `tfc:mud_brick/${mud}`
}).id(`tfc:crafting/soil/${mud}_mud_bricks_stairs`)
event.shaped(`tfc:mud_bricks/${mud}_slab`, [
'AA'
], {
A: `tfc:mud_brick/${mud}`
}).id(`tfc:crafting/soil/${mud}_mud_bricks_slab`)
event.shaped(`2x tfc:mud_bricks/${mud}_wall`, [
'AAA',
'AAA'
], {
A: `tfc:mud_brick/${mud}`
}).id(`tfc:crafting/soil/${mud}_mud_bricks_wall`)
// Блок кирпичей -> Ступени
event.remove({ id: `tfc:crafting/soil/${mud}_mud_bricks_stairs` })
@ -117,7 +128,6 @@ function registerTFCDirtRecipes(event) {
event.stonecutting(`tfc:mud_bricks/${mud}_wall`, `tfc:mud_bricks/${mud}`)
.id(`tfc:stonecutting/soil/${mud}_mud_bricks_wall`)
})
//#endregion

View file

@ -135,6 +135,9 @@ const registerTFCRecipes = (event) => {
//#endregion
event.shapeless('tfc:crucible', ['tfc:crucible']).id('tfg:empty_crucible')
event.shapeless('2x minecraft:stick', ['#minecraft:saplings', '#forge:tools/knives']).id('tfg:strip_saplings')
// Доменная печь
event.shaped('tfc:blast_furnace', [

View file

@ -586,7 +586,7 @@ function registerTFCMaterialsRecipes(event) {
event.recipes.tfc.heating(`rnr:metal/mattock_head/${material.getName()}`, tfcProperty.getMeltTemp())
.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))
.id(`tfc:heating/metal/${material.getName()}_mattock_head`)
.id(`rnr:heating/metal/${material.getName()}_mattock_head`)
//#endregion
//#region Топор

View file

@ -83,35 +83,49 @@ salvo_event.forEach(salvo_event => {
});
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:absorption_salvo`) return
item.count--
player.addItemCooldown(item, 200)
player.runCommandSilent(`effect give ${username} minecraft:absorption 480 4 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:absorption_salvo`) return
item.count--
player.addItemCooldown(item, 200)
player.runCommandSilent(`effect give ${username} minecraft:absorption 480 4 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:instant_health_salvo`) return
item.count--
player.addItemCooldown(item, 100)
player.runCommandSilent(`effect give ${username} minecraft:instant_health 1 1 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:instant_health_salvo`) return
item.count--
player.addItemCooldown(item, 100)
player.runCommandSilent(`effect give ${username} minecraft:instant_health 1 1 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
// Vase Sounds
global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
if (block.id != `tfg:decorative_vase/${color}`) {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}})
});
global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
if (block.id != 'tfg:decorative_vase') {return}{
if (block.id != `tfg:decorative_vase/${color}`) {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}});
}})
});
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
if (block.id != 'tfg:decorative_vase') {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}});
/**
*
* @param {Internal.Player} player
* @returns {Internal.CompoundTag}
*/
function getTFGPersistentDataRoot(player)
{
if(!player.persistentData.contains("tfg:custom_data"))
{
player.persistentData.put("tfg:custom_data", {});
}
return player.persistentData.getCompound("tfg:custom_data")
}

View file

@ -12,6 +12,7 @@ global.FIRMALIFE_DISABLED_ITEMS = [
'firmalife:metal/sheet/chromium',
'firmalife:metal/double_sheet/chromium',
'firmalife:metal/rod/chromium',
'firmalife:metal/bucket/chromium',
// Stainless Steel
'firmalife:metal/ingot/stainless_steel',
@ -19,9 +20,19 @@ global.FIRMALIFE_DISABLED_ITEMS = [
'firmalife:metal/sheet/stainless_steel',
'firmalife:metal/double_sheet/stainless_steel',
'firmalife:metal/rod/stainless_steel',
'firmalife:metal/bucket/stainless_steel',
// Other
'firmalife:compost_tumbler'
'firmalife:compost_tumbler',
// Greenhouse shit
'firmalife:pumping_station',
'firmalife:copper_pipe',
'firmalife:oxidized_copper_pipe',
'firmalife:irrigation_tank',
'firmalife:iron_greenhouse_port',
'firmalife:copper_greenhouse_port',
'firmalife:treated_wood_greenhouse_port'
];
global.FIRMALIFE_HIDED_ITEMS = [

View file

@ -179,6 +179,7 @@ const registerGTCEuMaterialModification = (event) => {
GTMaterials.CertusQuartz.addFlags(GENERATE_ROD);
GTMaterials.NetherQuartz.addFlags(GENERATE_ROD);
GTMaterials.Copper.addFlags(GENERATE_FRAME);
GTMaterials.BlackBronze.addFlags(GENERATE_FRAME);
GTMaterials.BismuthBronze.addFlags(GENERATE_FRAME);

View file

@ -552,7 +552,29 @@ global.TFC_DISABLED_ITEMS = [
'tfc:hand_wheel',
'tfc:blank_disc',
'tfc:sandpaper',
'tfc:brass_mechanisms'
'tfc:brass_mechanisms',
// Buckets
'tfc:bucket/metal/bismuth',
'tfc:bucket/metal/bismuth_bronze',
'tfc:bucket/metal/black_bronze',
'tfc:bucket/metal/bronze',
'tfc:bucket/metal/brass',
'tfc:bucket/metal/copper',
'tfc:bucket/metal/gold',
'tfc:bucket/metal/nickel',
'tfc:bucket/metal/rose_gold',
'tfc:bucket/metal/silver',
'tfc:bucket/metal/tin',
'tfc:bucket/metal/zinc',
'tfc:bucket/metal/sterling_silver',
'tfc:bucket/metal/wrought_iron',
'tfc:bucket/metal/cast_iron',
'tfc:bucket/metal/pig_iron',
'tfc:bucket/metal/steel',
'tfc:bucket/metal/black_steel',
'tfc:bucket/metal/blue_steel',
'tfc:bucket/metal/red_steel'
];
/**

View file

@ -2220,67 +2220,6 @@
}
]
},
{
"pakku_id": "M4PNTNZvxOW9zDWV",
"type": "MOD",
"side": "BOTH",
"slug": {
"curseforge": "chalk",
"modrinth": "chalk-mod"
},
"name": {
"curseforge": "Chalk",
"modrinth": "Chalk"
},
"id": {
"curseforge": "533748",
"modrinth": "YWGP4Y1d"
},
"files": [
{
"type": "modrinth",
"file_name": "chalk-1.20.1-1.6.5.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/YWGP4Y1d/versions/HA8yrJaB/chalk-1.20.1-1.6.5.jar",
"id": "HA8yrJaB",
"parent_id": "YWGP4Y1d",
"hashes": {
"sha512": "49220d73636378eae9f55d3dbeedaddcc2afa8949dc656d1ea2c64625aeda210bee3d28e7f704d0ec652020173025235a1d6fd0ef94797409c08defac622fe57",
"sha1": "e4dee75dfe5f8ca8ec21f89ff877d3564bd5c9df"
},
"required_dependencies": [],
"size": 321480,
"date_published": "2024-12-10T13:00:12.908950Z"
},
{
"type": "curseforge",
"file_name": "chalk-1.20.1-1.6.5.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/5979/807/chalk-1.20.1-1.6.5.jar",
"id": "5979807",
"parent_id": "533748",
"hashes": {
"sha1": "e4dee75dfe5f8ca8ec21f89ff877d3564bd5c9df",
"md5": "cd1b8ce2f43d8dd29935778f3575d4f0"
},
"required_dependencies": [],
"size": 321480,
"date_published": "2024-12-10T12:59:38.420Z"
}
]
},
{
"pakku_id": "uNx0hefaZ7i6Gtgo",
"type": "MOD",

View file

@ -1,6 +1,6 @@
{
"name": "TerraFirmaGreg-Modern",
"version": "0.7.19",
"version": "0.9.1",
"description": "An innovative modpack that contains GregTech and TerraFirmaCraft on 1.20.x.",
"author": "Exception, Xikaro",
"overrides": [