mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-11-04 15:43:00 +00:00
Compare commits
218 Commits
v1.16.4-1.
...
v1.16.5-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e84ddef877 | ||
|
|
11b40bb6d5 | ||
|
|
686c6a4c44 | ||
|
|
a1821035d3 | ||
|
|
7b8650bbc8 | ||
|
|
0285260e97 | ||
|
|
10a3a223a0 | ||
|
|
2dc970a8bb | ||
|
|
f74c4cc83c | ||
|
|
7012ac7163 | ||
|
|
227b444d81 | ||
|
|
d50db8a6f3 | ||
|
|
3a80b51a9f | ||
|
|
03396cf07a | ||
|
|
5b57f7509d | ||
|
|
0568c86628 | ||
|
|
b31e66686d | ||
|
|
924b8ef30f | ||
|
|
7bcc16bb40 | ||
|
|
31e6746bdf | ||
|
|
c39bf3eb4d | ||
|
|
8b952e7e1e | ||
|
|
04e97f7b86 | ||
|
|
74752c561c | ||
|
|
ee96458b56 | ||
|
|
333410e4cd | ||
|
|
999a39a3e6 | ||
|
|
82ca19c296 | ||
|
|
56d8a5d585 | ||
|
|
aa5fbb2980 | ||
|
|
db0bb071f5 | ||
|
|
ab702e2ba1 | ||
|
|
d4efacd40a | ||
|
|
347affcc5c | ||
|
|
8ebe34b8da | ||
|
|
7086cb8a02 | ||
|
|
8dbc930c2f | ||
|
|
61eb67849d | ||
|
|
c2316ef256 | ||
|
|
0d22270f8b | ||
|
|
abb9c14256 | ||
|
|
815e534dc6 | ||
|
|
51dde077fe | ||
|
|
31d0b7afcd | ||
|
|
95b0d950aa | ||
|
|
efa2be2821 | ||
|
|
670db97fc7 | ||
|
|
1650b72edb | ||
|
|
a5bca3f0df | ||
|
|
88f41314c7 | ||
|
|
5ef8d52c13 | ||
|
|
0b65d56ab0 | ||
|
|
a256b70685 | ||
|
|
f16d1499fe | ||
|
|
79ca851e4f | ||
|
|
d5c54d64a6 | ||
|
|
5cfdd2339f | ||
|
|
3ab3213290 | ||
|
|
46c9840d00 | ||
|
|
b3f2f14e96 | ||
|
|
3ace49d27f | ||
|
|
9bd662d8dc | ||
|
|
df7a40354e | ||
|
|
c489d4bc4f | ||
|
|
2b029bd506 | ||
|
|
2227845658 | ||
|
|
2d3e88ef59 | ||
|
|
0bfe960cbd | ||
|
|
a735f23e1f | ||
|
|
de6f27ceaf | ||
|
|
2fab1a3054 | ||
|
|
d4745ae47e | ||
|
|
dc21e2dbc9 | ||
|
|
75dfa71275 | ||
|
|
d71bf225cc | ||
|
|
8644c4ebf6 | ||
|
|
b323db30ee | ||
|
|
53efd6b303 | ||
|
|
97faa1b3bc | ||
|
|
7404133d40 | ||
|
|
e18e24407e | ||
|
|
026afa7f73 | ||
|
|
29cc5bb86b | ||
|
|
aa9d3c8269 | ||
|
|
f8074636bc | ||
|
|
db2cde4a4c | ||
|
|
5eec7d9172 | ||
|
|
8b9735d72e | ||
|
|
1866916cb8 | ||
|
|
f38a6a9d43 | ||
|
|
0f6db63020 | ||
|
|
51fcd83b87 | ||
|
|
c2190e1318 | ||
|
|
c40a13558c | ||
|
|
02695aea51 | ||
|
|
d5be1aca0e | ||
|
|
8ff8b78ed8 | ||
|
|
7fc55aa9a0 | ||
|
|
38335ca187 | ||
|
|
e0e194099c | ||
|
|
8063059764 | ||
|
|
f96d923b2a | ||
|
|
9142ccfc93 | ||
|
|
9f7cc00fcb | ||
|
|
b129ae627b | ||
|
|
f9fb0619fa | ||
|
|
7f9b86a78e | ||
|
|
58ea7a275e | ||
|
|
8487a13764 | ||
|
|
f0ba1108d5 | ||
|
|
5d0daf9b2d | ||
|
|
8b8692ba53 | ||
|
|
1f385f5b35 | ||
|
|
34baa09b6c | ||
|
|
b21866fbff | ||
|
|
e0a288bcb9 | ||
|
|
4592534a18 | ||
|
|
28165bfcd6 | ||
|
|
953b94fd08 | ||
|
|
e10e30f82b | ||
|
|
aeb1fa0e7e | ||
|
|
349a7543b0 | ||
|
|
3d589eda4a | ||
|
|
de646b66b6 | ||
|
|
4f0d311df7 | ||
|
|
d6e3c9a7fa | ||
|
|
a7a724f134 | ||
|
|
b0e30fdce1 | ||
|
|
4e15afa254 | ||
|
|
84bac06178 | ||
|
|
1fecb995c9 | ||
|
|
99b719299c | ||
|
|
fb9590467d | ||
|
|
bc8e090873 | ||
|
|
cf0f67265f | ||
|
|
53dd15a213 | ||
|
|
eb2d617ed8 | ||
|
|
74dae4ec17 | ||
|
|
abbc46877b | ||
|
|
3cb25b3525 | ||
|
|
f387730b88 | ||
|
|
92b45b1868 | ||
|
|
003c7ec2e8 | ||
|
|
c45221a2d0 | ||
|
|
8494ba8ce2 | ||
|
|
058d63e77f | ||
|
|
17b5bca443 | ||
|
|
c3f5700494 | ||
|
|
b17ff6daf0 | ||
|
|
e8f5531a8c | ||
|
|
51d3b091da | ||
|
|
9708dd6786 | ||
|
|
e48427dbbc | ||
|
|
669b6d2d56 | ||
|
|
32d956bbe7 | ||
|
|
3a147c78a8 | ||
|
|
8c56b6a7be | ||
|
|
66e42e0817 | ||
|
|
0ee3d10fda | ||
|
|
ed0afc4068 | ||
|
|
1f70ed6985 | ||
|
|
8f3ea60c74 | ||
|
|
eb722a74cd | ||
|
|
1825f67eee | ||
|
|
975a994581 | ||
|
|
061514549d | ||
|
|
5e52429c23 | ||
|
|
396cf15a1f | ||
|
|
7514cf7320 | ||
|
|
1316d6a3c9 | ||
|
|
e1cbbe3628 | ||
|
|
6d367e08a3 | ||
|
|
eaa7359c8c | ||
|
|
657ceda3af | ||
|
|
a934e42219 | ||
|
|
1544749282 | ||
|
|
763bab80fa | ||
|
|
417fda3019 | ||
|
|
444830cf2d | ||
|
|
23bf33c454 | ||
|
|
0be030c497 | ||
|
|
ee27d8f081 | ||
|
|
a3a9684505 | ||
|
|
1381325813 | ||
|
|
52b112fae6 | ||
|
|
c83eeb16a8 | ||
|
|
9d1ee6f61d | ||
|
|
b90611b4b4 | ||
|
|
e1e7ef59c6 | ||
|
|
9ae0f4a993 | ||
|
|
fd262a7995 | ||
|
|
58054ad2d1 | ||
|
|
1255bd00fd | ||
|
|
1f84480a80 | ||
|
|
b838efedd2 | ||
|
|
f78e24f9a0 | ||
|
|
88f5b20353 | ||
|
|
331031be45 | ||
|
|
c5694ea966 | ||
|
|
34b5ede326 | ||
|
|
7b476cb24b | ||
|
|
7ca261d763 | ||
|
|
c864576619 | ||
|
|
247c05305d | ||
|
|
2232f025b8 | ||
|
|
b2e5401486 | ||
|
|
41226371f3 | ||
|
|
1edb7288b9 | ||
|
|
cc5e972cfc | ||
|
|
92be0126df | ||
|
|
dd6f97622e | ||
|
|
2c9f51db89 | ||
|
|
72340defe4 | ||
|
|
542b66c79a | ||
|
|
e4b0a5b3ce | ||
|
|
f7e3e72a6e | ||
|
|
8b17ec76a8 | ||
|
|
b8d5a89446 |
@@ -16,6 +16,3 @@ indent_size = 2
|
|||||||
|
|
||||||
[*.yml]
|
[*.yml]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
[*.properties]
|
|
||||||
insert_final_newline = false
|
|
||||||
|
|||||||
13
.gitattributes
vendored
13
.gitattributes
vendored
@@ -1,2 +1,15 @@
|
|||||||
# Ignore changes in generated files
|
# Ignore changes in generated files
|
||||||
src/generated/resources/data/** linguist-generated
|
src/generated/resources/data/** linguist-generated
|
||||||
|
src/test/server-files/structures linguist-generated
|
||||||
|
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
*.gradle eol=lf diff=java
|
||||||
|
*.java eol=lf diff=java
|
||||||
|
*.kt eol=lf diff=java
|
||||||
|
*.lua eol=lf
|
||||||
|
*.md eol=lf diff=markdown
|
||||||
|
*.txt eol=lf
|
||||||
|
|
||||||
|
*.png binary
|
||||||
|
*.jar binary
|
||||||
|
|||||||
16
.github/ISSUE_TEMPLATE/bug_report.md
vendored
16
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Report some misbehaviour in the mod
|
|
||||||
labels: bug
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
## Before reporting
|
|
||||||
- Search for the bug on the issue tracker. Make sure to look at closed issues too!
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Useful information to include:
|
|
||||||
- Minecraft version
|
|
||||||
- CC: Tweaked version
|
|
||||||
- Logs: These will be located in the `logs/` directory of your Minecraft instance. Please upload them as a gist or directly into this editor.
|
|
||||||
- Detailed reproduction steps: sometimes I can spot a bug pretty easily, but often it's much more obscure. The more information I have to help reproduce it, the quicker it'll get fixed.
|
|
||||||
33
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
Normal file
33
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Bug report
|
||||||
|
description: Report some misbehaviour in the mod
|
||||||
|
labels: [ bug ]
|
||||||
|
body:
|
||||||
|
- type: dropdown
|
||||||
|
id: mc-version
|
||||||
|
attributes:
|
||||||
|
label: Minecraft Version
|
||||||
|
description: What version of Minecraft are you using?
|
||||||
|
options:
|
||||||
|
- 1.15.x
|
||||||
|
- 1.16.x
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Version
|
||||||
|
description: "What version of CC: Tweaked are you using?"
|
||||||
|
placeholder: "e.g. 1.96.0"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: details
|
||||||
|
attributes:
|
||||||
|
label: Details
|
||||||
|
description: |
|
||||||
|
Description of the bug. Please include the following:
|
||||||
|
- Logs: These will be located in the `logs/` directory of your Minecraft
|
||||||
|
instance. Please upload them as a gist or directly into this editor.
|
||||||
|
- Detailed reproduction steps: sometimes I can spot a bug pretty easily,
|
||||||
|
but often it's much more obscure. The more information I have to help
|
||||||
|
reproduce it, the quicker it'll get fixed.
|
||||||
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: ComputerCraft Discord
|
||||||
|
url: https://discord.computercraft.cc
|
||||||
|
about: Get help on the ComputerCraft Discord.
|
||||||
|
- name: GitHub Discussions
|
||||||
|
url: https://github.com/SquidDev-CC/CC-Tweaked/discussions
|
||||||
|
about: Or ask questions on GitHub Discussions.
|
||||||
4
.github/ISSUE_TEMPLATE/something_else.md
vendored
Normal file
4
.github/ISSUE_TEMPLATE/something_else.md
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
name: Something else
|
||||||
|
about: An issue about something else.
|
||||||
|
---
|
||||||
17
.github/matchers/checkstyle.json
vendored
Normal file
17
.github/matchers/checkstyle.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"problemMatcher": [
|
||||||
|
{
|
||||||
|
"owner": "checkstyle",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^([a-z]+) ([\\w./-]+):(\\d+):(\\d+): (.*)$",
|
||||||
|
"severity": 1,
|
||||||
|
"file": 2,
|
||||||
|
"line": 3,
|
||||||
|
"column": 4,
|
||||||
|
"message": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
18
.github/matchers/illuaminate.json
vendored
Normal file
18
.github/matchers/illuaminate.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"problemMatcher": [
|
||||||
|
{
|
||||||
|
"owner": "illuaminate",
|
||||||
|
"severity": "warning",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^([\\w./-]+):\\[(\\d+):(\\d+)\\-(?:\\d+):(?:\\d+)\\]: (.*) \\[([a-z:-]+)\\]$",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2,
|
||||||
|
"column": 3,
|
||||||
|
"message": 4,
|
||||||
|
"code": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
15
.github/matchers/junit.json
vendored
Normal file
15
.github/matchers/junit.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"problemMatcher": [
|
||||||
|
{
|
||||||
|
"owner": "junit",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^## ([\\w./-]+):(\\d+): (.*)$",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2,
|
||||||
|
"message": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
41
.github/workflows/main-ci.yml
vendored
41
.github/workflows/main-ci.yml
vendored
@@ -16,35 +16,46 @@ jobs:
|
|||||||
java-version: 8
|
java-version: 8
|
||||||
|
|
||||||
- name: Cache gradle dependencies
|
- name: Cache gradle dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ~/.gradle/caches
|
path: ~/.gradle/caches
|
||||||
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
|
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-gradle-
|
${{ runner.os }}-gradle-
|
||||||
|
|
||||||
|
- name: Disable Gradle daemon
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.gradle
|
||||||
|
echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties
|
||||||
|
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: ./gradlew build --no-daemon || ./gradlew build --no-daemon
|
run: |
|
||||||
|
./gradlew assemble || ./gradlew assemble
|
||||||
|
./gradlew downloadAssets || ./gradlew downloadAssets
|
||||||
|
./gradlew build
|
||||||
|
|
||||||
- name: Upload Jar
|
- name: Upload Jar
|
||||||
uses: actions/upload-artifact@v1
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: CC-Tweaked
|
name: CC-Tweaked
|
||||||
path: build/libs
|
path: build/libs
|
||||||
|
|
||||||
- name: Upload Coverage
|
- name: Upload Coverage
|
||||||
run: bash <(curl -s https://codecov.io/bash)
|
uses: codecov/codecov-action@v1
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: Generate Java documentation stubs
|
- name: Parse test reports
|
||||||
run: ./gradlew luaJavadoc --no-daemon
|
run: ./tools/parse-reports.py
|
||||||
|
if: ${{ failure() }}
|
||||||
|
|
||||||
- name: Lint Lua code
|
- name: Cache pre-commit
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pre-commit
|
||||||
|
key: ${{ runner.os }}-pre-commit-${{ hashFiles('config/pre-commit/config.yml') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pre-commit-
|
||||||
|
|
||||||
|
- name: Run linters
|
||||||
run: |
|
run: |
|
||||||
test -d bin || mkdir bin
|
pip install pre-commit
|
||||||
test -f bin/illuaminate || wget -q -Obin/illuaminate https://squiddev.cc/illuaminate/linux-x86-64/illuaminate
|
pre-commit run --config config/pre-commit/config.yml --show-diff-on-failure --all --color=always
|
||||||
chmod +x bin/illuaminate
|
|
||||||
bin/illuaminate lint
|
|
||||||
|
|
||||||
- name: Check whitespace
|
|
||||||
run: python3 tools/check-lines.py
|
|
||||||
|
|||||||
6
.github/workflows/make-doc.yml
vendored
6
.github/workflows/make-doc.yml
vendored
@@ -3,7 +3,7 @@ name: Build documentation
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- mc-1.15.x
|
- mc-1.16.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
make_doc:
|
make_doc:
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Set up Java 8
|
- name: Set up Java 8
|
||||||
uses: actions/setup-java@v1
|
uses: actions/setup-java@v1
|
||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
java-version: 8
|
java-version: 8
|
||||||
|
|
||||||
- name: Cache gradle dependencies
|
- name: Cache gradle dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ~/.gradle/caches
|
path: ~/.gradle/caches
|
||||||
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
|
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
|
||||||
|
|||||||
22
.gitpod.yml
Normal file
22
.gitpod.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
image:
|
||||||
|
file: config/gitpod/Dockerfile
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- port: 25565
|
||||||
|
onOpen: notify
|
||||||
|
|
||||||
|
vscode:
|
||||||
|
extensions:
|
||||||
|
- eamodio.gitlens
|
||||||
|
- github.vscode-pull-request-github
|
||||||
|
- ms-azuretools.vscode-docker
|
||||||
|
- redhat.java
|
||||||
|
- richardwillis.vscode-gradle
|
||||||
|
- vscjava.vscode-java-debug
|
||||||
|
- vscode.github
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Setup pre-commit hool
|
||||||
|
init: pre-commit install --config config/pre-commit/config.yml --allow-missing-config
|
||||||
|
- name: Install npm packages
|
||||||
|
init: npm ci
|
||||||
@@ -8,6 +8,10 @@ If you've any other questions, [just ask the community][community] or [open an i
|
|||||||
If you have a bug, suggestion, or other feedback, the best thing to do is [file an issue][new-issue]. When doing so,
|
If you have a bug, suggestion, or other feedback, the best thing to do is [file an issue][new-issue]. When doing so,
|
||||||
do use the issue templates - they provide a useful hint on what information to provide.
|
do use the issue templates - they provide a useful hint on what information to provide.
|
||||||
|
|
||||||
|
## Translations
|
||||||
|
Translations are managed through [Weblate], an online interface for managing language strings. This is synced
|
||||||
|
automatically with GitHub, so please don't submit PRs adding/changing translations!
|
||||||
|
|
||||||
## Developing
|
## Developing
|
||||||
In order to develop CC: Tweaked, you'll need to download the source code and then run it. This is a pretty simple
|
In order to develop CC: Tweaked, you'll need to download the source code and then run it. This is a pretty simple
|
||||||
process. When building on Windows, Use `gradlew.bat` instead of `./gradlew`.
|
process. When building on Windows, Use `gradlew.bat` instead of `./gradlew`.
|
||||||
@@ -15,11 +19,20 @@ process. When building on Windows, Use `gradlew.bat` instead of `./gradlew`.
|
|||||||
- **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
|
- **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
|
||||||
- **Setup Forge:** `./gradlew build`
|
- **Setup Forge:** `./gradlew build`
|
||||||
- **Run Minecraft:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
|
- **Run Minecraft:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
|
||||||
|
- **Optionally:** For small PRs (especially those only touching Lua code), it may be easier to use GitPod, which
|
||||||
|
provides a pre-configured environment: [](https://gitpod.io/#https://github.com/SquidDev-CC/CC-Tweaked/)
|
||||||
|
|
||||||
|
Do note you will need to download the mod after compiling to test.
|
||||||
|
|
||||||
If you want to run CC:T in a normal Minecraft instance, run `./gradlew build` and copy the `.jar` from `build/libs`.
|
If you want to run CC:T in a normal Minecraft instance, run `./gradlew build` and copy the `.jar` from `build/libs`.
|
||||||
These commands may take a few minutes to run the first time, as the environment is set up, but should be much faster
|
These commands may take a few minutes to run the first time, as the environment is set up, but should be much faster
|
||||||
afterwards.
|
afterwards.
|
||||||
|
|
||||||
|
The following sections describe the more niche sections of CC: Tweaked's build system. Some bits of these are
|
||||||
|
quite-complex, and (dare I say) over-engineered, so you may wish to ignore them. Well tested/documented PRs are always
|
||||||
|
preferred (and I'd definitely recommend setting up the tooling if you're doing serious development work), but for
|
||||||
|
small changes it can be a lot.
|
||||||
|
|
||||||
### Code linters
|
### Code linters
|
||||||
CC: Tweaked uses a couple of "linters" on its source code, to enforce a consistent style across the project. While these
|
CC: Tweaked uses a couple of "linters" on its source code, to enforce a consistent style across the project. While these
|
||||||
are run whenever you submit a PR, it's often useful to run this before committing.
|
are run whenever you submit a PR, it's often useful to run this before committing.
|
||||||
@@ -27,15 +40,75 @@ are run whenever you submit a PR, it's often useful to run this before committin
|
|||||||
- **[Checkstyle]:** Checks Java code to ensure it is consistently formatted. This can be run with `./gradlew build` or
|
- **[Checkstyle]:** Checks Java code to ensure it is consistently formatted. This can be run with `./gradlew build` or
|
||||||
`./gradle check`.
|
`./gradle check`.
|
||||||
- **[illuaminate]:** Checks Lua code for semantic and styleistic issues. See [the usage section][illuaminate-usage] for
|
- **[illuaminate]:** Checks Lua code for semantic and styleistic issues. See [the usage section][illuaminate-usage] for
|
||||||
how to download and run it.
|
how to download and run it. You may need to generate the Java documentation stubs (see "Documentation" below) for all
|
||||||
|
lints to pass.
|
||||||
|
|
||||||
## Translations
|
### Documentation
|
||||||
Translations are managed through [Weblate], an online interface for managing language strings. This is synced
|
When writing documentation for [CC: Tweaked's documentation website][docs], it may be useful to build the documentation
|
||||||
automatically with GitHub, so please don't submit PRs adding/changing translations!
|
and preview it yourself before submitting a PR.
|
||||||
|
|
||||||
|
Building all documentation is, sadly, a multi-stage process (though this is largely hidden by Gradle). First we need to
|
||||||
|
convert Java doc-comments into Lua ones, we also generate some Javascript to embed. All of this is then finally fed into
|
||||||
|
illuaminate, which spits out our HTML.
|
||||||
|
|
||||||
|
#### Setting up the tooling
|
||||||
|
For various reasons, getting the environment set up to build documentation can be pretty complex. I'd quite like to
|
||||||
|
automate this via Docker and/or nix in the future, but this needs to be done manually for now.
|
||||||
|
|
||||||
|
This tooling is only needed if you need to build the whole website. If you just want to generate the Lua stubs, you can
|
||||||
|
skp this section.
|
||||||
|
- Install Node/npm and install our Node packages with `npm ci`.
|
||||||
|
- Install [illuaminate][illuaminate-usage] as described above.
|
||||||
|
|
||||||
|
#### Building documentation
|
||||||
|
Gradle should be your entrypoint to building most documentation. There's two tasks which are of interest:
|
||||||
|
|
||||||
|
- `./gradlew luaJavadoc` - Generate documentation stubs for Java methods.
|
||||||
|
- `./gradlew docWebsite` - Generate the whole website (including Javascript pages). The resulting HTML is stored at
|
||||||
|
`./build/docs/lua/`.
|
||||||
|
|
||||||
|
#### Writing documentation
|
||||||
|
illuaminate's documentation system is not currently documented (somewhat ironic), but is _largely_ the same as
|
||||||
|
[ldoc][ldoc]. Documentation comments are written in Markdown,
|
||||||
|
|
||||||
|
Our markdown engine does _not_ support GitHub flavoured markdown, and so does not support all the features one might
|
||||||
|
expect (such as tables). It is very much recommended that you build and preview the docs locally first.
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
Thankfully running tests is much simpler than running the documentation generator! `./gradlew check` will run the
|
||||||
|
entire test suite (and some additional bits of verification).
|
||||||
|
|
||||||
|
Before we get into writing tests, it's worth mentioning the various test suites that CC: Tweaked has:
|
||||||
|
- "Core" Java (`./src/test/java`): These test core bits of the mod which don't require any Minecraft interaction.
|
||||||
|
This includes the `@LuaFunction` system, file system code, etc...
|
||||||
|
|
||||||
|
These tests are run by `./gradlew test`.
|
||||||
|
|
||||||
|
- CraftOS (`./src/test/resources/test-rom/`): These tests are written in Lua, and ensure the Lua environment, libraries
|
||||||
|
and programs work as expected. These are (generally) written to be able to be run on emulators too, to provide some
|
||||||
|
sort of compliance test.
|
||||||
|
|
||||||
|
These tests are run by the '"Core" Java' test suite, and so are also run with `./gradlew test`.
|
||||||
|
|
||||||
|
- In-game (`./src/test/java/dan200/computercraft/ingame/`): These tests are run on an actual Minecraft server, using
|
||||||
|
[the same system Mojang do][mc-test]. The aim of these is to test in-game behaviour of blocks and peripherals.
|
||||||
|
|
||||||
|
These are run by `./gradlew testInGame`.
|
||||||
|
|
||||||
|
## CraftOS tests
|
||||||
|
CraftOS's tests are written using a test system called "mcfly", heavily inspired by [busted] (and thus RSpec). Groups of
|
||||||
|
tests go inside `describe` blocks, and a single test goes inside `it`.
|
||||||
|
|
||||||
|
Assertions are generally written using `expect` (inspired by Hamcrest and the like). For instance, `expect(foo):eq("bar")`
|
||||||
|
asserts that your variable `foo` is equal to the expected value `"bar"`.
|
||||||
|
|
||||||
[new-issue]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose "Create a new issue"
|
[new-issue]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose "Create a new issue"
|
||||||
[community]: README.md#Community "Get in touch with the community."
|
[community]: README.md#Community "Get in touch with the community."
|
||||||
[checkstyle]: https://checkstyle.org/
|
[checkstyle]: https://checkstyle.org/
|
||||||
[illuaminate]: https://github.com/SquidDev/illuaminate/
|
[illuaminate]: https://github.com/SquidDev/illuaminate/ "Illuaminate on GitHub"
|
||||||
[illuaminate-usage]: https://github.com/SquidDev/illuaminate/blob/master/README.md#usage
|
[illuaminate-usage]: https://github.com/SquidDev/illuaminate/blob/master/README.md#usage "Installing Illuaminate"
|
||||||
[weblate]: https://i18n.tweaked.cc/projects/cc-tweaked/minecraft/
|
[weblate]: https://i18n.tweaked.cc/projects/cc-tweaked/minecraft/ "CC: Tweaked weblate instance"
|
||||||
|
[docs]: https://tweaked.cc/ "CC: Tweaked documentation"
|
||||||
|
[ldoc]: http://stevedonovan.github.io/ldoc/ "ldoc, a Lua documentation generator."
|
||||||
|
[mc-test]: https://www.youtube.com/watch?v=vXaWOJTCYNg
|
||||||
|
[busted]: https://github.com/Olivine-Labs/busted "busted: Elegant Lua unit testing."
|
||||||
|
|||||||
425
build.gradle
425
build.gradle
@@ -1,39 +1,49 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven {
|
maven {
|
||||||
name = "forge"
|
name = "forge"
|
||||||
url = "https://files.minecraftforge.net/maven"
|
url = "https://maven.minecraftforge.net"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.google.code.gson:gson:2.8.1'
|
classpath 'net.minecraftforge.gradle:ForgeGradle:5.0.24'
|
||||||
classpath 'net.minecraftforge.gradle:ForgeGradle:3.0.187'
|
|
||||||
classpath 'net.sf.proguard:proguard-gradle:6.1.0beta2'
|
|
||||||
classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "checkstyle"
|
id "checkstyle"
|
||||||
id "jacoco"
|
id "jacoco"
|
||||||
id "com.github.hierynomus.license" version "0.15.0"
|
id "maven-publish"
|
||||||
id "com.matthewprenger.cursegradle" version "1.3.0"
|
id "com.github.hierynomus.license" version "0.16.1"
|
||||||
id "com.github.breadmoirai.github-release" version "2.2.4"
|
id "com.matthewprenger.cursegradle" version "1.4.0"
|
||||||
|
id "com.github.breadmoirai.github-release" version "2.2.12"
|
||||||
|
id "org.jetbrains.kotlin.jvm" version "1.3.72"
|
||||||
|
id "com.modrinth.minotaur" version "1.2.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'net.minecraftforge.gradle'
|
apply plugin: 'net.minecraftforge.gradle'
|
||||||
apply plugin: 'org.ajoberstar.grgit'
|
|
||||||
apply plugin: 'maven-publish'
|
|
||||||
apply plugin: 'maven'
|
|
||||||
|
|
||||||
version = mod_version
|
version = mod_version
|
||||||
|
|
||||||
group = "org.squiddev"
|
group = "org.squiddev"
|
||||||
archivesBaseName = "cc-tweaked-${mc_version}"
|
archivesBaseName = "cc-tweaked-${mc_version}"
|
||||||
|
|
||||||
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'
|
def javaVersion = JavaLanguageVersion.of(8)
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion = javaVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
withSourcesJar()
|
||||||
|
withJavadocJar()
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType(JavaExec).configureEach {
|
||||||
|
javaLauncher = javaToolchains.launcherFor {
|
||||||
|
languageVersion = javaVersion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
minecraft {
|
minecraft {
|
||||||
runs {
|
runs {
|
||||||
@@ -50,9 +60,10 @@ minecraft {
|
|||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
workingDirectory project.file("run/server-${mc_version}")
|
workingDirectory project.file("run/server")
|
||||||
property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP'
|
property 'forge.logging.markers', 'REGISTRIES'
|
||||||
property 'forge.logging.console.level', 'debug'
|
property 'forge.logging.console.level', 'debug'
|
||||||
|
arg "--nogui"
|
||||||
|
|
||||||
mods {
|
mods {
|
||||||
computercraft {
|
computercraft {
|
||||||
@@ -63,7 +74,7 @@ minecraft {
|
|||||||
|
|
||||||
data {
|
data {
|
||||||
workingDirectory project.file('run')
|
workingDirectory project.file('run')
|
||||||
property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP'
|
property 'forge.logging.markers', 'REGISTRIES'
|
||||||
property 'forge.logging.console.level', 'debug'
|
property 'forge.logging.console.level', 'debug'
|
||||||
|
|
||||||
args '--mod', 'computercraft', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
args '--mod', 'computercraft', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
||||||
@@ -73,11 +84,24 @@ minecraft {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testServer {
|
||||||
|
workingDirectory project.file('test-files/server')
|
||||||
|
parent runs.server
|
||||||
|
arg "--nogui"
|
||||||
|
|
||||||
|
mods {
|
||||||
|
cctest {
|
||||||
|
source sourceSets.test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mappings channel: 'snapshot', version: "${mappings_version}".toString()
|
mappings channel: 'official', version: mc_version
|
||||||
|
|
||||||
accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
|
accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||||
|
accessTransformer file('src/test/resources/META-INF/accesstransformer.cfg')
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
@@ -97,7 +121,6 @@ repositories {
|
|||||||
configurations {
|
configurations {
|
||||||
shade
|
shade
|
||||||
compile.extendsFrom shade
|
compile.extendsFrom shade
|
||||||
deployerJars
|
|
||||||
cctJavadoc
|
cctJavadoc
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,24 +129,23 @@ dependencies {
|
|||||||
|
|
||||||
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
|
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
|
||||||
|
|
||||||
compileOnly fg.deobf("mezz.jei:jei-1.16.4:7.6.0.58:api")
|
compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.104:api")
|
||||||
compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.16.4:7.0.0.63")
|
compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.16.5:7.1.0.313")
|
||||||
|
compileOnly fg.deobf("commoble.morered:morered-1.16.5:2.1.1.0")
|
||||||
|
|
||||||
runtimeOnly fg.deobf("mezz.jei:jei-1.16.4:7.6.0.58")
|
runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.104")
|
||||||
|
|
||||||
compileOnly 'com.google.auto.service:auto-service:1.0-rc7'
|
shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'
|
||||||
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc7'
|
|
||||||
|
|
||||||
shade 'org.squiddev:Cobalt:0.5.1-SNAPSHOT'
|
|
||||||
|
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
|
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
|
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
|
||||||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
|
||||||
testImplementation 'org.hamcrest:hamcrest:2.2'
|
testImplementation 'org.hamcrest:hamcrest:2.2'
|
||||||
|
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72'
|
||||||
|
testImplementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.72'
|
||||||
|
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
|
||||||
|
|
||||||
deployerJars "org.apache.maven.wagon:wagon-ssh:3.0.0"
|
cctJavadoc 'cc.tweaked:cct-javadoc:1.4.1'
|
||||||
|
|
||||||
cctJavadoc 'cc.tweaked:cct-javadoc:1.3.0'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compile tasks
|
// Compile tasks
|
||||||
@@ -142,31 +164,24 @@ task luaJavadoc(type: Javadoc) {
|
|||||||
|
|
||||||
options.docletpath = configurations.cctJavadoc.files as List
|
options.docletpath = configurations.cctJavadoc.files as List
|
||||||
options.doclet = "cc.tweaked.javadoc.LuaDoclet"
|
options.doclet = "cc.tweaked.javadoc.LuaDoclet"
|
||||||
|
options.noTimestamp = false
|
||||||
|
|
||||||
// Attempt to run under Java 11 (any Java >= 9 will work though).
|
javadocTool = javaToolchains.javadocToolFor {
|
||||||
if(System.getProperty("java.version").startsWith("1.")
|
languageVersion = JavaLanguageVersion.of(11)
|
||||||
&& (System.getenv("JAVA_HOME_11_X64") != null || project.hasProperty("java11Home"))) {
|
|
||||||
executable = "${System.getenv("JAVA_HOME_11_X64") ?: project.property("java11Home")}/bin/javadoc"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
dependsOn javadoc
|
|
||||||
|
|
||||||
manifest {
|
manifest {
|
||||||
attributes(["Specification-Title": "computercraft",
|
attributes(["Specification-Title" : "computercraft",
|
||||||
"Specification-Vendor": "SquidDev",
|
"Specification-Vendor" : "SquidDev",
|
||||||
"Specification-Version": "1",
|
"Specification-Version" : "1",
|
||||||
"Implementation-Title": "CC: Tweaked",
|
"Implementation-Title" : "CC: Tweaked",
|
||||||
"Implementation-Version": "${mod_version}",
|
"Implementation-Version" : "${mod_version}",
|
||||||
"Implementation-Vendor" :"SquidDev",
|
"Implementation-Vendor" : "SquidDev",
|
||||||
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
|
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
|
||||||
}
|
}
|
||||||
|
|
||||||
from (sourceSets.main.allSource) {
|
|
||||||
include "dan200/computercraft/api/**/*.java"
|
|
||||||
}
|
|
||||||
|
|
||||||
from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
|
from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,60 +191,6 @@ jar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets
|
|
||||||
import java.nio.file.*
|
|
||||||
import java.util.zip.*
|
|
||||||
|
|
||||||
import com.google.gson.GsonBuilder
|
|
||||||
import com.google.gson.JsonElement
|
|
||||||
import com.hierynomus.gradle.license.tasks.LicenseCheck
|
|
||||||
import com.hierynomus.gradle.license.tasks.LicenseFormat
|
|
||||||
import org.ajoberstar.grgit.Grgit
|
|
||||||
import proguard.gradle.ProGuardTask
|
|
||||||
|
|
||||||
task proguard(type: ProGuardTask, dependsOn: jar) {
|
|
||||||
description "Removes unused shadowed classes from the jar"
|
|
||||||
group "compact"
|
|
||||||
|
|
||||||
injars jar.archivePath
|
|
||||||
outjars "${jar.archivePath.absolutePath.replace(".jar", "")}-min.jar"
|
|
||||||
|
|
||||||
// Add the main runtime jar and all non-shadowed dependencies
|
|
||||||
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
|
|
||||||
libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
|
|
||||||
doFirst {
|
|
||||||
sourceSets.main.compileClasspath
|
|
||||||
.filter { !it.name.contains("Cobalt") }
|
|
||||||
.each { libraryjars it }
|
|
||||||
}
|
|
||||||
|
|
||||||
// We want to avoid as much obfuscation as possible. We're only doing this to shrink code size.
|
|
||||||
dontobfuscate; dontoptimize; keepattributes; keepparameternames
|
|
||||||
|
|
||||||
// Proguard will remove directories by default, but that breaks JarMount.
|
|
||||||
keepdirectories 'data/computercraft/lua**'
|
|
||||||
|
|
||||||
// Preserve ComputerCraft classes - we only want to strip shadowed files.
|
|
||||||
keep 'class dan200.computercraft.** { *; }'
|
|
||||||
|
|
||||||
// LWJGL and Apache bundle Java 9 versions, which is great, but rather breaks Proguard
|
|
||||||
dontwarn 'module-info'
|
|
||||||
dontwarn 'org.apache.**,org.lwjgl.**'
|
|
||||||
}
|
|
||||||
|
|
||||||
task proguardMove(dependsOn: proguard) {
|
|
||||||
description "Replace the original jar with the minified version"
|
|
||||||
group "compact"
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
Files.move(
|
|
||||||
file("${jar.archivePath.absolutePath.replace(".jar", "")}-min.jar").toPath(),
|
|
||||||
file(jar.archivePath).toPath(),
|
|
||||||
StandardCopyOption.REPLACE_EXISTING
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
inputs.property "version", mod_version
|
inputs.property "version", mod_version
|
||||||
inputs.property "mcversion", mc_version
|
inputs.property "mcversion", mc_version
|
||||||
@@ -237,25 +198,25 @@ processResources {
|
|||||||
def hash = 'none'
|
def hash = 'none'
|
||||||
Set<String> contributors = []
|
Set<String> contributors = []
|
||||||
try {
|
try {
|
||||||
def grgit = Grgit.open(dir: '.')
|
hash = ["git", "-C", projectDir, "rev-parse", "HEAD"].execute().text.trim()
|
||||||
hash = grgit.head().id
|
|
||||||
|
|
||||||
def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
|
def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
|
||||||
grgit.log().each {
|
["git", "-C", projectDir, "log", "--format=tformat:%an%n%cn"].execute().text.split('\n').each {
|
||||||
if (!blacklist.contains(it.author.name)) contributors.add(it.author.name)
|
if (!blacklist.contains(it)) contributors.add(it)
|
||||||
if (!blacklist.contains(it.committer.name)) contributors.add(it.committer.name)
|
|
||||||
}
|
}
|
||||||
} catch(Exception ignored) { }
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
inputs.property "commithash", hash
|
inputs.property "commithash", hash
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.INCLUDE
|
||||||
|
|
||||||
from(sourceSets.main.resources.srcDirs) {
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
include 'META-INF/mods.toml'
|
include 'META-INF/mods.toml'
|
||||||
include 'data/computercraft/lua/rom/help/credits.txt'
|
include 'data/computercraft/lua/rom/help/credits.txt'
|
||||||
|
|
||||||
expand 'version': mod_version,
|
expand 'version': mod_version,
|
||||||
'mcversion': mc_version,
|
'mcversion': mc_version,
|
||||||
'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n')
|
'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
from(sourceSets.main.resources.srcDirs) {
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
@@ -264,51 +225,15 @@ processResources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
task compressJson(dependsOn: jar) {
|
sourcesJar {
|
||||||
group "compact"
|
duplicatesStrategy = DuplicatesStrategy.INCLUDE
|
||||||
description "Minifies all JSON files, stripping whitespace"
|
|
||||||
|
|
||||||
def jarPath = file(jar.archivePath)
|
|
||||||
|
|
||||||
def tempPath = File.createTempFile("input", ".jar", temporaryDir)
|
|
||||||
tempPath.deleteOnExit()
|
|
||||||
|
|
||||||
def gson = new GsonBuilder().create()
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
// Copy over all files in the current jar to the new one, running json files from GSON. As pretty printing
|
|
||||||
// is turned off, they should be minified.
|
|
||||||
new ZipFile(jarPath).withCloseable { inJar ->
|
|
||||||
tempPath.getParentFile().mkdirs()
|
|
||||||
new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(tempPath))).withCloseable { outJar ->
|
|
||||||
inJar.entries().each { entry ->
|
|
||||||
if(entry.directory) {
|
|
||||||
outJar.putNextEntry(entry)
|
|
||||||
} else if(!entry.name.endsWith(".json")) {
|
|
||||||
outJar.putNextEntry(entry)
|
|
||||||
inJar.getInputStream(entry).withCloseable { outJar << it }
|
|
||||||
} else {
|
|
||||||
ZipEntry newEntry = new ZipEntry(entry.name)
|
|
||||||
newEntry.setTime(entry.time)
|
|
||||||
outJar.putNextEntry(newEntry)
|
|
||||||
|
|
||||||
def element = inJar.getInputStream(entry).withCloseable { gson.fromJson(it.newReader("UTF8"), JsonElement.class) }
|
|
||||||
outJar.write(gson.toJson(element).getBytes(StandardCharsets.UTF_8))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// And replace the original jar again
|
|
||||||
Files.move(tempPath.toPath(), jarPath.toPath(), StandardCopyOption.REPLACE_EXISTING)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assemble.dependsOn compressJson
|
|
||||||
|
|
||||||
// Web tasks
|
// Web tasks
|
||||||
|
|
||||||
|
|
||||||
|
import com.hierynomus.gradle.license.tasks.LicenseCheck
|
||||||
|
import com.hierynomus.gradle.license.tasks.LicenseFormat
|
||||||
import org.apache.tools.ant.taskdefs.condition.Os
|
import org.apache.tools.ant.taskdefs.condition.Os
|
||||||
|
|
||||||
List<String> mkCommand(String command) {
|
List<String> mkCommand(String command) {
|
||||||
@@ -336,7 +261,7 @@ task minifyWeb(type: Exec, dependsOn: rollup) {
|
|||||||
inputs.file("package-lock.json").withPropertyName("package-lock.json")
|
inputs.file("package-lock.json").withPropertyName("package-lock.json")
|
||||||
outputs.file("$buildDir/rollup/index.min.js").withPropertyName("output")
|
outputs.file("$buildDir/rollup/index.min.js").withPropertyName("output")
|
||||||
|
|
||||||
commandLine mkCommand('"node_modules/.bin/terser"' + " -o $buildDir/rollup/index.min.js $buildDir/rollup/index.js")
|
commandLine mkCommand('"node_modules/.bin/terser"' + " -o '$buildDir/rollup/index.min.js' '$buildDir/rollup/index.js'")
|
||||||
}
|
}
|
||||||
|
|
||||||
task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
|
task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
|
||||||
@@ -369,9 +294,10 @@ test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
jacocoTestReport {
|
jacocoTestReport {
|
||||||
|
dependsOn('test')
|
||||||
reports {
|
reports {
|
||||||
xml.enabled true
|
xml.required = true
|
||||||
html.enabled true
|
html.required = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,14 +314,14 @@ license {
|
|||||||
it.configure {
|
it.configure {
|
||||||
include("**/*.java")
|
include("**/*.java")
|
||||||
exclude("dan200/computercraft/api/**")
|
exclude("dan200/computercraft/api/**")
|
||||||
header rootProject.file('config/license/main.txt')
|
header file('config/license/main.txt')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[licenseTest, licenseFormatTest].forEach {
|
[licenseTest, licenseFormatTest].forEach {
|
||||||
it.configure {
|
it.configure {
|
||||||
include("**/*.java")
|
include("**/*.java")
|
||||||
header rootProject.file('config/license/main.txt')
|
header file('config/license/main.txt')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -406,16 +332,73 @@ gradle.projectsEvaluated {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
task licenseAPI(type: LicenseCheck);
|
task licenseAPI(type: LicenseCheck)
|
||||||
task licenseFormatAPI(type: LicenseFormat);
|
task licenseFormatAPI(type: LicenseFormat)
|
||||||
[licenseAPI, licenseFormatAPI].forEach {
|
[licenseAPI, licenseFormatAPI].forEach {
|
||||||
it.configure {
|
it.configure {
|
||||||
source = sourceSets.main.java
|
source = sourceSets.main.java
|
||||||
include("dan200/computercraft/api/**")
|
include("dan200/computercraft/api/**")
|
||||||
header rootProject.file('config/license/api.txt')
|
header file('config/license/api.txt')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task setupServer(type: Copy) {
|
||||||
|
group "test server"
|
||||||
|
description "Sets up the environment for the test server."
|
||||||
|
|
||||||
|
from("src/test/server-files") {
|
||||||
|
include "eula.txt"
|
||||||
|
include "server.properties"
|
||||||
|
}
|
||||||
|
into "test-files/server"
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register('testInGame', JavaExec.class).configure {
|
||||||
|
it.group('test server')
|
||||||
|
it.description("Runs tests on a temporary Minecraft server.")
|
||||||
|
it.dependsOn(setupServer, 'prepareRunTestServer', 'cleanTestInGame')
|
||||||
|
|
||||||
|
// Copy from runTestServer. We do it in this slightly odd way as runTestServer
|
||||||
|
// isn't created until the task is configured (which is no good for us).
|
||||||
|
JavaExec exec = tasks.getByName('runTestServer')
|
||||||
|
exec.copyTo(it)
|
||||||
|
it.setClasspath(exec.getClasspath())
|
||||||
|
it.mainClass = exec.mainClass
|
||||||
|
it.setArgs(exec.getArgs())
|
||||||
|
|
||||||
|
it.systemProperty('forge.logging.console.level', 'info')
|
||||||
|
it.systemProperty('cctest.run', 'true')
|
||||||
|
|
||||||
|
// Jacoco and modlauncher don't play well together as the classes loaded in-game don't
|
||||||
|
// match up with those written to disk. We get Jacoco to dump all classes to disk, and
|
||||||
|
// use that when generating the report.
|
||||||
|
def coverageOut = new File(buildDir, 'jacocoClassDump/testInGame')
|
||||||
|
jacoco.applyTo(it)
|
||||||
|
it.jacoco.setIncludes(["dan200.computercraft.*"])
|
||||||
|
it.jacoco.setClassDumpDir(coverageOut)
|
||||||
|
it.outputs.dir(coverageOut)
|
||||||
|
// Older versions of modlauncher don't include a protection domain (and thus no code
|
||||||
|
// source). Jacoco skips such classes by default, so we need to explicitly include them.
|
||||||
|
it.jacoco.setIncludeNoLocationClasses(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register('jacocoTestInGameReport', JacocoReport.class).configure {
|
||||||
|
it.group('test server')
|
||||||
|
it.description('Generate coverage reports for in-game tests (testInGame)')
|
||||||
|
it.dependsOn('testInGame')
|
||||||
|
|
||||||
|
it.executionData(new File(buildDir, 'jacoco/testInGame.exec'))
|
||||||
|
it.sourceDirectories.from(sourceSets.main.allJava.srcDirs)
|
||||||
|
it.classDirectories.from(new File(buildDir, 'jacocoClassDump/testInGame'))
|
||||||
|
|
||||||
|
it.reports {
|
||||||
|
xml.enabled true
|
||||||
|
html.enabled true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
check.dependsOn('jacocoTestInGameReport')
|
||||||
|
|
||||||
|
|
||||||
// Upload tasks
|
// Upload tasks
|
||||||
|
|
||||||
task checkRelease {
|
task checkRelease {
|
||||||
@@ -423,31 +406,31 @@ task checkRelease {
|
|||||||
description "Verifies that everything is ready for a release"
|
description "Verifies that everything is ready for a release"
|
||||||
|
|
||||||
inputs.property "version", mod_version
|
inputs.property "version", mod_version
|
||||||
inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.txt")
|
inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.md")
|
||||||
inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
|
inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
|
||||||
|
|
||||||
doLast {
|
doLast {
|
||||||
def ok = true
|
def ok = true
|
||||||
|
|
||||||
// Check we're targetting the current version
|
// Check we're targetting the current version
|
||||||
def whatsnew = new File("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt").readLines()
|
def whatsnew = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md").readLines()
|
||||||
if (whatsnew[0] != "New features in CC: Tweaked $mod_version") {
|
if (whatsnew[0] != "New features in CC: Tweaked $mod_version") {
|
||||||
ok = false
|
ok = false
|
||||||
project.logger.error("Expected `whatsnew.txt' to target $mod_version.")
|
project.logger.error("Expected `whatsnew.md' to target $mod_version.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check "read more" exists and trim it
|
// Check "read more" exists and trim it
|
||||||
def idx = whatsnew.findIndexOf { it == 'Type "help changelog" to see the full version history.' }
|
def idx = whatsnew.findIndexOf { it == 'Type "help changelog" to see the full version history.' }
|
||||||
if (idx == -1) {
|
if (idx == -1) {
|
||||||
ok = false
|
ok = false
|
||||||
project.logger.error("Must mention the changelog in whatsnew.txt")
|
project.logger.error("Must mention the changelog in whatsnew.md")
|
||||||
} else {
|
} else {
|
||||||
whatsnew = whatsnew.getAt(0 ..< idx)
|
whatsnew = whatsnew.getAt(0..<idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whatsnew and changelog match.
|
// Check whatsnew and changelog match.
|
||||||
def versionChangelog = "# " + whatsnew.join("\n")
|
def versionChangelog = "# " + whatsnew.join("\n")
|
||||||
def changelog = new File("src/main/resources/data/computercraft/lua/rom/help/changelog.txt").getText()
|
def changelog = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/changelog.md").getText()
|
||||||
if (!changelog.startsWith(versionChangelog)) {
|
if (!changelog.startsWith(versionChangelog)) {
|
||||||
ok = false
|
ok = false
|
||||||
project.logger.error("whatsnew and changelog are not in sync")
|
project.logger.error("whatsnew and changelog are not in sync")
|
||||||
@@ -468,56 +451,71 @@ curseforge {
|
|||||||
relations {
|
relations {
|
||||||
incompatible "computercraft"
|
incompatible "computercraft"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addGameVersion "${mc_version}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import com.modrinth.minotaur.TaskModrinthUpload
|
||||||
|
tasks.register('publishModrinth', TaskModrinthUpload.class).configure {
|
||||||
|
dependsOn('assemble', 'reobfJar')
|
||||||
|
onlyIf {
|
||||||
|
project.hasProperty('modrinthApiKey')
|
||||||
|
}
|
||||||
|
|
||||||
|
token = project.hasProperty('modrinthApiKey') ? project.getProperty('modrinthApiKey') : ''
|
||||||
|
projectId = 'gu7yAYhd'
|
||||||
|
versionNumber = "${project.mc_version}-${project.mod_version}"
|
||||||
|
uploadFile = jar
|
||||||
|
addGameVersion(project.mc_version)
|
||||||
|
changelog = "Release notes can be found on the [GitHub repository](https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
|
||||||
|
addLoader('forge')
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType(GenerateModuleMetadata) {
|
||||||
|
// We can't generate metadata as that includes Forge as a dependency.
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
publications {
|
publications {
|
||||||
mavenJava(MavenPublication) {
|
maven(MavenPublication) {
|
||||||
from components.java
|
from components.java
|
||||||
// artifact sourceJar
|
|
||||||
|
pom {
|
||||||
|
name = 'CC: Tweaked'
|
||||||
|
description = 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
|
||||||
|
url = 'https://github.com/SquidDev-CC/CC-Tweaked'
|
||||||
|
|
||||||
|
scm {
|
||||||
|
url = 'https://github.com/SquidDev-CC/CC-Tweaked.git'
|
||||||
|
}
|
||||||
|
|
||||||
|
issueManagement {
|
||||||
|
system = 'github'
|
||||||
|
url = 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name = 'ComputerCraft Public License, Version 1.0'
|
||||||
|
url = 'https://github.com/SquidDev-CC/CC-Tweaked/blob/mc-1.15.x/LICENSE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
withXml { asNode().remove(asNode().get("dependencies")) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
uploadArchives {
|
|
||||||
repositories {
|
repositories {
|
||||||
if(project.hasProperty('mavenUploadUrl')) {
|
if (project.hasProperty("mavenUser")) {
|
||||||
mavenDeployer {
|
maven {
|
||||||
configuration = configurations.deployerJars
|
name = "SquidDev"
|
||||||
|
url = "https://squiddev.cc/maven"
|
||||||
repository(url: project.property('mavenUploadUrl')) {
|
credentials {
|
||||||
authentication(
|
username = project.property("mavenUser") as String
|
||||||
userName: project.property('mavenUploadUser'),
|
password = project.property("mavenPass") as String
|
||||||
privateKey: project.property('mavenUploadKey'))
|
|
||||||
}
|
|
||||||
|
|
||||||
pom.project {
|
|
||||||
name 'CC: Tweaked'
|
|
||||||
packaging 'jar'
|
|
||||||
description 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
|
|
||||||
url 'https://github.com/SquidDev-CC/CC-Tweaked'
|
|
||||||
|
|
||||||
scm {
|
|
||||||
url 'https://github.com/SquidDev-CC/CC-Tweaked.git'
|
|
||||||
}
|
|
||||||
|
|
||||||
issueManagement {
|
|
||||||
system 'github'
|
|
||||||
url 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
|
|
||||||
}
|
|
||||||
|
|
||||||
licenses {
|
|
||||||
license {
|
|
||||||
name 'ComputerCraft Public License, Version 1.0'
|
|
||||||
url 'https://github.com/SquidDev-CC/CC-Tweaked/blob/master/LICENSE'
|
|
||||||
distribution 'repo'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pom.whenConfigured { pom ->
|
|
||||||
pom.dependencies.clear()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -528,25 +526,30 @@ githubRelease {
|
|||||||
token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
|
token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
|
||||||
owner 'SquidDev-CC'
|
owner 'SquidDev-CC'
|
||||||
repo 'CC-Tweaked'
|
repo 'CC-Tweaked'
|
||||||
try {
|
targetCommitish.set(project.provider({
|
||||||
targetCommitish = Grgit.open(dir: '.').branch.current().name
|
try {
|
||||||
} catch(Exception ignored) { }
|
return ["git", "-C", projectDir, "rev-parse", "--abbrev-ref", "HEAD"].execute().text.trim()
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
return "master"
|
||||||
|
}))
|
||||||
|
|
||||||
tagName "v${mc_version}-${mod_version}"
|
tagName "v${mc_version}-${mod_version}"
|
||||||
releaseName "[${mc_version}] ${mod_version}"
|
releaseName "[${mc_version}] ${mod_version}"
|
||||||
body {
|
body.set(project.provider({
|
||||||
"## " + new File("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
|
"## " + new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
|
||||||
.readLines()
|
.readLines()
|
||||||
.takeWhile { it != 'Type "help changelog" to see the full version history.' }
|
.takeWhile { it != 'Type "help changelog" to see the full version history.' }
|
||||||
.join("\n").trim()
|
.join("\n").trim()
|
||||||
}
|
}))
|
||||||
prerelease false
|
prerelease false
|
||||||
}
|
}
|
||||||
|
|
||||||
def uploadTasks = ["uploadArchives", "curseforge", "githubRelease"]
|
def uploadTasks = ["publish", "curseforge", "publishModrinth", "githubRelease"]
|
||||||
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
|
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
|
||||||
|
|
||||||
task uploadAll(dependsOn: uploadTasks) {
|
task uploadAll(dependsOn: uploadTasks) {
|
||||||
group "upload"
|
group "upload"
|
||||||
description "Uploads to all repositories (Maven, Curse, GitHub release)"
|
description "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<property name="charset" value="UTF-8" />
|
<property name="charset" value="UTF-8" />
|
||||||
|
|
||||||
<module name="SuppressionFilter">
|
<module name="SuppressionFilter">
|
||||||
<property name="file" value="config/checkstyle/suppressions.xml" />
|
<property name="file" value="${config_loc}/suppressions.xml" />
|
||||||
</module>
|
</module>
|
||||||
|
|
||||||
<module name="BeforeExecutionExclusionFileFilter">
|
<module name="BeforeExecutionExclusionFileFilter">
|
||||||
@@ -97,20 +97,11 @@
|
|||||||
<module name="LambdaParameterName" />
|
<module name="LambdaParameterName" />
|
||||||
<module name="LocalFinalVariableName" />
|
<module name="LocalFinalVariableName" />
|
||||||
<module name="LocalVariableName" />
|
<module name="LocalVariableName" />
|
||||||
<!-- Allow an optional m_ on private members -->
|
<module name="MemberName" />
|
||||||
<module name="MemberName">
|
|
||||||
<property name="applyToPrivate" value="false" />
|
|
||||||
<property name="applyToPackage" value="false" />
|
|
||||||
</module>
|
|
||||||
<module name="MemberName">
|
|
||||||
<property name="format" value="^(m_)?[a-z][a-zA-Z0-9]*$" />
|
|
||||||
<property name="applyToPrivate" value="true" />
|
|
||||||
<property name="applyToPackage" value="true" />
|
|
||||||
</module>
|
|
||||||
<module name="MethodName" />
|
<module name="MethodName" />
|
||||||
<module name="MethodTypeParameterName" />
|
<module name="MethodTypeParameterName" />
|
||||||
<module name="PackageName">
|
<module name="PackageName">
|
||||||
<property name="format" value="^dan200\.computercraf(\.[a-z][a-z0-9]*)*" />
|
<property name="format" value="^dan200\.computercraft(\.[a-z][a-z0-9]*)*" />
|
||||||
</module>
|
</module>
|
||||||
<module name="ParameterName" />
|
<module name="ParameterName" />
|
||||||
<module name="StaticVariableName">
|
<module name="StaticVariableName">
|
||||||
|
|||||||
@@ -7,9 +7,6 @@
|
|||||||
<suppress checks="StaticVariableName" files=".*[\\/]ComputerCraft.java" />
|
<suppress checks="StaticVariableName" files=".*[\\/]ComputerCraft.java" />
|
||||||
<suppress checks="StaticVariableName" files=".*[\\/]ComputerCraftAPI.java" />
|
<suppress checks="StaticVariableName" files=".*[\\/]ComputerCraftAPI.java" />
|
||||||
|
|
||||||
<!-- Do not check for missing package Javadoc. -->
|
|
||||||
<suppress checks="JavadocStyle" files=".*[\\/]package-info.java" />
|
|
||||||
|
|
||||||
<!-- The commands API is documented in Lua. -->
|
<!-- The commands API is documented in Lua. -->
|
||||||
<suppress checks="SummaryJavadocCheck" files=".*[\\/]CommandAPI.java" />
|
<suppress checks="SummaryJavadocCheck" files=".*[\\/]CommandAPI.java" />
|
||||||
</suppressions>
|
</suppressions>
|
||||||
|
|||||||
8
config/gitpod/Dockerfile
Normal file
8
config/gitpod/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM gitpod/workspace-base
|
||||||
|
|
||||||
|
USER gitpod
|
||||||
|
|
||||||
|
RUN sudo apt-get -q update \
|
||||||
|
&& sudo apt-get install -yq openjdk-8-jdk openjdk-16-jdk python3-pip npm \
|
||||||
|
&& sudo pip3 install pre-commit \
|
||||||
|
&& sudo update-java-alternatives --set java-1.8.0-openjdk-amd64
|
||||||
55
config/pre-commit/config.yml
Normal file
55
config/pre-commit/config.yml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# See https://pre-commit.com for more information
|
||||||
|
# See https://pre-commit.com/hooks.html for more hooks
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v3.2.0
|
||||||
|
hooks:
|
||||||
|
- id: trailing-whitespace
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
- id: check-merge-conflict
|
||||||
|
|
||||||
|
# Quick syntax checkers
|
||||||
|
- id: check-xml
|
||||||
|
- id: check-yaml
|
||||||
|
- id: check-toml
|
||||||
|
- id: check-json
|
||||||
|
exclude: "tsconfig\\.json$"
|
||||||
|
|
||||||
|
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
||||||
|
rev: 2.3.5
|
||||||
|
hooks:
|
||||||
|
- id: editorconfig-checker
|
||||||
|
args: ['-disable-indentation']
|
||||||
|
exclude: "^(.*\\.(bat)|LICENSE)$"
|
||||||
|
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: checkstyle
|
||||||
|
name: Check Java codestyle
|
||||||
|
files: ".*\\.java$"
|
||||||
|
language: system
|
||||||
|
entry: ./gradlew checkstyleMain checkstyleTest
|
||||||
|
pass_filenames: false
|
||||||
|
require_serial: true
|
||||||
|
- id: license
|
||||||
|
name: Check Java license headers
|
||||||
|
files: ".*\\.java$"
|
||||||
|
language: system
|
||||||
|
entry: ./gradlew licenseFormat
|
||||||
|
pass_filenames: false
|
||||||
|
require_serial: true
|
||||||
|
- id: illuaminate
|
||||||
|
name: Check Lua code
|
||||||
|
files: ".*\\.(lua|java|md)"
|
||||||
|
language: script
|
||||||
|
entry: config/pre-commit/illuaminate-lint.sh
|
||||||
|
pass_filenames: false
|
||||||
|
require_serial: true
|
||||||
|
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
src/generated|
|
||||||
|
src/test/resources/test-rom/data/json-parsing/|
|
||||||
|
src/test/server-files/|
|
||||||
|
config/idea/
|
||||||
|
)
|
||||||
16
config/pre-commit/illuaminate-lint.sh
Executable file
16
config/pre-commit/illuaminate-lint.sh
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
test -d bin || mkdir bin
|
||||||
|
test -f bin/illuaminate || curl -s -obin/illuaminate https://squiddev.cc/illuaminate/linux-x86-64/illuaminate
|
||||||
|
chmod +x bin/illuaminate
|
||||||
|
|
||||||
|
if [ -n ${GITHUB_ACTIONS+x} ]; then
|
||||||
|
# Register a problem matcher (see https://github.com/actions/toolkit/blob/master/docs/problem-matchers.md)
|
||||||
|
# for illuaminate.
|
||||||
|
echo "::add-matcher::.github/matchers/illuaminate.json"
|
||||||
|
trap 'echo "::remove-matcher owner=illuaminate::"' EXIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
./gradlew luaJavadoc
|
||||||
|
bin/illuaminate lint
|
||||||
21
doc/events/alarm.md
Normal file
21
doc/events/alarm.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] alarm
|
||||||
|
see: os.setAlarm To start an alarm.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{timer} event is fired when an alarm started with @{os.setAlarm} completes.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The ID of the alarm that finished.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Starts a timer and then prints its ID:
|
||||||
|
```lua
|
||||||
|
local alarmID = os.setAlarm(os.time() + 0.05)
|
||||||
|
local event, id
|
||||||
|
repeat
|
||||||
|
event, id = os.pullEvent("alarm")
|
||||||
|
until id == alarmID
|
||||||
|
print("Alarm with ID " .. id .. " was fired")
|
||||||
|
```
|
||||||
24
doc/events/char.md
Normal file
24
doc/events/char.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] char
|
||||||
|
see: key To listen to any key press.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{char} event is fired when a character is _typed_ on the keyboard.
|
||||||
|
|
||||||
|
The @{char} event is different to a key press. Sometimes multiple key presses may result in one character being
|
||||||
|
typed (for instance, on some European keyboards). Similarly, some keys (e.g. <kbd>Ctrl</kbd>) do not have any
|
||||||
|
corresponding character. The @{key} should be used if you want to listen to key presses themselves.
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The string representing the character that was pressed.
|
||||||
|
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints each character the user presses:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, character = os.pullEvent("char")
|
||||||
|
print(character .. " was pressed.")
|
||||||
|
end
|
||||||
|
```
|
||||||
18
doc/events/computer_command.md
Normal file
18
doc/events/computer_command.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] computer_command
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{computer_command} event is fired when the `/computercraft queue` command is run for the current computer.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
... @{string}: The arguments passed to the command.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints the contents of messages sent:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event = {os.pullEvent("computer_command")}
|
||||||
|
print("Received message:", table.unpack(event, 2))
|
||||||
|
end
|
||||||
|
```
|
||||||
19
doc/events/disk.md
Normal file
19
doc/events/disk.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] disk
|
||||||
|
see: disk_eject For the event sent when a disk is removed.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{disk} event is fired when a disk is inserted into an adjacent or networked disk drive.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The side of the disk drive that had a disk inserted.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a disk is inserted:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, side = os.pullEvent("disk")
|
||||||
|
print("Inserted a disk on side " .. side)
|
||||||
|
end
|
||||||
|
```
|
||||||
19
doc/events/disk_eject.md
Normal file
19
doc/events/disk_eject.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] disk_eject
|
||||||
|
see: disk For the event sent when a disk is inserted.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{disk_eject} event is fired when a disk is removed from an adjacent or networked disk drive.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The side of the disk drive that had a disk removed.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a disk is removed:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, side = os.pullEvent("disk_eject")
|
||||||
|
print("Removed a disk on side " .. side)
|
||||||
|
end
|
||||||
|
```
|
||||||
14
doc/events/http_check.md
Normal file
14
doc/events/http_check.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] http_check
|
||||||
|
see: http.checkURLAsync To check a URL asynchronously.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{http_check} event is fired when a URL check finishes.
|
||||||
|
|
||||||
|
This event is normally handled inside @{http.checkURL}, but it can still be seen when using @{http.checkURLAsync}.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The URL requested to be checked.
|
||||||
|
3. @{boolean}: Whether the check succeeded.
|
||||||
|
4. @{string|nil}: If the check failed, a reason explaining why the check failed.
|
||||||
39
doc/events/http_failure.md
Normal file
39
doc/events/http_failure.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] http_failure
|
||||||
|
see: http.request To send an HTTP request.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{http_failure} event is fired when an HTTP request fails.
|
||||||
|
|
||||||
|
This event is normally handled inside @{http.get} and @{http.post}, but it can still be seen when using @{http.request}.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The URL of the site requested.
|
||||||
|
3. @{string}: An error describing the failure.
|
||||||
|
4. @{http.Response|nil}: A response handle if the connection succeeded, but the server's response indicated failure.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints an error why the website cannot be contacted:
|
||||||
|
```lua
|
||||||
|
local myURL = "https://does.not.exist.tweaked.cc"
|
||||||
|
http.request(myURL)
|
||||||
|
local event, url, err
|
||||||
|
repeat
|
||||||
|
event, url, err = os.pullEvent("http_failure")
|
||||||
|
until url == myURL
|
||||||
|
print("The URL " .. url .. " could not be reached: " .. err)
|
||||||
|
```
|
||||||
|
|
||||||
|
Prints the contents of a webpage that does not exist:
|
||||||
|
```lua
|
||||||
|
local myURL = "https://tweaked.cc/this/does/not/exist"
|
||||||
|
http.request(myURL)
|
||||||
|
local event, url, err, handle
|
||||||
|
repeat
|
||||||
|
event, url, err, handle = os.pullEvent("http_failure")
|
||||||
|
until url == myURL
|
||||||
|
print("The URL " .. url .. " could not be reached: " .. err)
|
||||||
|
print(handle.getResponseCode())
|
||||||
|
handle.close()
|
||||||
|
```
|
||||||
27
doc/events/http_success.md
Normal file
27
doc/events/http_success.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] http_success
|
||||||
|
see: http.request To make an HTTP request.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{http_success} event is fired when an HTTP request returns successfully.
|
||||||
|
|
||||||
|
This event is normally handled inside @{http.get} and @{http.post}, but it can still be seen when using @{http.request}.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The URL of the site requested.
|
||||||
|
3. @{http.Response}: The handle for the response text.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints the content of a website (this may fail if the request fails):
|
||||||
|
```lua
|
||||||
|
local myURL = "https://tweaked.cc/"
|
||||||
|
http.request(myURL)
|
||||||
|
local event, url, handle
|
||||||
|
repeat
|
||||||
|
event, url, handle = os.pullEvent("http_success")
|
||||||
|
until url == myURL
|
||||||
|
print("Contents of " .. url .. ":")
|
||||||
|
print(handle.readAll())
|
||||||
|
handle.close()
|
||||||
|
```
|
||||||
26
doc/events/key.md
Normal file
26
doc/events/key.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] key
|
||||||
|
---
|
||||||
|
|
||||||
|
This event is fired when any key is pressed while the terminal is focused.
|
||||||
|
|
||||||
|
This event returns a numerical "key code" (for instance, <kbd>F1</kbd> is 290). This value may vary between versions and
|
||||||
|
so it is recommended to use the constants in the @{keys} API rather than hard coding numeric values.
|
||||||
|
|
||||||
|
If the button pressed represented a printable character, then the @{key} event will be followed immediately by a @{char}
|
||||||
|
event. If you are consuming text input, use a @{char} event instead!
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The numerical key value of the key pressed.
|
||||||
|
3. @{boolean}: Whether the key event was generated while holding the key (@{true}), rather than pressing it the first time (@{false}).
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints each key when the user presses it, and if the key is being held.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, key, is_held = os.pullEvent("key")
|
||||||
|
print(("%s held=%s"):format(keys.getName(key), is_held))
|
||||||
|
end
|
||||||
|
```
|
||||||
24
doc/events/key_up.md
Normal file
24
doc/events/key_up.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] key_up
|
||||||
|
see: keys For a lookup table of the given keys.
|
||||||
|
---
|
||||||
|
|
||||||
|
Fired whenever a key is released (or the terminal is closed while a key was being pressed).
|
||||||
|
|
||||||
|
This event returns a numerical "key code" (for instance, <kbd>F1</kbd> is 290). This value may vary between versions and
|
||||||
|
so it is recommended to use the constants in the @{keys} API rather than hard coding numeric values.
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The numerical key value of the key pressed.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints each key released on the keyboard whenever a @{key_up} event is fired.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, key = os.pullEvent("key_up")
|
||||||
|
local name = keys.getName(key) or "unknown key"
|
||||||
|
print(name .. " was released.")
|
||||||
|
end
|
||||||
|
```
|
||||||
22
doc/events/modem_message.md
Normal file
22
doc/events/modem_message.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] modem_message
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{modem_message} event is fired when a message is received on an open channel on any modem.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The side of the modem that received the message.
|
||||||
|
3. @{number}: The channel that the message was sent on.
|
||||||
|
4. @{number}: The reply channel set by the sender.
|
||||||
|
5. @{any}: The message as sent by the sender.
|
||||||
|
6. @{number}: The distance between the sender and the receiver, in blocks (decimal).
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when one is sent:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message")
|
||||||
|
print(("Message received on side %s on channel %d (reply to %d) from %f blocks away with message %s"):format(side, channel, replyChannel, distance, tostring(message)))
|
||||||
|
end
|
||||||
|
```
|
||||||
18
doc/events/monitor_resize.md
Normal file
18
doc/events/monitor_resize.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] monitor_resize
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{monitor_resize} event is fired when an adjacent or networked monitor's size is changed.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The side or network ID of the monitor that resized.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a monitor is resized:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, side = os.pullEvent("monitor_resize")
|
||||||
|
print("The monitor on side " .. side .. " was resized.")
|
||||||
|
end
|
||||||
|
```
|
||||||
20
doc/events/monitor_touch.md
Normal file
20
doc/events/monitor_touch.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] monitor_touch
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{monitor_touch} event is fired when an adjacent or networked Advanced Monitor is right-clicked.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The side or network ID of the monitor that was touched.
|
||||||
|
3. @{number}: The X coordinate of the touch, in characters.
|
||||||
|
4. @{number}: The Y coordinate of the touch, in characters.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a monitor is touched:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, side, x, y = os.pullEvent("monitor_touch")
|
||||||
|
print("The monitor on side " .. side .. " was touched at (" .. x .. ", " .. y .. ")")
|
||||||
|
end
|
||||||
|
```
|
||||||
34
doc/events/mouse_click.md
Normal file
34
doc/events/mouse_click.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] mouse_click
|
||||||
|
---
|
||||||
|
|
||||||
|
This event is fired when the terminal is clicked with a mouse. This event is only fired on advanced computers (including
|
||||||
|
advanced turtles and pocket computers).
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The mouse button that was clicked.
|
||||||
|
3. @{number}: The X-coordinate of the click.
|
||||||
|
4. @{number}: The Y-coordinate of the click.
|
||||||
|
|
||||||
|
## Mouse buttons
|
||||||
|
Several mouse events (@{mouse_click}, @{mouse_up}, @{mouse_scroll}) contain a "mouse button" code. This takes a
|
||||||
|
numerical value depending on which button on your mouse was last pressed when this event occurred.
|
||||||
|
|
||||||
|
<table class="pretty-table">
|
||||||
|
<!-- Our markdown parser doesn't work on tables!? Guess I'll have to roll my own soonish :/. -->
|
||||||
|
<tr><th>Button code</th><th>Mouse button</th></tr>
|
||||||
|
<tr><td align="right">1</td><td>Left button</td></tr>
|
||||||
|
<tr><td align="right">2</td><td>Middle button</td></tr>
|
||||||
|
<tr><td align="right">3</td><td>Right button</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Print the button and the coordinates whenever the mouse is clicked.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, button, x, y = os.pullEvent("mouse_click")
|
||||||
|
print(("The mouse button %s was pressed at %d, %d"):format(button, x, y))
|
||||||
|
end
|
||||||
|
```
|
||||||
22
doc/events/mouse_drag.md
Normal file
22
doc/events/mouse_drag.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] mouse_drag
|
||||||
|
see: mouse_click For when a mouse button is initially pressed.
|
||||||
|
---
|
||||||
|
|
||||||
|
This event is fired every time the mouse is moved while a mouse button is being held.
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The [mouse button](mouse_click.html#Mouse_buttons) that is being pressed.
|
||||||
|
3. @{number}: The X-coordinate of the mouse.
|
||||||
|
4. @{number}: The Y-coordinate of the mouse.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Print the button and the coordinates whenever the mouse is dragged.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, button, x, y = os.pullEvent("mouse_drag")
|
||||||
|
print(("The mouse button %s was dragged at %d, %d"):format(button, x, y))
|
||||||
|
end
|
||||||
|
```
|
||||||
21
doc/events/mouse_scroll.md
Normal file
21
doc/events/mouse_scroll.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] mouse_scroll
|
||||||
|
---
|
||||||
|
|
||||||
|
This event is fired when a mouse wheel is scrolled in the terminal.
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The direction of the scroll. (-1 = up, 1 = down)
|
||||||
|
3. @{number}: The X-coordinate of the mouse when scrolling.
|
||||||
|
4. @{number}: The Y-coordinate of the mouse when scrolling.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints the direction of each scroll, and the position of the mouse at the time.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, dir, x, y = os.pullEvent("mouse_scroll")
|
||||||
|
print(("The mouse was scrolled in direction %s at %d, %d"):format(dir, x, y))
|
||||||
|
end
|
||||||
|
```
|
||||||
21
doc/events/mouse_up.md
Normal file
21
doc/events/mouse_up.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] mouse_up
|
||||||
|
---
|
||||||
|
|
||||||
|
This event is fired when a mouse button is released or a held mouse leaves the computer's terminal.
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The [mouse button](mouse_click.html#Mouse_buttons) that was released.
|
||||||
|
3. @{number}: The X-coordinate of the mouse.
|
||||||
|
4. @{number}: The Y-coordinate of the mouse.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints the coordinates and button number whenever the mouse is released.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, button, x, y = os.pullEvent("mouse_up")
|
||||||
|
print(("The mouse button %s was released at %d, %d"):format(button, x, y))
|
||||||
|
end
|
||||||
|
```
|
||||||
18
doc/events/paste.md
Normal file
18
doc/events/paste.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] paste
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{paste} event is fired when text is pasted into the computer through Ctrl-V (or ⌘V on Mac).
|
||||||
|
|
||||||
|
## Return values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string} The text that was pasted.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints pasted text:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, text = os.pullEvent("paste")
|
||||||
|
print('"' .. text .. '" was pasted')
|
||||||
|
end
|
||||||
|
```
|
||||||
19
doc/events/peripheral.md
Normal file
19
doc/events/peripheral.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] peripheral
|
||||||
|
see: peripheral_detach For the event fired when a peripheral is detached.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{peripheral} event is fired when a peripheral is attached on a side or to a modem.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The side the peripheral was attached to.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a peripheral is attached:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, side = os.pullEvent("peripheral")
|
||||||
|
print("A peripheral was attached on side " .. side)
|
||||||
|
end
|
||||||
|
```
|
||||||
19
doc/events/peripheral_detach.md
Normal file
19
doc/events/peripheral_detach.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] peripheral_detach
|
||||||
|
see: peripheral For the event fired when a peripheral is attached.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{peripheral_detach} event is fired when a peripheral is detached from a side or from a modem.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The side the peripheral was detached from.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a peripheral is detached:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, side = os.pullEvent("peripheral_detach")
|
||||||
|
print("A peripheral was detached on side " .. side)
|
||||||
|
end
|
||||||
|
```
|
||||||
30
doc/events/rednet_message.md
Normal file
30
doc/events/rednet_message.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] rednet_message
|
||||||
|
see: modem_message For raw modem messages sent outside of Rednet.
|
||||||
|
see: rednet.receive To wait for a Rednet message with an optional timeout and protocol filter.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{rednet_message} event is fired when a message is sent over Rednet.
|
||||||
|
|
||||||
|
This event is usually handled by @{rednet.receive}, but it can also be pulled manually.
|
||||||
|
|
||||||
|
@{rednet_message} events are sent by @{rednet.run} in the top-level coroutine in response to @{modem_message} events. A @{rednet_message} event is always preceded by a @{modem_message} event. They are generated inside CraftOS rather than being sent by the ComputerCraft machine.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The ID of the sending computer.
|
||||||
|
3. @{any}: The message sent.
|
||||||
|
4. @{string|nil}: The protocol of the message, if provided.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when one is sent:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event, sender, message, protocol = os.pullEvent("rednet_message")
|
||||||
|
if protocol ~= nil then
|
||||||
|
print("Received message from " .. sender .. " with protocol " .. protocol .. " and message " .. tostring(message))
|
||||||
|
else
|
||||||
|
print("Received message from " .. sender .. " with message " .. tostring(message))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
14
doc/events/redstone.md
Normal file
14
doc/events/redstone.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] redstone
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{redstone} event is fired whenever any redstone inputs on the computer change.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a redstone input changes:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
os.pullEvent("redstone")
|
||||||
|
print("A redstone input has changed!")
|
||||||
|
end
|
||||||
|
```
|
||||||
28
doc/events/task_complete.md
Normal file
28
doc/events/task_complete.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] task_complete
|
||||||
|
see: commands.execAsync To run a command which fires a task_complete event.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{task_complete} event is fired when an asynchronous task completes. This is usually handled inside the function call that queued the task; however, functions such as @{commands.execAsync} return immediately so the user can wait for completion.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The ID of the task that completed.
|
||||||
|
3. @{boolean}: Whether the command succeeded.
|
||||||
|
4. @{string}: If the command failed, an error message explaining the failure. (This is not present if the command succeeded.)
|
||||||
|
...: Any parameters returned from the command.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints the results of an asynchronous command:
|
||||||
|
```lua
|
||||||
|
local taskID = commands.execAsync("say Hello")
|
||||||
|
local event
|
||||||
|
repeat
|
||||||
|
event = {os.pullEvent("task_complete")}
|
||||||
|
until event[2] == taskID
|
||||||
|
if event[3] == true then
|
||||||
|
print("Task " .. event[2] .. " succeeded:", table.unpack(event, 4))
|
||||||
|
else
|
||||||
|
print("Task " .. event[2] .. " failed: " .. event[4])
|
||||||
|
end
|
||||||
|
```
|
||||||
15
doc/events/term_resize.md
Normal file
15
doc/events/term_resize.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] term_resize
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{term_resize} event is fired when the main terminal is resized, mainly when a new tab is opened or closed in @{multishell}.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints :
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
os.pullEvent("term_resize")
|
||||||
|
local w, h = term.getSize()
|
||||||
|
print("The term was resized to (" .. w .. ", " .. h .. ")")
|
||||||
|
end
|
||||||
|
```
|
||||||
25
doc/events/terminate.md
Normal file
25
doc/events/terminate.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] terminate
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{terminate} event is fired when <kbd>Ctrl-T</kbd> is held down.
|
||||||
|
|
||||||
|
This event is normally handled by @{os.pullEvent}, and will not be returned. However, @{os.pullEventRaw} will return this event when fired.
|
||||||
|
|
||||||
|
@{terminate} will be sent even when a filter is provided to @{os.pullEventRaw}. When using @{os.pullEventRaw} with a filter, make sure to check that the event is not @{terminate}.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when Ctrl-T is held:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
local event = os.pullEventRaw("terminate")
|
||||||
|
if event == "terminate" then print("Terminate requested!") end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
Exits when Ctrl-T is held:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
os.pullEvent()
|
||||||
|
end
|
||||||
|
```
|
||||||
21
doc/events/timer.md
Normal file
21
doc/events/timer.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] timer
|
||||||
|
see: os.startTimer To start a timer.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{timer} event is fired when a timer started with @{os.startTimer} completes.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{number}: The ID of the timer that finished.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Starts a timer and then prints its ID:
|
||||||
|
```lua
|
||||||
|
local timerID = os.startTimer(2)
|
||||||
|
local event, id
|
||||||
|
repeat
|
||||||
|
event, id = os.pullEvent("timer")
|
||||||
|
until id == timerID
|
||||||
|
print("Timer with ID " .. id .. " was fired")
|
||||||
|
```
|
||||||
14
doc/events/turtle_inventory.md
Normal file
14
doc/events/turtle_inventory.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] turtle_inventory
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{turtle_inventory} event is fired when a turtle's inventory is changed.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when the inventory is changed:
|
||||||
|
```lua
|
||||||
|
while true do
|
||||||
|
os.pullEvent("turtle_inventory")
|
||||||
|
print("The inventory was changed.")
|
||||||
|
end
|
||||||
|
```
|
||||||
21
doc/events/websocket_closed.md
Normal file
21
doc/events/websocket_closed.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] websocket_closed
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{websocket_closed} event is fired when an open WebSocket connection is closed.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The URL of the WebSocket that was closed.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message when a WebSocket is closed (this may take a minute):
|
||||||
|
```lua
|
||||||
|
local myURL = "wss://example.tweaked.cc/echo"
|
||||||
|
local ws = http.websocket(myURL)
|
||||||
|
local event, url
|
||||||
|
repeat
|
||||||
|
event, url = os.pullEvent("websocket_closed")
|
||||||
|
until url == myURL
|
||||||
|
print("The WebSocket at " .. url .. " was closed.")
|
||||||
|
```
|
||||||
25
doc/events/websocket_failure.md
Normal file
25
doc/events/websocket_failure.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] websocket_failure
|
||||||
|
see: http.websocketAsync To send an HTTP request.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{websocket_failure} event is fired when a WebSocket connection request fails.
|
||||||
|
|
||||||
|
This event is normally handled inside @{http.websocket}, but it can still be seen when using @{http.websocketAsync}.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The URL of the site requested.
|
||||||
|
3. @{string}: An error describing the failure.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints an error why the website cannot be contacted:
|
||||||
|
```lua
|
||||||
|
local myURL = "wss://example.tweaked.cc/not-a-websocket"
|
||||||
|
http.websocketAsync(myURL)
|
||||||
|
local event, url, err
|
||||||
|
repeat
|
||||||
|
event, url, err = os.pullEvent("websocket_failure")
|
||||||
|
until url == myURL
|
||||||
|
print("The URL " .. url .. " could not be reached: " .. err)
|
||||||
|
```
|
||||||
26
doc/events/websocket_message.md
Normal file
26
doc/events/websocket_message.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] websocket_message
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{websocket_message} event is fired when a message is received on an open WebSocket connection.
|
||||||
|
|
||||||
|
This event is normally handled by @{http.Websocket.receive}, but it can also be pulled manually.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The URL of the WebSocket.
|
||||||
|
3. @{string}: The contents of the message.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints a message sent by a WebSocket:
|
||||||
|
```lua
|
||||||
|
local myURL = "wss://example.tweaked.cc/echo"
|
||||||
|
local ws = http.websocket(myURL)
|
||||||
|
ws.send("Hello!")
|
||||||
|
local event, url, message
|
||||||
|
repeat
|
||||||
|
event, url, message = os.pullEvent("websocket_message")
|
||||||
|
until url == myURL
|
||||||
|
print("Received message from " .. url .. " with contents " .. message)
|
||||||
|
ws.close()
|
||||||
|
```
|
||||||
28
doc/events/websocket_success.md
Normal file
28
doc/events/websocket_success.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
module: [kind=event] websocket_success
|
||||||
|
see: http.websocketAsync To open a WebSocket asynchronously.
|
||||||
|
---
|
||||||
|
|
||||||
|
The @{websocket_success} event is fired when a WebSocket connection request returns successfully.
|
||||||
|
|
||||||
|
This event is normally handled inside @{http.websocket}, but it can still be seen when using @{http.websocketAsync}.
|
||||||
|
|
||||||
|
## Return Values
|
||||||
|
1. @{string}: The event name.
|
||||||
|
2. @{string}: The URL of the site.
|
||||||
|
3. @{http.Websocket}: The handle for the WebSocket.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Prints the content of a website (this may fail if the request fails):
|
||||||
|
```lua
|
||||||
|
local myURL = "wss://example.tweaked.cc/echo"
|
||||||
|
http.websocketAsync(myURL)
|
||||||
|
local event, url, handle
|
||||||
|
repeat
|
||||||
|
event, url, handle = os.pullEvent("websocket_success")
|
||||||
|
until url == myURL
|
||||||
|
print("Connected to " .. url)
|
||||||
|
handle.send("Hello!")
|
||||||
|
print(handle.receive())
|
||||||
|
handle.close()
|
||||||
|
```
|
||||||
1
doc/head.html
Normal file
1
doc/head.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<meta name="theme-color" content="#c8d87c">
|
||||||
@@ -77,7 +77,7 @@ the prompt.
|
|||||||
@treturn string The text typed in.
|
@treturn string The text typed in.
|
||||||
|
|
||||||
@see cc.completion For functions to help with completion.
|
@see cc.completion For functions to help with completion.
|
||||||
@usage Read an string and echo it back to the user
|
@usage Read a string and echo it back to the user
|
||||||
|
|
||||||
write("> ")
|
write("> ")
|
||||||
local msg = read()
|
local msg = read()
|
||||||
@@ -101,6 +101,9 @@ the prompt.
|
|||||||
write("> ")
|
write("> ")
|
||||||
local msg = read(nil, history, function(text) return completion.choice(text, choices) end, "app")
|
local msg = read(nil, history, function(text) return completion.choice(text, choices) end, "app")
|
||||||
print(msg)
|
print(msg)
|
||||||
|
|
||||||
|
@changed 1.74 Added `completeFn` parameter.
|
||||||
|
@changed 1.80pr1 Added `default` parameter.
|
||||||
]]
|
]]
|
||||||
function read(replaceChar, history, completeFn, default) end
|
function read(replaceChar, history, completeFn, default) end
|
||||||
|
|
||||||
@@ -108,6 +111,7 @@ function read(replaceChar, history, completeFn, default) end
|
|||||||
--
|
--
|
||||||
-- For example, `ComputerCraft 1.93.0 (Minecraft 1.15.2)`.
|
-- For example, `ComputerCraft 1.93.0 (Minecraft 1.15.2)`.
|
||||||
-- @usage _HOST
|
-- @usage _HOST
|
||||||
|
-- @since 1.76
|
||||||
_HOST = _HOST
|
_HOST = _HOST
|
||||||
|
|
||||||
--[[- The default computer settings as defined in the ComputerCraft
|
--[[- The default computer settings as defined in the ComputerCraft
|
||||||
@@ -121,5 +125,6 @@ An example value to disable autocompletion:
|
|||||||
shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false
|
shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false
|
||||||
|
|
||||||
@usage _CC_DEFAULT_SETTINGS
|
@usage _CC_DEFAULT_SETTINGS
|
||||||
|
@since 1.77
|
||||||
]]
|
]]
|
||||||
_CC_DEFAULT_SETTINGS = _CC_DEFAULT_SETTINGS
|
_CC_DEFAULT_SETTINGS = _CC_DEFAULT_SETTINGS
|
||||||
|
|||||||
@@ -58,10 +58,10 @@ function request(...) end
|
|||||||
-- @treturn string A message detailing why the request failed.
|
-- @treturn string A message detailing why the request failed.
|
||||||
-- @treturn Response|nil The failing http response, if available.
|
-- @treturn Response|nil The failing http response, if available.
|
||||||
--
|
--
|
||||||
-- @usage Make a request to [example.computercraft.cc](https://example.computercraft.cc),
|
-- @usage Make a request to [example.tweaked.cc](https://example.tweaked.cc),
|
||||||
-- and print the returned page.
|
-- and print the returned page.
|
||||||
-- ```lua
|
-- ```lua
|
||||||
-- local request = http.get("https://example.computercraft.cc")
|
-- local request = http.get("https://example.tweaked.cc")
|
||||||
-- print(request.readAll())
|
-- print(request.readAll())
|
||||||
-- -- => HTTP is working!
|
-- -- => HTTP is working!
|
||||||
-- request.close()
|
-- request.close()
|
||||||
@@ -123,7 +123,7 @@ function checkURLAsync(url) end
|
|||||||
--
|
--
|
||||||
-- @usage
|
-- @usage
|
||||||
-- ```lua
|
-- ```lua
|
||||||
-- print(http.checkURL("https://example.computercraft.cc/"))
|
-- print(http.checkURL("https://example.tweaked.cc/"))
|
||||||
-- -- => true
|
-- -- => true
|
||||||
-- print(http.checkURL("http://localhost/"))
|
-- print(http.checkURL("http://localhost/"))
|
||||||
-- -- => false Domain not permitted
|
-- -- => false Domain not permitted
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
|
|
||||||
--[[- Loads the given API into the global environment.
|
--[[- Loads the given API into the global environment.
|
||||||
|
|
||||||
**Warning** This function is deprecated. Use of this function will pollute the
|
|
||||||
global table, use @{require} instead.
|
|
||||||
|
|
||||||
This function loads and executes the file at the given path, and all global
|
This function loads and executes the file at the given path, and all global
|
||||||
variables and functions exported by it will by available through the use of
|
variables and functions exported by it will by available through the use of
|
||||||
`myAPI.<function name>`, where `myAPI` is the base name of the API file.
|
`myAPI.<function name>`, where `myAPI` is the base name of the API file.
|
||||||
@@ -12,7 +9,10 @@ variables and functions exported by it will by available through the use of
|
|||||||
@tparam string path The path of the API to load.
|
@tparam string path The path of the API to load.
|
||||||
@treturn boolean Whether or not the API was successfully loaded.
|
@treturn boolean Whether or not the API was successfully loaded.
|
||||||
|
|
||||||
@deprecated Use @{require}.
|
@deprecated When possible it's best to avoid using this function. It pollutes
|
||||||
|
the global table and can mask errors.
|
||||||
|
|
||||||
|
@{require} should be used to load libraries instead.
|
||||||
]]
|
]]
|
||||||
function loadAPI(path) end
|
function loadAPI(path) end
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ function loadAPI(path) end
|
|||||||
-- This effectively removes the specified table from `_G`.
|
-- This effectively removes the specified table from `_G`.
|
||||||
--
|
--
|
||||||
-- @tparam string name The name of the API to unload.
|
-- @tparam string name The name of the API to unload.
|
||||||
-- @deprecated Use @{require}.
|
-- @deprecated See @{os.loadAPI} for why.
|
||||||
function unloadAPI(name) end
|
function unloadAPI(name) end
|
||||||
|
|
||||||
--[[- Pause execution of the current thread and waits for any events matching
|
--[[- Pause execution of the current thread and waits for any events matching
|
||||||
|
|||||||
@@ -1 +1,13 @@
|
|||||||
|
--[[- Craft a recipe based on the turtle's inventory.
|
||||||
|
|
||||||
|
The turtle's inventory should set up like a crafting grid. For instance, to
|
||||||
|
craft sticks, slots 1 and 5 should contain planks. _All_ other slots should be
|
||||||
|
empty, including those outside the crafting "grid".
|
||||||
|
|
||||||
|
@tparam[opt=64] number limit The maximum number of crafting steps to run.
|
||||||
|
@throws When limit is less than 1 or greater than 64.
|
||||||
|
@treturn[1] true If crafting succeeds.
|
||||||
|
@treturn[2] false If crafting fails.
|
||||||
|
@treturn string A string describing why crafting failed.
|
||||||
|
]]
|
||||||
function craft(limit) end
|
function craft(limit) end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Mod properties
|
# Mod properties
|
||||||
mod_version=1.95.0
|
mod_version=1.98.0
|
||||||
|
|
||||||
# Minecraft properties (update mods.toml when changing)
|
# Minecraft properties (update mods.toml when changing)
|
||||||
mc_version=1.16.4
|
mc_version=1.16.5
|
||||||
forge_version=35.0.1
|
forge_version=36.1.0
|
||||||
mappings_version=20201028-1.16.3
|
# NO SERIOUSLY, UPDATE mods.toml WHEN CHANGING
|
||||||
|
|||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
53
gradlew
vendored
53
gradlew
vendored
@@ -1,5 +1,21 @@
|
|||||||
#!/usr/bin/env sh
|
#!/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
|
## Gradle start up script for UN*X
|
||||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
|
|||||||
APP_BASE_NAME=`basename "$0"`
|
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.
|
# 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.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD="maximum"
|
MAX_FD="maximum"
|
||||||
@@ -66,6 +82,7 @@ esac
|
|||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
if [ -n "$JAVA_HOME" ] ; then
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
@@ -109,10 +126,11 @@ if $darwin; then
|
|||||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# For Cygwin, switch paths to Windows format before running java
|
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||||
if $cygwin ; then
|
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
|
||||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
# We build the pattern for arguments to be converted via cygpath
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
@@ -138,19 +156,19 @@ if $cygwin ; then
|
|||||||
else
|
else
|
||||||
eval `echo args$i`="\"$arg\""
|
eval `echo args$i`="\"$arg\""
|
||||||
fi
|
fi
|
||||||
i=$((i+1))
|
i=`expr $i + 1`
|
||||||
done
|
done
|
||||||
case $i in
|
case $i in
|
||||||
(0) set -- ;;
|
0) set -- ;;
|
||||||
(1) set -- "$args0" ;;
|
1) set -- "$args0" ;;
|
||||||
(2) set -- "$args0" "$args1" ;;
|
2) set -- "$args0" "$args1" ;;
|
||||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -159,14 +177,9 @@ save () {
|
|||||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
echo " "
|
echo " "
|
||||||
}
|
}
|
||||||
APP_ARGS=$(save "$@")
|
APP_ARGS=`save "$@"`
|
||||||
|
|
||||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
# 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"
|
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" "$@"
|
exec "$JAVACMD" "$@"
|
||||||
|
|||||||
43
gradlew.bat
vendored
43
gradlew.bat
vendored
@@ -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
|
@if "%DEBUG%" == "" @echo off
|
||||||
@rem ##########################################################################
|
@rem ##########################################################################
|
||||||
@rem
|
@rem
|
||||||
@@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
|
|||||||
set APP_BASE_NAME=%~n0
|
set APP_BASE_NAME=%~n0
|
||||||
set APP_HOME=%DIRNAME%
|
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.
|
@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
|
@rem Find java.exe
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
set JAVA_EXE=java.exe
|
set JAVA_EXE=java.exe
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
if "%ERRORLEVEL%" == "0" goto init
|
if "%ERRORLEVEL%" == "0" goto execute
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
@@ -35,7 +54,7 @@ goto fail
|
|||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto init
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
@@ -45,28 +64,14 @@ echo location of your Java installation.
|
|||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
:init
|
|
||||||
@rem Get command-line arguments, handling Windows variants
|
|
||||||
|
|
||||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
|
||||||
|
|
||||||
:win9xME_args
|
|
||||||
@rem Slurp the command line arguments.
|
|
||||||
set CMD_LINE_ARGS=
|
|
||||||
set _SKIP=2
|
|
||||||
|
|
||||||
:win9xME_args_slurp
|
|
||||||
if "x%~1" == "x" goto execute
|
|
||||||
|
|
||||||
set CMD_LINE_ARGS=%*
|
|
||||||
|
|
||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
@rem Execute Gradle
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
(sources
|
(sources
|
||||||
/doc/stub/
|
/doc/stub/
|
||||||
|
/doc/events/
|
||||||
/build/docs/luaJavadoc/
|
/build/docs/luaJavadoc/
|
||||||
/src/main/resources/*/computercraft/lua/bios.lua
|
/src/main/resources/*/computercraft/lua/bios.lua
|
||||||
/src/main/resources/*/computercraft/lua/rom/
|
/src/main/resources/*/computercraft/lua/rom/
|
||||||
@@ -10,29 +11,35 @@
|
|||||||
|
|
||||||
|
|
||||||
(doc
|
(doc
|
||||||
(title "CC: Tweaked")
|
|
||||||
(destination build/docs/lua)
|
(destination build/docs/lua)
|
||||||
(logo src/main/resources/pack.png)
|
|
||||||
(index doc/index.md)
|
(index doc/index.md)
|
||||||
(styles src/web/styles.css)
|
|
||||||
(scripts build/rollup/index.js)
|
(site
|
||||||
(source-link https://github.com/SquidDev-CC/CC-Tweaked/blob/${commit}/${path}#L${line})
|
(title "CC: Tweaked")
|
||||||
|
(logo src/main/resources/pack.png)
|
||||||
|
(url https://tweaked.cc/)
|
||||||
|
(source-link https://github.com/SquidDev-CC/CC-Tweaked/blob/${commit}/${path}#L${line})
|
||||||
|
|
||||||
|
(styles src/web/styles.css)
|
||||||
|
(scripts build/rollup/index.js)
|
||||||
|
(head doc/head.html))
|
||||||
|
|
||||||
(module-kinds
|
(module-kinds
|
||||||
(peripheral Peripherals)
|
(peripheral Peripherals)
|
||||||
(generic_peripheral "Generic Peripherals"))
|
(generic_peripheral "Generic Peripherals")
|
||||||
|
(event Events))
|
||||||
|
|
||||||
(library-path
|
(library-path
|
||||||
/doc/stub/
|
/doc/stub/
|
||||||
/build/docs/luaJavadoc/
|
/build/docs/luaJavadoc/
|
||||||
|
|
||||||
/src/main/resources/*/computercraft/lua/rom/apis
|
/src/main/resources/*/computercraft/lua/rom/apis/
|
||||||
/src/main/resources/*/computercraft/lua/rom/apis/command
|
/src/main/resources/*/computercraft/lua/rom/apis/command/
|
||||||
/src/main/resources/*/computercraft/lua/rom/apis/turtle
|
/src/main/resources/*/computercraft/lua/rom/apis/turtle/
|
||||||
|
|
||||||
/src/main/resources/*/computercraft/lua/rom/modules/main
|
/src/main/resources/*/computercraft/lua/rom/modules/main/
|
||||||
/src/main/resources/*/computercraft/lua/rom/modules/command
|
/src/main/resources/*/computercraft/lua/rom/modules/command/
|
||||||
/src/main/resources/*/computercraft/lua/rom/modules/turtle))
|
/src/main/resources/*/computercraft/lua/rom/modules/turtle/))
|
||||||
|
|
||||||
(at /
|
(at /
|
||||||
(linters
|
(linters
|
||||||
@@ -81,27 +88,16 @@
|
|||||||
|
|
||||||
;; Suppress warnings for currently undocumented modules.
|
;; Suppress warnings for currently undocumented modules.
|
||||||
(at
|
(at
|
||||||
(; Java APIs
|
(; Lua APIs
|
||||||
/doc/stub/http.lua
|
|
||||||
/doc/stub/os.lua
|
|
||||||
/doc/stub/turtle.lua
|
|
||||||
/doc/stub/global.lua
|
|
||||||
; Java generated APIs
|
|
||||||
/build/docs/luaJavadoc/turtle.lua
|
|
||||||
; Peripherals
|
|
||||||
/build/docs/luaJavadoc/drive.lua
|
|
||||||
/build/docs/luaJavadoc/speaker.lua
|
|
||||||
/build/docs/luaJavadoc/printer.lua
|
|
||||||
; Generic peripherals
|
|
||||||
/build/docs/luaJavadoc/fluid_storage.lua
|
|
||||||
; Lua APIs
|
|
||||||
/src/main/resources/*/computercraft/lua/rom/apis/io.lua
|
/src/main/resources/*/computercraft/lua/rom/apis/io.lua
|
||||||
/src/main/resources/*/computercraft/lua/rom/apis/window.lua)
|
/src/main/resources/*/computercraft/lua/rom/apis/window.lua)
|
||||||
|
|
||||||
(linters -doc:undocumented -doc:undocumented-arg -doc:undocumented-return))
|
(linters -doc:undocumented -doc:undocumented-arg -doc:undocumented-return))
|
||||||
|
|
||||||
;; Suppress warnings for the BIOS using its own deprecated members for now.
|
;; Suppress warnings for various APIs using its own deprecated members.
|
||||||
(at /src/main/resources/*/computercraft/lua/bios.lua
|
(at
|
||||||
|
(/src/main/resources/*/computercraft/lua/bios.lua
|
||||||
|
/src/main/resources/*/computercraft/lua/rom/apis/turtle/turtle.lua)
|
||||||
(linters -var:deprecated))
|
(linters -var:deprecated))
|
||||||
|
|
||||||
(at /src/test/resources/test-rom
|
(at /src/test/resources/test-rom
|
||||||
|
|||||||
232
package-lock.json
generated
232
package-lock.json
generated
@@ -1,8 +1,238 @@
|
|||||||
{
|
{
|
||||||
"name": "tweaked.cc",
|
"name": "tweaked.cc",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "tweaked.cc",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "BSD-3-Clause",
|
||||||
|
"dependencies": {
|
||||||
|
"preact": "^10.5.5",
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@rollup/plugin-typescript": "^6.1.0",
|
||||||
|
"requirejs": "^2.3.6",
|
||||||
|
"rollup": "^2.33.1",
|
||||||
|
"terser": "^5.3.8",
|
||||||
|
"typescript": "^4.0.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/plugin-typescript": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-hJxaiE6WyNOsK+fZpbFh9CUijZYqPQuAOWO5khaGTUkM8DYNNyA2TDlgamecE+qLOG1G1+CwbWMAx3rbqpp6xQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@rollup/pluginutils": "^3.1.0",
|
||||||
|
"resolve": "^1.17.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/pluginutils": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/estree": "0.0.39",
|
||||||
|
"estree-walker": "^1.0.1",
|
||||||
|
"picomatch": "^2.2.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/estree": {
|
||||||
|
"version": "0.0.39",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
|
||||||
|
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/buffer-from": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/commander": {
|
||||||
|
"version": "2.20.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||||
|
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/estree-walker": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/fsevents": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/function-bind": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/has": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/is-core-module": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"has": "^1.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-parse": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/picomatch": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
|
||||||
|
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/preact": {
|
||||||
|
"version": "10.5.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/preact/-/preact-10.5.5.tgz",
|
||||||
|
"integrity": "sha512-5ONLNH1SXMzzbQoExZX4TELemNt+TEDb622xXFNfZngjjM9qtrzseJt+EfiUu4TZ6EJ95X5sE1ES4yqHFSIdhg=="
|
||||||
|
},
|
||||||
|
"node_modules/requirejs": {
|
||||||
|
"version": "2.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
|
||||||
|
"integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"r_js": "bin/r.js",
|
||||||
|
"r.js": "bin/r.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/resolve": {
|
||||||
|
"version": "1.18.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
|
||||||
|
"integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"is-core-module": "^2.0.0",
|
||||||
|
"path-parse": "^1.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rollup": {
|
||||||
|
"version": "2.33.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz",
|
||||||
|
"integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"rollup": "dist/bin/rollup"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"fsevents": "~2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map": {
|
||||||
|
"version": "0.7.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||||
|
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map-support": {
|
||||||
|
"version": "0.5.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
|
||||||
|
"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"buffer-from": "^1.0.0",
|
||||||
|
"source-map": "^0.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map-support/node_modules/source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/terser": {
|
||||||
|
"version": "5.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz",
|
||||||
|
"integrity": "sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"commander": "^2.20.0",
|
||||||
|
"source-map": "~0.7.2",
|
||||||
|
"source-map-support": "~0.5.19"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"terser": "bin/terser"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tslib": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
|
||||||
|
},
|
||||||
|
"node_modules/typescript": {
|
||||||
|
"version": "4.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
|
||||||
|
"integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"tsc": "bin/tsc",
|
||||||
|
"tsserver": "bin/tsserver"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rollup/plugin-typescript": {
|
"@rollup/plugin-typescript": {
|
||||||
"version": "6.1.0",
|
"version": "6.1.0",
|
||||||
|
|||||||
34
src/generated/resources/data/computercraft/loot_tables/blocks/computer_command.json
generated
Normal file
34
src/generated/resources/data/computercraft/loot_tables/blocks/computer_command.json
generated
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"name": "main",
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:dynamic",
|
||||||
|
"name": "computercraft:computer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:alternative",
|
||||||
|
"terms": [
|
||||||
|
{
|
||||||
|
"condition": "computercraft:block_named"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"condition": "computercraft:has_id"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"condition": "minecraft:inverted",
|
||||||
|
"term": {
|
||||||
|
"condition": "computercraft:player_creative"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:1118481}"
|
"nbt": "{Color:1118481}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:15905484}"
|
"nbt": "{Color:15905484}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:8375321}"
|
"nbt": "{Color:8375321}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:14605932}"
|
"nbt": "{Color:14605932}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:10072818}"
|
"nbt": "{Color:10072818}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:15040472}"
|
"nbt": "{Color:15040472}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:15905331}"
|
"nbt": "{Color:15905331}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:15790320}"
|
"nbt": "{Color:15790320}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:13388876}"
|
"nbt": "{Color:13388876}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:5744206}"
|
"nbt": "{Color:5744206}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:8349260}"
|
"nbt": "{Color:8349260}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:3368652}"
|
"nbt": "{Color:3368652}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:11691749}"
|
"nbt": "{Color:11691749}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:5020082}"
|
"nbt": "{Color:5020082}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:10066329}"
|
"nbt": "{Color:10066329}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
],
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "computercraft:disk",
|
"item": "computercraft:disk",
|
||||||
"nbt": "{color:5000268}"
|
"nbt": "{Color:5000268}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of ComputerCraft - http://www.computercraft.info
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. Do not distribute without permission.
|
* Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission.
|
||||||
* Send enquiries to dratcliffe@gmail.com
|
* Send enquiries to dratcliffe@gmail.com
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft;
|
package dan200.computercraft;
|
||||||
@@ -8,7 +8,6 @@ package dan200.computercraft;
|
|||||||
import dan200.computercraft.api.turtle.event.TurtleAction;
|
import dan200.computercraft.api.turtle.event.TurtleAction;
|
||||||
import dan200.computercraft.core.apis.http.options.Action;
|
import dan200.computercraft.core.apis.http.options.Action;
|
||||||
import dan200.computercraft.core.apis.http.options.AddressRule;
|
import dan200.computercraft.core.apis.http.options.AddressRule;
|
||||||
import dan200.computercraft.core.asm.GenericSource;
|
|
||||||
import dan200.computercraft.shared.Config;
|
import dan200.computercraft.shared.Config;
|
||||||
import dan200.computercraft.shared.Registry;
|
import dan200.computercraft.shared.Registry;
|
||||||
import dan200.computercraft.shared.computer.core.ClientComputerRegistry;
|
import dan200.computercraft.shared.computer.core.ClientComputerRegistry;
|
||||||
@@ -17,7 +16,6 @@ import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer;
|
|||||||
import dan200.computercraft.shared.pocket.peripherals.PocketModem;
|
import dan200.computercraft.shared.pocket.peripherals.PocketModem;
|
||||||
import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker;
|
import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker;
|
||||||
import dan200.computercraft.shared.turtle.upgrades.*;
|
import dan200.computercraft.shared.turtle.upgrades.*;
|
||||||
import dan200.computercraft.shared.util.ServiceUtil;
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
@@ -38,7 +36,6 @@ public final class ComputerCraft
|
|||||||
public static int maximumFilesOpen = 128;
|
public static int maximumFilesOpen = 128;
|
||||||
public static boolean disableLua51Features = false;
|
public static boolean disableLua51Features = false;
|
||||||
public static String defaultComputerSettings = "";
|
public static String defaultComputerSettings = "";
|
||||||
public static boolean debugEnable = true;
|
|
||||||
public static boolean logComputerErrors = true;
|
public static boolean logComputerErrors = true;
|
||||||
public static boolean commandRequireCreative = true;
|
public static boolean commandRequireCreative = true;
|
||||||
|
|
||||||
@@ -55,6 +52,8 @@ public final class ComputerCraft
|
|||||||
|
|
||||||
public static int httpMaxRequests = 16;
|
public static int httpMaxRequests = 16;
|
||||||
public static int httpMaxWebsockets = 4;
|
public static int httpMaxWebsockets = 4;
|
||||||
|
public static int httpDownloadBandwidth = 32 * 1024 * 1024;
|
||||||
|
public static int httpUploadBandwidth = 32 * 1024 * 1024;
|
||||||
|
|
||||||
public static boolean enableCommandBlock = false;
|
public static boolean enableCommandBlock = false;
|
||||||
public static int modemRange = 64;
|
public static int modemRange = 64;
|
||||||
@@ -117,6 +116,5 @@ public final class ComputerCraft
|
|||||||
{
|
{
|
||||||
Config.setup();
|
Config.setup();
|
||||||
Registry.setup();
|
Registry.setup();
|
||||||
GenericSource.setup( () -> ServiceUtil.loadServicesForge( GenericSource.class ) );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of ComputerCraft - http://www.computercraft.info
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. Do not distribute without permission.
|
* Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission.
|
||||||
* Send enquiries to dratcliffe@gmail.com
|
* Send enquiries to dratcliffe@gmail.com
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft;
|
package dan200.computercraft;
|
||||||
@@ -8,6 +8,7 @@ package dan200.computercraft;
|
|||||||
import dan200.computercraft.api.ComputerCraftAPI.IComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI.IComputerCraftAPI;
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
import dan200.computercraft.api.filesystem.IWritableMount;
|
import dan200.computercraft.api.filesystem.IWritableMount;
|
||||||
|
import dan200.computercraft.api.lua.GenericSource;
|
||||||
import dan200.computercraft.api.lua.ILuaAPIFactory;
|
import dan200.computercraft.api.lua.ILuaAPIFactory;
|
||||||
import dan200.computercraft.api.media.IMediaProvider;
|
import dan200.computercraft.api.media.IMediaProvider;
|
||||||
import dan200.computercraft.api.network.IPacketNetwork;
|
import dan200.computercraft.api.network.IPacketNetwork;
|
||||||
@@ -18,9 +19,11 @@ import dan200.computercraft.api.pocket.IPocketUpgrade;
|
|||||||
import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
|
import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
|
||||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||||
import dan200.computercraft.core.apis.ApiFactories;
|
import dan200.computercraft.core.apis.ApiFactories;
|
||||||
|
import dan200.computercraft.core.asm.GenericMethod;
|
||||||
import dan200.computercraft.core.filesystem.FileMount;
|
import dan200.computercraft.core.filesystem.FileMount;
|
||||||
import dan200.computercraft.core.filesystem.ResourceMount;
|
import dan200.computercraft.core.filesystem.ResourceMount;
|
||||||
import dan200.computercraft.shared.*;
|
import dan200.computercraft.shared.*;
|
||||||
|
import dan200.computercraft.shared.peripheral.generic.GenericPeripheralProvider;
|
||||||
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork;
|
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork;
|
||||||
import dan200.computercraft.shared.util.IDAssigner;
|
import dan200.computercraft.shared.util.IDAssigner;
|
||||||
import dan200.computercraft.shared.wired.WiredNode;
|
import dan200.computercraft.shared.wired.WiredNode;
|
||||||
@@ -31,6 +34,7 @@ import net.minecraft.util.ResourceLocation;
|
|||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
import net.minecraftforge.fml.ModList;
|
import net.minecraftforge.fml.ModList;
|
||||||
import net.minecraftforge.fml.server.ServerLifecycleHooks;
|
import net.minecraftforge.fml.server.ServerLifecycleHooks;
|
||||||
@@ -108,6 +112,18 @@ public final class ComputerCraftAPIImpl implements IComputerCraftAPI
|
|||||||
Peripherals.register( provider );
|
Peripherals.register( provider );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerGenericSource( @Nonnull GenericSource source )
|
||||||
|
{
|
||||||
|
GenericMethod.register( source );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerGenericCapability( @Nonnull Capability<?> capability )
|
||||||
|
{
|
||||||
|
GenericPeripheralProvider.addCapability( capability );
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerTurtleUpgrade( @Nonnull ITurtleUpgrade upgrade )
|
public void registerTurtleUpgrade( @Nonnull ITurtleUpgrade upgrade )
|
||||||
{
|
{
|
||||||
@@ -162,7 +178,7 @@ public final class ComputerCraftAPIImpl implements IComputerCraftAPI
|
|||||||
@Override
|
@Override
|
||||||
public LazyOptional<IWiredElement> getWiredElementAt( @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull Direction side )
|
public LazyOptional<IWiredElement> getWiredElementAt( @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull Direction side )
|
||||||
{
|
{
|
||||||
TileEntity tile = world.getTileEntity( pos );
|
TileEntity tile = world.getBlockEntity( pos );
|
||||||
return tile == null ? LazyOptional.empty() : tile.getCapability( CAPABILITY_WIRED_ELEMENT, side );
|
return tile == null ? LazyOptional.empty() : tile.getCapability( CAPABILITY_WIRED_ELEMENT, side );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api;
|
package dan200.computercraft.api;
|
||||||
|
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
import dan200.computercraft.api.filesystem.IWritableMount;
|
import dan200.computercraft.api.filesystem.IWritableMount;
|
||||||
|
import dan200.computercraft.api.lua.GenericSource;
|
||||||
import dan200.computercraft.api.lua.ILuaAPIFactory;
|
import dan200.computercraft.api.lua.ILuaAPIFactory;
|
||||||
import dan200.computercraft.api.media.IMedia;
|
import dan200.computercraft.api.media.IMedia;
|
||||||
import dan200.computercraft.api.media.IMediaProvider;
|
import dan200.computercraft.api.media.IMediaProvider;
|
||||||
@@ -23,6 +24,7 @@ import net.minecraft.util.Direction;
|
|||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
@@ -98,7 +100,9 @@ public final class ComputerCraftAPI
|
|||||||
* resource folder onto a computer's file system.
|
* resource folder onto a computer's file system.
|
||||||
*
|
*
|
||||||
* The files in this mount will be a combination of files in all mod jar, and data packs that contain
|
* The files in this mount will be a combination of files in all mod jar, and data packs that contain
|
||||||
* resources with the same domain and path.
|
* resources with the same domain and path. For instance, ComputerCraft's resources are stored in
|
||||||
|
* "/data/computercraft/lua/rom". We construct a mount for that with
|
||||||
|
* {@code createResourceMount("computercraft", "lua/rom")}.
|
||||||
*
|
*
|
||||||
* @param domain The domain under which to look for resources. eg: "mymod".
|
* @param domain The domain under which to look for resources. eg: "mymod".
|
||||||
* @param subPath The subPath under which to look for resources. eg: "lua/myfiles".
|
* @param subPath The subPath under which to look for resources. eg: "lua/myfiles".
|
||||||
@@ -114,7 +118,7 @@ public final class ComputerCraftAPI
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a peripheral provider to convert blocks into {@link IPeripheral} implementations.
|
* rers a peripheral provider to convert blocks into {@link IPeripheral} implementations.
|
||||||
*
|
*
|
||||||
* @param provider The peripheral provider to register.
|
* @param provider The peripheral provider to register.
|
||||||
* @see IPeripheral
|
* @see IPeripheral
|
||||||
@@ -125,6 +129,28 @@ public final class ComputerCraftAPI
|
|||||||
getInstance().registerPeripheralProvider( provider );
|
getInstance().registerPeripheralProvider( provider );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a method source for generic peripherals.
|
||||||
|
*
|
||||||
|
* @param source The method source to register.
|
||||||
|
* @see GenericSource
|
||||||
|
*/
|
||||||
|
public static void registerGenericSource( @Nonnull GenericSource source )
|
||||||
|
{
|
||||||
|
getInstance().registerGenericSource( source );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a capability that can be used by generic peripherals.
|
||||||
|
*
|
||||||
|
* @param capability The capability to register.
|
||||||
|
* @see GenericSource
|
||||||
|
*/
|
||||||
|
public static void registerGenericCapability( @Nonnull Capability<?> capability )
|
||||||
|
{
|
||||||
|
getInstance().registerGenericCapability( capability );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a new turtle turtle for use in ComputerCraft. After calling this,
|
* Registers a new turtle turtle for use in ComputerCraft. After calling this,
|
||||||
* users should be able to craft Turtles with your new turtle. It is recommended to call
|
* users should be able to craft Turtles with your new turtle. It is recommended to call
|
||||||
@@ -256,6 +282,10 @@ public final class ComputerCraftAPI
|
|||||||
|
|
||||||
void registerPeripheralProvider( @Nonnull IPeripheralProvider provider );
|
void registerPeripheralProvider( @Nonnull IPeripheralProvider provider );
|
||||||
|
|
||||||
|
void registerGenericSource( @Nonnull GenericSource source );
|
||||||
|
|
||||||
|
void registerGenericCapability( @Nonnull Capability<?> capability );
|
||||||
|
|
||||||
void registerTurtleUpgrade( @Nonnull ITurtleUpgrade upgrade );
|
void registerTurtleUpgrade( @Nonnull ITurtleUpgrade upgrade );
|
||||||
|
|
||||||
void registerBundledRedstoneProvider( @Nonnull IBundledRedstoneProvider provider );
|
void registerBundledRedstoneProvider( @Nonnull IBundledRedstoneProvider provider );
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api;
|
package dan200.computercraft.api;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.client;
|
package dan200.computercraft.api.client;
|
||||||
@@ -32,7 +32,7 @@ public final class TransformedModel
|
|||||||
public TransformedModel( @Nonnull IBakedModel model )
|
public TransformedModel( @Nonnull IBakedModel model )
|
||||||
{
|
{
|
||||||
this.model = Objects.requireNonNull( model );
|
this.model = Objects.requireNonNull( model );
|
||||||
this.matrix = TransformationMatrix.identity();
|
matrix = TransformationMatrix.identity();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TransformedModel of( @Nonnull ModelResourceLocation location )
|
public static TransformedModel of( @Nonnull ModelResourceLocation location )
|
||||||
@@ -43,7 +43,7 @@ public final class TransformedModel
|
|||||||
|
|
||||||
public static TransformedModel of( @Nonnull ItemStack item, @Nonnull TransformationMatrix transform )
|
public static TransformedModel of( @Nonnull ItemStack item, @Nonnull TransformationMatrix transform )
|
||||||
{
|
{
|
||||||
IBakedModel model = Minecraft.getInstance().getItemRenderer().getItemModelMesher().getItemModel( item );
|
IBakedModel model = Minecraft.getInstance().getItemRenderer().getItemModelShaper().getItemModel( item );
|
||||||
return new TransformedModel( model, transform );
|
return new TransformedModel( model, transform );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.filesystem;
|
package dan200.computercraft.api.filesystem;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.filesystem;
|
package dan200.computercraft.api.filesystem;
|
||||||
@@ -30,7 +30,7 @@ public class FileOperationException extends IOException
|
|||||||
public FileOperationException( @Nonnull String message )
|
public FileOperationException( @Nonnull String message )
|
||||||
{
|
{
|
||||||
super( Objects.requireNonNull( message, "message cannot be null" ) );
|
super( Objects.requireNonNull( message, "message cannot be null" ) );
|
||||||
this.filename = null;
|
filename = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.filesystem;
|
package dan200.computercraft.api.filesystem;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.filesystem;
|
package dan200.computercraft.api.filesystem;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.filesystem;
|
package dan200.computercraft.api.filesystem;
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
|
*/
|
||||||
|
package dan200.computercraft.api.lua;
|
||||||
|
|
||||||
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.core.asm.LuaMethod;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A generic source of {@link LuaMethod} functions.
|
||||||
|
*
|
||||||
|
* Unlike normal objects ({@link IDynamicLuaObject} or {@link IPeripheral}), methods do not target this object but
|
||||||
|
* instead are defined as {@code static} and accept their target as the first parameter. This allows you to inject
|
||||||
|
* methods onto objects you do not own, as well as declaring methods for a specific "trait" (for instance, a
|
||||||
|
* {@link Capability}).
|
||||||
|
*
|
||||||
|
* Currently the "generic peripheral" system is incompatible with normal peripherals. Normal {@link IPeripheralProvider}
|
||||||
|
* or {@link IPeripheral} implementations take priority. Tile entities which use this system are given a peripheral name
|
||||||
|
* determined by their id, rather than any peripheral provider. This will hopefully change in the future, once a suitable
|
||||||
|
* design has been established.
|
||||||
|
*
|
||||||
|
* For example, the main CC: Tweaked mod defines a generic source for inventories, which works on {@link IItemHandler}s:
|
||||||
|
*
|
||||||
|
* <pre>{@code
|
||||||
|
* public class InventoryMethods implements GenericSource {
|
||||||
|
* \@LuaFunction( mainThread = true )
|
||||||
|
* public static int size(IItemHandler inventory) {
|
||||||
|
* return inventory.getSlots();
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // ...
|
||||||
|
* }
|
||||||
|
* }</pre>
|
||||||
|
*
|
||||||
|
* @see ComputerCraftAPI#registerGenericSource(GenericSource)
|
||||||
|
* @see ComputerCraftAPI#registerGenericCapability(Capability) New capabilities (those not built into Forge) must be
|
||||||
|
* explicitly given to the generic peripheral system, as there is no way to enumerate all capabilities.
|
||||||
|
*/
|
||||||
|
public interface GenericSource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A unique identifier for this generic source.
|
||||||
|
*
|
||||||
|
* This is currently unused, but may be used in the future to allow disabling specific sources. It is recommended
|
||||||
|
* to return an identifier using your mod's ID.
|
||||||
|
*
|
||||||
|
* @return This source's identifier.
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
ResourceLocation id();
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
@@ -27,4 +27,18 @@ public interface ILuaContext
|
|||||||
* @see LuaFunction#mainThread() To run functions on the main thread and return their results synchronously.
|
* @see LuaFunction#mainThread() To run functions on the main thread and return their results synchronously.
|
||||||
*/
|
*/
|
||||||
long issueMainThreadTask( @Nonnull ILuaTask task ) throws LuaException;
|
long issueMainThreadTask( @Nonnull ILuaTask task ) throws LuaException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queue a task to be executed on the main server thread at the beginning of next tick, waiting for it to complete.
|
||||||
|
* This should be used when you need to interact with the world in a thread-safe manner.
|
||||||
|
*
|
||||||
|
* Note that the return values of your task are handled as events, meaning more complex objects such as maps or
|
||||||
|
* {@link IDynamicLuaObject} will not preserve their identities.
|
||||||
|
*
|
||||||
|
* @param task The task to execute on the main thread.
|
||||||
|
* @return The objects returned by {@code task}.
|
||||||
|
* @throws LuaException If the task could not be queued, or if the task threw an exception.
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
MethodResult executeMainThreadTask( @Nonnull ILuaTask task ) throws LuaException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
* Copyright Daniel Ratcliffe, 2011-2020. This API may be redistributed unmodified and in full only.
|
* Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only.
|
||||||
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.api.lua;
|
package dan200.computercraft.api.lua;
|
||||||
@@ -19,14 +19,14 @@ public class LuaException extends Exception
|
|||||||
public LuaException( @Nullable String message )
|
public LuaException( @Nullable String message )
|
||||||
{
|
{
|
||||||
super( message );
|
super( message );
|
||||||
this.hasLevel = false;
|
hasLevel = false;
|
||||||
this.level = 1;
|
level = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LuaException( @Nullable String message, int level )
|
public LuaException( @Nullable String message, int level )
|
||||||
{
|
{
|
||||||
super( message );
|
super( message );
|
||||||
this.hasLevel = true;
|
hasLevel = true;
|
||||||
this.level = level;
|
this.level = level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user