Merge branch 'TerraFirmaGreg-Team:dev' into dev
This commit is contained in:
commit
7dfdcc082d
30 changed files with 493 additions and 403 deletions
298
.github/workflows/build.yml
vendored
298
.github/workflows/build.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
20
CHANGELOG.md
20
CHANGELOG.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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: [{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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!",
|
||||
|
|
|
|||
|
|
@ -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', [
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
function registerDiggerHelmetItemTags(event) {
|
||||
|
||||
const DISABLED_ITEMS = [
|
||||
'diggerhelmet:eternal_candle'
|
||||
'diggerhelmet:wool_lining'
|
||||
]
|
||||
|
||||
DISABLED_ITEMS.forEach(item => {
|
||||
|
|
|
|||
|
|
@ -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 Нержавеющая теплица
|
||||
|
|
|
|||
41
kubejs/server_scripts/ftb_quests/CustomQuests.js
Normal file
41
kubejs/server_scripts/ftb_quests/CustomQuests.js
Normal 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);
|
||||
})
|
||||
|
|
@ -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 Выход: Рыбье масло
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const registerRailWaysRecipes = (event) => {
|
|||
// Удаление рецептов мода railways
|
||||
event.remove({ mod: 'railways' });
|
||||
|
||||
railwaysLocometalIntegration(event)
|
||||
registerRailwaysLocometalRecipes(event)
|
||||
|
||||
// Семафор
|
||||
event.shaped('railways:semaphore', [
|
||||
|
|
|
|||
|
|
@ -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`)
|
||||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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', [
|
||||
|
|
|
|||
|
|
@ -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 Топор
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
|
|
@ -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 = [
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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": [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue