Compare commits
246 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 506c516384 | |||
| 011455e327 | |||
| 11d772a32b | |||
| f20f0e003e | |||
| 0f100341d3 | |||
| 73735c5cd5 | |||
| c1713f1682 | |||
| b1feeca41c | |||
| 7d43d79682 | |||
| 5cd148ab5a | |||
| 6c544f2211 | |||
| f455fd1994 | |||
| 1657c88681 | |||
| fd67e0e5c6 | |||
| 0a2f03aa92 | |||
| b03a249da3 | |||
| 6f0fc7d189 | |||
| fd8eecbe93 | |||
| 0a60b3ebb2 | |||
| 15522f5ce7 | |||
| 964559baa1 | |||
| 87c2c94bd4 | |||
| 06f30b3daa | |||
| 68a02ed64b | |||
| c59a6e34eb | |||
| 5b4f450fc3 | |||
| ff0d38d56a | |||
| d591a1492c | |||
| d1ba26311b | |||
| 8733c2c11f | |||
| 4230fc7325 | |||
| 484af8baf3 | |||
| 9456f639d4 | |||
| fe753c540b | |||
| 2fabab3a6a | |||
| 6f39bd8fe8 | |||
| c7d3877129 | |||
| 89058448cf | |||
| 3c737d8d1e | |||
| a807b4e3ad | |||
| 8f740be431 | |||
| 77e07e9b3b | |||
| d04cd2a001 | |||
| 8f2b7fe16b | |||
| 239f8d027a | |||
| c4c4d20303 | |||
| e7c57c0f61 | |||
| 822249dda8 | |||
| 1404806d3d | |||
| 12e3fa9127 | |||
| 8617dc8340 | |||
| 9bc844738c | |||
| eab6483bd7 | |||
| 7ca9405c8b | |||
| 39959145a3 | |||
| 184fe8c1fc | |||
| 6f4722b393 | |||
| 22f552217f | |||
| 8f0e408772 | |||
| 62bbc32763 | |||
| 414b01bddb | |||
| 63c251294e | |||
| 872d8d33cb | |||
| 1801302d8f | |||
| 541f07a7e3 | |||
| 1693271660 | |||
| 3a12fa4843 | |||
| ba85da2c72 | |||
| 469a1e205b | |||
| d238f6e8e4 | |||
| c0fa8ab2dc | |||
| a85ffec9f9 | |||
| 3e5787be76 | |||
| 52ec63413f | |||
| 62ac6a0052 | |||
| 7f7b794c0b | |||
| a97ebaf40d | |||
| 5fca946ef3 | |||
| 80375c436d | |||
| f8446209ce | |||
| 9ce4a65203 | |||
| f5aee56a0b | |||
| 088627aedf | |||
| 2655620fd0 | |||
| 3c86f2eae4 | |||
| cdba0b04fb | |||
| c8d08f9726 | |||
| 259d932946 | |||
| a6fb17b008 | |||
| 1b31185cdb | |||
| d66986df85 | |||
| 4fa78a2add | |||
| 3d1a919e69 | |||
| 98e9faa262 | |||
| 80710cc818 | |||
| b8c63df11b | |||
| 20fd760274 | |||
| 27cdbfb7f3 | |||
| 33d247fec8 | |||
| 75dd1d4bb6 | |||
| a8e79826bd | |||
| b9ece3a18a | |||
| a628a469ce | |||
| 2fca330ff1 | |||
| 3802eace7a | |||
| 2b9c997191 | |||
| 1cb32517ae | |||
| b3b7547325 | |||
| 307a6817d4 | |||
| 0beab559a6 | |||
| a65be62cd1 | |||
| e640918ca0 | |||
| 84e6aaa122 | |||
| 780f68952b | |||
| 49296915c9 | |||
| 0fdc46b358 | |||
| c7980907ed | |||
| 56ecda5173 | |||
| 662dbca3e1 | |||
| 6cb6c21495 | |||
| 79e9a3913a | |||
| 7e89317dd5 | |||
| 59e40ccbd9 | |||
| 774f88ee90 | |||
| 0528879833 | |||
| b6110e4f4a | |||
| 5b82e59264 | |||
| 3a4b171443 | |||
| 8306f5bf0a | |||
| 2ac27fd9ce | |||
| 5bf05f6cb1 | |||
| d01aa28cdc | |||
| 9fcfbf31be | |||
| 21aa5ce33b | |||
| f7ef6eb772 | |||
| 10037a9ac5 | |||
| 888de430ba | |||
| 83d661ab2a | |||
| 1933b4b10d | |||
| 019f570331 | |||
| a537bcf0ee | |||
| 590e435ad6 | |||
| 8d92a51e4f | |||
| 4322910614 | |||
| ebe589a714 | |||
| 6187e6a7bb | |||
| d5f113eb35 | |||
| 9ad5bb21c0 | |||
| 1c88ea7b78 | |||
| 5a976ebfae | |||
| b45669bb82 | |||
| e52cc40dbf | |||
| 8a20d3c1d7 | |||
| 749ebeb91d | |||
| 82586732e3 | |||
| e023d83e62 | |||
| de7cbc4949 | |||
| 71a91e51fb | |||
| 223163aa0a | |||
| bdd22093c3 | |||
| 0367b35ce0 | |||
| 755ac12b8a | |||
| d053c9b1bc | |||
| be4fdfed85 | |||
| e1f9e01404 | |||
| 7121426fc9 | |||
| a94e8504f8 | |||
| 9275bfe001 | |||
| 19802b96e8 | |||
| 5b3c4aef79 | |||
| 4a289470e2 | |||
| d79c0f642c | |||
| 9ecad8749f | |||
| 1e20cd8c08 | |||
| 15d4583c56 | |||
| e8b57c6dc5 | |||
| 8142eb90a6 | |||
| 08abd4a770 | |||
| b8722dbbc0 | |||
| 1ac6d5d967 | |||
| 5c290789e0 | |||
| 38f6bf16f2 | |||
| 0c5c23e9ff | |||
| 4953509255 | |||
| 832d4bb527 | |||
| 62b02d3faf | |||
| 188f105730 | |||
| 006316603d | |||
| 9bb23bcac8 | |||
| 06735f5c39 | |||
| e8143d3618 | |||
| 0d43ca15be | |||
| d18eabe1fc | |||
| d9d491d51c | |||
| 9a5bd114a4 | |||
| 1bd4bd00a8 | |||
| 30cc8c8abc | |||
| 815094e5bf | |||
| 2944873431 | |||
| 1eaddef694 | |||
| 450299cb67 | |||
| 235fc2e81f | |||
| 92fb39d53a | |||
| f8ee4bb1f2 | |||
| 5eece068ba | |||
| 9220ca0048 | |||
| eb0e4289b3 | |||
| ebbb5b1059 | |||
| 1478e4c378 | |||
| 5982f094ec | |||
| eb93ffc8d8 | |||
| 7b21aa2b07 | |||
| fee1c18afe | |||
| 295e720d37 | |||
| 75234415ac | |||
| c7b1ab756b | |||
| 2dd2b5d034 | |||
| dd9346e53f | |||
| 3b4302583d | |||
| 3dd9aa09d3 | |||
| 2642ced86b | |||
| f2e3d81fd7 | |||
| 8e031ca8d6 | |||
| 996d387525 | |||
| 1cda087c03 | |||
| 007c7ceb56 | |||
| 529d03fa9e | |||
| c0a4762ffc | |||
| 3337eb9ae3 | |||
| ca104912d6 | |||
| 0d63f560d3 | |||
| 3df93fc66d | |||
| f5412152a4 | |||
| 46955643b9 | |||
| fee5b7fdfc | |||
| 7c28a71e10 | |||
| 7f049e099d | |||
| 37ce6b262e | |||
| b79cd732b2 | |||
| 80fbb58d4f | |||
| ba71a82288 | |||
| d638d083c2 | |||
| 136c204421 | |||
| 6cda95b979 | |||
| 000cb555e3 | |||
| 82af7e6dde |
@@ -21,13 +21,9 @@ jobs:
|
||||
with:
|
||||
path: ~/.gradle/caches
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
|
||||
- name: Validate no assets
|
||||
run: test ! -d ./src/generated
|
||||
- name: Generate assets
|
||||
uses: GabrielBB/xvfb-action@v1.2
|
||||
with:
|
||||
run: ./gradlew runData --no-daemon
|
||||
- name: Validate assets
|
||||
run: test -d ./src/generated
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build --no-daemon
|
||||
run: ./gradlew build
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: dist
|
||||
path: build/libs/
|
||||
|
||||
@@ -21,13 +21,13 @@ jobs:
|
||||
with:
|
||||
path: ~/.gradle/caches
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
|
||||
- name: Clean gradle
|
||||
run: ./gradlew clean --no-daemon --max-workers 1
|
||||
- name: Validate no assets
|
||||
run: test ! -d ./src/generated
|
||||
- name: Generate assets
|
||||
uses: GabrielBB/xvfb-action@v1.2
|
||||
with:
|
||||
run: ./gradlew runData --no-daemon
|
||||
run: ./gradlew runData --no-daemon --max-workers 1
|
||||
- name: Validate assets
|
||||
run: test -d ./src/generated
|
||||
run: test -d ./src/generated -a -f ./src/generated/resources/.cache/cache
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build --no-daemon
|
||||
run: ./gradlew build --no-daemon --max-workers 1
|
||||
|
||||
@@ -21,18 +21,18 @@ jobs:
|
||||
with:
|
||||
path: ~/.gradle/caches
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
|
||||
- name: Clean gradle
|
||||
run: ./gradlew clean --no-daemon --max-workers 1
|
||||
- name: Validate no assets
|
||||
run: test ! -d ./src/generated
|
||||
- name: Generate assets
|
||||
uses: GabrielBB/xvfb-action@v1.2
|
||||
with:
|
||||
run: ./gradlew runData --no-daemon
|
||||
run: ./gradlew runData --no-daemon --max-workers 1
|
||||
- name: Validate assets
|
||||
run: test -d ./src/generated
|
||||
run: test -d ./src/generated -a -f ./src/generated/resources/.cache/cache
|
||||
- name: Build with Gradle
|
||||
env:
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
run: ./gradlew build --no-daemon
|
||||
run: ./gradlew build --no-daemon --max-workers 1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: dist
|
||||
|
||||
@@ -1,26 +1,19 @@
|
||||
name: 'Release'
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
create:
|
||||
tags:
|
||||
- fabric/v*
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Validate semver
|
||||
- name: Export current tag as environment variable
|
||||
env:
|
||||
TAG: ${{ github.event.release.tag_name }}
|
||||
run: |
|
||||
echo $TAG | grep -oP '^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
|
||||
echo "::set-env name=RELEASE::${TAG:1}"
|
||||
- name: Export keystore
|
||||
env:
|
||||
KEY_STORE: ${{ secrets.KEY_STORE }}
|
||||
run: |
|
||||
echo $KEY_STORE | base64 -d > $HOME/keystore.jks
|
||||
echo "::set-env name=KEY_STORE_FILE::$HOME/keystore.jks"
|
||||
TAG: ${{ github.event.ref }}
|
||||
run: echo "::set-env name=TAG::${TAG}"
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
@@ -30,30 +23,21 @@ jobs:
|
||||
run: chmod +x gradlew
|
||||
- name: Validate no assets
|
||||
run: test ! -d ./src/generated
|
||||
- name: Generate assets
|
||||
uses: GabrielBB/xvfb-action@v1.2
|
||||
with:
|
||||
run: ./gradlew runData --no-daemon
|
||||
- name: Validate assets
|
||||
run: test -d ./src/generated
|
||||
- name: Build, sign, and publish with Gradle
|
||||
env:
|
||||
KEY_STORE_PASS: ${{ secrets.KEY_STORE_PASS }}
|
||||
KEY_STORE_ALIAS: ${{ secrets.KEY_STORE_ALIAS }}
|
||||
KEY_STORE_KEY_PASS: ${{ secrets.KEY_STORE_KEY_PASS }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: ./gradlew build publish --no-daemon
|
||||
- name: Prepare artifact metadata
|
||||
id: prepare_artifact_metadata
|
||||
run: |
|
||||
echo ::set-output name=ARTIFACT_PATH::./build/libs/appliedenergistics2-${RELEASE}.jar
|
||||
echo ::set-output name=ARTIFACT_NAME::appliedenergistics2-${RELEASE}.jar
|
||||
- name: Upload Release Artifact
|
||||
uses: actions/upload-release-asset@v1.0.1
|
||||
- name: Build with Gradle
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: ./gradlew generateData build
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
upload_url: ${{ github.event.release.upload_url }}
|
||||
asset_path: ${{ steps.prepare_artifact_metadata.outputs.ARTIFACT_PATH }}
|
||||
asset_name: ${{ steps.prepare_artifact_metadata.outputs.ARTIFACT_NAME }}
|
||||
asset_content_type: application/zip
|
||||
name: dist
|
||||
path: build/libs/
|
||||
- name: Publish to github packages
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: ./gradlew publish
|
||||
- name: Upload to curseforge
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CURSEFORGE: ${{ secrets.CURSEFORGE }}
|
||||
run: ./gradlew curseforge
|
||||
|
||||
@@ -12,10 +12,9 @@
|
||||
* [Downloads](#downloads)
|
||||
* [Installation](#installation)
|
||||
* [Issues](#issues)
|
||||
* [API](#applied-energistics-2-api)
|
||||
* [Building](#building)
|
||||
* [Contribution](#contribution)
|
||||
* [API](#applied-energistics-2-api)
|
||||
* [CraftTweaker](#applied-energistics-2-crafttweaker)
|
||||
* [Localization](#applied-energistics-2-localization)
|
||||
* [Credits](#credits)
|
||||
|
||||
@@ -46,7 +45,7 @@ A Mod about Matter, Energy and using them to conquer the world..
|
||||
|
||||
## Downloads
|
||||
|
||||
Downloads can be found on [CurseForge](http://www.curse.com/mc-mods/minecraft/223794-applied-energistics-2) or on the [official website](http://ae-mod.info/Downloads/).
|
||||
Downloads can be found on [CurseForge](https://www.curseforge.com/minecraft/mc-mods/applied-energistics-2) or on the [official website](http://ae-mod.info/Downloads/).
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -67,12 +66,44 @@ Providing as many details as possible does help us to find and resolve the issue
|
||||
|
||||
Please note that we might close any issue not matching these requirements.
|
||||
|
||||
## Applied Energistics 2 API
|
||||
|
||||
The API for Applied Energistics 2. It is open source to discuss changes, improve documentation, and provide better add-on support in general.
|
||||
|
||||
### Maven
|
||||
|
||||
We use Github Packages as maven repository now. You can use the following snippet as example on how to add a repository to your gradle build file.
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
name "AE2"
|
||||
url "https://maven.pkg.github.com/AppliedEnergistics/Applied-Energistics-2"
|
||||
}
|
||||
}
|
||||
|
||||
When compiling against the AE2 API you can use gradle dependencies, just add
|
||||
|
||||
dependencies {
|
||||
compileOnly "appeng:appliedenergistics2:VERSION:api"
|
||||
}
|
||||
|
||||
or add the `compileOnly` line to your existing dependencies task to your build.gradle.
|
||||
|
||||
Replace `VERSION` with the desired one. With 1.15+ we switched to using [semver](https://semver.org/).
|
||||
It is highly recommended following its specification and further considering an upper bound for the dependency version.
|
||||
A change of the `MAJOR` version will be an API break and can lead to various crashes. Better to inform a player about the addon not supporting the new version until it could be tested or updated.
|
||||
|
||||
An example string would be `appeng:appliedenergistics2:7.0.0-alpha.6:api` for the API only or `appeng:appliedenergistics2:7.0.0-alpha.6` for the whole mod.
|
||||
|
||||
Builds obtained [here](https://github.com/AppliedEnergistics/Applied-Energistics-2/releases) or via [maven](https://github.com/AppliedEnergistics/Applied-Energistics-2/packages) should work in a development environment.
|
||||
However the dependency might need to be wrapped in `fg.deobf()` like `runtimeOnly fg.deobf("appeng:appliedenergistics2:VERSION:api")`
|
||||
|
||||
## Building
|
||||
|
||||
1. Clone this repository via
|
||||
- SSH `git clone git@github.com:AppliedEnergistics/Applied-Energistics-2.git` or
|
||||
- HTTPS `git clone https://github.com/AppliedEnergistics/Applied-Energistics-2.git`
|
||||
2. Build using the gradle `build` task. Jar will be in `build/libs`
|
||||
2. Build using the `gradlew runData build` command. Jar will be in `build/libs`
|
||||
3. For core developer: Setup IDE
|
||||
- IntelliJ: Import as gradle project
|
||||
- Eclipse: Import as gradle project or execute gradle task `eclipse` and potentially `genEclipseRuns`
|
||||
@@ -101,75 +132,16 @@ Here are a few things to keep in mind that will help get your PR approved.
|
||||
* SSH `git clone git@github.com:<your username>/Applied-Energistics-2.git` or
|
||||
* HTTPS `git clone https://github.com/<your username>/Applied-Energistics-2.git`
|
||||
3. Change code base
|
||||
4. Add changes to git `git add -A`
|
||||
5. Commit changes to your clone `git commit -m "<summary of made changes>"`
|
||||
6. Push to your fork `git push`
|
||||
7. Create a Pull-Request on GitHub
|
||||
8. Wait for review
|
||||
9. Squash commits for cleaner history
|
||||
4. Run `gradlew spotlessApply` to apply automatic code formatting
|
||||
5. Add changes to git `git add -A`
|
||||
6. Commit changes to your clone `git commit -m "<summary of made changes>"`
|
||||
7. Push to your fork `git push`
|
||||
8. Create a Pull-Request on GitHub
|
||||
9. Wait for review
|
||||
10. Squash commits for cleaner history
|
||||
|
||||
If you are only doing single file pull requests, GitHub supports using a quick way without the need of cloning your fork. Also read up about [synching](https://help.github.com/articles/syncing-a-fork) if you plan to contribute on regular basis.
|
||||
|
||||
## Applied Energistics 2 API
|
||||
|
||||
The API for Applied Energistics 2. It is open source to discuss changes, improve documentation, and provide better add-on support in general.
|
||||
|
||||
Universal builds obtained [Here](http://ae2.ae-mod.info/Downloads/) should work in a development environment.
|
||||
|
||||
### Maven
|
||||
|
||||
When compiling against the AE2 API you can use gradle dependencies, just add
|
||||
|
||||
dependencies {
|
||||
compile "appeng:appliedenergistics2:rv_-_____-__:api"
|
||||
}
|
||||
|
||||
or add the compile line to your existing dependencies task to your build.gradle
|
||||
|
||||
Where the __ are filled in with the correct version criteria; AE2 is available from the default forge maven so no additional repositories are necessary.
|
||||
|
||||
An example string would be `appeng:appliedenergistics2:rv5-stable-1:api` for the API only or `appeng:appliedenergistics2:rv5-stable-1` for the whole mod.
|
||||
|
||||
## Applied Energistics 2 CraftTweaker
|
||||
|
||||
### Inscriber
|
||||
|
||||
The inscriber uses the vanilla recipe system with a custom `type` of `appliedenergistics2:inscriber`.
|
||||
See the [inscriber recipe folder](src/main/resources/data/appliedenergistics2/recipes/inscriber) for some examples.
|
||||
|
||||
### Grindstone
|
||||
|
||||
The grindstone uses the vanilla recipe system with a custom `type` of `appliedenergistics2:grinder`.
|
||||
See the [grinder recipe folder](src/main/resources/data/appliedenergistics2/recipes/grinder) for some examples.
|
||||
|
||||
### Spatial
|
||||
Whitelist a TileEntity class for Spatial IO.
|
||||
|
||||
mods.appliedenergistics2.Spatial.whitelistEntity( String fullEntityClassName );
|
||||
|
||||
### Attunement
|
||||
Attune a ItemStack or ModID to a specific P2P-Tunnel type. ModID's are used as fallback when no ItemStack was found.
|
||||
|
||||
mods.appliedenergistics2.Attunement.attuneME( ItemStack itemStack );
|
||||
mods.appliedenergistics2.Attunement.attuneME( String modID );
|
||||
mods.appliedenergistics2.Attunement.attuneItem( ItemStack itemStack );
|
||||
mods.appliedenergistics2.Attunement.attuneItem( String modID );
|
||||
mods.appliedenergistics2.Attunement.attuneFluid( ItemStack itemStack );
|
||||
mods.appliedenergistics2.Attunement.attuneFluid( String modID );
|
||||
mods.appliedenergistics2.Attunement.attuneRedstone( ItemStack itemStack );
|
||||
mods.appliedenergistics2.Attunement.attuneRedstone( String modID );
|
||||
mods.appliedenergistics2.Attunement.attuneRF( ItemStack itemStack );
|
||||
mods.appliedenergistics2.Attunement.attuneRF( String modID );
|
||||
mods.appliedenergistics2.Attunement.attuneIC2( ItemStack itemStack );
|
||||
mods.appliedenergistics2.Attunement.attuneIC2( String modID );
|
||||
mods.appliedenergistics2.Attunement.attuneLight( ItemStack itemStack );
|
||||
mods.appliedenergistics2.Attunement.attuneLight( String modID );
|
||||
|
||||
### Cannon
|
||||
Add ammo types for the matter cannon.
|
||||
|
||||
mods.appliedenergistics2.Cannon.registerAmmo( ItemStack itemStack, double weight );
|
||||
|
||||
## Applied Energistics 2 Localization
|
||||
|
||||
### English Text
|
||||
|
||||
+126
-90
@@ -16,36 +16,42 @@
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
maven { url = 'https://files.minecraftforge.net/maven' }
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "maven-publish"
|
||||
id "com.diffplug.gradle.spotless" version "4.3.0"
|
||||
id "org.sonarqube" version "2.8"
|
||||
id "jacoco"
|
||||
id 'java'
|
||||
id 'fabric-loom'
|
||||
id 'maven-publish'
|
||||
id "com.diffplug.gradle.spotless" version "4.3.0"
|
||||
id "com.matthewprenger.cursegradle" version "1.4.0"
|
||||
id "org.sonarqube" version "2.8"
|
||||
id "jacoco"
|
||||
}
|
||||
|
||||
apply plugin: 'net.minecraftforge.gradle'
|
||||
apply plugin: "eclipse"
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
maven { url = "https://maven.fabricmc.net/" }
|
||||
maven {
|
||||
name = "BuildCraft"
|
||||
url = "https://mod-buildcraft.com/maven"
|
||||
}
|
||||
maven {
|
||||
name = "HYWLA"
|
||||
url = "https://maven.tehnut.info/"
|
||||
content {
|
||||
includeGroup "mcp.mobius.waila"
|
||||
}
|
||||
}
|
||||
maven {
|
||||
name = 'Earthcomputer Mods'
|
||||
url = 'https://dl.bintray.com/earthcomputer/mods'
|
||||
}
|
||||
}
|
||||
|
||||
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
|
||||
compileJava {
|
||||
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
|
||||
options.deprecation = false
|
||||
}
|
||||
|
||||
// ensure everything uses UTF-8 and not some random codepage chosen by gradle
|
||||
@@ -55,8 +61,6 @@ tasks.withType(JavaCompile) {
|
||||
}
|
||||
|
||||
// Create version number
|
||||
version = version_major + "." + version_minor + "." + version_patch
|
||||
|
||||
ext.pr = System.getenv('PR_NUMBER') ?: ""
|
||||
if (ext.pr) {
|
||||
version = version + "+pr." + ext.pr
|
||||
@@ -67,12 +71,17 @@ if (ext.branch) {
|
||||
version = version + "+branch." + ext.branch
|
||||
}
|
||||
|
||||
ext.release = System.getenv('RELEASE') ?: ""
|
||||
if (ext.release) {
|
||||
version = ext.release
|
||||
ext.tag = System.getenv('TAG') ?: ""
|
||||
if (ext.tag && ext.tag.startsWith("fabric/v")) {
|
||||
version = ext.tag.substring("fabric/v".length())
|
||||
// Validate that the rest is a semver version
|
||||
if (version ==~ /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/) {
|
||||
println("::set-env name=VERSION::${version}")
|
||||
} else {
|
||||
throw new GradleException("Invalid semver: $version")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Maven group and artifact name
|
||||
group = artifact_group
|
||||
archivesBaseName = artifact_basename
|
||||
@@ -86,98 +95,106 @@ sourceSets {
|
||||
srcDir 'src/generated/resources'
|
||||
}
|
||||
}
|
||||
datagen {
|
||||
compileClasspath += sourceSets.api.output
|
||||
runtimeClasspath += sourceSets.api.output
|
||||
compileClasspath += sourceSets.main.output
|
||||
runtimeClasspath += sourceSets.main.output
|
||||
}
|
||||
test {
|
||||
compileClasspath += sourceSets.api.output
|
||||
runtimeClasspath += sourceSets.api.output
|
||||
java {
|
||||
exclude '**/*'
|
||||
}
|
||||
}
|
||||
siteexport {
|
||||
compileClasspath += sourceSets.api.output
|
||||
runtimeClasspath += sourceSets.api.output
|
||||
compileClasspath += sourceSets.main.output
|
||||
runtimeClasspath += sourceSets.main.output
|
||||
}
|
||||
}
|
||||
|
||||
configurations {
|
||||
apiCompile.extendsFrom(compile)
|
||||
apiCompile.extendsFrom(compileClasspath)
|
||||
datagenCompile.extendsFrom(compileClasspath)
|
||||
siteexportCompile.extendsFrom(compileClasspath)
|
||||
siteexportRuntime.extendsFrom(runtimeClasspath)
|
||||
}
|
||||
|
||||
apply from: 'gradle/scripts/dependencies.gradle'
|
||||
apply from: 'gradle/scripts/spotless.gradle'
|
||||
|
||||
minecraft {
|
||||
mappings channel: "snapshot", version: project.mcp_mappings
|
||||
accessWidener "src/main/resources/appliedenergistics2.accesswidener"
|
||||
}
|
||||
|
||||
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||
dependencies {
|
||||
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
||||
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
|
||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||
|
||||
runs {
|
||||
client {
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
workingDirectory project.file('run')
|
||||
mods {
|
||||
appliedenergistics2 {
|
||||
source sourceSets.main
|
||||
source sourceSets.api
|
||||
}
|
||||
}
|
||||
}
|
||||
server {
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
workingDirectory project.file('run')
|
||||
mods {
|
||||
appliedenergistics2 {
|
||||
source sourceSets.main
|
||||
source sourceSets.api
|
||||
}
|
||||
}
|
||||
}
|
||||
data {
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
workingDirectory project.file('run')
|
||||
args '--mod', 'appliedenergistics2', '--all', '--output', file('src/generated/resources/')
|
||||
mods {
|
||||
appliedenergistics2 {
|
||||
source sourceSets.main
|
||||
source sourceSets.api
|
||||
}
|
||||
}
|
||||
}
|
||||
//Fabric api
|
||||
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
|
||||
|
||||
modImplementation "alexiil.mc.lib:libblockattributes-core:${libblockattributes_version}"
|
||||
modImplementation "alexiil.mc.lib:libblockattributes-items:${libblockattributes_version}"
|
||||
modImplementation "alexiil.mc.lib:libblockattributes-fluids:${libblockattributes_version}"
|
||||
include "alexiil.mc.lib:libblockattributes-core:${libblockattributes_version}"
|
||||
include "alexiil.mc.lib:libblockattributes-items:${libblockattributes_version}"
|
||||
include "alexiil.mc.lib:libblockattributes-fluids:${libblockattributes_version}"
|
||||
|
||||
modCompileOnly("me.shedaniel:RoughlyEnoughItems:5.0.2-unstable") {
|
||||
exclude group: "net.fabricmc.fabric-api"
|
||||
}
|
||||
modCompileOnly("mcp.mobius.waila:Hwyla:1.16.1-1.9.22-75") {
|
||||
exclude group: "net.fabricmc.fabric-api"
|
||||
}
|
||||
modRuntime("me.shedaniel:RoughlyEnoughItems:5.0.2-unstable") {
|
||||
exclude group: "net.fabricmc.fabric-api"
|
||||
}
|
||||
// modRuntimeOnly "mcp.mobius.waila:Hwyla:1.16.1-1.9.22-75"
|
||||
|
||||
implementation 'com.google.code.findbugs:jsr305:3.0.2'
|
||||
|
||||
// unit test dependencies
|
||||
testCompile "junit:junit:4.13"
|
||||
}
|
||||
|
||||
def signProps = [:]
|
||||
if (System.getenv("KEY_STORE_FILE")) {
|
||||
signProps['keyStore'] = System.getenv("KEY_STORE_FILE")
|
||||
signProps['storePass'] = System.getenv("KEY_STORE_PASS")
|
||||
signProps['alias'] = System.getenv("KEY_STORE_ALIAS")
|
||||
signProps['keyPass'] = System.getenv("KEY_STORE_KEY_PASS")
|
||||
}
|
||||
processResources {
|
||||
inputs.property "version", project.version
|
||||
|
||||
task signJar(type: net.minecraftforge.gradle.common.task.SignJar, dependsOn: 'reobfJar') {
|
||||
onlyIf { !signProps.isEmpty() }
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include "fabric.mod.json"
|
||||
expand "version": project.version
|
||||
}
|
||||
|
||||
if (!signProps.isEmpty()) {
|
||||
keyStore = signProps.keyStore
|
||||
alias = signProps.alias
|
||||
storePass = signProps.storePass
|
||||
keyPass = signProps.keyPass
|
||||
|
||||
inputFile = jar.archivePath
|
||||
outputFile = jar.archivePath
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude "fabric.mod.json"
|
||||
}
|
||||
}
|
||||
|
||||
apply from: 'gradle/scripts/artifacts.gradle'
|
||||
apply from: 'gradle/scripts/curseforge.gradle'
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
maven(MavenPublication) {
|
||||
groupId = project.group
|
||||
artifactId = project.archivesBaseName
|
||||
version = project.version
|
||||
from components.java
|
||||
artifact sourcesJar
|
||||
artifact javadocJar
|
||||
artifact apiJar
|
||||
if (!version.endsWith("-SNAPSHOT")) {
|
||||
publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
artifactId = 'appliedenergistics2-fabric'
|
||||
|
||||
// add all the jars that should be included when publishing to maven
|
||||
artifact(remapJar) {
|
||||
builtBy remapJar
|
||||
}
|
||||
artifact(sourcesJar) {
|
||||
builtBy remapSourcesJar
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// configure the maven publication
|
||||
publishing {
|
||||
// select the repositories you want to publish to
|
||||
repositories {
|
||||
maven {
|
||||
credentials {
|
||||
@@ -188,4 +205,23 @@ publishing {
|
||||
url = "https://maven.pkg.github.com/AppliedEnergistics/Applied-Energistics-2"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
import net.fabricmc.loom.task.RunClientTask;
|
||||
|
||||
task generateData(type: RunClientTask, dependsOn: downloadAssets, group: "ae2", description: "Generates various JSON assets for the mod") {
|
||||
classpath = configurations.runtimeClasspath
|
||||
classpath sourceSets.api.output
|
||||
classpath sourceSets.main.output
|
||||
classpath sourceSets.datagen.output
|
||||
systemProperty "appeng.generateData", "true"
|
||||
}
|
||||
build.dependsOn generateData
|
||||
|
||||
task runSiteExport(type: RunClientTask, dependsOn: downloadAssets, group: "ae2", description: "Export game assets for the website") {
|
||||
classpath = configurations.runtimeClasspath
|
||||
classpath sourceSets.api.output
|
||||
classpath sourceSets.main.output
|
||||
classpath sourceSets.siteexport.output
|
||||
}
|
||||
|
||||
+29
-26
@@ -1,34 +1,37 @@
|
||||
version_major=0
|
||||
version_minor=0
|
||||
version_patch=0
|
||||
version=0.0.0-SNAPSHOT
|
||||
|
||||
artifact_group=appeng
|
||||
artifact_basename=appliedenergistics2
|
||||
artifact_basename=appliedenergistics2-fabric
|
||||
|
||||
#########################################################
|
||||
# Minecraft Versions #
|
||||
#########################################################
|
||||
minecraft_release=1.15
|
||||
minecraft_version=1.15.2
|
||||
mcp_mappings=20200701-1.15.1
|
||||
forge_version=31.2.20
|
||||
kotlin.code.style=official
|
||||
org.gradle.jvmargs=-Xmx2G
|
||||
|
||||
#########################################################
|
||||
# Provided APIs #
|
||||
#########################################################
|
||||
jei_version=6.0.0.4
|
||||
top_version=2.0.4-5
|
||||
hwyla_version=1.10.8-B72_1.15.2
|
||||
ctm_version=MC1.15.2-1.1.0.9
|
||||
# Fabric Properties
|
||||
# Check these on https://modmuss50.me/fabric.html
|
||||
|
||||
minecraft_version=1.16.2
|
||||
yarn_mappings=1.16.2+build.6
|
||||
loader_version=0.9.1+build.205
|
||||
|
||||
#Fabric api
|
||||
fabric_version=0.17.2+build.396-1.16
|
||||
|
||||
loom_version=0.4-SNAPSHOT
|
||||
|
||||
# Mod Properties
|
||||
mod_version = 1.0.0
|
||||
maven_group = net.fabricmc
|
||||
archives_base_name = fabric-example-mod
|
||||
|
||||
# Kotlin
|
||||
kotlin_version=1.3.61
|
||||
fabric_kotlin_version=1.3.61+build.1
|
||||
|
||||
libblockattributes_version=0.7.1-pre.9
|
||||
|
||||
#########################################################
|
||||
# Deployment #
|
||||
#########################################################
|
||||
website_version=1.15.2
|
||||
curse_versions=1.15.2
|
||||
|
||||
#########################################################
|
||||
# Gradle #
|
||||
#########################################################
|
||||
# Various tasks like runData will fail when run as daemon
|
||||
org.gradle.daemon=false
|
||||
website_version=1.16.1
|
||||
curse_versions=1.16.1
|
||||
curseforge_project=223794
|
||||
|
||||
@@ -21,8 +21,7 @@ processResources {
|
||||
}
|
||||
|
||||
jar {
|
||||
finalizedBy 'reobfJar'
|
||||
finalizedBy 'signJar'
|
||||
finalizedBy 'remapJar'
|
||||
|
||||
from sourceSets.main.output.classesDirs
|
||||
from sourceSets.api.output.classesDirs
|
||||
@@ -57,25 +56,23 @@ task javadocJar(type: Jar, dependsOn: javadocs) {
|
||||
from javadoc.destinationDir
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
|
||||
// if it is present.
|
||||
// If you remove this task, sources will not be generated.
|
||||
task sourcesJar(type: Jar, dependsOn: classes) {
|
||||
classifier = "sources"
|
||||
from sourceSets.main.allJava
|
||||
from sourceSets.api.allJava
|
||||
from sourceSets.main.allSource
|
||||
from sourceSets.api.allSource
|
||||
}
|
||||
|
||||
task apiJar(type: Jar) {
|
||||
classifier = "api"
|
||||
from sourceSets.api.output
|
||||
include "appeng/api/**"
|
||||
|
||||
// TODO: when FG bug is fixed, remove allJava from the api jar.
|
||||
// https://github.com/MinecraftForge/ForgeGradle/issues/369
|
||||
// Gradle should be able to pull them from the -sources jar.
|
||||
from sourceSets.api.allJava
|
||||
}
|
||||
|
||||
artifacts {
|
||||
archives javadocJar
|
||||
archives sourcesJar
|
||||
archives apiJar
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2020, TeamAppliedEnergistics, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
*g GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
def isAlpha = project.version.contains("alpha")
|
||||
def isBeta = project.version.contains("beta")
|
||||
|
||||
def cfReleaseType = "release"
|
||||
if (isAlpha) {
|
||||
cfReleaseType = "alpha"
|
||||
} else if (isBeta) {
|
||||
cfReleaseType = "beta"
|
||||
}
|
||||
|
||||
if (System.getenv("CURSEFORGE") && !version.endsWith("-SNAPSHOT")) {
|
||||
curseforge {
|
||||
apiKey = System.getenv("CURSEFORGE")
|
||||
project {
|
||||
id = project.curseforge_project
|
||||
changelogType = "markdown"
|
||||
changelog = System.getenv("CHANGELOG") ?: "Please visit our [releases](https://github.com/AppliedEnergistics/Applied-Energistics-2/releases) for a changelog"
|
||||
releaseType = cfReleaseType
|
||||
addGameVersion project.minecraft_version
|
||||
addGameVersion "Fabric"
|
||||
mainArtifact(remapJar.archiveFile) {
|
||||
displayName = "${project.version} [FABRIC]"
|
||||
}
|
||||
}
|
||||
options {
|
||||
forgeGradleIntegration = false
|
||||
}
|
||||
afterEvaluate {
|
||||
tasks.getByName("curseforge${project.curseforge_project}").dependsOn remapJar
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,64 +23,19 @@ repositories {
|
||||
name 'modmaven'
|
||||
url "https://modmaven.k-4u.nl/"
|
||||
}
|
||||
|
||||
maven {
|
||||
name "Mobius"
|
||||
url "http://mobiusstrip.eu/maven"
|
||||
}
|
||||
|
||||
maven {
|
||||
name = "JEI repo"
|
||||
url "http://dvs1.progwml6.com/files/maven"
|
||||
}
|
||||
|
||||
maven {
|
||||
name = "Tesla repo"
|
||||
url "http://maven.mcmoddev.com"
|
||||
}
|
||||
|
||||
maven {
|
||||
name = "IC2 repo"
|
||||
url = "http://maven.ic2.player.to"
|
||||
}
|
||||
|
||||
maven {
|
||||
name = "CoFH Maven"
|
||||
url = "http://maven.covers1624.net"
|
||||
}
|
||||
|
||||
maven { // TheOneProbe
|
||||
name 'tterrag maven'
|
||||
url "http://maven.tterrag.com/"
|
||||
}
|
||||
|
||||
maven {
|
||||
name 'mcjty'
|
||||
url "http://maven.k-4u.nl/"
|
||||
}
|
||||
|
||||
maven { // CraftTweaker
|
||||
name 'jared maven'
|
||||
url "http://maven.blamejared.com/"
|
||||
}
|
||||
|
||||
maven {
|
||||
name = "CurseForge"
|
||||
url = "https://minecraft.curseforge.com/api/maven/"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
||||
|
||||
// compile against provided APIs
|
||||
compileOnly "mezz.jei:jei-${minecraft_version}:${jei_version}:api"
|
||||
compileOnly "mezz.jei:jei-${jei_minecraft_version}:${jei_version}:api"
|
||||
compileOnly "mcjty.theoneprobe:TheOneProbe-${minecraft_release}:${minecraft_release}-${top_version}:api"
|
||||
|
||||
// Runtime, Mods
|
||||
runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}:${jei_version}")
|
||||
runtimeOnly fg.deobf("mcjty.theoneprobe:TheOneProbe-${minecraft_release}:${minecraft_release}-${top_version}")
|
||||
runtimeOnly fg.deobf("team.chisel.ctm:CTM:${ctm_version}")
|
||||
// FIXME 1.16.2 runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}")
|
||||
// FIXME 1.16.2 runtimeOnly fg.deobf("mcjty.theoneprobe:TheOneProbe-${minecraft_release}:${minecraft_release}-${top_version}")
|
||||
//runtimeOnly fg.deobf("team.chisel.ctm:CTM:${ctm_version}")
|
||||
|
||||
// unit test dependencies
|
||||
testCompile "junit:junit:4.13"
|
||||
|
||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
@@ -109,8 +125,8 @@ if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
@@ -138,19 +154,19 @@ if $cygwin ; then
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@@ -159,14 +175,9 @@ save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
||||
Vendored
+20
-1
@@ -1,3 +1,19 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@@ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
pluginManagement {
|
||||
repositories {
|
||||
jcenter()
|
||||
maven {
|
||||
name = "Fabric"
|
||||
url = "https://maven.fabricmc.net/"
|
||||
}
|
||||
gradlePluginPortal()
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "fabric-loom" version loom_version
|
||||
id "org.jetbrains.kotlin.jvm" version kotlin_version
|
||||
}
|
||||
|
||||
}
|
||||
@@ -26,12 +26,16 @@ import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Use this annotation on a class in your Mod to have it instantiated during the
|
||||
* initialization phase of Applied Energistics. AE expects your class to have a
|
||||
* single constructor and can supply certain arguments to your constructor using
|
||||
* dependency injection.
|
||||
* initialization phase of Applied Energistics.
|
||||
* <p>
|
||||
* The class also needs to implement {@link IAEAddon}.
|
||||
* <p>
|
||||
* AE expects your class to have a single constructor without any parameters.
|
||||
* <p>
|
||||
* This is the only way to get access to the public {@link IAppEngApi} instance.
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Retention(RetentionPolicy.CLASS)
|
||||
@Documented
|
||||
public @interface AEPlugin {
|
||||
public @interface AEAddon {
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2013 AlgorithmX2
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package appeng.api;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import appeng.api.exceptions.CoreInaccessibleException;
|
||||
|
||||
/**
|
||||
* Entry point for api.
|
||||
*/
|
||||
public enum AEApi {
|
||||
;
|
||||
|
||||
private static final String CORE_API_FQN = "appeng.core.Api";
|
||||
private static final String CORE_API_FIELD = "INSTANCE";
|
||||
private static final IAppEngApi HELD_API;
|
||||
|
||||
static {
|
||||
try {
|
||||
final Class<?> apiClass = Class.forName(CORE_API_FQN);
|
||||
final Field apiField = apiClass.getField(CORE_API_FIELD);
|
||||
|
||||
HELD_API = (IAppEngApi) apiField.get(apiClass);
|
||||
} catch (final ClassNotFoundException e) {
|
||||
throw new CoreInaccessibleException(
|
||||
"AE2 API tried to access the " + CORE_API_FQN + " class, without it being declared.");
|
||||
} catch (final NoSuchFieldException e) {
|
||||
throw new CoreInaccessibleException("AE2 API tried to access the " + CORE_API_FIELD + " field in "
|
||||
+ CORE_API_FQN + " without it being declared.");
|
||||
} catch (final IllegalAccessException e) {
|
||||
throw new CoreInaccessibleException("AE2 API tried to access the " + CORE_API_FIELD + " field in "
|
||||
+ CORE_API_FQN + " without enough access permissions.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API Entry Point.
|
||||
*
|
||||
* @return the {@link IAppEngApi}
|
||||
*/
|
||||
public static IAppEngApi instance() {
|
||||
return HELD_API;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
package appeng.api;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Marks interfaces that can be used as injectable constructor arguments for an
|
||||
* {@link AEPlugin}.
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface AEInjectable {
|
||||
}
|
||||
+14
-13
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2013 AlgorithmX2
|
||||
* Copyright (c) 2020 TeamAppliedEnergistics
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
@@ -21,24 +21,25 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package appeng.api.recipes;
|
||||
package appeng.api;
|
||||
|
||||
/**
|
||||
* Represents the AE2 Recipe Loading/Reading Class
|
||||
* Every AE2 addon requiring access to {@link IAppEngApi}, needs to provide at
|
||||
* least one class implementing this interface.
|
||||
* <p>
|
||||
* Further it requires the class to be annotated with {@link AEAddon}.
|
||||
*/
|
||||
@Deprecated
|
||||
public interface IRecipeHandler {
|
||||
public interface IAEAddon {
|
||||
|
||||
/**
|
||||
* Call when you want to read recipes in from a file based on a loader
|
||||
* This gets called once the API is successfully constructed and ready to be
|
||||
* used.
|
||||
* <p>
|
||||
* Each addon is responsible to maintain a reference to {@link IAppEngApi} for
|
||||
* future use. Otherwise there is no alternative to access it later.
|
||||
*
|
||||
* @param loader recipe loader
|
||||
* @param path path of file
|
||||
* @param api The API instance when ready.
|
||||
*/
|
||||
void parseRecipes(IRecipeLoader loader, String path);
|
||||
void onAPIAvailable(IAppEngApi api);
|
||||
|
||||
/**
|
||||
* this loads the read recipes into minecraft, should be called in Init.
|
||||
*/
|
||||
void injectRecipes();
|
||||
}
|
||||
@@ -23,16 +23,22 @@
|
||||
|
||||
package appeng.api;
|
||||
|
||||
import appeng.api.client.IClientHelper;
|
||||
import appeng.api.crafting.ICraftingHelper;
|
||||
import appeng.api.definitions.IDefinitions;
|
||||
import appeng.api.features.IRegistryContainer;
|
||||
import appeng.api.networking.IGridHelper;
|
||||
import appeng.api.networking.IGridNode;
|
||||
import appeng.api.parts.IPartHelper;
|
||||
import appeng.api.storage.IStorageHelper;
|
||||
import appeng.api.util.IClientHelper;
|
||||
|
||||
@AEInjectable
|
||||
public interface IAppEngApi {
|
||||
|
||||
/**
|
||||
* @return An accessible list of all AE definitions
|
||||
*/
|
||||
IDefinitions definitions();
|
||||
|
||||
/**
|
||||
* @return Registry Container for the numerous registries in AE2.
|
||||
*/
|
||||
@@ -43,6 +49,11 @@ public interface IAppEngApi {
|
||||
*/
|
||||
IStorageHelper storage();
|
||||
|
||||
/**
|
||||
* @return A helper for working with crafting related tasks.
|
||||
*/
|
||||
ICraftingHelper crafting();
|
||||
|
||||
/**
|
||||
* @return A helper to create {@link IGridNode} and other grid related objects.
|
||||
*/
|
||||
@@ -53,11 +64,6 @@ public interface IAppEngApi {
|
||||
*/
|
||||
IPartHelper partHelper();
|
||||
|
||||
/**
|
||||
* @return An accessible list of all AE definitions
|
||||
*/
|
||||
IDefinitions definitions();
|
||||
|
||||
/**
|
||||
* @return Utility methods primarily useful for client side stuff
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 TeamAppliedEnergistics
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package appeng.api.client;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
/**
|
||||
* A registry for 3D models used to render storage cells in the world, when they
|
||||
* are inserted into a drive or similar machines.
|
||||
*/
|
||||
public interface ICellModelRegistry {
|
||||
|
||||
/**
|
||||
* Register a new model for a storage cell item.
|
||||
*
|
||||
* <p>
|
||||
* You are responsible for ensuring that the given model is actually loaded by
|
||||
* the game. See
|
||||
* {@see net.minecraftforge.client.model.ModelLoader#addSpecialModel}.
|
||||
* <p>
|
||||
* This method only maps an {@link Item} to a {@link Identifier} which can be
|
||||
* looked up from the
|
||||
* {@link net.minecraft.client.render.model.BakedModelManager}. No validation
|
||||
* about missing models will be done.
|
||||
* <p>
|
||||
* Will throw an exception in case a model is already registered for an item.
|
||||
* <p>
|
||||
* For examples look at our cell part models within the drive model directory.
|
||||
*
|
||||
* @param item The cell item
|
||||
* @param model The {@link net.minecraft.util.Identifier} representing the
|
||||
* model.
|
||||
* @return
|
||||
*/
|
||||
void registerModel(@Nonnull Item item, @Nonnull Identifier model);
|
||||
|
||||
/**
|
||||
* The {@link Identifier} of the model used to render the given storage cell
|
||||
* {@link Item} when inserted into a drive or similar.
|
||||
*
|
||||
* @param item
|
||||
* @return null, if no model is registered.
|
||||
*/
|
||||
@Nullable
|
||||
Identifier model(@Nonnull Item item);
|
||||
|
||||
/**
|
||||
* An unmodifiable map of all registered mappings.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Nonnull
|
||||
Map<Item, Identifier> models();
|
||||
|
||||
/**
|
||||
* Returns the default model, which can be used when no explicit model is
|
||||
* registered.
|
||||
*/
|
||||
@Nonnull
|
||||
Identifier getDefaultModel();
|
||||
|
||||
}
|
||||
+10
-3
@@ -21,11 +21,11 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package appeng.api.util;
|
||||
package appeng.api.client;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
import appeng.api.storage.cells.ICellInventoryHandler;
|
||||
import appeng.api.storage.data.IAEStack;
|
||||
@@ -37,6 +37,13 @@ public interface IClientHelper {
|
||||
* @param handler Cell handler.
|
||||
* @param lines List of lines to add to.
|
||||
*/
|
||||
<T extends IAEStack<T>> void addCellInformation(ICellInventoryHandler<T> handler, List<ITextComponent> lines);
|
||||
<T extends IAEStack<T>> void addCellInformation(ICellInventoryHandler<T> handler, List<Text> lines);
|
||||
|
||||
/**
|
||||
* A helper to work with clientside related tasks for cells.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
ICellModelRegistry cells();
|
||||
|
||||
}
|
||||
@@ -23,26 +23,15 @@
|
||||
|
||||
package appeng.api.config;
|
||||
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
|
||||
|
||||
public enum Actionable {
|
||||
/**
|
||||
* Perform the intended action.
|
||||
*/
|
||||
MODULATE(FluidAction.EXECUTE),
|
||||
MODULATE,
|
||||
|
||||
/**
|
||||
* Pretend to perform the action.
|
||||
*/
|
||||
SIMULATE(FluidAction.SIMULATE);
|
||||
SIMULATE
|
||||
|
||||
private final FluidAction fluidAction;
|
||||
|
||||
Actionable(FluidAction fluidAction) {
|
||||
this.fluidAction = fluidAction;
|
||||
}
|
||||
|
||||
public FluidAction getFluidAction() {
|
||||
return fluidAction;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
package appeng.api.config;
|
||||
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
|
||||
public enum PowerUnits {
|
||||
AE("gui.appliedenergistics2.units.appliedenergstics"), // Native Units - AE Energy
|
||||
@@ -46,23 +46,22 @@ public enum PowerUnits {
|
||||
|
||||
/**
|
||||
* do power conversion using AE's conversion rates.
|
||||
*
|
||||
* <p>
|
||||
* Example: PowerUnits.EU.convertTo( PowerUnits.AE, 32 );
|
||||
*
|
||||
* <p>
|
||||
* will normally returns 64, as it will convert the EU, to AE with AE's power
|
||||
* settings.
|
||||
*
|
||||
* @param target target power unit
|
||||
* @param value value
|
||||
*
|
||||
* @return value converted to target units, from this units.
|
||||
*/
|
||||
public double convertTo(final PowerUnits target, final double value) {
|
||||
return (value * this.conversionRatio) / target.conversionRatio;
|
||||
}
|
||||
|
||||
public ITextComponent textComponent() {
|
||||
return new TranslationTextComponent(unlocalizedName);
|
||||
public Text textComponent() {
|
||||
return new TranslatableText(unlocalizedName);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,6 +23,11 @@
|
||||
|
||||
package appeng.api.config;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
|
||||
/**
|
||||
* Represent the security systems basic permissions, these are not for
|
||||
* anti-griefing, they are part of the mod as a gameplay feature.
|
||||
@@ -58,13 +63,22 @@ public enum SecurityPermissions {
|
||||
*/
|
||||
SECURITY;
|
||||
|
||||
private final String translationKey = "gui.appliedenergistics2.security." + this.name().toLowerCase();
|
||||
private final String translationKey = "gui.appliedenergistics2.security." + this.name().toLowerCase(Locale.ROOT);
|
||||
|
||||
public String getTranslatedName() {
|
||||
return this.translationKey + ".name";
|
||||
}
|
||||
|
||||
public Text nameText() {
|
||||
return new TranslatableText(getTranslatedName());
|
||||
}
|
||||
|
||||
public String getTranslatedTip() {
|
||||
return this.translationKey + ".tip";
|
||||
}
|
||||
|
||||
public Text tooltipText() {
|
||||
return new TranslatableText(getTranslatedTip());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,17 +23,24 @@
|
||||
|
||||
package appeng.api.config;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IItemProvider;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.item.ItemConvertible;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
|
||||
public enum Upgrades {
|
||||
/**
|
||||
@@ -48,7 +55,7 @@ public enum Upgrades {
|
||||
|
||||
private final int tier;
|
||||
private final List<Supported> supported = new ArrayList<>();
|
||||
private List<ITextComponent> supportedTooltipLines;
|
||||
private List<Text> supportedTooltipLines;
|
||||
|
||||
Upgrades(final int tier) {
|
||||
this.tier = tier;
|
||||
@@ -62,7 +69,7 @@ public enum Upgrades {
|
||||
return this.supported;
|
||||
}
|
||||
|
||||
public void registerItem(final IItemProvider item, final int maxSupported) {
|
||||
public void registerItem(final ItemConvertible item, final int maxSupported) {
|
||||
this.registerItem(item, maxSupported, null);
|
||||
}
|
||||
|
||||
@@ -72,40 +79,41 @@ public enum Upgrades {
|
||||
* @param item machine in which this upgrade can be installed
|
||||
* @param maxSupported amount how many upgrades can be installed
|
||||
* @param tooltipGroup If more than one item of the same group are supported,
|
||||
* the tooltip will show this group name instead. If the
|
||||
* items have different maxSupported values, the highest
|
||||
* the tooltip will show this translation key instead. If
|
||||
* the items have different maxSupported values, the highest
|
||||
* will be shown.
|
||||
*/
|
||||
public void registerItem(final IItemProvider item, final int maxSupported, @Nullable ITextComponent tooltipGroup) {
|
||||
public void registerItem(final ItemConvertible item, final int maxSupported, @Nullable String tooltipGroup) {
|
||||
Preconditions.checkNotNull(item);
|
||||
this.supported.add(new Supported(item.asItem(), maxSupported, tooltipGroup));
|
||||
supportedTooltipLines = null; // Reset tooltip
|
||||
}
|
||||
|
||||
public List<ITextComponent> getTooltipLines() {
|
||||
@Environment(EnvType.CLIENT)
|
||||
public List<Text> getTooltipLines() {
|
||||
if (supportedTooltipLines == null) {
|
||||
supported.sort(Comparator.comparingInt(o -> o.maxCount));
|
||||
supportedTooltipLines = new ArrayList<>(supported.size());
|
||||
|
||||
// Use a separate set because the final text will include numbers
|
||||
Set<ITextComponent> namesAdded = new HashSet<>();
|
||||
Set<Text> namesAdded = new HashSet<>();
|
||||
|
||||
for (int i = 0; i < supported.size(); i++) {
|
||||
Supported supported = this.supported.get(i);
|
||||
ITextComponent name = supported.item.getName();
|
||||
Text name = supported.item.getName();
|
||||
|
||||
// If the group was already added by a previous item, skip this
|
||||
if (supported.tooltipGroup != null && namesAdded.contains(supported.tooltipGroup)) {
|
||||
if (supported.getTooltipGroup() != null && namesAdded.contains(supported.getTooltipGroup())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// If any of the following items would be of the same group, use the group name
|
||||
// instead
|
||||
if (supported.tooltipGroup != null) {
|
||||
if (supported.getTooltipGroup() != null) {
|
||||
for (int j = i + 1; j < this.supported.size(); j++) {
|
||||
ITextComponent otherGroup = this.supported.get(j).tooltipGroup;
|
||||
if (supported.tooltipGroup.equals(otherGroup)) {
|
||||
name = supported.tooltipGroup;
|
||||
Text otherGroup = this.supported.get(j).getTooltipGroup();
|
||||
if (supported.getTooltipGroup().equals(otherGroup)) {
|
||||
name = supported.getTooltipGroup();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -114,7 +122,7 @@ public enum Upgrades {
|
||||
if (namesAdded.add(name)) {
|
||||
// append the supported count only if its > 1
|
||||
if (supported.maxCount > 1) {
|
||||
name = name.deepCopy().appendText(" (" + supported.maxCount + ")");
|
||||
name = name.copy().append(" (" + supported.maxCount + ")");
|
||||
}
|
||||
supportedTooltipLines.add(name);
|
||||
}
|
||||
@@ -132,13 +140,14 @@ public enum Upgrades {
|
||||
private final Item item;
|
||||
private final Block block;
|
||||
private final int maxCount;
|
||||
// Translation key of the tooltip group
|
||||
@Nullable
|
||||
private final ITextComponent tooltipGroup;
|
||||
private final String tooltipGroup;
|
||||
|
||||
public Supported(Item item, int maxCount, @Nullable ITextComponent tooltipGroup) {
|
||||
public Supported(Item item, int maxCount, @Nullable String tooltipGroup) {
|
||||
this.item = item;
|
||||
if (item.getItem() instanceof BlockItem) {
|
||||
this.block = ((BlockItem) item.getItem()).getBlock();
|
||||
if (item instanceof BlockItem) {
|
||||
this.block = ((BlockItem) item).getBlock();
|
||||
} else {
|
||||
this.block = null;
|
||||
}
|
||||
@@ -158,6 +167,10 @@ public enum Upgrades {
|
||||
return item != null && this.item == item;
|
||||
}
|
||||
|
||||
public Text getTooltipGroup() {
|
||||
return this.tooltipGroup != null ? new TranslatableText(this.tooltipGroup) : null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 TeamAppliedEnergistics
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package appeng.api.crafting;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.recipe.CraftingRecipe;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
|
||||
public interface ICraftingHelper {
|
||||
|
||||
/**
|
||||
* Checks that the given item stack is an encoded pattern.
|
||||
*/
|
||||
boolean isEncodedPattern(@Nullable IAEItemStack item);
|
||||
|
||||
/**
|
||||
* Checks that the given item stack is an encoded pattern.
|
||||
*/
|
||||
boolean isEncodedPattern(ItemStack item);
|
||||
|
||||
/**
|
||||
* Encodes a processing pattern which represents the ability to convert the
|
||||
* given inputs into the given outputs using some process external to the ME
|
||||
* system.
|
||||
*
|
||||
* @param stack If null, a new item will be created to hold the encoded pattern.
|
||||
* Otherwise the given item must already contains an encoded
|
||||
* pattern that will be overwritten.
|
||||
* @return A new encoded pattern, or the given stack with the pattern encoded in
|
||||
* it.
|
||||
*/
|
||||
ItemStack encodeProcessingPattern(@Nullable ItemStack stack, ItemStack[] in, ItemStack[] out);
|
||||
|
||||
/**
|
||||
* Encodes a crafting pattern which represents a Vanilla crafting recipe.
|
||||
*
|
||||
* @param stack If null, a new item will be created to hold the
|
||||
* encoded pattern. Otherwise the given item must
|
||||
* already contains an encoded pattern that will be
|
||||
* overwritten.
|
||||
* @param recipe The Vanilla crafting recipe to be encoded.
|
||||
* @param in The items in the crafting grid, which are used to
|
||||
* determine what items are supplied from the ME system
|
||||
* to craft using this pattern.
|
||||
* @param out What is to be expected as the result of this crafting
|
||||
* operation by the ME system.
|
||||
* @param allowSubstitutes Controls whether the ME system will allow the use of
|
||||
* equivalent items to craft this recipe.
|
||||
*/
|
||||
ItemStack encodeCraftingPattern(@Nullable ItemStack stack, CraftingRecipe recipe, ItemStack[] in, ItemStack out,
|
||||
boolean allowSubstitutes);
|
||||
|
||||
/**
|
||||
* Same as {@link #decodePattern(ItemStack, World, boolean)} with no auto
|
||||
* recovery of changed recipe ids.
|
||||
*/
|
||||
@Nullable
|
||||
default ICraftingPatternDetails decodePattern(@Nonnull ItemStack itemStack, @Nonnull World world) {
|
||||
return decodePattern(itemStack, world, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decodes an encoded crafting pattern and returns the pattern details.
|
||||
* <p>
|
||||
* The item backing the {@link ItemStack} needs to be an item returned by the
|
||||
* encode methods of this class.
|
||||
*
|
||||
* @param itemStack pattern
|
||||
* @param world world used to access the
|
||||
* {@link net.minecraft.recipe.RecipeManager}.
|
||||
* @param autoRecovery If true, the method will try to recover from changed
|
||||
* recipe ids by searching the entire recipe manager for a
|
||||
* recipe matching the inputs. If this is successful, the
|
||||
* given item stack will be changed to reflect the new
|
||||
* recipe id.
|
||||
* @return The pattern details if the pattern could be decoded. Otherwise null.
|
||||
*/
|
||||
@Nullable
|
||||
ICraftingPatternDetails decodePattern(@Nonnull ItemStack itemStack, @Nonnull World world, boolean autoRecovery);
|
||||
|
||||
}
|
||||
@@ -23,7 +23,7 @@ import java.util.Optional;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.BlockView;
|
||||
|
||||
public interface IBlockDefinition extends IItemDefinition {
|
||||
/**
|
||||
@@ -49,8 +49,7 @@ public interface IBlockDefinition extends IItemDefinition {
|
||||
*
|
||||
* @param world world of block
|
||||
* @param pos location
|
||||
*
|
||||
* @return if the block is placed in the world at the specific location.
|
||||
*/
|
||||
boolean isSameAs(IBlockReader world, BlockPos pos);
|
||||
boolean isSameAs(BlockView world, BlockPos pos);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@ public interface IComparableDefinition {
|
||||
* Compare {@link ItemStack} with this
|
||||
*
|
||||
* @param comparableStack compared item
|
||||
*
|
||||
* @return true if the item stack is a matching item.
|
||||
*/
|
||||
boolean isSameAs(ItemStack comparableStack);
|
||||
|
||||
@@ -29,12 +29,12 @@ import java.util.Set;
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemConvertible;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IItemProvider;
|
||||
|
||||
import appeng.api.features.AEFeature;
|
||||
|
||||
public interface IItemDefinition extends IComparableDefinition, IItemProvider {
|
||||
public interface IItemDefinition extends IComparableDefinition, ItemConvertible {
|
||||
/**
|
||||
* @return the unique name of the definition which will be used to register the
|
||||
* underlying structure. Will never be null
|
||||
|
||||
@@ -20,11 +20,11 @@ package appeng.api.definitions;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
|
||||
public interface ITileDefinition extends IBlockDefinition {
|
||||
/**
|
||||
* @return the {@link TileEntity} Class if applicable.
|
||||
* @return the {@link BlockEntity} Class if applicable.
|
||||
*/
|
||||
Optional<? extends Class<? extends TileEntity>> maybeEntity();
|
||||
Optional<? extends Class<? extends BlockEntity>> maybeEntity();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package appeng.api.definitions;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
// Private helper class to create AE2 resource locations
|
||||
final class IdHelper {
|
||||
@@ -11,8 +11,8 @@ final class IdHelper {
|
||||
/**
|
||||
* Creates a ResourceLocation namespaced to AE2.
|
||||
*/
|
||||
static ResourceLocation id(String id) {
|
||||
return new ResourceLocation("appliedenergistics2", id);
|
||||
static Identifier id(String id) {
|
||||
return new Identifier("appliedenergistics2", id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,26 +23,28 @@
|
||||
|
||||
package appeng.api.events;
|
||||
|
||||
import net.minecraftforge.eventbus.api.Event;
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
||||
import appeng.api.features.ILocatable;
|
||||
|
||||
/**
|
||||
* Input Event:
|
||||
*
|
||||
* <p>
|
||||
* Used to Notify the Location Registry of objects, and their availability.
|
||||
*/
|
||||
public class LocatableEventAnnounce extends Event {
|
||||
public interface LocatableEventAnnounce {
|
||||
|
||||
public final ILocatable target;
|
||||
public final LocatableEvent change;
|
||||
Event<LocatableEventAnnounce> EVENT = EventFactory.createArrayBacked(LocatableEventAnnounce.class,
|
||||
listeners -> (ILocatable target, LocatableEvent change) -> {
|
||||
for (LocatableEventAnnounce listener : listeners) {
|
||||
listener.onLocatableAnnounce(target, change);
|
||||
}
|
||||
});
|
||||
|
||||
public LocatableEventAnnounce(final ILocatable o, final LocatableEvent ev) {
|
||||
this.target = o;
|
||||
this.change = ev;
|
||||
}
|
||||
void onLocatableAnnounce(final ILocatable target, final LocatableEvent change);
|
||||
|
||||
public enum LocatableEvent {
|
||||
enum LocatableEvent {
|
||||
/**
|
||||
* Adds the locatable to the registry
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package appeng.api.events;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface LocatableEventCallback {
|
||||
|
||||
void onLocatable(LocatableEventAnnounce.LocatableEvent evt);
|
||||
|
||||
}
|
||||
@@ -28,7 +28,7 @@ import appeng.api.networking.IGridNode;
|
||||
/**
|
||||
* Exception occurred because of an already existing connection between the two
|
||||
* {@link IGridNode}s
|
||||
*
|
||||
* <p>
|
||||
* Intended to signal an internal exception and not intended to be thrown by any
|
||||
* 3rd party module.
|
||||
*
|
||||
|
||||
@@ -27,10 +27,10 @@ import appeng.api.networking.IGridNode;
|
||||
|
||||
/**
|
||||
* Exception indicating a failed connection between two {@link IGridNode}s.
|
||||
*
|
||||
* <p>
|
||||
* Intended to signal an internal exception and not intended to be thrown by any
|
||||
* 3rd party module.
|
||||
*
|
||||
* <p>
|
||||
* See any subclass for a more specific reason.
|
||||
*
|
||||
* @author AlgorithmX2
|
||||
|
||||
@@ -25,7 +25,7 @@ package appeng.api.exceptions;
|
||||
|
||||
/**
|
||||
* Exception due to trying to connect one or more null values.
|
||||
*
|
||||
* <p>
|
||||
* Intended to signal an internal exception and not intended to be thrown by any
|
||||
* 3rd party module.
|
||||
*
|
||||
|
||||
@@ -25,7 +25,7 @@ package appeng.api.exceptions;
|
||||
|
||||
/**
|
||||
* Exception due to trying to connect different security realms.
|
||||
*
|
||||
* <p>
|
||||
* Intended to signal an internal exception and not intended to be thrown by any
|
||||
* 3rd party module.
|
||||
*
|
||||
|
||||
@@ -33,12 +33,12 @@ import appeng.api.implementations.items.IAEItemPowerStorage;
|
||||
/**
|
||||
* A registry to allow mapping {@link Item}s to a specific charge rate when
|
||||
* being placed inside a charger.
|
||||
*
|
||||
* <p>
|
||||
* The registry is used in favor of an additional method for
|
||||
* {@link IAEItemPowerStorage} with a fixed value per item. This allows more
|
||||
* flexibility for other charger like machines to choose their own values when
|
||||
* needed.
|
||||
*
|
||||
* <p>
|
||||
* There is no guarantee that this is charged per tick, it only represents the
|
||||
* value per operation. By default this is one charging operation every 10 ticks
|
||||
* in case of an AE2 charger.
|
||||
@@ -51,7 +51,7 @@ public interface IChargerRegistry {
|
||||
|
||||
/**
|
||||
* Fetch a charge rate for a specific item.
|
||||
*
|
||||
* <p>
|
||||
* The specific item does not need to have a mapping registered at all. In this
|
||||
* case it will use a default value of 160 AE.
|
||||
*
|
||||
@@ -63,7 +63,7 @@ public interface IChargerRegistry {
|
||||
|
||||
/**
|
||||
* Register a custom charge rate for a specific item.
|
||||
*
|
||||
* <p>
|
||||
* Capped at 16000 to avoid extracting too much energy from a network for each
|
||||
* operation. This is done silently without any feedback or exception. Further
|
||||
* the cap is not fixed, it can change at any time in the future should power
|
||||
@@ -76,7 +76,7 @@ public interface IChargerRegistry {
|
||||
|
||||
/**
|
||||
* Remove the custom rate for a specific item.
|
||||
*
|
||||
* <p>
|
||||
* It will revert to the default value afterwards.
|
||||
*
|
||||
* @param item A {@link Item} implementing {@link IAEItemPowerStorage}.
|
||||
|
||||
@@ -37,7 +37,6 @@ public interface IItemComparisonProvider {
|
||||
* supplied item.
|
||||
*
|
||||
* @param is item
|
||||
*
|
||||
* @return IItemComparison, or null
|
||||
*/
|
||||
IItemComparison getComparison(ItemStack is);
|
||||
@@ -47,7 +46,6 @@ public interface IItemComparisonProvider {
|
||||
* function. )
|
||||
*
|
||||
* @param stack item
|
||||
*
|
||||
* @return true, if getComparison will return a valid IItemComparison Object
|
||||
*/
|
||||
boolean canHandle(ItemStack stack);
|
||||
|
||||
@@ -32,7 +32,6 @@ public interface ILocatableRegistry {
|
||||
* Gets the {@link ILocatable} with the registered serial, if available
|
||||
*
|
||||
* @param serial serial
|
||||
*
|
||||
* @return requestedObject, or null, if the object does not exist anymore
|
||||
*/
|
||||
ILocatable getLocatableBy(long serial);
|
||||
|
||||
@@ -25,7 +25,7 @@ package appeng.api.features;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public interface IMatterCannonAmmoRegistry {
|
||||
|
||||
@@ -45,13 +45,12 @@ public interface IMatterCannonAmmoRegistry {
|
||||
* @param ammoTag item tag id
|
||||
* @param weight atomic weight
|
||||
*/
|
||||
void registerAmmoTag(ResourceLocation ammoTag, double weight);
|
||||
void registerAmmoTag(Identifier ammoTag, double weight);
|
||||
|
||||
/**
|
||||
* get the penetration value for a particular ammo, 0 indicates a non-ammo.
|
||||
*
|
||||
* @param is ammo
|
||||
*
|
||||
* @return 0 or a valid penetration value.
|
||||
*/
|
||||
float getPenetration(ItemStack is);
|
||||
|
||||
@@ -31,7 +31,6 @@ public interface INetworkEncodable {
|
||||
* Used to get the current key from the item.
|
||||
*
|
||||
* @param item item
|
||||
*
|
||||
* @return string key of item
|
||||
*/
|
||||
String getEncryptionKey(ItemStack item);
|
||||
|
||||
@@ -27,7 +27,8 @@ import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
|
||||
import alexiil.mc.lib.attributes.Attribute;
|
||||
|
||||
import appeng.api.config.TunnelType;
|
||||
|
||||
@@ -48,13 +49,12 @@ public interface IP2PTunnelRegistry {
|
||||
|
||||
void addNewAttunement(@Nonnull String ModId, @Nullable TunnelType type);
|
||||
|
||||
void addNewAttunement(@Nonnull Capability<?> cap, @Nullable TunnelType type);
|
||||
void addNewAttunement(@Nonnull Attribute<?> attr, @Nullable TunnelType type);
|
||||
|
||||
/**
|
||||
* returns null if no attunement can be found.
|
||||
*
|
||||
* @param trigger attunement trigger
|
||||
*
|
||||
* @return null if no attunement can be found or attunement
|
||||
*/
|
||||
@Nonnull
|
||||
|
||||
@@ -38,21 +38,18 @@ public interface IPlayerRegistry {
|
||||
|
||||
/**
|
||||
* @param gameProfile user game profile
|
||||
*
|
||||
* @return user id of a username.
|
||||
*/
|
||||
int getID(GameProfile gameProfile);
|
||||
|
||||
/**
|
||||
* @param player player
|
||||
*
|
||||
* @return user id of a player entity.
|
||||
*/
|
||||
int getID(PlayerEntity player);
|
||||
|
||||
/**
|
||||
* @param playerID to be found player id
|
||||
*
|
||||
* @return PlayerEntity, or null if the player could not be found.
|
||||
*/
|
||||
@Nullable
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
package appeng.api.features;
|
||||
|
||||
import appeng.api.AEInjectable;
|
||||
import appeng.api.movable.IMovableRegistry;
|
||||
import appeng.api.networking.IGridCacheRegistry;
|
||||
import appeng.api.parts.IPartModels;
|
||||
@@ -36,7 +35,6 @@ import appeng.api.storage.ICellRegistry;
|
||||
* @version 7
|
||||
* @since rv0
|
||||
*/
|
||||
@AEInjectable
|
||||
public interface IRegistryContainer {
|
||||
|
||||
/**
|
||||
|
||||
@@ -35,7 +35,6 @@ public interface IWirelessTermHandler extends INetworkEncodable {
|
||||
|
||||
/**
|
||||
* @param is wireless terminal
|
||||
*
|
||||
* @return true, if usePower, hasPower, etc... can be called for the provided
|
||||
* item
|
||||
*/
|
||||
@@ -47,7 +46,6 @@ public interface IWirelessTermHandler extends INetworkEncodable {
|
||||
* @param amount is in AE units ( 5 per MJ ), if you return false, the item
|
||||
* should be dead and return false for hasPower
|
||||
* @param is wireless terminal
|
||||
*
|
||||
* @return true if wireless terminal uses power
|
||||
*/
|
||||
boolean usePower(PlayerEntity player, double amount, ItemStack is);
|
||||
@@ -56,7 +54,6 @@ public interface IWirelessTermHandler extends INetworkEncodable {
|
||||
* gets the power status of the item.
|
||||
*
|
||||
* @param is wireless terminal
|
||||
*
|
||||
* @return returns true if there is any power left.
|
||||
*/
|
||||
boolean hasPower(PlayerEntity player, double amount, ItemStack is);
|
||||
@@ -65,7 +62,6 @@ public interface IWirelessTermHandler extends INetworkEncodable {
|
||||
* Return the config manager for the wireless terminal.
|
||||
*
|
||||
* @param is wireless terminal
|
||||
*
|
||||
* @return config manager of wireless terminal
|
||||
*/
|
||||
IConfigManager getConfigManager(ItemStack is);
|
||||
|
||||
@@ -26,7 +26,7 @@ package appeng.api.features;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.BlockView;
|
||||
|
||||
/**
|
||||
* Registration record for a Custom Cell handler.
|
||||
@@ -42,7 +42,6 @@ public interface IWirelessTermRegistry {
|
||||
|
||||
/**
|
||||
* @param is item which might have a handler
|
||||
*
|
||||
* @return true if there is a handler for this item
|
||||
*/
|
||||
boolean isWirelessTerminal(ItemStack is);
|
||||
@@ -58,5 +57,5 @@ public interface IWirelessTermRegistry {
|
||||
* opens the wireless terminal gui, the wireless terminal item, must be in the
|
||||
* active slot on the tool bar.
|
||||
*/
|
||||
void openWirelessTerminalGui(ItemStack item, IBlockReader world, PlayerEntity player, Hand hand);
|
||||
void openWirelessTerminalGui(ItemStack item, BlockView world, PlayerEntity player, Hand hand);
|
||||
}
|
||||
|
||||
@@ -23,19 +23,16 @@
|
||||
|
||||
package appeng.api.features;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.dimension.Dimension;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public interface IWorldGen {
|
||||
|
||||
void disableWorldGenForProviderID(WorldGenType type, Class<? extends Dimension> provider);
|
||||
void enableWorldGenForDimension(WorldGenType type, Identifier dimID);
|
||||
|
||||
void enableWorldGenForDimension(WorldGenType type, ResourceLocation dimID);
|
||||
void disableWorldGenForDimension(WorldGenType type, Identifier dimID);
|
||||
|
||||
void disableWorldGenForDimension(WorldGenType type, ResourceLocation dimID);
|
||||
|
||||
boolean isWorldGenEnabled(WorldGenType type, IWorld w);
|
||||
boolean isWorldGenEnabled(WorldGenType type, ServerWorld w);
|
||||
|
||||
enum WorldGenType {
|
||||
CERTUS_QUARTZ, CHARGED_CERTUS_QUARTZ, METEORITES
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2013 AlgorithmX2
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package appeng.api.implementations;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||
|
||||
/**
|
||||
* Implemented on {@link Item}
|
||||
*/
|
||||
public interface ICraftingPatternItem {
|
||||
|
||||
/**
|
||||
* Access Details about a pattern
|
||||
*
|
||||
* @param is pattern
|
||||
* @param w crafting world
|
||||
*
|
||||
* @return details of pattern
|
||||
*/
|
||||
ICraftingPatternDetails getPatternForItem(ItemStack is, World w);
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
package appeng.api.implementations;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
|
||||
import appeng.api.config.Upgrades;
|
||||
import appeng.api.implementations.tiles.ISegmentedInventory;
|
||||
@@ -39,7 +39,7 @@ public interface IUpgradeableHost extends IConfigurableObject, ISegmentedInvento
|
||||
/**
|
||||
* the tile...
|
||||
*
|
||||
* @return tile entity
|
||||
* @return block entity
|
||||
*/
|
||||
TileEntity getTile();
|
||||
BlockEntity getTile();
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2013 AlgorithmX2
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package appeng.api.implementations;
|
||||
|
||||
/**
|
||||
* Defines the result of performing a transition from the world into a storage
|
||||
* cell, if its possible, and what the energy usage is.
|
||||
*/
|
||||
public class TransitionResult {
|
||||
public final boolean success;
|
||||
public final double energyUsage;
|
||||
|
||||
public TransitionResult(final boolean success, final double power) {
|
||||
this.success = success;
|
||||
this.energyUsage = power;
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,6 @@ import net.minecraft.world.World;
|
||||
*/
|
||||
public interface IGuiItem {
|
||||
/**
|
||||
*
|
||||
* @param is The item used to open the container.
|
||||
* @param playerInventorySlot The slot in the player's inventory the item is in.
|
||||
* @param world The world the player is in.
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
package appeng.api.implementations.guiobjects;
|
||||
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import alexiil.mc.lib.attributes.item.FixedItemInv;
|
||||
|
||||
import appeng.api.networking.IGridHost;
|
||||
|
||||
@@ -33,5 +33,5 @@ import appeng.api.networking.IGridHost;
|
||||
public interface INetworkTool extends IGuiItemObject {
|
||||
IGridHost getGridHost(); // null for most purposes.
|
||||
|
||||
IItemHandler getInventory();
|
||||
FixedItemInv getInventory();
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@ public interface IAEItemPowerStorage {
|
||||
* return it.
|
||||
*
|
||||
* @param amount to be extracted power from device
|
||||
*
|
||||
* @return what it could extract
|
||||
*/
|
||||
double extractAEPower(ItemStack stack, double amount, Actionable mode);
|
||||
|
||||
@@ -38,7 +38,6 @@ public interface IAEWrench {
|
||||
*
|
||||
* @param player wrenching player
|
||||
* @param pos of block.
|
||||
*
|
||||
* @return true if wrench can be used
|
||||
*/
|
||||
boolean canWrench(ItemStack wrench, PlayerEntity player, BlockPos pos);
|
||||
|
||||
@@ -48,7 +48,6 @@ public interface IBiometricCard {
|
||||
|
||||
/**
|
||||
* @param itemStack card
|
||||
*
|
||||
* @return the full list of permissions encoded on the card.
|
||||
*/
|
||||
EnumSet<SecurityPermissions> getPermissions(ItemStack itemStack);
|
||||
@@ -57,7 +56,6 @@ public interface IBiometricCard {
|
||||
* Check if a permission is encoded on the card.
|
||||
*
|
||||
* @param permission card
|
||||
*
|
||||
* @return true if this permission is set on the card.
|
||||
*/
|
||||
boolean hasPermission(ItemStack is, SecurityPermissions permission);
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
package appeng.api.implementations.items;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.Material;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface IGrowableCrystal {
|
||||
|
||||
@@ -25,13 +25,13 @@ package appeng.api.implementations.items;
|
||||
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
||||
import appeng.api.util.AEColor;
|
||||
|
||||
/**
|
||||
* Memory Card API
|
||||
*
|
||||
* <p>
|
||||
* AE's Memory Card Item Class implements this interface.
|
||||
*/
|
||||
public interface IMemoryCard {
|
||||
@@ -39,21 +39,21 @@ public interface IMemoryCard {
|
||||
/**
|
||||
* Configures the data stored on the memory card, the SettingsName, will be
|
||||
* localized when displayed.
|
||||
*
|
||||
* <p>
|
||||
* The data can contain an optional string with the key "tooltip", which will be
|
||||
* used as unlocalized string to display it after the settings name.
|
||||
*
|
||||
* <p>
|
||||
* The data can contain an optional intArray using "colorCode" to be displayed
|
||||
* on the model itself. It needs to have exactly 8 elements representing the
|
||||
* ordinal of the matching {@link AEColor}. The first 4 values represent the top
|
||||
* row, left to right. The second 4 the bottom row.
|
||||
*
|
||||
* @param is item
|
||||
* @param settingsName unlocalized string that represents the tile entity.
|
||||
* @param settingsName unlocalized string that represents the block entity.
|
||||
* @param data the NBT tag, refer to the normal comment for special
|
||||
* keys.
|
||||
*/
|
||||
void setMemoryCardContents(ItemStack is, String settingsName, CompoundNBT data);
|
||||
void setMemoryCardContents(ItemStack is, String settingsName, CompoundTag data);
|
||||
|
||||
/**
|
||||
* returns the settings name provided by a previous call to
|
||||
@@ -61,27 +61,24 @@ public interface IMemoryCard {
|
||||
* call to setMemoryCardContents.
|
||||
*
|
||||
* @param is item
|
||||
*
|
||||
* @return setting name
|
||||
*/
|
||||
String getSettingsName(ItemStack is);
|
||||
|
||||
/**
|
||||
* @param is item
|
||||
*
|
||||
* @return the NBT Data previously saved by setMemoryCardContents, or an empty
|
||||
* NBTCompound
|
||||
*/
|
||||
CompoundNBT getData(ItemStack is);
|
||||
CompoundTag getData(ItemStack is);
|
||||
|
||||
/**
|
||||
* This represent as 4x2 grid of {@link AEColor} without transparent/fluix
|
||||
* color.
|
||||
*
|
||||
* <p>
|
||||
* First 4 colors are used for the top row, second for the bottom one.
|
||||
*
|
||||
* @param is item
|
||||
*
|
||||
* @return a hash representation of the memory card content
|
||||
*/
|
||||
AEColor[] getColorCode(ItemStack is);
|
||||
|
||||
@@ -25,10 +25,8 @@ package appeng.api.implementations.items;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.dimension.DimensionType;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
|
||||
import appeng.api.implementations.TransitionResult;
|
||||
import appeng.api.util.WorldCoord;
|
||||
|
||||
/**
|
||||
@@ -38,26 +36,23 @@ public interface ISpatialStorageCell {
|
||||
|
||||
/**
|
||||
* @param is spatial storage cell
|
||||
*
|
||||
* @return true if this item is a spatial storage cell
|
||||
*/
|
||||
boolean isSpatialStorage(ItemStack is);
|
||||
|
||||
/**
|
||||
* @param is spatial storage cell
|
||||
*
|
||||
* @return the maximum size of the spatial storage cell along any given axis
|
||||
*/
|
||||
int getMaxStoredDim(ItemStack is);
|
||||
|
||||
/**
|
||||
* get the currently stored Dimension id.
|
||||
* get the currently stored spatial storage plot id.
|
||||
*
|
||||
* @param is spatial storage cell
|
||||
*
|
||||
* @return dimension id or -1
|
||||
* @return plot id or -1
|
||||
*/
|
||||
DimensionType getStoredDimension(ItemStack is);
|
||||
int getAllocatedPlotId(ItemStack is);
|
||||
|
||||
/**
|
||||
* Perform a spatial swap with the contents of the cell, and the world.
|
||||
@@ -67,8 +62,7 @@ public interface ISpatialStorageCell {
|
||||
* @param min min coord
|
||||
* @param max max coord
|
||||
* @param playerId owner of current grid or -1
|
||||
*
|
||||
* @return result of transition
|
||||
* @return success of transition
|
||||
*/
|
||||
TransitionResult doSpatialTransition(ItemStack is, World w, WorldCoord min, WorldCoord max, int playerId);
|
||||
boolean doSpatialTransition(ItemStack is, ServerWorld w, WorldCoord min, WorldCoord max, int playerId);
|
||||
}
|
||||
@@ -28,18 +28,25 @@ import javax.annotation.Nonnull;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import appeng.api.storage.IStorageChannel;
|
||||
import appeng.api.storage.cells.ICellHandler;
|
||||
import appeng.api.storage.cells.ICellInventory;
|
||||
import appeng.api.storage.cells.ICellWorkbenchItem;
|
||||
import appeng.api.storage.data.IAEStack;
|
||||
|
||||
/**
|
||||
* Any item which implements this can be treated as an IMEInventory via
|
||||
* Util.getCell / Util.isCell It automatically handles the internals and NBT
|
||||
* data, which is both nice, and bad for you!
|
||||
*
|
||||
* {@link ICellHandler#getCellInventory(ItemStack, appeng.api.storage.cells.ISaveProvider, IStorageChannel)}
|
||||
* or {@link ICellHandler#isCell(ItemStack)}. It automatically handles the
|
||||
* internals and NBT data, which is both nice, and bad for you!
|
||||
* <p>
|
||||
* Good cause it means you don't have to do anything, bad because you have
|
||||
* little to no control over it.
|
||||
*
|
||||
* The standard AE implementation only provides 1-63 Types
|
||||
* <p>
|
||||
* Limited to {@link Integer} internally for most calculations. E.g. if the used
|
||||
* or remaining bytes would overflow {@link Integer#MAX_VALUE} the behaviour is
|
||||
* no longer specified. Even if {@link ICellInventory} is using {@link Long}.
|
||||
* <p>
|
||||
* The standard AE implementation also only provides 1-63 Types.
|
||||
*/
|
||||
public interface IStorageCell<T extends IAEStack<T>> extends ICellWorkbenchItem {
|
||||
|
||||
@@ -48,7 +55,6 @@ public interface IStorageCell<T extends IAEStack<T>> extends ICellWorkbenchItem
|
||||
* ({@link Integer#MAX_VALUE} + 1) / 8.
|
||||
*
|
||||
* @param cellItem item
|
||||
*
|
||||
* @return number of bytes
|
||||
*/
|
||||
int getBytes(@Nonnull ItemStack cellItem);
|
||||
@@ -57,7 +63,6 @@ public interface IStorageCell<T extends IAEStack<T>> extends ICellWorkbenchItem
|
||||
* Determines the number of bytes used for any type included on the cell.
|
||||
*
|
||||
* @param cellItem item
|
||||
*
|
||||
* @return number of bytes
|
||||
*/
|
||||
int getBytesPerType(@Nonnull ItemStack cellItem);
|
||||
@@ -67,7 +72,6 @@ public interface IStorageCell<T extends IAEStack<T>> extends ICellWorkbenchItem
|
||||
* item.
|
||||
*
|
||||
* @param cellItem item
|
||||
*
|
||||
* @return number of types
|
||||
*/
|
||||
int getTotalTypes(@Nonnull ItemStack cellItem);
|
||||
@@ -79,7 +83,6 @@ public interface IStorageCell<T extends IAEStack<T>> extends ICellWorkbenchItem
|
||||
*
|
||||
* @param cellItem item
|
||||
* @param requestedAddition requested addition
|
||||
*
|
||||
* @return true to preventAdditionOfItem
|
||||
*/
|
||||
boolean isBlackListed(@Nonnull ItemStack cellItem, @Nonnull T requestedAddition);
|
||||
@@ -99,7 +102,6 @@ public interface IStorageCell<T extends IAEStack<T>> extends ICellWorkbenchItem
|
||||
* Allows an item to selectively enable or disable its status as a storage cell.
|
||||
*
|
||||
* @param i item
|
||||
*
|
||||
* @return if the ItemStack should behavior as a storage cell.
|
||||
*/
|
||||
boolean isStorageCell(@Nonnull ItemStack i);
|
||||
|
||||
@@ -37,7 +37,6 @@ public interface IStorageComponent {
|
||||
* condenser.
|
||||
*
|
||||
* @param is item
|
||||
*
|
||||
* @return number of bytes
|
||||
*/
|
||||
int getBytes(ItemStack is);
|
||||
@@ -46,7 +45,6 @@ public interface IStorageComponent {
|
||||
* Just true or false for the item stack.
|
||||
*
|
||||
* @param is item
|
||||
*
|
||||
* @return true if item is a storage component
|
||||
*/
|
||||
boolean isStorageComponent(ItemStack is);
|
||||
|
||||
@@ -31,7 +31,6 @@ public interface IUpgradeModule {
|
||||
|
||||
/**
|
||||
* @param itemstack item with potential upgrades
|
||||
*
|
||||
* @return null, or a valid upgrade type.
|
||||
*/
|
||||
Upgrades getType(ItemStack itemstack);
|
||||
|
||||
@@ -26,7 +26,7 @@ package appeng.api.implementations.parts;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.Direction;
|
||||
|
||||
import appeng.api.networking.IGridHost;
|
||||
import appeng.api.parts.BusSupport;
|
||||
@@ -62,14 +62,13 @@ public interface ICablePart extends IPart, IGridHost {
|
||||
* something.
|
||||
*
|
||||
* @param newColor new color
|
||||
*
|
||||
* @return if the color change was successful.
|
||||
*/
|
||||
boolean changeColor(AEColor newColor, PlayerEntity who);
|
||||
|
||||
/**
|
||||
* Change sides on the cables node.
|
||||
*
|
||||
* <p>
|
||||
* Called by AE, do not invoke.
|
||||
*
|
||||
* @param sides sides of cable
|
||||
@@ -80,7 +79,6 @@ public interface ICablePart extends IPart, IGridHost {
|
||||
* used to tests if a cable connects to neighbors visually.
|
||||
*
|
||||
* @param side neighbor side
|
||||
*
|
||||
* @return true if this side is currently connects to an external block.
|
||||
*/
|
||||
boolean isConnected(Direction side);
|
||||
|
||||
@@ -41,7 +41,6 @@ public interface IChestOrDrive extends ICellContainer, IGridHost, IOrientable {
|
||||
|
||||
/**
|
||||
* @param slot slot index
|
||||
*
|
||||
* @return status of the slot, one of the above indices.
|
||||
*/
|
||||
CellState getCellStatus(int slot);
|
||||
@@ -54,7 +53,6 @@ public interface IChestOrDrive extends ICellContainer, IGridHost, IOrientable {
|
||||
|
||||
/**
|
||||
* @param slot slot index
|
||||
*
|
||||
* @return is the cell currently blinking to show activity.
|
||||
*/
|
||||
boolean isCellBlinking(int slot);
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
package appeng.api.implementations.tiles;
|
||||
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.Direction;
|
||||
|
||||
import appeng.api.util.AEColor;
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
package appeng.api.implementations.tiles;
|
||||
|
||||
import net.minecraft.inventory.CraftingInventory;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.Direction;
|
||||
|
||||
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||
|
||||
@@ -36,7 +36,6 @@ public interface ICraftingMachine {
|
||||
* @param patternDetails details of pattern
|
||||
* @param table crafting table
|
||||
* @param ejectionDirection ejection direction
|
||||
*
|
||||
* @return if it was accepted, all or nothing.
|
||||
*/
|
||||
boolean pushPattern(ICraftingPatternDetails patternDetails, CraftingInventory table, Direction ejectionDirection);
|
||||
|
||||
@@ -23,17 +23,17 @@
|
||||
|
||||
package appeng.api.implementations.tiles;
|
||||
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.Direction;
|
||||
|
||||
/**
|
||||
* Crank/Crankable API,
|
||||
*
|
||||
* <p>
|
||||
* Tiles that Implement this can receive power, from the crank, and have the
|
||||
* crank placed on them.
|
||||
*
|
||||
* <p>
|
||||
* Tiles that access other tiles that implement this method can act as Cranks.
|
||||
*
|
||||
* This interface must be implemented by a tile entity.
|
||||
* <p>
|
||||
* This interface must be implemented by a block entity.
|
||||
*/
|
||||
public interface ICrankable {
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
package appeng.api.implementations.tiles;
|
||||
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import alexiil.mc.lib.attributes.item.FixedItemInv;
|
||||
|
||||
public interface ISegmentedInventory {
|
||||
|
||||
@@ -33,8 +33,7 @@ public interface ISegmentedInventory {
|
||||
* duplication.
|
||||
*
|
||||
* @param name inventory name
|
||||
*
|
||||
* @return inventory with inventory name
|
||||
*/
|
||||
IItemHandler getInventoryByName(String name);
|
||||
FixedItemInv getInventoryByName(String name);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
package appeng.api.implementations.tiles;
|
||||
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import alexiil.mc.lib.attributes.item.FixedItemInv;
|
||||
|
||||
public interface IViewCellStorage {
|
||||
|
||||
@@ -32,5 +32,5 @@ public interface IViewCellStorage {
|
||||
*
|
||||
* @return inventory with at least 5 slot
|
||||
*/
|
||||
IItemHandler getViewCellStorage();
|
||||
FixedItemInv getViewCellStorage();
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
package appeng.api.movable;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@@ -33,28 +33,27 @@ public interface IMovableHandler {
|
||||
* if you return true from this, your saying you can handle the class, not that
|
||||
* single entity, you cannot opt out of single entities.
|
||||
*
|
||||
* @param myClass tile entity class
|
||||
* @param tile tile entity
|
||||
*
|
||||
* @param myClass block entity class
|
||||
* @param tile block entity
|
||||
* @return true if it can handle moving
|
||||
*/
|
||||
boolean canHandle(Class<? extends TileEntity> myClass, TileEntity tile);
|
||||
boolean canHandle(Class<? extends BlockEntity> myClass, BlockEntity tile);
|
||||
|
||||
/**
|
||||
* request that the handler move the the tile from its current location to the
|
||||
* new one. the tile has already been invalidated, and the blocks have already
|
||||
* been fully moved.
|
||||
*
|
||||
* <p>
|
||||
* Potential Example:
|
||||
*
|
||||
* <pre>
|
||||
* {
|
||||
* @code
|
||||
* Chunk c = world.getChunkAt(x, z);
|
||||
* Chunk c = world.getChunk(x, z);
|
||||
* c.setChunkBlockTileEntity(x & 0xF, y + y, z & 0xF, tile);
|
||||
*
|
||||
* if (c.isChunkLoaded) {
|
||||
* world.addTileEntity(tile);
|
||||
* world.addBlockEntity(tile);
|
||||
* world.markBlockForUpdate(x, y, z);
|
||||
* }
|
||||
* }
|
||||
@@ -64,5 +63,5 @@ public interface IMovableHandler {
|
||||
* @param world world of tile
|
||||
* @param newPosition the new location
|
||||
*/
|
||||
void moveTile(TileEntity tile, World world, BlockPos newPosition);
|
||||
void moveTile(BlockEntity tile, World world, BlockPos newPosition);
|
||||
}
|
||||
@@ -24,37 +24,37 @@
|
||||
package appeng.api.movable;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
|
||||
/**
|
||||
* Used to determine if a tile is marked as movable, a block will be considered
|
||||
* movable, if...
|
||||
*
|
||||
* <p>
|
||||
* 1. The Tile or its super classes have been white listed with
|
||||
* whiteListTileEntity.
|
||||
*
|
||||
* <p>
|
||||
* 2. The Tile implements IMovableTile
|
||||
*
|
||||
* <p>
|
||||
* 3. A IMovableHandler is register that returns canHandle = true for the
|
||||
* {@link TileEntity} subclass
|
||||
*
|
||||
*
|
||||
* {@link BlockEntity} subclass
|
||||
* <p>
|
||||
* <p>
|
||||
* The movement process is as follows,
|
||||
*
|
||||
* <p>
|
||||
* 1. IMovableTile.prepareToMove() or TileEntity.invalidate() depending on your
|
||||
* opt-in method. 2. The tile will be removed from the world. 3. Its world,
|
||||
* coordinates will be changed. *** this can be overridden with a
|
||||
* IMovableHandler *** 4. It will then be re-added to the world, or a new world.
|
||||
* 5. TileEntity.validate() 6. IMovableTile.doneMoving ( if you implemented
|
||||
* 5. TileEntity.cancelRemoval() 6. IMovableTile.doneMoving ( if you implemented
|
||||
* IMovableTile )
|
||||
*
|
||||
* <p>
|
||||
* Please note, this is a 100% white list only feature, I will never opt in any
|
||||
* non-vanilla, non-AE blocks. If you do not want to support your tiles being
|
||||
* moved, you don't have to do anything.
|
||||
*
|
||||
* <p>
|
||||
* I appreciate anyone that takes the effort to get their tiles to work with
|
||||
* this system to create a better use experience.
|
||||
*
|
||||
* <p>
|
||||
* If you need a build of deobf build of AE for testing, do not hesitate to ask.
|
||||
*/
|
||||
public interface IMovableRegistry {
|
||||
@@ -67,26 +67,25 @@ public interface IMovableRegistry {
|
||||
void blacklistBlock(Block blk);
|
||||
|
||||
/**
|
||||
* White list your tile entity with the registry.
|
||||
*
|
||||
* White list your block entity with the registry.
|
||||
* <p>
|
||||
* If you tile is handled with IMovableHandler or IMovableTile you do not need
|
||||
* to white list it.
|
||||
*/
|
||||
void whiteListTileEntity(Class<? extends TileEntity> c);
|
||||
void whiteListBlockEntity(Class<? extends BlockEntity> c);
|
||||
|
||||
/**
|
||||
* @param te to be moved tile entity
|
||||
*
|
||||
* @param te to be moved block entity
|
||||
* @return true if the tile has accepted your request to move it
|
||||
*/
|
||||
boolean askToMove(TileEntity te);
|
||||
boolean askToMove(BlockEntity te);
|
||||
|
||||
/**
|
||||
* tells the tile you are done moving it.
|
||||
*
|
||||
* @param te moved tile entity
|
||||
* @param te moved block entity
|
||||
*/
|
||||
void doneMoving(TileEntity te);
|
||||
void doneMoving(BlockEntity te);
|
||||
|
||||
/**
|
||||
* add a new handler movable handler.
|
||||
@@ -98,14 +97,13 @@ public interface IMovableRegistry {
|
||||
/**
|
||||
* handlers are used to perform movement, this allows you to override AE's
|
||||
* internal version.
|
||||
*
|
||||
* <p>
|
||||
* only valid after askToMove(...) = true
|
||||
*
|
||||
* @param te tile entity
|
||||
*
|
||||
* @return moving handler of tile entity
|
||||
* @param te block entity
|
||||
* @return moving handler of block entity
|
||||
*/
|
||||
IMovableHandler getHandler(TileEntity te);
|
||||
IMovableHandler getHandler(BlockEntity te);
|
||||
|
||||
/**
|
||||
* @return a copy of the default handler
|
||||
@@ -114,7 +112,6 @@ public interface IMovableRegistry {
|
||||
|
||||
/**
|
||||
* @param blk block
|
||||
*
|
||||
* @return true if this block is blacklisted
|
||||
*/
|
||||
boolean isBlacklisted(Block blk);
|
||||
|
||||
@@ -30,7 +30,7 @@ import appeng.api.util.IReadOnlyCollection;
|
||||
|
||||
/**
|
||||
* Gives you access to Grid based information.
|
||||
*
|
||||
* <p>
|
||||
* Don't Implement.
|
||||
*/
|
||||
public interface IGrid {
|
||||
@@ -39,7 +39,6 @@ public interface IGrid {
|
||||
* Get Access to various grid modules
|
||||
*
|
||||
* @param iface face
|
||||
*
|
||||
* @return the IGridCache you requested.
|
||||
*/
|
||||
@Nonnull
|
||||
@@ -49,7 +48,6 @@ public interface IGrid {
|
||||
* Post an event into the network event bus.
|
||||
*
|
||||
* @param ev - event to post
|
||||
*
|
||||
* @return returns ev back to original poster
|
||||
*/
|
||||
@Nonnull
|
||||
@@ -59,7 +57,6 @@ public interface IGrid {
|
||||
* Post an event into the network event bus, but direct it at a single node.
|
||||
*
|
||||
* @param ev event to post
|
||||
*
|
||||
* @return returns ev back to original poster
|
||||
*/
|
||||
@Nonnull
|
||||
@@ -79,7 +76,6 @@ public interface IGrid {
|
||||
* Get machines on the network.
|
||||
*
|
||||
* @param gridHostClass class of the grid host
|
||||
*
|
||||
* @return IMachineSet of all nodes belonging to hosts of specified class.
|
||||
*/
|
||||
@Nonnull
|
||||
|
||||
@@ -29,7 +29,7 @@ import javax.annotation.Nonnegative;
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.Direction;
|
||||
|
||||
import appeng.api.parts.IPart;
|
||||
import appeng.api.util.AEColor;
|
||||
@@ -37,14 +37,14 @@ import appeng.api.util.DimensionalCoord;
|
||||
|
||||
/**
|
||||
* An Implementation is required to create your node for IGridHost
|
||||
*
|
||||
* <p>
|
||||
* Implement for use with IGridHost
|
||||
*/
|
||||
public interface IGridBlock {
|
||||
|
||||
/**
|
||||
* how much power to drain per tick as part of idle network usage.
|
||||
*
|
||||
* <p>
|
||||
* if the value of this changes, you must post a MENetworkPowerIdleChange
|
||||
*
|
||||
* @return ae/t to use.
|
||||
@@ -91,16 +91,6 @@ public interface IGridBlock {
|
||||
*/
|
||||
void onGridNotification(@Nonnull GridNotification notification);
|
||||
|
||||
/**
|
||||
* Update Blocks network/connection/booting status. grid,
|
||||
*
|
||||
* @param grid grid
|
||||
* @param channelsInUse used channels
|
||||
* @deprecated to be removed in rv7
|
||||
*/
|
||||
@Deprecated
|
||||
void setNetworkStatus(IGrid grid, int channelsInUse);
|
||||
|
||||
/**
|
||||
* Determine which sides of the block can be connected too, only used when
|
||||
* isWorldAccessible returns true, not used for {@link IPart} implementations.
|
||||
|
||||
@@ -26,9 +26,9 @@ package appeng.api.networking;
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
/**
|
||||
* Allows you to create a network wise service, AE2 uses these for providing
|
||||
* Allows you to create a network wide service, AE2 uses these for providing
|
||||
* item, spatial, and tunnel services.
|
||||
*
|
||||
* <p>
|
||||
* Any Class that implements this, should have a public default constructor that
|
||||
* takes a single argument of type IGrid.
|
||||
*/
|
||||
@@ -42,7 +42,7 @@ public interface IGridCache {
|
||||
|
||||
/**
|
||||
* inform your cache, that a machine was removed from the grid.
|
||||
*
|
||||
* <p>
|
||||
* Important: Do not trust the grids state in this method, interact only with
|
||||
* the node you are passed, if you need to manage other grid information, do it
|
||||
* on the next updateTick.
|
||||
@@ -54,7 +54,7 @@ public interface IGridCache {
|
||||
|
||||
/**
|
||||
* informs you cache that a machine was added to the grid.
|
||||
*
|
||||
* <p>
|
||||
* Important: Do not trust the grids state in this method, interact only with
|
||||
* the node you are passed, if you need to manage other grid information, do it
|
||||
* on the next updateTick.
|
||||
|
||||
@@ -45,7 +45,6 @@ public interface IGridCacheRegistry {
|
||||
* requests a new INSTANCE of a grid cache for use, used internally
|
||||
*
|
||||
* @param grid grid
|
||||
*
|
||||
* @return a new Map of IGridCaches from the registry, called from IGrid when
|
||||
* constructing a new grid.
|
||||
*/
|
||||
|
||||
@@ -29,10 +29,10 @@ import appeng.api.util.AEPartLocation;
|
||||
|
||||
/**
|
||||
* Access to AE's internal grid connections.
|
||||
*
|
||||
* <p>
|
||||
* Messing with connection is generally completely unnecessary, you should be
|
||||
* able to just use IGridNode.updateState() to have AE manage them for you.
|
||||
*
|
||||
* <p>
|
||||
* Don't Implement.
|
||||
*/
|
||||
public interface IGridConnection {
|
||||
@@ -41,7 +41,6 @@ public interface IGridConnection {
|
||||
* lets you get the opposing node of the connection by passing your own node.
|
||||
*
|
||||
* @param gridNode current grid node
|
||||
*
|
||||
* @return the IGridNode which represents the opposite side of the connection.
|
||||
*/
|
||||
@Nonnull
|
||||
@@ -51,7 +50,6 @@ public interface IGridConnection {
|
||||
* determine the direction of the connection based on your node.
|
||||
*
|
||||
* @param gridNode current grid node
|
||||
*
|
||||
* @return the direction of the connection, only valid for in world connections.
|
||||
*/
|
||||
@Nonnull
|
||||
|
||||
@@ -39,12 +39,11 @@ public interface IGridHelper {
|
||||
|
||||
/**
|
||||
* Create a grid node for your {@link IGridHost}
|
||||
*
|
||||
* <p>
|
||||
* The passed {@link IGridBlock} represents the definition for properties like
|
||||
* connectable sides. Refer to its documentation for further details.
|
||||
*
|
||||
* @param block grid block
|
||||
*
|
||||
* @return grid node of block
|
||||
*/
|
||||
@Nonnull
|
||||
@@ -52,13 +51,12 @@ public interface IGridHelper {
|
||||
|
||||
/**
|
||||
* Create a direct connection between two {@link IGridNode}.
|
||||
*
|
||||
* <p>
|
||||
* This will be considered as having a distance of 1, regardless of the location
|
||||
* of both nodes.
|
||||
*
|
||||
* @param a to be connected gridnode
|
||||
* @param b to be connected gridnode
|
||||
*
|
||||
* @throws appeng.api.exceptions.FailedConnectionException
|
||||
*/
|
||||
@Nonnull
|
||||
|
||||
@@ -26,15 +26,15 @@ package appeng.api.networking;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
|
||||
import appeng.api.parts.IPart;
|
||||
import appeng.api.util.AECableType;
|
||||
import appeng.api.util.AEPartLocation;
|
||||
|
||||
/**
|
||||
* Implement to create a networked {@link TileEntity} or {@link IPart} must be
|
||||
* implemented for a part, or tile entity to become part of a grid.
|
||||
* Implement to create a networked {@link BlockEntity} or {@link IPart} must be
|
||||
* implemented for a part, or block entity to become part of a grid.
|
||||
*/
|
||||
public interface IGridHost {
|
||||
|
||||
@@ -45,7 +45,6 @@ public interface IGridHost {
|
||||
*
|
||||
* @param dir feel free to ignore this, most blocks will use the same node for
|
||||
* every side.
|
||||
*
|
||||
* @return a new IGridNode, create these with AEApi.INSTANCE().createGridNode(
|
||||
* MyIGridBlock )
|
||||
*/
|
||||
|
||||
@@ -27,8 +27,8 @@ import java.util.EnumSet;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
|
||||
import appeng.api.IAppEngApi;
|
||||
import appeng.api.util.AEPartLocation;
|
||||
@@ -36,9 +36,9 @@ import appeng.api.util.IReadOnlyCollection;
|
||||
|
||||
/**
|
||||
* Gives you a view into your Nodes connections and information.
|
||||
*
|
||||
* <p>
|
||||
* updateState, getGrid, destroy are required to implement a proper IGridHost.
|
||||
*
|
||||
* <p>
|
||||
* Don't Implement; Acquire from {@link IAppEngApi}.createGridNode
|
||||
*/
|
||||
public interface IGridNode {
|
||||
@@ -54,10 +54,10 @@ public interface IGridNode {
|
||||
/**
|
||||
* inform the node that your IGridBlock has changed its internal state, and
|
||||
* force the node to update.
|
||||
*
|
||||
* ALWAYS make sure that your tile entity is in the world, and has its node
|
||||
* <p>
|
||||
* ALWAYS make sure that your block entity is in the world, and has its node
|
||||
* properly saved to be returned from the host before updating state,
|
||||
*
|
||||
* <p>
|
||||
* If your entity is not in the world, or if you IGridHost returns a different
|
||||
* node for the same side you will likely crash the game.
|
||||
*/
|
||||
@@ -89,7 +89,7 @@ public interface IGridNode {
|
||||
* @return the world the node is located in
|
||||
*/
|
||||
@Nonnull
|
||||
IWorld getWorld();
|
||||
WorldAccess getWorld();
|
||||
|
||||
/**
|
||||
* @return a set of the connected sides, INTERNAL represents an invisible
|
||||
@@ -124,13 +124,13 @@ public interface IGridNode {
|
||||
* this should be called for each node you create, if you have a nodeData
|
||||
* compound to load from, you can store all your nods on a single compound using
|
||||
* name.
|
||||
*
|
||||
* <p>
|
||||
* Important: You must call this before updateState.
|
||||
*
|
||||
* @param name nbt name
|
||||
* @param nodeData to be loaded data
|
||||
*/
|
||||
void loadFromNBT(@Nonnull String name, @Nonnull CompoundNBT nodeData);
|
||||
void loadFromNBT(@Nonnull String name, @Nonnull CompoundTag nodeData);
|
||||
|
||||
/**
|
||||
* this should be called for each node you maintain, you can save all your nodes
|
||||
@@ -140,7 +140,7 @@ public interface IGridNode {
|
||||
* @param name nbt name
|
||||
* @param nodeData to be saved data
|
||||
*/
|
||||
void saveToNBT(@Nonnull String name, @Nonnull CompoundNBT nodeData);
|
||||
void saveToNBT(@Nonnull String name, @Nonnull CompoundTag nodeData);
|
||||
|
||||
/**
|
||||
* @return if the node's channel requirements are currently met, use this for
|
||||
@@ -152,7 +152,6 @@ public interface IGridNode {
|
||||
* see if this node has a certain flag
|
||||
*
|
||||
* @param flag flags
|
||||
*
|
||||
* @return true if has flag
|
||||
*/
|
||||
boolean hasFlag(@Nonnull GridFlags flag);
|
||||
|
||||
@@ -25,15 +25,15 @@ package appeng.api.networking;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
||||
public interface IGridStorage {
|
||||
|
||||
/**
|
||||
* @return an CompoundNBT that can be read, and written too.
|
||||
* @return an CompoundTag that can be read, and written too.
|
||||
*/
|
||||
@Nonnull
|
||||
CompoundNBT dataObject();
|
||||
CompoundTag dataObject();
|
||||
|
||||
/**
|
||||
* @return the id for this grid storage object, used internally
|
||||
|
||||
@@ -32,12 +32,11 @@ public interface IGridVisitor {
|
||||
|
||||
/**
|
||||
* Called for each node on the network.
|
||||
*
|
||||
* <p>
|
||||
* By returning false your informing the host to stop visiting nodes beyond the
|
||||
* current node.
|
||||
*
|
||||
* @param n the current node.
|
||||
*
|
||||
* @return true to continue visiting nodes beyond this node.
|
||||
*/
|
||||
boolean visitNode(@Nonnull IGridNode n);
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
package appeng.api.networking.crafting;
|
||||
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
import appeng.api.networking.security.IActionSource;
|
||||
import appeng.api.networking.storage.IBaseMonitor;
|
||||
@@ -54,5 +54,5 @@ public interface ICraftingCPU extends IBaseMonitor<IAEItemStack> {
|
||||
/**
|
||||
* @return a null or the name of the cpu.
|
||||
*/
|
||||
ITextComponent getName();
|
||||
Text getName();
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ public interface ICraftingGrid extends IGridCache {
|
||||
* @param world crafting world
|
||||
* @param slot slot index
|
||||
* @param details pattern details
|
||||
*
|
||||
* @return a collection of crafting patterns for the item in question.
|
||||
*/
|
||||
ImmutableCollection<ICraftingPatternDetails> getCraftingFor(IAEItemStack whatToCraft,
|
||||
@@ -56,7 +55,6 @@ public interface ICraftingGrid extends IGridCache {
|
||||
* @param actionSrc source
|
||||
* @param craftWhat result
|
||||
* @param callback callback -- optional
|
||||
*
|
||||
* @return a future which will at an undetermined point in the future get you
|
||||
* the {@link ICraftingJob} do not wait on this, your be waiting
|
||||
* forever.
|
||||
@@ -79,7 +77,6 @@ public interface ICraftingGrid extends IGridCache {
|
||||
* this will be used for extracting items, should
|
||||
* usually be the same as the one provided to
|
||||
* beginCraftingJob.
|
||||
*
|
||||
* @return null ( if failed ) or an {@link ICraftingLink} other wise, if you
|
||||
* send requestingMachine you need to properly keep track of this and
|
||||
* handle the nbt saving and loading of the object as well as the
|
||||
@@ -96,7 +93,6 @@ public interface ICraftingGrid extends IGridCache {
|
||||
|
||||
/**
|
||||
* @param what to be requested item
|
||||
*
|
||||
* @return true if the item can be requested via a crafting emitter.
|
||||
*/
|
||||
boolean canEmitFor(IAEItemStack what);
|
||||
@@ -105,7 +101,6 @@ public interface ICraftingGrid extends IGridCache {
|
||||
* is this item being crafted?
|
||||
*
|
||||
* @param what item being crafted
|
||||
*
|
||||
* @return true if it is being crafting
|
||||
*/
|
||||
boolean isRequesting(IAEItemStack what);
|
||||
@@ -114,7 +109,6 @@ public interface ICraftingGrid extends IGridCache {
|
||||
* The total amount being requested across all crafting cpus of a grid.
|
||||
*
|
||||
* @param what item being requested, ignores stacksize
|
||||
*
|
||||
* @return The total amount being requested.
|
||||
*/
|
||||
long requesting(IAEItemStack what);
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
package appeng.api.networking.crafting;
|
||||
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
||||
public interface ICraftingLink {
|
||||
|
||||
@@ -53,7 +53,7 @@ public interface ICraftingLink {
|
||||
*
|
||||
* @param tag to be written data
|
||||
*/
|
||||
void writeToNBT(CompoundNBT tag);
|
||||
void writeToNBT(CompoundTag tag);
|
||||
|
||||
/**
|
||||
* @return the crafting ID for this link.
|
||||
|
||||
@@ -37,7 +37,6 @@ public interface ICraftingMedium {
|
||||
*
|
||||
* @param patternDetails details
|
||||
* @param table crafting table
|
||||
*
|
||||
* @return if the pattern was successfully pushed.
|
||||
*/
|
||||
boolean pushPattern(ICraftingPatternDetails patternDetails, CraftingInventory table);
|
||||
|
||||
@@ -23,22 +23,25 @@
|
||||
|
||||
package appeng.api.networking.crafting;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.inventory.CraftingInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import appeng.api.implementations.ICraftingPatternItem;
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
|
||||
/**
|
||||
* do not implement provided by {@link ICraftingPatternItem}
|
||||
*
|
||||
* caching this INSTANCE will increase performance of validation and checks.
|
||||
* Describes a crafting or processing pattern decoded by
|
||||
* {@link appeng.api.crafting.ICraftingHelper}.
|
||||
* <p>
|
||||
* Do not cache instances of this class unless you handle recipe reloads on the
|
||||
* server and client correctly.
|
||||
*/
|
||||
public interface ICraftingPatternDetails {
|
||||
|
||||
/**
|
||||
* @return source item.
|
||||
* @return encodes this crafting pattern into a new item stack.
|
||||
*/
|
||||
ItemStack getPattern();
|
||||
|
||||
@@ -46,35 +49,77 @@ public interface ICraftingPatternDetails {
|
||||
* @param slotIndex specific slot index
|
||||
* @param itemStack item in slot
|
||||
* @param world crafting world
|
||||
*
|
||||
* @return if an item can be used in the specific slot for this pattern.
|
||||
*/
|
||||
boolean isValidItemForSlot(int slotIndex, ItemStack itemStack, World world);
|
||||
|
||||
/**
|
||||
* @return if this pattern is a crafting pattern ( work bench )
|
||||
* @return if this pattern is for a Vanilla
|
||||
* {@link net.minecraft.item.crafting.IRecipeType#CRAFTING crafting
|
||||
* recipe}.
|
||||
*/
|
||||
boolean isCraftable();
|
||||
|
||||
/**
|
||||
* Equal itemstacks will be aggregated into one, respectively 3*64 will be
|
||||
* returned as one stack of 192, up to 576 of a single type.
|
||||
* <p>
|
||||
* This should be the preferred way to deal with the list of inputs.
|
||||
* <p>
|
||||
* The list will be sorted in descending order by stack size. However there is
|
||||
* no guarantee about maintaining the placement order of the inputs in case of
|
||||
* equal values.
|
||||
*
|
||||
* @return an immutable list of inputs without nulls
|
||||
*/
|
||||
List<IAEItemStack> getInputs();
|
||||
|
||||
/**
|
||||
* Equal itemstacks will be aggregated into one, respectively 2*32 will be
|
||||
* returned as one stack of 64, up to 192 of a single type.
|
||||
* <p>
|
||||
* This should be the preferred way to deal with the list of outputs.
|
||||
* <p>
|
||||
* <p>
|
||||
* The list will be sorted in descending order by stack size. However there is
|
||||
* no guarantee about maintaining the placement order of the outputs in case of
|
||||
* equal values.
|
||||
*
|
||||
* @return an immutable list of outputs without nulls
|
||||
*/
|
||||
List<IAEItemStack> getOutputs();
|
||||
|
||||
/**
|
||||
* A sparse list representing the placement order of a crafting grid, left to
|
||||
* right, then top to bottom.
|
||||
* <p>
|
||||
* Only use when absolutely necessary, always prefer
|
||||
* {@link ICraftingPatternDetails#getInputs()}
|
||||
* <p>
|
||||
* This will contain exactly 9 entries.
|
||||
* <p>
|
||||
* This can return a copy from the internal structure, so there are no
|
||||
* guarantees about modifications.
|
||||
*
|
||||
* @return a list of the inputs, will include nulls.
|
||||
*/
|
||||
IAEItemStack[] getInputs();
|
||||
|
||||
/**
|
||||
* @return a list of the inputs, will be clean
|
||||
*/
|
||||
IAEItemStack[] getCondensedInputs();
|
||||
|
||||
/**
|
||||
* @return a list of the outputs, will be clean
|
||||
*/
|
||||
IAEItemStack[] getCondensedOutputs();
|
||||
IAEItemStack[] getSparseInputs();
|
||||
|
||||
/**
|
||||
* A sparse list representing the placement order of the respective output
|
||||
* slots.
|
||||
* <p>
|
||||
* Only use when absolutely necessary, always prefer
|
||||
* {@link ICraftingPatternDetails#getOutputs()}
|
||||
* <p>
|
||||
* This will either contain 1 entry for crafting patterns or 3 for processing.
|
||||
* <p>
|
||||
* This can return a copy from the internal structure, so there are no
|
||||
* guarantees about modifications.
|
||||
*
|
||||
* @return a list of the outputs, will include nulls.
|
||||
*/
|
||||
IAEItemStack[] getOutputs();
|
||||
IAEItemStack[] getSparseOutputs();
|
||||
|
||||
/**
|
||||
* @return if this pattern is enabled to support substitutions.
|
||||
@@ -87,7 +132,6 @@ public interface ICraftingPatternDetails {
|
||||
*
|
||||
* @param craftingInv inventory
|
||||
* @param world crafting world
|
||||
*
|
||||
* @return the crafted ( work bench ) item.
|
||||
*/
|
||||
ItemStack getOutput(CraftingInventory craftingInv, World world);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
package appeng.api.networking.crafting;
|
||||
|
||||
import appeng.api.crafting.ICraftingHelper;
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
|
||||
/**
|
||||
@@ -33,6 +34,9 @@ public interface ICraftingProviderHelper {
|
||||
|
||||
/**
|
||||
* Add new Pattern to AE's crafting cache.
|
||||
* <p>
|
||||
* This will only accept instances created by
|
||||
* {@link ICraftingHelper#decodePattern(net.minecraft.item.ItemStack, net.minecraft.world.World)}
|
||||
*/
|
||||
void addCraftingOption(ICraftingMedium medium, ICraftingPatternDetails api);
|
||||
|
||||
|
||||
@@ -45,7 +45,6 @@ public interface ICraftingRequester extends IActionHost {
|
||||
*
|
||||
* @param items item
|
||||
* @param mode action mode
|
||||
*
|
||||
* @return unwanted item
|
||||
*/
|
||||
IAEItemStack injectCraftedItems(ICraftingLink link, IAEItemStack items, Actionable mode);
|
||||
@@ -53,7 +52,7 @@ public interface ICraftingRequester extends IActionHost {
|
||||
/**
|
||||
* called when the job changes from in progress, to either complete, or
|
||||
* canceled.
|
||||
*
|
||||
* <p>
|
||||
* after this call the crafting link is "dead" and should be discarded.
|
||||
*/
|
||||
void jobStateChange(ICraftingLink link);
|
||||
|
||||
@@ -27,13 +27,13 @@ import appeng.api.storage.data.IAEStack;
|
||||
|
||||
/**
|
||||
* DO NOT IMPLEMENT.
|
||||
*
|
||||
* <p>
|
||||
* Will be injected when adding an {@link ICraftingWatcherHost} to a grid.
|
||||
*/
|
||||
public interface ICraftingWatcher {
|
||||
/**
|
||||
* Add a specific {@link IAEStack} to watch.
|
||||
*
|
||||
* <p>
|
||||
* Supports multiple values, duplicate ones will not be added.
|
||||
*
|
||||
* @param stack
|
||||
|
||||
@@ -27,6 +27,7 @@ import javax.annotation.Nonnull;
|
||||
|
||||
import appeng.api.config.AccessRestriction;
|
||||
import appeng.api.config.Actionable;
|
||||
import appeng.api.networking.IGrid;
|
||||
|
||||
/**
|
||||
* Used to access information about AE's various power accepting blocks for
|
||||
@@ -40,7 +41,6 @@ public interface IAEPowerStorage extends IEnergySource {
|
||||
*
|
||||
* @param amt to be injected amount
|
||||
* @param mode action mode
|
||||
*
|
||||
* @return amount of power which was unable to be stored
|
||||
*/
|
||||
double injectAEPower(double amt, @Nonnull Actionable mode);
|
||||
@@ -71,4 +71,22 @@ public interface IAEPowerStorage extends IEnergySource {
|
||||
*/
|
||||
@Nonnull
|
||||
AccessRestriction getPowerFlow();
|
||||
}
|
||||
|
||||
/**
|
||||
* The priority to use this energy storage.
|
||||
* <p>
|
||||
* A higher value means it is more likely to be extracted from first, and less
|
||||
* likely to be inserted into first.
|
||||
* <p>
|
||||
* The value needs to be constant once added to a {@link IGrid}. Should it ever
|
||||
* need to be changed, it has to be removed from the grid, then update the
|
||||
* value, and finally added back to the grid.
|
||||
* <p>
|
||||
* This should never use {@link Integer#MIN_VALUE} or {@link Integer#MAX_VALUE}.
|
||||
*
|
||||
* @return the priority for this storage
|
||||
*/
|
||||
default int getPriority() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ public interface IEnergyGrid extends IGridCache, IEnergySource, IEnergyGridProvi
|
||||
* condenses this into a single operation that determines the networks "powered
|
||||
* state" if the network is considered off-line, your machines should not
|
||||
* function.
|
||||
*
|
||||
* <p>
|
||||
* {@link MENetworkPowerStatusChange} events are posted when this value changes
|
||||
* if you need to be notified of the change, most machines can simply test the
|
||||
* value when they operate.
|
||||
@@ -73,21 +73,20 @@ public interface IEnergyGrid extends IGridCache, IEnergySource, IEnergyGridProvi
|
||||
/**
|
||||
* AE will accept any power, and store it, to maintain sanity please don't send
|
||||
* more then 10,000 at a time.
|
||||
*
|
||||
* <p>
|
||||
* IMPORTANT: Network power knows no bounds, for less spamy power flow, networks
|
||||
* can store more then their allotted storage, however, it should be kept to a
|
||||
* minimum, to help with this, this method returns the networks current
|
||||
* OVERFLOW, this is not energy you can store some where else, its already
|
||||
* stored in the network, you can extract it if you want, however it it owned by
|
||||
* the network, this is different then IAEEnergyStore
|
||||
*
|
||||
* <p>
|
||||
* Another important note, is that if a network that had overflow is deleted,
|
||||
* its power is gone, this is one of the reasons why keeping overflow to a
|
||||
* minimum is important.
|
||||
*
|
||||
* @param amt power to inject into the network
|
||||
* @param mode should the action be simulated or performed?
|
||||
*
|
||||
* @return the amount of power that the network has OVER the limit.
|
||||
*/
|
||||
@Nonnegative
|
||||
|
||||
@@ -36,15 +36,15 @@ import appeng.api.config.Actionable;
|
||||
public interface IEnergyGridProvider {
|
||||
/**
|
||||
* internal use only
|
||||
*
|
||||
* <p>
|
||||
* Can return a list of providers behind the current.
|
||||
*
|
||||
* <p>
|
||||
* An example would be something acting as proxy between different
|
||||
* {@link IEnergyGrid}s.
|
||||
*
|
||||
* <p>
|
||||
* This can contain duplicate entries, AE will ensure that each provider is only
|
||||
* visited once.
|
||||
*
|
||||
* <p>
|
||||
* internal use only
|
||||
*/
|
||||
@Nonnull
|
||||
@@ -52,9 +52,9 @@ public interface IEnergyGridProvider {
|
||||
|
||||
/**
|
||||
* internal use only
|
||||
*
|
||||
* <p>
|
||||
* Extracts the requested amount from the provider.
|
||||
*
|
||||
* <p>
|
||||
* This should never forward a call to another {@link IEnergyGridProvider},
|
||||
* instead return them via {@link IEnergyGridProvider#providers()}
|
||||
*
|
||||
@@ -65,10 +65,10 @@ public interface IEnergyGridProvider {
|
||||
|
||||
/**
|
||||
* Injects the offered amount into the provider.
|
||||
*
|
||||
* <p>
|
||||
* This should never forward a call to another {@link IEnergyGridProvider},
|
||||
* instead return them via {@link IEnergyGridProvider#providers()}
|
||||
*
|
||||
* <p>
|
||||
* internal use only
|
||||
*
|
||||
* @return the leftover amount
|
||||
@@ -78,13 +78,12 @@ public interface IEnergyGridProvider {
|
||||
|
||||
/**
|
||||
* internal use only
|
||||
*
|
||||
* <p>
|
||||
* Returns the current demand of an provider.
|
||||
*
|
||||
* <p>
|
||||
* This should never forward a call to another {@link IEnergyGridProvider},
|
||||
* instead return them via {@link IEnergyGridProvider#providers()}
|
||||
*
|
||||
*
|
||||
* @param d the max amount offered, the demand should never exceed it.
|
||||
* @return the total amount demanded
|
||||
*/
|
||||
@@ -93,31 +92,29 @@ public interface IEnergyGridProvider {
|
||||
|
||||
/**
|
||||
* internal use only
|
||||
*
|
||||
* <p>
|
||||
* AE currently uses this to enqueue the next visited provider.
|
||||
*
|
||||
* <p>
|
||||
* There is no guarantee that this works on in a perfect way. It can be limited
|
||||
* to the returns of the past {@link IEnergyGridProvider#providers()}, but not
|
||||
* any future one discovered by visiting further providers.
|
||||
*
|
||||
* <p>
|
||||
* E.g. inject into the the lowest one first or extract from the highest one.
|
||||
*
|
||||
* @return the current stored amount.
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Nonnegative
|
||||
double getProviderStoredEnergy();
|
||||
|
||||
/**
|
||||
* internal use only
|
||||
*
|
||||
* <p>
|
||||
* AE currently uses this to enqueue the next visited provider.
|
||||
*
|
||||
* <p>
|
||||
* There is no guarantee that this works on in a perfect way. It can be limited
|
||||
* to the returns of the past {@link IEnergyGridProvider#providers()}, but not
|
||||
* any future one discovered by visiting further providers.
|
||||
*
|
||||
* <p>
|
||||
* E.g. inject into the the lowest one first or extract from the highest one.
|
||||
*
|
||||
* @return the maximum amount stored.
|
||||
|
||||
@@ -36,7 +36,6 @@ public interface IEnergySource {
|
||||
*
|
||||
* @param amt extracted power
|
||||
* @param mode should the action be simulated or performed?
|
||||
*
|
||||
* @return returns extracted power.
|
||||
*/
|
||||
@Nonnegative
|
||||
|
||||
@@ -27,13 +27,13 @@ import javax.annotation.Nonnegative;
|
||||
|
||||
/**
|
||||
* DO NOT IMPLEMENT.
|
||||
*
|
||||
* <p>
|
||||
* Will be injected when adding an {@link IEnergyWatcherHost} to a grid.
|
||||
*/
|
||||
public interface IEnergyWatcher {
|
||||
/**
|
||||
* Add a specific threshold to watch.
|
||||
*
|
||||
* <p>
|
||||
* Supports multiple values, duplicate ones will not be added.
|
||||
*
|
||||
* @param amount
|
||||
|
||||
@@ -28,7 +28,7 @@ import appeng.api.networking.IGridNode;
|
||||
/**
|
||||
* Posted by the network when the booting status of the network goes up or down,
|
||||
* the change is reflected via {@link IGridNode}.isActive()
|
||||
*
|
||||
* <p>
|
||||
* Note: Most machines just need to check {@link IGridNode}.isActive()
|
||||
*/
|
||||
public class MENetworkBootingStatusChange extends MENetworkEvent {
|
||||
|
||||
@@ -25,10 +25,10 @@ package appeng.api.networking.events;
|
||||
|
||||
/**
|
||||
* Posted by storage devices to inform AE to refresh its storage structure.
|
||||
*
|
||||
* <p>
|
||||
* This is done in cases such as a storage cell being removed or added to a
|
||||
* drive.
|
||||
*
|
||||
* <p>
|
||||
* you do not need to send this event when your node is added / removed from the
|
||||
* grid.
|
||||
*/
|
||||
|
||||
@@ -28,7 +28,7 @@ import appeng.api.networking.IGridHost;
|
||||
/**
|
||||
* Posted to the {@link IGridHost} when the channels on the node connections are
|
||||
* altered.
|
||||
*
|
||||
* <p>
|
||||
* Never posted IGridCaches.
|
||||
*/
|
||||
public class MENetworkChannelsChanged extends MENetworkEvent {
|
||||
|
||||
@@ -27,7 +27,7 @@ import appeng.api.networking.IGrid;
|
||||
|
||||
/**
|
||||
* Part of AE's Event Bus.
|
||||
*
|
||||
* <p>
|
||||
* Posted via {@link IGrid}.postEvent or {@link IGrid}.postEventTo
|
||||
*/
|
||||
public class MENetworkEvent {
|
||||
|
||||
@@ -29,7 +29,7 @@ import appeng.api.networking.IGridNode;
|
||||
* Implementers of a IGridBlock must post this event when your getIdlePowerUsage
|
||||
* starts returning a new value, if you do not post this event the network will
|
||||
* not change the idle draw.
|
||||
*
|
||||
* <p>
|
||||
* you do not need to send this event when your node is added / removed from the
|
||||
* grid.
|
||||
*/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user