mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-15 13:55:12 +00:00
Compare commits
143 Commits
5.32.0
...
feat/water
Author | SHA1 | Date | |
---|---|---|---|
a048c9d260 | |||
a90e5a6aa2 | |||
df5f87e309 | |||
510ef94698 | |||
d3f40b7b0c | |||
dae3e2b336 | |||
f2fa5933ea | |||
95a324755b | |||
1d13054608 | |||
ec140f7861 | |||
66f5bdcb94 | |||
5d24d8de0b | |||
1ad08e2432 | |||
a43ebcf217 | |||
c637d852e2 | |||
c58c64de85 | |||
694aa17cc9 | |||
c9441e1078 | |||
b0ac8863c4 | |||
e9df0baffb | |||
b3723b5b3e | |||
b370b5458f | |||
8af2d05ec0 | |||
4d186b52da | |||
e6ff55823f | |||
d556389b11 | |||
976fc63567 | |||
02ac512b4e | |||
708784b0a2 | |||
3f7f11b812 | |||
984e995659 | |||
46604b26f2 | |||
6b2fb9c4f8 | |||
80b761627a | |||
882d8c4ab9 | |||
1c35987ead | |||
88ae00fc4d | |||
47a1aa6470 | |||
3e69ee87e4 | |||
a2a2ec9d8b | |||
3a0f15ef0d | |||
7a2427ace2 | |||
f82c8dd3d3 | |||
851bbd7384 | |||
1ee52b69b0 | |||
851f7a9d80 | |||
6d2329128a | |||
07045dd424 | |||
c5b0df4578 | |||
5e9dbace90 | |||
205aabe11f | |||
3091e1325f | |||
779e80a961 | |||
007673cb96 | |||
0dae786a21 | |||
02d181d0c8 | |||
2fc6bbe84e | |||
002383be89 | |||
00bdb6be73 | |||
c3c917bb05 | |||
a078f653f4 | |||
ed33983792 | |||
15eaf67a0c | |||
d72941c36c | |||
e51903d7ea | |||
3e9a96b43a | |||
9fce27eaa8 | |||
7208733d62 | |||
c61434d87b | |||
dcc258706f | |||
820e2d4a2f | |||
0fb1415f7f | |||
a6534ecbbb | |||
330bcd2423 | |||
e71b9e8dc6 | |||
9e2d91bae6 | |||
b6f55b78a9 | |||
ab5176baf9 | |||
ef6fce4091 | |||
cc335889f3 | |||
80b7f6aba4 | |||
82c5a3160c | |||
85de28d6c3 | |||
1ef854f2d1 | |||
082af9978c | |||
e8620ef94d | |||
83a91634c3 | |||
3c73bd22dd | |||
0e1824451b | |||
6c5ae634fd | |||
041944ed16 | |||
603527c6e8 | |||
7164dd9f49 | |||
3ec3be6b20 | |||
1ac08ea73b | |||
c9e8d382c5 | |||
12179aa03a | |||
e781c64540 | |||
644693ffee | |||
6b66cbfb1c | |||
4d337add7c | |||
9d75c45bf5 | |||
c7a537abbb | |||
54694df48c | |||
15aae721cd | |||
d565be93a8 | |||
e32a90be72 | |||
d4d7d02067 | |||
a45e143e81 | |||
05981d2669 | |||
fa9bba470c | |||
361626d236 | |||
16d8522245 | |||
a4f3476190 | |||
e96e68d221 | |||
f1a6d71cc1 | |||
89f42c80d4 | |||
cd6b780d31 | |||
ed61a68013 | |||
4dc9d696d0 | |||
258038c9a9 | |||
5c915a3dfe | |||
8c594fd126 | |||
9fd6653f36 | |||
32d67080e5 | |||
ed9d057ca2 | |||
5ec0e0f20b | |||
cb251069dd | |||
e0ad39b70a | |||
9997b614bc | |||
89f8f421a6 | |||
c4ff6d7757 | |||
3c0e7ae492 | |||
b944205f60 | |||
2ab3393568 | |||
1e1b95e1b8 | |||
62465fa676 | |||
aac5944396 | |||
74cfd687d7 | |||
f2f30143b0 | |||
d98adf127f | |||
280bf60830 | |||
1ffa945fbf |
32
.github/workflows/branch-sync-cron-trigger.yml
vendored
32
.github/workflows/branch-sync-cron-trigger.yml
vendored
@ -1,32 +0,0 @@
|
|||||||
#Since GitHub automatically disables cron actions after 60 days of repo inactivity, we need the active repo (PM)
|
|
||||||
#to trigger the branch merge workflow explicitly. This avoids the need for TOS-violating actions which we previously
|
|
||||||
#used to keep the restricted action active, as the workflow depends on the activity of this repo anyway.
|
|
||||||
|
|
||||||
name: Trigger branch sync
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 0 * * *" #once per day so we don't spam merge commits on busy days
|
|
||||||
workflow_dispatch: #for testing
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
trigger:
|
|
||||||
name: Trigger branch sync RestrictedActions workflow
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Generate access token
|
|
||||||
id: generate-token
|
|
||||||
uses: actions/create-github-app-token@v2
|
|
||||||
with:
|
|
||||||
app-id: ${{ vars.RESTRICTED_ACTIONS_DISPATCH_ID }}
|
|
||||||
private-key: ${{ secrets.RESTRICTED_ACTIONS_DISPATCH_KEY }}
|
|
||||||
owner: ${{ github.repository_owner }}
|
|
||||||
repositories: RestrictedActions
|
|
||||||
|
|
||||||
- name: Dispatch branch sync restricted action
|
|
||||||
uses: peter-evans/repository-dispatch@v3
|
|
||||||
with:
|
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
|
||||||
repository: ${{ github.repository_owner }}/RestrictedActions
|
|
||||||
event-type: pocketmine_mp_branch_sync
|
|
10
.github/workflows/build-docker-image.yml
vendored
10
.github/workflows/build-docker-image.yml
vendored
@ -8,7 +8,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Update Docker Hub images
|
name: Update Docker Hub images
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
@ -53,7 +53,7 @@ jobs:
|
|||||||
run: echo NAME=$(echo "${GITHUB_REPOSITORY,,}") >> $GITHUB_OUTPUT
|
run: echo NAME=$(echo "${GITHUB_REPOSITORY,,}") >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Build image for tag
|
- name: Build image for tag
|
||||||
uses: docker/build-push-action@v6.18.0
|
uses: docker/build-push-action@v6.15.0
|
||||||
with:
|
with:
|
||||||
push: true
|
push: true
|
||||||
context: ./pocketmine-mp
|
context: ./pocketmine-mp
|
||||||
@ -66,7 +66,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build image for major tag
|
- name: Build image for major tag
|
||||||
if: steps.channel.outputs.CHANNEL == 'stable'
|
if: steps.channel.outputs.CHANNEL == 'stable'
|
||||||
uses: docker/build-push-action@v6.18.0
|
uses: docker/build-push-action@v6.15.0
|
||||||
with:
|
with:
|
||||||
push: true
|
push: true
|
||||||
context: ./pocketmine-mp
|
context: ./pocketmine-mp
|
||||||
@ -79,7 +79,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build image for minor tag
|
- name: Build image for minor tag
|
||||||
if: steps.channel.outputs.CHANNEL == 'stable'
|
if: steps.channel.outputs.CHANNEL == 'stable'
|
||||||
uses: docker/build-push-action@v6.18.0
|
uses: docker/build-push-action@v6.15.0
|
||||||
with:
|
with:
|
||||||
push: true
|
push: true
|
||||||
context: ./pocketmine-mp
|
context: ./pocketmine-mp
|
||||||
@ -92,7 +92,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build image for latest tag
|
- name: Build image for latest tag
|
||||||
if: steps.channel.outputs.CHANNEL == 'stable'
|
if: steps.channel.outputs.CHANNEL == 'stable'
|
||||||
uses: docker/build-push-action@v6.18.0
|
uses: docker/build-push-action@v6.15.0
|
||||||
with:
|
with:
|
||||||
push: true
|
push: true
|
||||||
context: ./pocketmine-mp
|
context: ./pocketmine-mp
|
||||||
|
47
.github/workflows/copilot-setup-steps.yml
vendored
47
.github/workflows/copilot-setup-steps.yml
vendored
@ -1,47 +0,0 @@
|
|||||||
name: "Copilot Agent environment setup"
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- .github/workflows/copilot-setup-steps.yml
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- .github/workflows/copilot-setup-steps.yml
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
|
|
||||||
copilot-setup-steps:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: pmmp/setup-php-action@3.2.0
|
|
||||||
with:
|
|
||||||
php-version: 8.3
|
|
||||||
install-path: "./bin"
|
|
||||||
pm-version-major: 5
|
|
||||||
|
|
||||||
- name: Restore Composer package cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
~/.cache/composer/files
|
|
||||||
~/.cache/composer/vcs
|
|
||||||
key: "composer-v2-cache-8.3-${{ hashFiles('./composer.lock') }}"
|
|
||||||
restore-keys: |
|
|
||||||
composer-v2-cache-
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: composer install --prefer-dist --no-interaction
|
|
||||||
|
|
||||||
- name: Clone extension stubs
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: pmmp/phpstorm-stubs
|
|
||||||
path: extension-stubs
|
|
2
.github/workflows/discord-release-notify.yml
vendored
2
.github/workflows/discord-release-notify.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP and tools
|
- name: Setup PHP and tools
|
||||||
uses: shivammathur/setup-php@2.34.1
|
uses: shivammathur/setup-php@2.32.0
|
||||||
with:
|
with:
|
||||||
php-version: 8.2
|
php-version: 8.2
|
||||||
|
|
||||||
|
6
.github/workflows/draft-release-pr-check.yml
vendored
6
.github/workflows/draft-release-pr-check.yml
vendored
@ -24,7 +24,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
check-intent:
|
check-intent:
|
||||||
name: Check release trigger
|
name: Check release trigger
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
valid: ${{ steps.validate.outputs.DEV_BUILD == 'false' }}
|
valid: ${{ steps.validate.outputs.DEV_BUILD == 'false' }}
|
||||||
@ -43,13 +43,13 @@ jobs:
|
|||||||
#don't do these checks if this isn't a release - we don't want to generate unnecessary failed statuses
|
#don't do these checks if this isn't a release - we don't want to generate unnecessary failed statuses
|
||||||
if: needs.check-intent.outputs.valid == 'true'
|
if: needs.check-intent.outputs.valid == 'true'
|
||||||
|
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@2.34.1
|
uses: shivammathur/setup-php@2.32.0
|
||||||
with:
|
with:
|
||||||
php-version: 8.2
|
php-version: 8.2
|
||||||
|
|
||||||
|
14
.github/workflows/draft-release.yml
vendored
14
.github/workflows/draft-release.yml
vendored
@ -23,7 +23,7 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
skip:
|
skip:
|
||||||
name: Check whether to ignore this tag
|
name: Check whether to ignore this tag
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
skip: ${{ steps.exists.outputs.exists == 'true' }}
|
skip: ${{ steps.exists.outputs.exists == 'true' }}
|
||||||
@ -54,12 +54,12 @@ jobs:
|
|||||||
needs: [check]
|
needs: [check]
|
||||||
if: needs.check.outputs.valid == 'true' && github.ref_type != 'tag' #can't do post-commit for a tag
|
if: needs.check.outputs.valid == 'true' && github.ref_type != 'tag' #can't do post-commit for a tag
|
||||||
|
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate access token
|
- name: Generate access token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@v2
|
uses: actions/create-github-app-token@v1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.RESTRICTED_ACTIONS_DISPATCH_ID }}
|
app-id: ${{ vars.RESTRICTED_ACTIONS_DISPATCH_ID }}
|
||||||
private-key: ${{ secrets.RESTRICTED_ACTIONS_DISPATCH_KEY }}
|
private-key: ${{ secrets.RESTRICTED_ACTIONS_DISPATCH_KEY }}
|
||||||
@ -79,7 +79,7 @@ jobs:
|
|||||||
needs: [check]
|
needs: [check]
|
||||||
if: needs.check.outputs.valid == 'true' || github.ref_type == 'tag' #ignore validity check for tags
|
if: needs.check.outputs.valid == 'true' || github.ref_type == 'tag' #ignore validity check for tags
|
||||||
|
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -87,7 +87,7 @@ jobs:
|
|||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@2.34.1
|
uses: shivammathur/setup-php@2.32.0
|
||||||
with:
|
with:
|
||||||
php-version: ${{ env.PHP_VERSION }}
|
php-version: ${{ env.PHP_VERSION }}
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ jobs:
|
|||||||
${{ github.workspace }}/core-permissions.rst
|
${{ github.workspace }}/core-permissions.rst
|
||||||
|
|
||||||
- name: Create draft release
|
- name: Create draft release
|
||||||
uses: ncipollo/release-action@v1.18.0
|
uses: ncipollo/release-action@v1.16.0
|
||||||
id: create-draft
|
id: create-draft
|
||||||
with:
|
with:
|
||||||
artifacts: ${{ github.workspace }}/PocketMine-MP.phar,${{ github.workspace }}/start.*,${{ github.workspace }}/build_info.json,${{ github.workspace }}/core-permissions.rst
|
artifacts: ${{ github.workspace }}/PocketMine-MP.phar,${{ github.workspace }}/start.*,${{ github.workspace }}/build_info.json,${{ github.workspace }}/core-permissions.rst
|
||||||
@ -188,4 +188,4 @@ jobs:
|
|||||||
if: github.event_name == 'pull_request_target'
|
if: github.event_name == 'pull_request_target'
|
||||||
uses: thollander/actions-comment-pull-request@v3
|
uses: thollander/actions-comment-pull-request@v3
|
||||||
with:
|
with:
|
||||||
message: "${{ vars.DRAFT_RELEASE_NOTIFICATION_MENTION }} [Draft release ${{ steps.get-pm-version.outputs.PM_VERSION }}](${{ steps.create-draft.outputs.html_url }}) has been created for commit ${{ github.sha }}. Please review and publish it."
|
message: "[Draft release ${{ steps.get-pm-version.outputs.PM_VERSION }}](${{ steps.create-draft.outputs.html_url }}) has been created for commit ${{ github.sha }}. Please review and publish it."
|
||||||
|
2
.github/workflows/main-php-matrix.yml
vendored
2
.github/workflows/main-php-matrix.yml
vendored
@ -15,7 +15,7 @@ on:
|
|||||||
type: number
|
type: number
|
||||||
image:
|
image:
|
||||||
description: 'Runner image to use'
|
description: 'Runner image to use'
|
||||||
default: 'ubuntu-22.04'
|
default: 'ubuntu-20.04'
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
10
.github/workflows/main.yml
vendored
10
.github/workflows/main.yml
vendored
@ -20,7 +20,7 @@ jobs:
|
|||||||
|
|
||||||
codestyle:
|
codestyle:
|
||||||
name: Code Style checks
|
name: Code Style checks
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
@ -28,10 +28,10 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP and tools
|
- name: Setup PHP and tools
|
||||||
uses: shivammathur/setup-php@2.34.1
|
uses: shivammathur/setup-php@2.32.0
|
||||||
with:
|
with:
|
||||||
php-version: 8.3
|
php-version: 8.2
|
||||||
tools: php-cs-fixer:3.75
|
tools: php-cs-fixer:3.49
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ jobs:
|
|||||||
|
|
||||||
shellcheck:
|
shellcheck:
|
||||||
name: ShellCheck
|
name: ShellCheck
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-20.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
|
12
.github/workflows/pr-remove-waiting-label.yml
vendored
12
.github/workflows/pr-remove-waiting-label.yml
vendored
@ -15,23 +15,19 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
github-token: ${{ github.token }}
|
github-token: ${{ github.token }}
|
||||||
script: |
|
script: |
|
||||||
async function removeLabel(owner, repo, issue_number, name) {
|
const [owner, repo] = context.payload.repository.full_name.split('/');
|
||||||
try {
|
try {
|
||||||
await github.rest.issues.removeLabel({
|
await github.rest.issues.removeLabel({
|
||||||
owner: owner,
|
owner: owner,
|
||||||
repo: repo,
|
repo: repo,
|
||||||
issue_number: issue_number,
|
issue_number: context.payload.number,
|
||||||
name: name,
|
name: "Status: Waiting on Author",
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.status === 404) {
|
if (error.status === 404) {
|
||||||
//probably label wasn't set on the issue
|
//probably label wasn't set on the issue
|
||||||
console.log('Failed to remove label ' + name + ' (probably label isn\'t on the PR): ' + error.message);
|
console.log('Failed to remove label (probably label isn\'t on the PR): ' + error.message);
|
||||||
} else {
|
} else {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
const [owner, repo] = context.payload.repository.full_name.split('/');
|
|
||||||
removeLabel(owner, repo, context.payload.number, "Status: Waiting on Author");
|
|
||||||
removeLabel(owner, repo, context.payload.number, "Stale");
|
|
||||||
|
2
.github/workflows/team-pr-auto-approve.yml
vendored
2
.github/workflows/team-pr-auto-approve.yml
vendored
@ -22,7 +22,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Generate access token
|
- name: Generate access token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@v2
|
uses: actions/create-github-app-token@v1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.RESTRICTED_ACTIONS_DISPATCH_ID }}
|
app-id: ${{ vars.RESTRICTED_ACTIONS_DISPATCH_ID }}
|
||||||
private-key: ${{ secrets.RESTRICTED_ACTIONS_DISPATCH_KEY }}
|
private-key: ${{ secrets.RESTRICTED_ACTIONS_DISPATCH_KEY }}
|
||||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,6 +1,3 @@
|
|||||||
[submodule "tests/plugins/DevTools"]
|
|
||||||
path = tests/plugins/DevTools
|
|
||||||
url = https://github.com/pmmp/DevTools.git
|
|
||||||
[submodule "build/php"]
|
[submodule "build/php"]
|
||||||
path = build/php
|
path = build/php
|
||||||
url = https://github.com/pmmp/php-build-scripts.git
|
url = https://github.com/pmmp/php-build-scripts.git
|
||||||
|
@ -5,13 +5,6 @@ $finder = PhpCsFixer\Finder::create()
|
|||||||
->in(__DIR__ . '/build')
|
->in(__DIR__ . '/build')
|
||||||
->in(__DIR__ . '/tests')
|
->in(__DIR__ . '/tests')
|
||||||
->in(__DIR__ . '/tools')
|
->in(__DIR__ . '/tools')
|
||||||
->notPath('plugins/DevTools')
|
|
||||||
//JsonMapper will break if the FQNs in the doc comments for these are shortened :(
|
|
||||||
->notPath('crafting/json')
|
|
||||||
->notPath('inventory/json')
|
|
||||||
->notPath('data/bedrock/block/upgrade/model')
|
|
||||||
->notPath('data/bedrock/item/upgrade/model')
|
|
||||||
|
|
||||||
->notName('PocketMine.php');
|
->notName('PocketMine.php');
|
||||||
|
|
||||||
return (new PhpCsFixer\Config)
|
return (new PhpCsFixer\Config)
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/pmmp/PocketMine-MP/actions/workflows/main.yml"><img src="https://github.com/pmmp/PocketMine-MP/actions/workflows/main.yml/badge.svg" alt="CI" /></a>
|
<a href="https://github.com/pmmp/PocketMine-MP/actions/workflows/main.yml"><img src="https://github.com/pmmp/PocketMine-MP/workflows/CI/badge.svg" alt="CI" /></a>
|
||||||
<a href="https://github.com/pmmp/PocketMine-MP/releases/latest"><img alt="GitHub release (latest SemVer)" src="https://img.shields.io/github/v/release/pmmp/PocketMine-MP?label=release&sort=semver"></a>
|
<a href="https://github.com/pmmp/PocketMine-MP/releases/latest"><img alt="GitHub release (latest SemVer)" src="https://img.shields.io/github/v/release/pmmp/PocketMine-MP?label=release&sort=semver"></a>
|
||||||
<a href="https://discord.gg/bmSAZBG"><img src="https://img.shields.io/discord/373199722573201408?label=discord&color=7289DA&logo=discord" alt="Discord" /></a>
|
<a href="https://discord.gg/bmSAZBG"><img src="https://img.shields.io/discord/373199722573201408?label=discord&color=7289DA&logo=discord" alt="Discord" /></a>
|
||||||
<br>
|
<br>
|
||||||
|
@ -31,8 +31,8 @@ require dirname(__DIR__) . '/vendor/autoload.php';
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string[]|Closure[] $options
|
* @var string[]|\Closure[] $options
|
||||||
* @phpstan-var array<string, string|Closure() : string> $options
|
* @phpstan-var array<string, string|\Closure() : string> $options
|
||||||
*/
|
*/
|
||||||
$options = [
|
$options = [
|
||||||
"base_version" => VersionInfo::BASE_VERSION,
|
"base_version" => VersionInfo::BASE_VERSION,
|
||||||
|
Submodule build/php updated: ce1b095a9c...1549433797
@ -1,24 +0,0 @@
|
|||||||
# 5.27.0
|
|
||||||
Released 27th March 2025.
|
|
||||||
|
|
||||||
This is a support release for Minecraft: Bedrock Edition 1.21.70.
|
|
||||||
|
|
||||||
**Plugin compatibility:** Plugins for previous 5.x versions will run unchanged on this release, unless they use internal APIs, reflection, or packages like the `pocketmine\network\mcpe` or `pocketmine\data` namespace.
|
|
||||||
Do not update plugin minimum API versions unless you need new features added in this release.
|
|
||||||
|
|
||||||
**WARNING: If your plugin uses the `pocketmine\network\mcpe` namespace, you're not shielded by API change constraints.**
|
|
||||||
Consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you're using packets directly.
|
|
||||||
|
|
||||||
## Interim releases
|
|
||||||
If you're upgrading from 5.25.x directly to 5.27.0, please also read the following changelogs, as the interim releases contain important changes:
|
|
||||||
- [5.26.0](https://github.com/pmmp/PocketMine-MP/blob/5.26.0/changelogs/5.26.md#5260) - Performance improvements and other internal improvements
|
|
||||||
|
|
||||||
## General
|
|
||||||
- Aded support for Minecraft: Bedrock Edition 1.21.70.
|
|
||||||
- Removed support for earlier versions.
|
|
||||||
|
|
||||||
# 5.27.1
|
|
||||||
Released 6th April 2025.
|
|
||||||
|
|
||||||
## Fixes
|
|
||||||
- Updated RakLib to get ping timestamp handling fixes.
|
|
@ -1,34 +0,0 @@
|
|||||||
# 5.28.0
|
|
||||||
Released 9th May 2025.
|
|
||||||
|
|
||||||
This is a support release for Minecraft: Bedrock Edition 1.21.80.
|
|
||||||
|
|
||||||
**Plugin compatibility:** Plugins for previous 5.x versions will run unchanged on this release, unless they use internal APIs, reflection, or packages like the `pocketmine\network\mcpe` or `pocketmine\data` namespace.
|
|
||||||
Do not update plugin minimum API versions unless you need new features added in this release.
|
|
||||||
|
|
||||||
**WARNING: If your plugin uses the `pocketmine\network\mcpe` namespace, you're not shielded by API change constraints.**
|
|
||||||
Consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you're using packets directly.
|
|
||||||
|
|
||||||
## General
|
|
||||||
- Added support for Minecraft: Bedrock Edition 1.21.80.
|
|
||||||
- Removed support for earlier versions.
|
|
||||||
|
|
||||||
## Fixes
|
|
||||||
- `AvailableEnchantmentRegistry` now requires provided tags to always be `string`. Previously, this wasn't enforced, leading to random crashes in core code related to enchanting.
|
|
||||||
- `Entity->setFireTicks()` and `Entity->setOnFire()` now truncate the fire time to the max value instead of throwing exceptions.
|
|
||||||
|
|
||||||
## Internals
|
|
||||||
- Improved PHPStan error reporting for unsafe foreaches. Foreach on an array with implicit keys now generates different errors than foreach on an array with string keys.
|
|
||||||
|
|
||||||
# 5.28.1
|
|
||||||
Released 17th May 2025.
|
|
||||||
|
|
||||||
## Fixes
|
|
||||||
- Fixed errors when PlayStation players attempt to join due to null `TitleID`.
|
|
||||||
|
|
||||||
# 5.28.2
|
|
||||||
Released 17th May 2025.
|
|
||||||
|
|
||||||
## Fixes
|
|
||||||
- Fixed version constraints which were incorrectly updated during the 1.21.80 update. This led to an unnoticed failure to update BedrockProtocol in the previous patch release.
|
|
||||||
- Actually fixed PlayStation issues this time
|
|
@ -1,25 +0,0 @@
|
|||||||
# 5.29.0
|
|
||||||
Released 18th June 2025.
|
|
||||||
|
|
||||||
This is a support release for Minecraft: Bedrock Edition 1.21.90.
|
|
||||||
|
|
||||||
**Plugin compatibility:** Plugins for previous 5.x versions will run unchanged on this release, unless they use internal APIs, reflection, or packages like the `pocketmine\network\mcpe` or `pocketmine\data` namespace.
|
|
||||||
Do not update plugin minimum API versions unless you need new features added in this release.
|
|
||||||
|
|
||||||
**WARNING: If your plugin uses the `pocketmine\network\mcpe` namespace, you're not shielded by API change constraints.**
|
|
||||||
Consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you're using packets directly.
|
|
||||||
|
|
||||||
## General
|
|
||||||
- Added support for Minecraft: Bedrock Edition 1.21.90.
|
|
||||||
- Removed support for earlier versions.
|
|
||||||
|
|
||||||
## Fixes
|
|
||||||
- Fixed thread crashes sometimes not reporting proper cause information in crashdumps.
|
|
||||||
- Fixed crash when a plugin replaced a player's held tool with a different tool with a damage exceeding the old tool's max damage during an action.
|
|
||||||
- Fixed performance issue of `PlayerAuthInputPacket` input flags handling (broken change detection).
|
|
||||||
- Fixed `BaseInventory->addItem()` triggering updates on empty slots when no items were added.
|
|
||||||
- Fixed slow check in `SubChunk` block layer garbage collection.
|
|
||||||
|
|
||||||
## Internals
|
|
||||||
- `LoginPacketHandler->processLogin()` signature has changed. This will break any plugins overriding `LoginPacketHandler`. As noted above, this is _not_ covered by the API version guarantee.
|
|
||||||
- Automated branch sync for `minor-next` and `major-next` is now triggered by `repository_dispatch` from a cron job in this repository instead of `RestrictedActions`. The `RestrictedActions` cron job was getting automatically disabled by GitHub due to repo inactivity.
|
|
@ -1,73 +0,0 @@
|
|||||||
# 5.30.0
|
|
||||||
Released 18th June 2025.
|
|
||||||
|
|
||||||
This is a minor feature release containing API additions, internals cleanup and user experience improvements.
|
|
||||||
|
|
||||||
**Plugin compatibility:** Plugins for previous 5.x versions will run unchanged on this release, unless they use internal APIs, reflection, or packages like the `pocketmine\network\mcpe` or `pocketmine\data` namespace.
|
|
||||||
Do not update plugin minimum API versions unless you need new features added in this release.
|
|
||||||
|
|
||||||
**WARNING: If your plugin uses the `pocketmine\network\mcpe` namespace, you're not shielded by API change constraints.**
|
|
||||||
Consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you're using packets directly.
|
|
||||||
|
|
||||||
## General
|
|
||||||
- Significantly reduced log spam when unknown blocks, tiles and entities are found in saved worlds.
|
|
||||||
- The file name structure for crashdumps has been changed to improve sorting order in file browsers.
|
|
||||||
- Buffering is now skipped on the RakLib layer. In theory this could reduce player network latency by 10 ms (YMMV).
|
|
||||||
|
|
||||||
## Gameplay
|
|
||||||
### Blocks
|
|
||||||
- Many blocks have had their hardness and blast resistance updated to match vanilla.
|
|
||||||
- Implemented Respawn Anchor.
|
|
||||||
- Melon Stem and Pumpkin Stem drop amounts should now match vanilla (using binomial distribution).
|
|
||||||
|
|
||||||
## API
|
|
||||||
## General
|
|
||||||
- Verification of save registration has been added for blocks, entities and tiles. This is intended to make it easier to find mistakes when registering custom things, which previously would produce obscure core crashes.
|
|
||||||
|
|
||||||
### `pocketmine\event\block`
|
|
||||||
- The following classes have been added:
|
|
||||||
- `BlockPreExplodeEvent` - called before a block tries to explode
|
|
||||||
- `BlockExplodeEvent` - called when after a block's explosion calculation has been done, but before any changes are applied
|
|
||||||
|
|
||||||
### `pocketmine\event\entity`
|
|
||||||
- The following classes have been added:
|
|
||||||
- `EntityExtinguishEvent` - called when a burning entity is extinguished by water or other sources
|
|
||||||
- `EntityFrostWalkerEvent` - called every tick upon which an entity wearing Frost Walker boots moves; this can be used to customise or cancel the behaviour of the Frost Walker enchantment
|
|
||||||
|
|
||||||
### `pocketmine\event\player`
|
|
||||||
- The following classes have been added:
|
|
||||||
- `PlayerRespawnAnchorUseEvent` - called when a player interacts with a charged respawn anchor
|
|
||||||
|
|
||||||
### `pocketmine\entity`
|
|
||||||
- The following methods have been added:
|
|
||||||
- `public Entity->getStepHeight() : float`
|
|
||||||
- `public Entity->setStepHeight(float $stepHeight) : void`
|
|
||||||
|
|
||||||
### `pocketmine\world\generator`
|
|
||||||
- Generator execution has been decoupled from `PopulationTask` and async tasks in general. The following classes have been added:
|
|
||||||
- `executor\GeneratorExecutor`
|
|
||||||
- `executor\SyncGeneratorExecutor` - runs a generator on the main thread (used for flat world generation, which doesn't need threads)
|
|
||||||
- `executor\AsyncGeneratorExecutor` - runs a generator inside an async task, as before
|
|
||||||
- `PopulationUtils` - contains population business logic previously baked into `PopulationTask` - this permits the reuse of that logic outside async tasks
|
|
||||||
- The following methods have signature changes:
|
|
||||||
- `GeneratorManager->addGenerator()` now accepts an optional `bool $fast` parameter, defaulting to `false`; setting this to `true` will cause your generator to run on the main thread
|
|
||||||
- The following methods have been added:
|
|
||||||
- `public GeneratorManagerEntry->isFast() : bool` - returns whether this generator should run on the main thread
|
|
||||||
- `PopulationTask` has been marked as `@internal`. In the next major version, it will move to the `generator\executor` namespace; however, for now it stays put because plugins currently have no other way to regenerate chunks.
|
|
||||||
|
|
||||||
## Internals
|
|
||||||
- World data version numbers have been consolidated in `pocketmine\data\bedrock\WorldDataVersions`. This removes the need to modify several different files to support new world versions, and reduces the chances of things getting missed.
|
|
||||||
- Block hardness and blast resistance is now unit-tested against `block_properties_table.json` in `BedrockData`. This file comes from vanilla BDS, so we can use it to verify compliance.
|
|
||||||
- Protocol-layer "server auth block breaking" has been enabled. Functionally, this is no different from the previous system, it just works differently on the network layer.
|
|
||||||
- Various internal classes in the `pocketmine\world\generator` namespace have been moved to the `generator\executor` namespace.
|
|
||||||
- Removed `World->registerGenerator()` and `World->unregisterGenerator()`.
|
|
||||||
- Removed redundant calls to `curl_close()` (obsolete since PHP 8.0).
|
|
||||||
|
|
||||||
# 5.30.1
|
|
||||||
Released 23rd June 2025.
|
|
||||||
|
|
||||||
## Fixes
|
|
||||||
- Fixed accidental break of backwards compatibility in `EntityExplodeEvent` introduced in the previous release.
|
|
||||||
- Fixed placement of player holding block when exploding respawn anchor.
|
|
||||||
- Updated BedrockProtocol to fix incorrect encoding of `ServerScriptDebugDrawerPacket`.
|
|
||||||
- Disabled client-side locator bar, allowing plugins to write their own implementations.
|
|
@ -1,14 +0,0 @@
|
|||||||
# 5.31.0
|
|
||||||
Released 8th July 2025.
|
|
||||||
|
|
||||||
This is a support release for Minecraft: Bedrock Edition 1.21.93.
|
|
||||||
|
|
||||||
**Plugin compatibility:** Plugins for previous 5.x versions will run unchanged on this release, unless they use internal APIs, reflection, or packages like the `pocketmine\network\mcpe` or `pocketmine\data` namespace.
|
|
||||||
Do not update plugin minimum API versions unless you need new features added in this release.
|
|
||||||
|
|
||||||
**WARNING: If your plugin uses the `pocketmine\network\mcpe` namespace, you're not shielded by API change constraints.**
|
|
||||||
Consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you're using packets directly.
|
|
||||||
|
|
||||||
## General
|
|
||||||
- Added support for Minecraft: Bedrock Edition 1.21.93.
|
|
||||||
- Removed support for earlier versions.
|
|
@ -1,17 +0,0 @@
|
|||||||
# 5.32.0
|
|
||||||
Released 6th August 2025.
|
|
||||||
|
|
||||||
This is a support release for Minecraft: Bedrock Edition 1.21.100.
|
|
||||||
|
|
||||||
**Plugin compatibility:** Plugins for previous 5.x versions will run unchanged on this release, unless they use internal APIs, reflection, or packages like the `pocketmine\network\mcpe` or `pocketmine\data` namespace.
|
|
||||||
Do not update plugin minimum API versions unless you need new features added in this release.
|
|
||||||
|
|
||||||
**WARNING: If your plugin uses the `pocketmine\network\mcpe` namespace, you're not shielded by API change constraints.**
|
|
||||||
Consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you're using packets directly.
|
|
||||||
|
|
||||||
## General
|
|
||||||
- Added support for Minecraft: Bedrock Edition 1.21.100.
|
|
||||||
- Removed support for earlier versions.
|
|
||||||
|
|
||||||
## Fixes
|
|
||||||
- Fixed deadlock on RakLib thread crash (e.g. due to port binding failure).
|
|
@ -34,33 +34,29 @@
|
|||||||
"adhocore/json-comment": "~1.2.0",
|
"adhocore/json-comment": "~1.2.0",
|
||||||
"netresearch/jsonmapper": "~v5.0.0",
|
"netresearch/jsonmapper": "~v5.0.0",
|
||||||
"pocketmine/bedrock-block-upgrade-schema": "~5.1.0+bedrock-1.21.60",
|
"pocketmine/bedrock-block-upgrade-schema": "~5.1.0+bedrock-1.21.60",
|
||||||
"pocketmine/bedrock-data": "~5.3.0+bedrock-1.21.100",
|
"pocketmine/bedrock-data": "~4.0.0+bedrock-1.21.60",
|
||||||
"pocketmine/bedrock-item-upgrade-schema": "~1.15.0+bedrock-1.21.100",
|
"pocketmine/bedrock-item-upgrade-schema": "~1.14.0+bedrock-1.21.50",
|
||||||
"pocketmine/bedrock-protocol": "~40.0.0+bedrock-1.21.100",
|
"pocketmine/bedrock-protocol": "~36.2.0+bedrock-1.21.60",
|
||||||
"pocketmine/binaryutils": "^0.2.1",
|
"pocketmine/binaryutils": "^0.2.1",
|
||||||
"pocketmine/callback-validator": "^1.0.2",
|
"pocketmine/callback-validator": "^1.0.2",
|
||||||
"pocketmine/color": "^0.3.0",
|
"pocketmine/color": "^0.3.0",
|
||||||
"pocketmine/errorhandler": "^0.7.0",
|
"pocketmine/errorhandler": "^0.7.0",
|
||||||
"pocketmine/locale-data": "~2.25.0",
|
"pocketmine/locale-data": "~2.24.0",
|
||||||
"pocketmine/log": "^0.4.0",
|
"pocketmine/log": "^0.4.0",
|
||||||
"pocketmine/math": "~1.0.0",
|
"pocketmine/math": "~1.0.0",
|
||||||
"pocketmine/nbt": "~1.1.0",
|
"pocketmine/nbt": "~1.1.0",
|
||||||
"pocketmine/raklib": "~1.2.0",
|
"pocketmine/raklib": "~1.1.0",
|
||||||
"pocketmine/raklib-ipc": "~1.0.0",
|
"pocketmine/raklib-ipc": "~1.0.0",
|
||||||
"pocketmine/snooze": "^0.5.0",
|
"pocketmine/snooze": "^0.5.0",
|
||||||
"ramsey/uuid": "~4.9.0",
|
"ramsey/uuid": "~4.7.0",
|
||||||
"symfony/filesystem": "~6.4.0"
|
"symfony/filesystem": "~6.4.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpstan/phpstan": "2.1.17",
|
"phpstan/phpstan": "2.1.8",
|
||||||
"phpstan/phpstan-phpunit": "^2.0.0",
|
"phpstan/phpstan-phpunit": "^2.0.0",
|
||||||
"phpstan/phpstan-strict-rules": "^2.0.0",
|
"phpstan/phpstan-strict-rules": "^2.0.0",
|
||||||
"phpunit/phpunit": "^10.5.24"
|
"phpunit/phpunit": "^10.5.24"
|
||||||
},
|
},
|
||||||
"replace": {
|
|
||||||
"symfony/polyfill-ctype": "*",
|
|
||||||
"symfony/polyfill-mbstring": "*"
|
|
||||||
},
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"pocketmine\\": "src/"
|
"pocketmine\\": "src/"
|
||||||
@ -82,7 +78,6 @@
|
|||||||
"sort-packages": true
|
"sort-packages": true
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"make-devtools": "@php -dphar.readonly=0 tests/plugins/DevTools/src/ConsoleScript.php --make ./ --relative tests/plugins/DevTools --out plugins/DevTools.phar",
|
|
||||||
"make-server": [
|
"make-server": [
|
||||||
"@composer install --no-dev --classmap-authoritative --ignore-platform-reqs",
|
"@composer install --no-dev --classmap-authoritative --ignore-platform-reqs",
|
||||||
"@php -dphar.readonly=0 build/server-phar.php"
|
"@php -dphar.readonly=0 build/server-phar.php"
|
||||||
|
395
composer.lock
generated
395
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "402ad5667b1e636a8ec6acf2f1b5f055",
|
"content-hash": "6314ae9a7919042f10bd17f0a3ef6e9d",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "adhocore/json-comment",
|
"name": "adhocore/json-comment",
|
||||||
@ -67,16 +67,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
"version": "0.13.1",
|
"version": "0.12.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/brick/math.git",
|
"url": "https://github.com/brick/math.git",
|
||||||
"reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04"
|
"reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04",
|
"url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
|
||||||
"reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04",
|
"reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -115,7 +115,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/brick/math/issues",
|
"issues": "https://github.com/brick/math/issues",
|
||||||
"source": "https://github.com/brick/math/tree/0.13.1"
|
"source": "https://github.com/brick/math/tree/0.12.3"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -123,7 +123,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-03-29T13:50:30+00:00"
|
"time": "2025-02-28T13:11:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "netresearch/jsonmapper",
|
"name": "netresearch/jsonmapper",
|
||||||
@ -204,16 +204,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/bedrock-data",
|
"name": "pocketmine/bedrock-data",
|
||||||
"version": "5.3.0+bedrock-1.21.100",
|
"version": "4.0.0+bedrock-1.21.60",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/pmmp/BedrockData.git",
|
"url": "https://github.com/pmmp/BedrockData.git",
|
||||||
"reference": "5279e76261df158d5af187cfaafc1618c1da9e3f"
|
"reference": "2e5f16ec2facac653f3f894f22eb831d880ba98e"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/pmmp/BedrockData/zipball/5279e76261df158d5af187cfaafc1618c1da9e3f",
|
"url": "https://api.github.com/repos/pmmp/BedrockData/zipball/2e5f16ec2facac653f3f894f22eb831d880ba98e",
|
||||||
"reference": "5279e76261df158d5af187cfaafc1618c1da9e3f",
|
"reference": "2e5f16ec2facac653f3f894f22eb831d880ba98e",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
@ -224,22 +224,22 @@
|
|||||||
"description": "Blobs of data generated from Minecraft: Bedrock Edition, used by PocketMine-MP",
|
"description": "Blobs of data generated from Minecraft: Bedrock Edition, used by PocketMine-MP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/pmmp/BedrockData/issues",
|
"issues": "https://github.com/pmmp/BedrockData/issues",
|
||||||
"source": "https://github.com/pmmp/BedrockData/tree/5.3.0+bedrock-1.21.100"
|
"source": "https://github.com/pmmp/BedrockData/tree/bedrock-1.21.60"
|
||||||
},
|
},
|
||||||
"time": "2025-07-30T22:07:56+00:00"
|
"time": "2025-02-16T15:56:56+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/bedrock-item-upgrade-schema",
|
"name": "pocketmine/bedrock-item-upgrade-schema",
|
||||||
"version": "1.15.0",
|
"version": "1.14.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/pmmp/BedrockItemUpgradeSchema.git",
|
"url": "https://github.com/pmmp/BedrockItemUpgradeSchema.git",
|
||||||
"reference": "09e0dbe9743f21a76b1fe04b2b4136785775f52b"
|
"reference": "9fc7c9bbb558a017395c1cb7dd819c033ee971bb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/pmmp/BedrockItemUpgradeSchema/zipball/09e0dbe9743f21a76b1fe04b2b4136785775f52b",
|
"url": "https://api.github.com/repos/pmmp/BedrockItemUpgradeSchema/zipball/9fc7c9bbb558a017395c1cb7dd819c033ee971bb",
|
||||||
"reference": "09e0dbe9743f21a76b1fe04b2b4136785775f52b",
|
"reference": "9fc7c9bbb558a017395c1cb7dd819c033ee971bb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
@ -250,22 +250,22 @@
|
|||||||
"description": "JSON schemas for upgrading items found in older Minecraft: Bedrock world saves",
|
"description": "JSON schemas for upgrading items found in older Minecraft: Bedrock world saves",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/pmmp/BedrockItemUpgradeSchema/issues",
|
"issues": "https://github.com/pmmp/BedrockItemUpgradeSchema/issues",
|
||||||
"source": "https://github.com/pmmp/BedrockItemUpgradeSchema/tree/1.15.0"
|
"source": "https://github.com/pmmp/BedrockItemUpgradeSchema/tree/1.14.0"
|
||||||
},
|
},
|
||||||
"time": "2025-08-06T15:08:48+00:00"
|
"time": "2024-12-04T12:22:49+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/bedrock-protocol",
|
"name": "pocketmine/bedrock-protocol",
|
||||||
"version": "40.0.0+bedrock-1.21.100",
|
"version": "36.2.0+bedrock-1.21.60",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/pmmp/BedrockProtocol.git",
|
"url": "https://github.com/pmmp/BedrockProtocol.git",
|
||||||
"reference": "5e95cab3a6e6c24920e0c25ca4aaf887ed4b70ca"
|
"reference": "6830e8a9ee9ecb6984b7b02f412473136ae92d50"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/pmmp/BedrockProtocol/zipball/5e95cab3a6e6c24920e0c25ca4aaf887ed4b70ca",
|
"url": "https://api.github.com/repos/pmmp/BedrockProtocol/zipball/6830e8a9ee9ecb6984b7b02f412473136ae92d50",
|
||||||
"reference": "5e95cab3a6e6c24920e0c25ca4aaf887ed4b70ca",
|
"reference": "6830e8a9ee9ecb6984b7b02f412473136ae92d50",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -296,9 +296,9 @@
|
|||||||
"description": "An implementation of the Minecraft: Bedrock Edition protocol in PHP",
|
"description": "An implementation of the Minecraft: Bedrock Edition protocol in PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/pmmp/BedrockProtocol/issues",
|
"issues": "https://github.com/pmmp/BedrockProtocol/issues",
|
||||||
"source": "https://github.com/pmmp/BedrockProtocol/tree/40.0.0+bedrock-1.21.100"
|
"source": "https://github.com/pmmp/BedrockProtocol/tree/36.2.0+bedrock-1.21.60"
|
||||||
},
|
},
|
||||||
"time": "2025-08-06T15:13:45+00:00"
|
"time": "2025-03-14T17:17:21+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/binaryutils",
|
"name": "pocketmine/binaryutils",
|
||||||
@ -471,16 +471,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/locale-data",
|
"name": "pocketmine/locale-data",
|
||||||
"version": "2.25.1",
|
"version": "2.24.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/pmmp/Language.git",
|
"url": "https://github.com/pmmp/Language.git",
|
||||||
"reference": "8e6514f5a9638e69cdc2219c775fc7d3bb4c9fdd"
|
"reference": "8f48cbe1fb5835a8bb573bed00ef04c65c26c7e5"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/pmmp/Language/zipball/8e6514f5a9638e69cdc2219c775fc7d3bb4c9fdd",
|
"url": "https://api.github.com/repos/pmmp/Language/zipball/8f48cbe1fb5835a8bb573bed00ef04c65c26c7e5",
|
||||||
"reference": "8e6514f5a9638e69cdc2219c775fc7d3bb4c9fdd",
|
"reference": "8f48cbe1fb5835a8bb573bed00ef04c65c26c7e5",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
@ -488,9 +488,9 @@
|
|||||||
"description": "Language resources used by PocketMine-MP",
|
"description": "Language resources used by PocketMine-MP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/pmmp/Language/issues",
|
"issues": "https://github.com/pmmp/Language/issues",
|
||||||
"source": "https://github.com/pmmp/Language/tree/2.25.1"
|
"source": "https://github.com/pmmp/Language/tree/2.24.1"
|
||||||
},
|
},
|
||||||
"time": "2025-04-16T11:15:32+00:00"
|
"time": "2025-03-16T19:04:15+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/log",
|
"name": "pocketmine/log",
|
||||||
@ -618,16 +618,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/raklib",
|
"name": "pocketmine/raklib",
|
||||||
"version": "1.2.0",
|
"version": "1.1.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/pmmp/RakLib.git",
|
"url": "https://github.com/pmmp/RakLib.git",
|
||||||
"reference": "a28d05216d34dbd00e8aed827a58df6b4c11510b"
|
"reference": "be2783be516bf6e2872ff5c81fb9048596617b97"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/pmmp/RakLib/zipball/a28d05216d34dbd00e8aed827a58df6b4c11510b",
|
"url": "https://api.github.com/repos/pmmp/RakLib/zipball/be2783be516bf6e2872ff5c81fb9048596617b97",
|
||||||
"reference": "a28d05216d34dbd00e8aed827a58df6b4c11510b",
|
"reference": "be2783be516bf6e2872ff5c81fb9048596617b97",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -639,8 +639,8 @@
|
|||||||
"pocketmine/log": "^0.3.0 || ^0.4.0"
|
"pocketmine/log": "^0.3.0 || ^0.4.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpstan/phpstan": "2.1.0",
|
"phpstan/phpstan": "1.10.1",
|
||||||
"phpstan/phpstan-strict-rules": "^2.0"
|
"phpstan/phpstan-strict-rules": "^1.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -655,9 +655,9 @@
|
|||||||
"description": "A RakNet server implementation written in PHP",
|
"description": "A RakNet server implementation written in PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/pmmp/RakLib/issues",
|
"issues": "https://github.com/pmmp/RakLib/issues",
|
||||||
"source": "https://github.com/pmmp/RakLib/tree/1.2.0"
|
"source": "https://github.com/pmmp/RakLib/tree/1.1.1"
|
||||||
},
|
},
|
||||||
"time": "2025-06-08T17:36:06+00:00"
|
"time": "2024-03-04T14:02:14+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/raklib-ipc",
|
"name": "pocketmine/raklib-ipc",
|
||||||
@ -742,16 +742,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ramsey/collection",
|
"name": "ramsey/collection",
|
||||||
"version": "2.1.1",
|
"version": "2.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/ramsey/collection.git",
|
"url": "https://github.com/ramsey/collection.git",
|
||||||
"reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
|
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
|
"url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
|
||||||
"reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
|
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -812,26 +812,27 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/ramsey/collection/issues",
|
"issues": "https://github.com/ramsey/collection/issues",
|
||||||
"source": "https://github.com/ramsey/collection/tree/2.1.1"
|
"source": "https://github.com/ramsey/collection/tree/2.1.0"
|
||||||
},
|
},
|
||||||
"time": "2025-03-22T05:38:12+00:00"
|
"time": "2025-03-02T04:48:29+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ramsey/uuid",
|
"name": "ramsey/uuid",
|
||||||
"version": "4.9.0",
|
"version": "4.7.6",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/ramsey/uuid.git",
|
"url": "https://github.com/ramsey/uuid.git",
|
||||||
"reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0"
|
"reference": "91039bc1faa45ba123c4328958e620d382ec7088"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0",
|
"url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
|
||||||
"reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0",
|
"reference": "91039bc1faa45ba123c4328958e620d382ec7088",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13",
|
"brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
|
||||||
|
"ext-json": "*",
|
||||||
"php": "^8.0",
|
"php": "^8.0",
|
||||||
"ramsey/collection": "^1.2 || ^2.0"
|
"ramsey/collection": "^1.2 || ^2.0"
|
||||||
},
|
},
|
||||||
@ -839,23 +840,26 @@
|
|||||||
"rhumsaa/uuid": "self.version"
|
"rhumsaa/uuid": "self.version"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"captainhook/captainhook": "^5.25",
|
"captainhook/captainhook": "^5.10",
|
||||||
"captainhook/plugin-composer": "^5.3",
|
"captainhook/plugin-composer": "^5.3",
|
||||||
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
|
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||||
"ergebnis/composer-normalize": "^2.47",
|
"doctrine/annotations": "^1.8",
|
||||||
"mockery/mockery": "^1.6",
|
"ergebnis/composer-normalize": "^2.15",
|
||||||
|
"mockery/mockery": "^1.3",
|
||||||
"paragonie/random-lib": "^2",
|
"paragonie/random-lib": "^2",
|
||||||
"php-mock/php-mock": "^2.6",
|
"php-mock/php-mock": "^2.2",
|
||||||
"php-mock/php-mock-mockery": "^1.5",
|
"php-mock/php-mock-mockery": "^1.3",
|
||||||
"php-parallel-lint/php-parallel-lint": "^1.4.0",
|
"php-parallel-lint/php-parallel-lint": "^1.1",
|
||||||
"phpbench/phpbench": "^1.2.14",
|
"phpbench/phpbench": "^1.0",
|
||||||
"phpstan/extension-installer": "^1.4",
|
"phpstan/extension-installer": "^1.1",
|
||||||
"phpstan/phpstan": "^2.1",
|
"phpstan/phpstan": "^1.8",
|
||||||
"phpstan/phpstan-mockery": "^2.0",
|
"phpstan/phpstan-mockery": "^1.1",
|
||||||
"phpstan/phpstan-phpunit": "^2.0",
|
"phpstan/phpstan-phpunit": "^1.1",
|
||||||
"phpunit/phpunit": "^9.6",
|
"phpunit/phpunit": "^8.5 || ^9",
|
||||||
"slevomat/coding-standard": "^8.18",
|
"ramsey/composer-repl": "^1.4",
|
||||||
"squizlabs/php_codesniffer": "^3.13"
|
"slevomat/coding-standard": "^8.4",
|
||||||
|
"squizlabs/php_codesniffer": "^3.5",
|
||||||
|
"vimeo/psalm": "^4.9"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
|
"ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
|
||||||
@ -890,9 +894,19 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/ramsey/uuid/issues",
|
"issues": "https://github.com/ramsey/uuid/issues",
|
||||||
"source": "https://github.com/ramsey/uuid/tree/4.9.0"
|
"source": "https://github.com/ramsey/uuid/tree/4.7.6"
|
||||||
},
|
},
|
||||||
"time": "2025-06-25T14:20:11+00:00"
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/ramsey",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-04-27T21:32:50+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/filesystem",
|
"name": "symfony/filesystem",
|
||||||
@ -959,21 +973,180 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-10-25T15:07:50+00:00"
|
"time": "2024-10-25T15:07:50+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-ctype",
|
||||||
|
"version": "v1.31.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||||
|
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
|
||||||
|
"reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-ctype": "*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-ctype": "For best performance"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/polyfill",
|
||||||
|
"name": "symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"bootstrap.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Ctype\\": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Gert de Pagter",
|
||||||
|
"email": "BackEndTea@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill for ctype functions",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"ctype",
|
||||||
|
"polyfill",
|
||||||
|
"portable"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-mbstring",
|
||||||
|
"version": "v1.31.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
|
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
||||||
|
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mbstring": "*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-mbstring": "For best performance"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/polyfill",
|
||||||
|
"name": "symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"bootstrap.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill for the Mbstring extension",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"mbstring",
|
||||||
|
"polyfill",
|
||||||
|
"portable",
|
||||||
|
"shim"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "myclabs/deep-copy",
|
"name": "myclabs/deep-copy",
|
||||||
"version": "1.13.1",
|
"version": "1.13.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||||
"reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c"
|
"reference": "024473a478be9df5fdaca2c793f2232fe788e414"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c",
|
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
|
||||||
"reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c",
|
"reference": "024473a478be9df5fdaca2c793f2232fe788e414",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1012,7 +1185,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.1"
|
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1020,20 +1193,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-04-29T12:36:36+00:00"
|
"time": "2025-02-12T12:17:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nikic/php-parser",
|
"name": "nikic/php-parser",
|
||||||
"version": "v5.5.0",
|
"version": "v5.4.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
|
"reference": "447a020a1f875a434d62f2a401f53b82a396e494"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
|
||||||
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
|
"reference": "447a020a1f875a434d62f2a401f53b82a396e494",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1076,9 +1249,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||||
"source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
|
"source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
|
||||||
},
|
},
|
||||||
"time": "2025-05-31T08:24:38+00:00"
|
"time": "2024-12-30T11:07:19+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phar-io/manifest",
|
"name": "phar-io/manifest",
|
||||||
@ -1200,16 +1373,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan",
|
"name": "phpstan/phpstan",
|
||||||
"version": "2.1.17",
|
"version": "2.1.8",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpstan.git",
|
"url": "https://github.com/phpstan/phpstan.git",
|
||||||
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053"
|
"reference": "f9adff3b87c03b12cc7e46a30a524648e497758f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053",
|
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/f9adff3b87c03b12cc7e46a30a524648e497758f",
|
||||||
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053",
|
"reference": "f9adff3b87c03b12cc7e46a30a524648e497758f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1254,20 +1427,20 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-21T20:55:28+00:00"
|
"time": "2025-03-09T09:30:48+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan-phpunit",
|
"name": "phpstan/phpstan-phpunit",
|
||||||
"version": "2.0.6",
|
"version": "2.0.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpstan-phpunit.git",
|
"url": "https://github.com/phpstan/phpstan-phpunit.git",
|
||||||
"reference": "6b92469f8a7995e626da3aa487099617b8dfa260"
|
"reference": "d09e152f403c843998d7a52b5d87040c937525dd"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6b92469f8a7995e626da3aa487099617b8dfa260",
|
"url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/d09e152f403c843998d7a52b5d87040c937525dd",
|
||||||
"reference": "6b92469f8a7995e626da3aa487099617b8dfa260",
|
"reference": "d09e152f403c843998d7a52b5d87040c937525dd",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1278,9 +1451,7 @@
|
|||||||
"phpunit/phpunit": "<7.0"
|
"phpunit/phpunit": "<7.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"nikic/php-parser": "^5",
|
|
||||||
"php-parallel-lint/php-parallel-lint": "^1.2",
|
"php-parallel-lint/php-parallel-lint": "^1.2",
|
||||||
"phpstan/phpstan-deprecation-rules": "^2.0",
|
|
||||||
"phpstan/phpstan-strict-rules": "^2.0",
|
"phpstan/phpstan-strict-rules": "^2.0",
|
||||||
"phpunit/phpunit": "^9.6"
|
"phpunit/phpunit": "^9.6"
|
||||||
},
|
},
|
||||||
@ -1305,22 +1476,22 @@
|
|||||||
"description": "PHPUnit extensions and rules for PHPStan",
|
"description": "PHPUnit extensions and rules for PHPStan",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/phpstan/phpstan-phpunit/issues",
|
"issues": "https://github.com/phpstan/phpstan-phpunit/issues",
|
||||||
"source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.6"
|
"source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.4"
|
||||||
},
|
},
|
||||||
"time": "2025-03-26T12:47:06+00:00"
|
"time": "2025-01-22T13:07:38+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan-strict-rules",
|
"name": "phpstan/phpstan-strict-rules",
|
||||||
"version": "2.0.6",
|
"version": "2.0.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
|
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
|
||||||
"reference": "f9f77efa9de31992a832ff77ea52eb42d675b094"
|
"reference": "8b88b5f818bfa301e0c99154ab622dace071c3ba"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/f9f77efa9de31992a832ff77ea52eb42d675b094",
|
"url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/8b88b5f818bfa301e0c99154ab622dace071c3ba",
|
||||||
"reference": "f9f77efa9de31992a832ff77ea52eb42d675b094",
|
"reference": "8b88b5f818bfa301e0c99154ab622dace071c3ba",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1353,9 +1524,9 @@
|
|||||||
"description": "Extra strict and opinionated rules for PHPStan",
|
"description": "Extra strict and opinionated rules for PHPStan",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
|
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
|
||||||
"source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.6"
|
"source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.3"
|
||||||
},
|
},
|
||||||
"time": "2025-07-21T12:19:29+00:00"
|
"time": "2025-01-21T10:52:14+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
@ -1680,16 +1851,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "10.5.47",
|
"version": "10.5.45",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "3637b3e50d32ab3a0d1a33b3b6177169ec3d95a3"
|
"reference": "bd68a781d8e30348bc297449f5234b3458267ae8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3637b3e50d32ab3a0d1a33b3b6177169ec3d95a3",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8",
|
||||||
"reference": "3637b3e50d32ab3a0d1a33b3b6177169ec3d95a3",
|
"reference": "bd68a781d8e30348bc297449f5234b3458267ae8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1699,7 +1870,7 @@
|
|||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"ext-xml": "*",
|
"ext-xml": "*",
|
||||||
"ext-xmlwriter": "*",
|
"ext-xmlwriter": "*",
|
||||||
"myclabs/deep-copy": "^1.13.1",
|
"myclabs/deep-copy": "^1.12.1",
|
||||||
"phar-io/manifest": "^2.0.4",
|
"phar-io/manifest": "^2.0.4",
|
||||||
"phar-io/version": "^3.2.1",
|
"phar-io/version": "^3.2.1",
|
||||||
"php": ">=8.1",
|
"php": ">=8.1",
|
||||||
@ -1761,7 +1932,7 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.47"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1772,20 +1943,12 @@
|
|||||||
"url": "https://github.com/sebastianbergmann",
|
"url": "https://github.com/sebastianbergmann",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"url": "https://liberapay.com/sebastianbergmann",
|
|
||||||
"type": "liberapay"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://thanks.dev/u/gh/sebastianbergmann",
|
|
||||||
"type": "thanks_dev"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
|
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-06-20T11:29:11+00:00"
|
"time": "2025-02-06T16:08:12+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/cli-parser",
|
"name": "sebastian/cli-parser",
|
||||||
@ -2756,7 +2919,7 @@
|
|||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": {},
|
"stability-flags": [],
|
||||||
"prefer-stable": false,
|
"prefer-stable": false,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
@ -2787,9 +2950,9 @@
|
|||||||
"ext-zlib": ">=1.2.11",
|
"ext-zlib": ">=1.2.11",
|
||||||
"composer-runtime-api": "^2.0"
|
"composer-runtime-api": "^2.0"
|
||||||
},
|
},
|
||||||
"platform-dev": {},
|
"platform-dev": [],
|
||||||
"platform-overrides": {
|
"platform-overrides": {
|
||||||
"php": "8.1.0"
|
"php": "8.1.0"
|
||||||
},
|
},
|
||||||
"plugin-api-version": "2.6.0"
|
"plugin-api-version": "2.3.0"
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,10 @@ includes:
|
|||||||
- vendor/phpstan/phpstan-strict-rules/rules.neon
|
- vendor/phpstan/phpstan-strict-rules/rules.neon
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
- pocketmine\phpstan\rules\DeprecatedLegacyEnumAccessRule
|
|
||||||
- pocketmine\phpstan\rules\DisallowDynamicNewRule
|
- pocketmine\phpstan\rules\DisallowDynamicNewRule
|
||||||
- pocketmine\phpstan\rules\DisallowEnumComparisonRule
|
|
||||||
- pocketmine\phpstan\rules\DisallowForeachByReferenceRule
|
- pocketmine\phpstan\rules\DisallowForeachByReferenceRule
|
||||||
- pocketmine\phpstan\rules\ExplodeLimitRule
|
- pocketmine\phpstan\rules\ExplodeLimitRule
|
||||||
- pocketmine\phpstan\rules\UnsafeForeachRule
|
- pocketmine\phpstan\rules\UnsafeForeachArrayOfStringRule
|
||||||
# - pocketmine\phpstan\rules\ThreadedSupportedTypesRule
|
# - pocketmine\phpstan\rules\ThreadedSupportedTypesRule
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
|
@ -123,13 +123,6 @@ class MemoryManager{
|
|||||||
return $this->globalMemoryLimit;
|
return $this->globalMemoryLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public function canUseChunkCache() : bool{
|
|
||||||
return !$this->lowMemory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the allowed chunk radius based on the current memory usage.
|
* Returns the allowed chunk radius based on the current memory usage.
|
||||||
*/
|
*/
|
||||||
@ -236,13 +229,4 @@ class MemoryManager{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Static memory dumper accessible from any thread.
|
|
||||||
* @deprecated
|
|
||||||
* @see MemoryDump
|
|
||||||
*/
|
|
||||||
public static function dumpMemory(mixed $startingObject, string $outputFolder, int $maxNesting, int $maxStringSize, \Logger $logger) : void{
|
|
||||||
MemoryDump::dumpMemory($startingObject, $outputFolder, $maxNesting, $maxStringSize, $logger);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,7 @@ use pocketmine\player\PlayerDataLoadException;
|
|||||||
use pocketmine\player\PlayerDataProvider;
|
use pocketmine\player\PlayerDataProvider;
|
||||||
use pocketmine\player\PlayerDataSaveException;
|
use pocketmine\player\PlayerDataSaveException;
|
||||||
use pocketmine\player\PlayerInfo;
|
use pocketmine\player\PlayerInfo;
|
||||||
|
use pocketmine\plugin\FolderPluginLoader;
|
||||||
use pocketmine\plugin\PharPluginLoader;
|
use pocketmine\plugin\PharPluginLoader;
|
||||||
use pocketmine\plugin\PluginEnableOrder;
|
use pocketmine\plugin\PluginEnableOrder;
|
||||||
use pocketmine\plugin\PluginGraylist;
|
use pocketmine\plugin\PluginGraylist;
|
||||||
@ -346,6 +347,10 @@ class Server{
|
|||||||
return $this->maxPlayers;
|
return $this->maxPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setMaxPlayers(int $maxPlayers) : void{
|
||||||
|
$this->maxPlayers = $maxPlayers;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the server requires that players be authenticated to Xbox Live. If true, connecting players who
|
* Returns whether the server requires that players be authenticated to Xbox Live. If true, connecting players who
|
||||||
* are not logged into Xbox Live will be disconnected.
|
* are not logged into Xbox Live will be disconnected.
|
||||||
@ -1029,6 +1034,7 @@ class Server{
|
|||||||
$this->pluginManager = new PluginManager($this, $this->configGroup->getPropertyBool(Yml::PLUGINS_LEGACY_DATA_DIR, true) ? null : Path::join($this->dataPath, "plugin_data"), $pluginGraylist);
|
$this->pluginManager = new PluginManager($this, $this->configGroup->getPropertyBool(Yml::PLUGINS_LEGACY_DATA_DIR, true) ? null : Path::join($this->dataPath, "plugin_data"), $pluginGraylist);
|
||||||
$this->pluginManager->registerInterface(new PharPluginLoader($this->autoloader));
|
$this->pluginManager->registerInterface(new PharPluginLoader($this->autoloader));
|
||||||
$this->pluginManager->registerInterface(new ScriptPluginLoader());
|
$this->pluginManager->registerInterface(new ScriptPluginLoader());
|
||||||
|
$this->pluginManager->registerInterface(new FolderPluginLoader($this->autoloader));
|
||||||
|
|
||||||
$providerManager = new WorldProviderManager();
|
$providerManager = new WorldProviderManager();
|
||||||
if(
|
if(
|
||||||
@ -1618,7 +1624,7 @@ class Server{
|
|||||||
if(!is_dir($crashFolder)){
|
if(!is_dir($crashFolder)){
|
||||||
mkdir($crashFolder);
|
mkdir($crashFolder);
|
||||||
}
|
}
|
||||||
$crashDumpPath = Path::join($crashFolder, date("Y-m-d_H.i.s_T", (int) $dump->getData()->time) . ".log");
|
$crashDumpPath = Path::join($crashFolder, date("D_M_j-H.i.s-T_Y", (int) $dump->getData()->time) . ".log");
|
||||||
|
|
||||||
$fp = @fopen($crashDumpPath, "wb");
|
$fp = @fopen($crashDumpPath, "wb");
|
||||||
if(!is_resource($fp)){
|
if(!is_resource($fp)){
|
||||||
|
@ -31,8 +31,8 @@ use function str_repeat;
|
|||||||
|
|
||||||
final class VersionInfo{
|
final class VersionInfo{
|
||||||
public const NAME = "PocketMine-MP";
|
public const NAME = "PocketMine-MP";
|
||||||
public const BASE_VERSION = "5.32.0";
|
public const BASE_VERSION = "5.26.1";
|
||||||
public const IS_DEVELOPMENT_BUILD = false;
|
public const IS_DEVELOPMENT_BUILD = true;
|
||||||
public const BUILD_CHANNEL = "stable";
|
public const BUILD_CHANNEL = "stable";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,6 +29,7 @@ namespace pocketmine\block;
|
|||||||
use pocketmine\block\tile\Spawnable;
|
use pocketmine\block\tile\Spawnable;
|
||||||
use pocketmine\block\tile\Tile;
|
use pocketmine\block\tile\Tile;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
|
use pocketmine\block\utils\Waterloggable;
|
||||||
use pocketmine\data\runtime\InvalidSerializedRuntimeDataException;
|
use pocketmine\data\runtime\InvalidSerializedRuntimeDataException;
|
||||||
use pocketmine\data\runtime\RuntimeDataDescriber;
|
use pocketmine\data\runtime\RuntimeDataDescriber;
|
||||||
use pocketmine\data\runtime\RuntimeDataReader;
|
use pocketmine\data\runtime\RuntimeDataReader;
|
||||||
@ -384,7 +385,13 @@ class Block{
|
|||||||
if($chunk === null){
|
if($chunk === null){
|
||||||
throw new AssumptionFailedError("World::setBlock() should have loaded the chunk before calling this method");
|
throw new AssumptionFailedError("World::setBlock() should have loaded the chunk before calling this method");
|
||||||
}
|
}
|
||||||
$chunk->setBlockStateId($this->position->x & Chunk::COORD_MASK, $this->position->y, $this->position->z & Chunk::COORD_MASK, $this->getStateId());
|
$x = $this->position->x & Chunk::COORD_MASK;
|
||||||
|
$z = $this->position->z & Chunk::COORD_MASK;
|
||||||
|
$stateId = $this->getStateId();
|
||||||
|
$chunk->setBlockStateId($x, $this->position->y, $z, $stateId);
|
||||||
|
if($this instanceof Waterloggable){
|
||||||
|
$chunk->setWaterStateId($x, $this->position->y, $z, $this->getWaterState()?->getStateId());
|
||||||
|
}
|
||||||
|
|
||||||
$tileType = $this->idInfo->getTileClass();
|
$tileType = $this->idInfo->getTileClass();
|
||||||
$oldTile = $world->getTile($this->position);
|
$oldTile = $world->getTile($this->position);
|
||||||
@ -621,6 +628,9 @@ class Block{
|
|||||||
final public function position(World $world, int $x, int $y, int $z) : void{
|
final public function position(World $world, int $x, int $y, int $z) : void{
|
||||||
$this->position = new Position($x, $y, $z, $world);
|
$this->position = new Position($x, $y, $z, $world);
|
||||||
$this->collisionBoxes = null;
|
$this->collisionBoxes = null;
|
||||||
|
if($this instanceof Waterloggable){
|
||||||
|
$this->getWaterState()?->position($world, $x, $y, $z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,7 +73,7 @@ class BlockBreakInfo{
|
|||||||
return new self(0.0, $toolType, $toolHarvestLevel, 0.0);
|
return new self(0.0, $toolType, $toolHarvestLevel, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function indestructible(float $blastResistance = 18000003.75) : self{
|
public static function indestructible(float $blastResistance = 18000000.0) : self{
|
||||||
return new self(-1.0, BlockToolType::NONE, 0, $blastResistance);
|
return new self(-1.0, BlockToolType::NONE, 0, $blastResistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -786,9 +786,8 @@ final class BlockTypeIds{
|
|||||||
public const RESIN_BRICKS = 10756;
|
public const RESIN_BRICKS = 10756;
|
||||||
public const RESIN_CLUMP = 10757;
|
public const RESIN_CLUMP = 10757;
|
||||||
public const CHISELED_RESIN_BRICKS = 10758;
|
public const CHISELED_RESIN_BRICKS = 10758;
|
||||||
public const RESPAWN_ANCHOR = 10759;
|
|
||||||
|
|
||||||
public const FIRST_UNUSED_BLOCK_ID = 10760;
|
public const FIRST_UNUSED_BLOCK_ID = 10759;
|
||||||
|
|
||||||
private static int $nextDynamicId = self::FIRST_UNUSED_BLOCK_ID;
|
private static int $nextDynamicId = self::FIRST_UNUSED_BLOCK_ID;
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ namespace pocketmine\block;
|
|||||||
use pocketmine\block\utils\BlockEventHelper;
|
use pocketmine\block\utils\BlockEventHelper;
|
||||||
use pocketmine\block\utils\MinimumCostFlowCalculator;
|
use pocketmine\block\utils\MinimumCostFlowCalculator;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
|
use pocketmine\block\utils\Waterloggable;
|
||||||
use pocketmine\data\runtime\RuntimeDataDescriber;
|
use pocketmine\data\runtime\RuntimeDataDescriber;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\event\block\BlockSpreadEvent;
|
use pocketmine\event\block\BlockSpreadEvent;
|
||||||
@ -140,6 +141,9 @@ abstract class Liquid extends Transparent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function getEffectiveFlowDecay(Block $block) : int{
|
protected function getEffectiveFlowDecay(Block $block) : int{
|
||||||
|
if($block instanceof Waterloggable){
|
||||||
|
$block = $block->getWaterState() ?? $block;
|
||||||
|
}
|
||||||
if(!($block instanceof Liquid) || !$block->hasSameTypeId($this)){
|
if(!($block instanceof Liquid) || !$block->hasSameTypeId($this)){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -177,6 +181,9 @@ abstract class Liquid extends Transparent{
|
|||||||
$sideZ = $z + $dz;
|
$sideZ = $z + $dz;
|
||||||
|
|
||||||
$sideBlock = $world->getBlockAt($sideX, $sideY, $sideZ);
|
$sideBlock = $world->getBlockAt($sideX, $sideY, $sideZ);
|
||||||
|
if($sideBlock instanceof Waterloggable){
|
||||||
|
$sideBlock = $sideBlock->getWaterState() ?? $sideBlock;
|
||||||
|
}
|
||||||
$blockDecay = $this->getEffectiveFlowDecay($sideBlock);
|
$blockDecay = $this->getEffectiveFlowDecay($sideBlock);
|
||||||
|
|
||||||
if($blockDecay < 0){
|
if($blockDecay < 0){
|
||||||
@ -288,16 +295,27 @@ abstract class Liquid extends Transparent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($falling !== $this->falling || (!$falling && $newDecay !== $this->decay)){
|
if($falling !== $this->falling || (!$falling && $newDecay !== $this->decay)){
|
||||||
|
$actualBlock = $world->getBlockAt($x, $y, $z);
|
||||||
if(!$falling && $newDecay < 0){
|
if(!$falling && $newDecay < 0){
|
||||||
|
if($actualBlock instanceof Waterloggable && $this instanceof Water){
|
||||||
|
$actualBlock->setWaterState(null);
|
||||||
|
$world->setBlockAt($x, $y, $z, $actualBlock);
|
||||||
|
}else{
|
||||||
$world->setBlockAt($x, $y, $z, VanillaBlocks::AIR());
|
$world->setBlockAt($x, $y, $z, VanillaBlocks::AIR());
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->falling = $falling;
|
$this->falling = $falling;
|
||||||
$this->decay = $falling ? 0 : $newDecay;
|
$this->decay = $falling ? 0 : $newDecay;
|
||||||
|
if($actualBlock instanceof Waterloggable && $this instanceof Water){
|
||||||
|
$actualBlock->setWaterState($this);
|
||||||
|
$world->setBlockAt($x, $y, $z, $actualBlock);
|
||||||
|
}else{
|
||||||
$world->setBlockAt($x, $y, $z, $this); //local block update will cause an update to be scheduled
|
$world->setBlockAt($x, $y, $z, $this); //local block update will cause an update to be scheduled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$bottomBlock = $world->getBlockAt($x, $y - 1, $z);
|
$bottomBlock = $world->getBlockAt($x, $y - 1, $z);
|
||||||
|
|
||||||
@ -343,6 +361,9 @@ abstract class Liquid extends Transparent{
|
|||||||
|
|
||||||
/** @phpstan-impure */
|
/** @phpstan-impure */
|
||||||
private function getSmallestFlowDecay(Block $block, int $decay) : int{
|
private function getSmallestFlowDecay(Block $block, int $decay) : int{
|
||||||
|
if($block instanceof Waterloggable){
|
||||||
|
$block = $block->getWaterState() ?? $block;
|
||||||
|
}
|
||||||
if(!($block instanceof Liquid) || !$block->hasSameTypeId($this)){
|
if(!($block instanceof Liquid) || !$block->hasSameTypeId($this)){
|
||||||
return $decay;
|
return $decay;
|
||||||
}
|
}
|
||||||
@ -370,6 +391,9 @@ abstract class Liquid extends Transparent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function canFlowInto(Block $block) : bool{
|
protected function canFlowInto(Block $block) : bool{
|
||||||
|
if($block instanceof Waterloggable){
|
||||||
|
$block = $block->getWaterState() ?? $block;
|
||||||
|
}
|
||||||
return
|
return
|
||||||
$this->position->getWorld()->isInWorld($block->position->x, $block->position->y, $block->position->z) &&
|
$this->position->getWorld()->isInWorld($block->position->x, $block->position->y, $block->position->z) &&
|
||||||
$block->canBeFlowedInto() &&
|
$block->canBeFlowedInto() &&
|
||||||
|
@ -1,123 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace pocketmine\block;
|
|
||||||
|
|
||||||
use pocketmine\data\runtime\RuntimeDataDescriber;
|
|
||||||
use pocketmine\event\block\BlockPreExplodeEvent;
|
|
||||||
use pocketmine\event\player\PlayerRespawnAnchorUseEvent;
|
|
||||||
use pocketmine\item\Item;
|
|
||||||
use pocketmine\item\ItemTypeIds;
|
|
||||||
use pocketmine\lang\KnownTranslationFactory;
|
|
||||||
use pocketmine\math\Vector3;
|
|
||||||
use pocketmine\player\Player;
|
|
||||||
use pocketmine\utils\TextFormat;
|
|
||||||
use pocketmine\world\Explosion;
|
|
||||||
use pocketmine\world\Position;
|
|
||||||
use pocketmine\world\sound\RespawnAnchorChargeSound;
|
|
||||||
use pocketmine\world\sound\RespawnAnchorSetSpawnSound;
|
|
||||||
|
|
||||||
final class RespawnAnchor extends Opaque{
|
|
||||||
private const MIN_CHARGES = 0;
|
|
||||||
private const MAX_CHARGES = 4;
|
|
||||||
|
|
||||||
private int $charges = self::MIN_CHARGES;
|
|
||||||
|
|
||||||
protected function describeBlockOnlyState(RuntimeDataDescriber $w) : void{
|
|
||||||
$w->boundedIntAuto(self::MIN_CHARGES, self::MAX_CHARGES, $this->charges);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCharges() : int{
|
|
||||||
return $this->charges;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return $this */
|
|
||||||
public function setCharges(int $charges) : self{
|
|
||||||
if($charges < self::MIN_CHARGES || $charges > self::MAX_CHARGES){
|
|
||||||
throw new \InvalidArgumentException("Charges must be between " . self::MIN_CHARGES . " and " . self::MAX_CHARGES . ", given: $charges");
|
|
||||||
}
|
|
||||||
$this->charges = $charges;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLightLevel() : int{
|
|
||||||
return $this->charges > 0 ? ($this->charges * 4) - 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{
|
|
||||||
if($item->getTypeId() === ItemTypeIds::fromBlockTypeId(BlockTypeIds::GLOWSTONE) && $this->charges < self::MAX_CHARGES){
|
|
||||||
$this->position->getWorld()->setBlock($this->position, $this->setCharges($this->charges + 1));
|
|
||||||
$this->position->getWorld()->addSound($this->position, new RespawnAnchorChargeSound());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($this->charges > self::MIN_CHARGES){
|
|
||||||
if($player === null){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$ev = new PlayerRespawnAnchorUseEvent($player, $this, PlayerRespawnAnchorUseEvent::ACTION_EXPLODE);
|
|
||||||
$ev->call();
|
|
||||||
if($ev->isCancelled()){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch($ev->getAction()){
|
|
||||||
case PlayerRespawnAnchorUseEvent::ACTION_EXPLODE:
|
|
||||||
$this->explode($player);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case PlayerRespawnAnchorUseEvent::ACTION_SET_SPAWN:
|
|
||||||
if($player->getSpawn() !== null && $player->getSpawn()->equals($this->position)){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$player->setSpawn($this->position);
|
|
||||||
$this->position->getWorld()->addSound($this->position, new RespawnAnchorSetSpawnSound());
|
|
||||||
$player->sendMessage(KnownTranslationFactory::tile_respawn_anchor_respawnSet()->prefix(TextFormat::GRAY));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function explode(?Player $player) : void{
|
|
||||||
$ev = new BlockPreExplodeEvent($this, 5, $player);
|
|
||||||
$ev->setIncendiary(true);
|
|
||||||
|
|
||||||
$ev->call();
|
|
||||||
if($ev->isCancelled()){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->position->getWorld()->setBlock($this->position, VanillaBlocks::AIR());
|
|
||||||
|
|
||||||
$explosion = new Explosion(Position::fromObject($this->position->add(0.5, 0.5, 0.5), $this->position->getWorld()), $ev->getRadius(), $this);
|
|
||||||
$explosion->setFireChance($ev->getFireChance());
|
|
||||||
|
|
||||||
if($ev->isBlockBreaking()){
|
|
||||||
$explosion->explodeA();
|
|
||||||
}
|
|
||||||
$explosion->explodeB();
|
|
||||||
}
|
|
||||||
}
|
|
@ -26,6 +26,8 @@ namespace pocketmine\block;
|
|||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\StairShape;
|
use pocketmine\block\utils\StairShape;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
|
use pocketmine\block\utils\Waterloggable;
|
||||||
|
use pocketmine\block\utils\WaterloggableTrait;
|
||||||
use pocketmine\data\runtime\RuntimeDataDescriber;
|
use pocketmine\data\runtime\RuntimeDataDescriber;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
@ -35,8 +37,11 @@ use pocketmine\math\Vector3;
|
|||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
class Stair extends Transparent{
|
class Stair extends Transparent implements Waterloggable{
|
||||||
use HorizontalFacingTrait;
|
use HorizontalFacingTrait;
|
||||||
|
use WaterloggableTrait {
|
||||||
|
WaterloggableTrait::readStateFromWorld as private readWaterStateFromWorld;
|
||||||
|
}
|
||||||
|
|
||||||
protected bool $upsideDown = false;
|
protected bool $upsideDown = false;
|
||||||
protected StairShape $shape = StairShape::STRAIGHT;
|
protected StairShape $shape = StairShape::STRAIGHT;
|
||||||
@ -48,6 +53,7 @@ class Stair extends Transparent{
|
|||||||
|
|
||||||
public function readStateFromWorld() : Block{
|
public function readStateFromWorld() : Block{
|
||||||
parent::readStateFromWorld();
|
parent::readStateFromWorld();
|
||||||
|
$this->readWaterStateFromWorld();
|
||||||
|
|
||||||
$this->collisionBoxes = null;
|
$this->collisionBoxes = null;
|
||||||
|
|
||||||
@ -131,7 +137,19 @@ class Stair extends Transparent{
|
|||||||
$this->facing = $player->getHorizontalFacing();
|
$this->facing = $player->getHorizontalFacing();
|
||||||
}
|
}
|
||||||
$this->upsideDown = (($clickVector->y > 0.5 && $face !== Facing::UP) || $face === Facing::DOWN);
|
$this->upsideDown = (($clickVector->y > 0.5 && $face !== Facing::UP) || $face === Facing::DOWN);
|
||||||
|
if($blockReplace instanceof Water && $blockReplace->isSource()){
|
||||||
|
$this->waterState = $blockReplace;
|
||||||
|
}
|
||||||
|
|
||||||
return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player);
|
return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function onBreak(Item $item, ?Player $player = null, array &$returnedItems = []) : bool{
|
||||||
|
$ret = parent::onBreak($item, $player, $returnedItems);
|
||||||
|
if($this->waterState !== null){
|
||||||
|
$this->position->getWorld()->setBlock($this->position, $this->waterState);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,12 +25,11 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\utils\BlockEventHelper;
|
use pocketmine\block\utils\BlockEventHelper;
|
||||||
use pocketmine\block\utils\CropGrowthHelper;
|
use pocketmine\block\utils\CropGrowthHelper;
|
||||||
use pocketmine\block\utils\FortuneDropHelper;
|
|
||||||
use pocketmine\data\runtime\RuntimeDataDescriber;
|
use pocketmine\data\runtime\RuntimeDataDescriber;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\item\VanillaItems;
|
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use function array_rand;
|
use function array_rand;
|
||||||
|
use function mt_rand;
|
||||||
|
|
||||||
abstract class Stem extends Crops{
|
abstract class Stem extends Crops{
|
||||||
protected int $facing = Facing::UP;
|
protected int $facing = Facing::UP;
|
||||||
@ -91,10 +90,8 @@ abstract class Stem extends Crops{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getDropsForCompatibleTool(Item $item) : array{
|
public function getDropsForCompatibleTool(Item $item) : array{
|
||||||
//TODO: bit annoying we have to pass an Item instance here
|
|
||||||
//this should not be affected by Fortune, but still follows a binomial distribution
|
|
||||||
return [
|
return [
|
||||||
$this->asItem()->setCount(FortuneDropHelper::binomial(VanillaItems::AIR(), 0, chance: ($this->age + 1) / 15))
|
$this->asItem()->setCount(mt_rand(0, 2))
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,17 +58,10 @@ class SweetBerryBush extends Flowable{
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
protected function canBeSupportedBy(Block $block) : bool{
|
|
||||||
return $block->getTypeId() !== BlockTypeIds::FARMLAND && //bedrock-specific thing (bug?)
|
|
||||||
($block->hasTypeTag(BlockTypeTags::DIRT) || $block->hasTypeTag(BlockTypeTags::MUD));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function canBeSupportedAt(Block $block) : bool{
|
private function canBeSupportedAt(Block $block) : bool{
|
||||||
$supportBlock = $block->getSide(Facing::DOWN);
|
$supportBlock = $block->getSide(Facing::DOWN);
|
||||||
return $this->canBeSupportedBy($supportBlock);
|
return $supportBlock->getTypeId() !== BlockTypeIds::FARMLAND && //bedrock-specific thing (bug?)
|
||||||
|
($supportBlock->hasTypeTag(BlockTypeTags::DIRT) || $supportBlock->hasTypeTag(BlockTypeTags::MUD));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{
|
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{
|
||||||
|
@ -694,7 +694,6 @@ use function strtolower;
|
|||||||
* @method static Stair RESIN_BRICK_STAIRS()
|
* @method static Stair RESIN_BRICK_STAIRS()
|
||||||
* @method static Wall RESIN_BRICK_WALL()
|
* @method static Wall RESIN_BRICK_WALL()
|
||||||
* @method static ResinClump RESIN_CLUMP()
|
* @method static ResinClump RESIN_CLUMP()
|
||||||
* @method static RespawnAnchor RESPAWN_ANCHOR()
|
|
||||||
* @method static DoublePlant ROSE_BUSH()
|
* @method static DoublePlant ROSE_BUSH()
|
||||||
* @method static Sand SAND()
|
* @method static Sand SAND()
|
||||||
* @method static Opaque SANDSTONE()
|
* @method static Opaque SANDSTONE()
|
||||||
@ -805,8 +804,8 @@ use function strtolower;
|
|||||||
* @method static Water WATER()
|
* @method static Water WATER()
|
||||||
* @method static WaterCauldron WATER_CAULDRON()
|
* @method static WaterCauldron WATER_CAULDRON()
|
||||||
* @method static NetherVines WEEPING_VINES()
|
* @method static NetherVines WEEPING_VINES()
|
||||||
* @method static WeightedPressurePlateHeavy WEIGHTED_PRESSURE_PLATE_HEAVY()
|
* @method static WeightedPressurePlate WEIGHTED_PRESSURE_PLATE_HEAVY()
|
||||||
* @method static WeightedPressurePlateLight WEIGHTED_PRESSURE_PLATE_LIGHT()
|
* @method static WeightedPressurePlate WEIGHTED_PRESSURE_PLATE_LIGHT()
|
||||||
* @method static Wheat WHEAT()
|
* @method static Wheat WHEAT()
|
||||||
* @method static Flower WHITE_TULIP()
|
* @method static Flower WHITE_TULIP()
|
||||||
* @method static WitherRose WITHER_ROSE()
|
* @method static WitherRose WITHER_ROSE()
|
||||||
@ -860,7 +859,7 @@ final class VanillaBlocks{
|
|||||||
$railBreakInfo = new Info(new BreakInfo(0.7));
|
$railBreakInfo = new Info(new BreakInfo(0.7));
|
||||||
self::register("activator_rail", fn(BID $id) => new ActivatorRail($id, "Activator Rail", $railBreakInfo));
|
self::register("activator_rail", fn(BID $id) => new ActivatorRail($id, "Activator Rail", $railBreakInfo));
|
||||||
self::register("anvil", fn(BID $id) => new Anvil($id, "Anvil", new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 6000.0))));
|
self::register("anvil", fn(BID $id) => new Anvil($id, "Anvil", new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 6000.0))));
|
||||||
self::register("bamboo", fn(BID $id) => new Bamboo($id, "Bamboo", new Info(new class(1.0, ToolType::AXE) extends BreakInfo{
|
self::register("bamboo", fn(BID $id) => new Bamboo($id, "Bamboo", new Info(new class(2.0 /* 1.0 in PC */, ToolType::AXE) extends BreakInfo{
|
||||||
public function getBreakTime(Item $item) : float{
|
public function getBreakTime(Item $item) : float{
|
||||||
if($item->getBlockToolType() === ToolType::SWORD){
|
if($item->getBlockToolType() === ToolType::SWORD){
|
||||||
return 0.0;
|
return 0.0;
|
||||||
@ -868,7 +867,7 @@ final class VanillaBlocks{
|
|||||||
return parent::getBreakTime($item);
|
return parent::getBreakTime($item);
|
||||||
}
|
}
|
||||||
}, [Tags::POTTABLE_PLANTS])));
|
}, [Tags::POTTABLE_PLANTS])));
|
||||||
self::register("bamboo_sapling", fn(BID $id) => new BambooSapling($id, "Bamboo Sapling", new Info(new BreakInfo(1.0))));
|
self::register("bamboo_sapling", fn(BID $id) => new BambooSapling($id, "Bamboo Sapling", new Info(BreakInfo::instant())));
|
||||||
|
|
||||||
$bannerBreakInfo = new Info(BreakInfo::axe(1.0));
|
$bannerBreakInfo = new Info(BreakInfo::axe(1.0));
|
||||||
self::register("banner", fn(BID $id) => new FloorBanner($id, "Banner", $bannerBreakInfo), TileBanner::class);
|
self::register("banner", fn(BID $id) => new FloorBanner($id, "Banner", $bannerBreakInfo), TileBanner::class);
|
||||||
@ -877,7 +876,7 @@ final class VanillaBlocks{
|
|||||||
self::register("barrier", fn(BID $id) => new Transparent($id, "Barrier", new Info(BreakInfo::indestructible())));
|
self::register("barrier", fn(BID $id) => new Transparent($id, "Barrier", new Info(BreakInfo::indestructible())));
|
||||||
self::register("beacon", fn(BID $id) => new Beacon($id, "Beacon", new Info(new BreakInfo(3.0))), TileBeacon::class);
|
self::register("beacon", fn(BID $id) => new Beacon($id, "Beacon", new Info(new BreakInfo(3.0))), TileBeacon::class);
|
||||||
self::register("bed", fn(BID $id) => new Bed($id, "Bed Block", new Info(new BreakInfo(0.2))), TileBed::class);
|
self::register("bed", fn(BID $id) => new Bed($id, "Bed Block", new Info(new BreakInfo(0.2))), TileBed::class);
|
||||||
self::register("bedrock", fn(BID $id) => new Bedrock($id, "Bedrock", new Info(BreakInfo::indestructible(18000000.0))));
|
self::register("bedrock", fn(BID $id) => new Bedrock($id, "Bedrock", new Info(BreakInfo::indestructible())));
|
||||||
|
|
||||||
self::register("beetroots", fn(BID $id) => new Beetroot($id, "Beetroot Block", new Info(BreakInfo::instant())));
|
self::register("beetroots", fn(BID $id) => new Beetroot($id, "Beetroot Block", new Info(BreakInfo::instant())));
|
||||||
self::register("bell", fn(BID $id) => new Bell($id, "Bell", new Info(BreakInfo::pickaxe(5.0))), TileBell::class);
|
self::register("bell", fn(BID $id) => new Bell($id, "Bell", new Info(BreakInfo::pickaxe(5.0))), TileBell::class);
|
||||||
@ -914,7 +913,7 @@ final class VanillaBlocks{
|
|||||||
|
|
||||||
self::register("cobweb", fn(BID $id) => new Cobweb($id, "Cobweb", new Info(new BreakInfo(4.0, ToolType::SWORD | ToolType::SHEARS, 1))));
|
self::register("cobweb", fn(BID $id) => new Cobweb($id, "Cobweb", new Info(new BreakInfo(4.0, ToolType::SWORD | ToolType::SHEARS, 1))));
|
||||||
self::register("cocoa_pod", fn(BID $id) => new CocoaBlock($id, "Cocoa Block", new Info(BreakInfo::axe(0.2, null, 15.0))));
|
self::register("cocoa_pod", fn(BID $id) => new CocoaBlock($id, "Cocoa Block", new Info(BreakInfo::axe(0.2, null, 15.0))));
|
||||||
self::register("coral_block", fn(BID $id) => new CoralBlock($id, "Coral Block", new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0))));
|
self::register("coral_block", fn(BID $id) => new CoralBlock($id, "Coral Block", new Info(BreakInfo::pickaxe(7.0, ToolTier::WOOD))));
|
||||||
self::register("daylight_sensor", fn(BID $id) => new DaylightSensor($id, "Daylight Sensor", new Info(BreakInfo::axe(0.2))), TileDaylightSensor::class);
|
self::register("daylight_sensor", fn(BID $id) => new DaylightSensor($id, "Daylight Sensor", new Info(BreakInfo::axe(0.2))), TileDaylightSensor::class);
|
||||||
self::register("dead_bush", fn(BID $id) => new DeadBush($id, "Dead Bush", new Info(BreakInfo::instant(ToolType::SHEARS, 1), [Tags::POTTABLE_PLANTS])));
|
self::register("dead_bush", fn(BID $id) => new DeadBush($id, "Dead Bush", new Info(BreakInfo::instant(ToolType::SHEARS, 1), [Tags::POTTABLE_PLANTS])));
|
||||||
self::register("detector_rail", fn(BID $id) => new DetectorRail($id, "Detector Rail", $railBreakInfo));
|
self::register("detector_rail", fn(BID $id) => new DetectorRail($id, "Detector Rail", $railBreakInfo));
|
||||||
@ -931,15 +930,15 @@ final class VanillaBlocks{
|
|||||||
self::register("pitcher_plant", fn(BID $id) => new DoublePlant($id, "Pitcher Plant", new Info(BreakInfo::instant())));
|
self::register("pitcher_plant", fn(BID $id) => new DoublePlant($id, "Pitcher Plant", new Info(BreakInfo::instant())));
|
||||||
self::register("pitcher_crop", fn(BID $id) => new PitcherCrop($id, "Pitcher Crop", new Info(BreakInfo::instant())));
|
self::register("pitcher_crop", fn(BID $id) => new PitcherCrop($id, "Pitcher Crop", new Info(BreakInfo::instant())));
|
||||||
self::register("double_pitcher_crop", fn(BID $id) => new DoublePitcherCrop($id, "Double Pitcher Crop", new Info(BreakInfo::instant())));
|
self::register("double_pitcher_crop", fn(BID $id) => new DoublePitcherCrop($id, "Double Pitcher Crop", new Info(BreakInfo::instant())));
|
||||||
self::register("dragon_egg", fn(BID $id) => new DragonEgg($id, "Dragon Egg", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, blastResistance: 45.0))));
|
self::register("dragon_egg", fn(BID $id) => new DragonEgg($id, "Dragon Egg", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD))));
|
||||||
self::register("dried_kelp", fn(BID $id) => new DriedKelp($id, "Dried Kelp Block", new Info(new BreakInfo(0.5, ToolType::NONE, 0, 12.5))));
|
self::register("dried_kelp", fn(BID $id) => new DriedKelp($id, "Dried Kelp Block", new Info(new BreakInfo(0.5, ToolType::NONE, 0, 12.5))));
|
||||||
self::register("emerald", fn(BID $id) => new Opaque($id, "Emerald Block", new Info(BreakInfo::pickaxe(5.0, ToolTier::IRON, 30.0))));
|
self::register("emerald", fn(BID $id) => new Opaque($id, "Emerald Block", new Info(BreakInfo::pickaxe(5.0, ToolTier::IRON, 30.0))));
|
||||||
self::register("enchanting_table", fn(BID $id) => new EnchantingTable($id, "Enchanting Table", new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 6000.0))), TileEnchantingTable::class);
|
self::register("enchanting_table", fn(BID $id) => new EnchantingTable($id, "Enchanting Table", new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 6000.0))), TileEnchantingTable::class);
|
||||||
self::register("end_portal_frame", fn(BID $id) => new EndPortalFrame($id, "End Portal Frame", new Info(BreakInfo::indestructible(18000000.0))));
|
self::register("end_portal_frame", fn(BID $id) => new EndPortalFrame($id, "End Portal Frame", new Info(BreakInfo::indestructible())));
|
||||||
self::register("end_rod", fn(BID $id) => new EndRod($id, "End Rod", new Info(BreakInfo::instant())));
|
self::register("end_rod", fn(BID $id) => new EndRod($id, "End Rod", new Info(BreakInfo::instant())));
|
||||||
self::register("end_stone", fn(BID $id) => new Opaque($id, "End Stone", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 45.0))));
|
self::register("end_stone", fn(BID $id) => new Opaque($id, "End Stone", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 45.0))));
|
||||||
|
|
||||||
$endBrickBreakInfo = new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 45.0));
|
$endBrickBreakInfo = new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD, 4.0));
|
||||||
self::register("end_stone_bricks", fn(BID $id) => new Opaque($id, "End Stone Bricks", $endBrickBreakInfo));
|
self::register("end_stone_bricks", fn(BID $id) => new Opaque($id, "End Stone Bricks", $endBrickBreakInfo));
|
||||||
self::register("end_stone_brick_stairs", fn(BID $id) => new Stair($id, "End Stone Brick Stairs", $endBrickBreakInfo));
|
self::register("end_stone_brick_stairs", fn(BID $id) => new Stair($id, "End Stone Brick Stairs", $endBrickBreakInfo));
|
||||||
|
|
||||||
@ -963,7 +962,7 @@ final class VanillaBlocks{
|
|||||||
self::register("torchflower", fn(BID $id) => new Flower($id, "Torchflower", $flowerTypeInfo));
|
self::register("torchflower", fn(BID $id) => new Flower($id, "Torchflower", $flowerTypeInfo));
|
||||||
self::register("torchflower_crop", fn(BID $id) => new TorchflowerCrop($id, "Torchflower Crop", new Info(BreakInfo::instant())));
|
self::register("torchflower_crop", fn(BID $id) => new TorchflowerCrop($id, "Torchflower Crop", new Info(BreakInfo::instant())));
|
||||||
self::register("flower_pot", fn(BID $id) => new FlowerPot($id, "Flower Pot", new Info(BreakInfo::instant())), TileFlowerPot::class);
|
self::register("flower_pot", fn(BID $id) => new FlowerPot($id, "Flower Pot", new Info(BreakInfo::instant())), TileFlowerPot::class);
|
||||||
self::register("frosted_ice", fn(BID $id) => new FrostedIce($id, "Frosted Ice", new Info(BreakInfo::pickaxe(0.5))));
|
self::register("frosted_ice", fn(BID $id) => new FrostedIce($id, "Frosted Ice", new Info(BreakInfo::pickaxe(2.5))));
|
||||||
self::register("furnace", fn(BID $id) => new Furnace($id, "Furnace", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::FURNACE), TileNormalFurnace::class);
|
self::register("furnace", fn(BID $id) => new Furnace($id, "Furnace", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::FURNACE), TileNormalFurnace::class);
|
||||||
self::register("blast_furnace", fn(BID $id) => new Furnace($id, "Blast Furnace", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::BLAST_FURNACE), TileBlastFurnace::class);
|
self::register("blast_furnace", fn(BID $id) => new Furnace($id, "Blast Furnace", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::BLAST_FURNACE), TileBlastFurnace::class);
|
||||||
self::register("smoker", fn(BID $id) => new Furnace($id, "Smoker", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::SMOKER), TileSmoker::class);
|
self::register("smoker", fn(BID $id) => new Furnace($id, "Smoker", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD)), FurnaceType::SMOKER), TileSmoker::class);
|
||||||
@ -971,28 +970,30 @@ final class VanillaBlocks{
|
|||||||
$glassBreakInfo = new Info(new BreakInfo(0.3));
|
$glassBreakInfo = new Info(new BreakInfo(0.3));
|
||||||
self::register("glass", fn(BID $id) => new Glass($id, "Glass", $glassBreakInfo));
|
self::register("glass", fn(BID $id) => new Glass($id, "Glass", $glassBreakInfo));
|
||||||
self::register("glass_pane", fn(BID $id) => new GlassPane($id, "Glass Pane", $glassBreakInfo));
|
self::register("glass_pane", fn(BID $id) => new GlassPane($id, "Glass Pane", $glassBreakInfo));
|
||||||
self::register("glowing_obsidian", fn(BID $id) => new GlowingObsidian($id, "Glowing Obsidian", new Info(BreakInfo::pickaxe(35.0, ToolTier::DIAMOND, 6000.0))));
|
self::register("glowing_obsidian", fn(BID $id) => new GlowingObsidian($id, "Glowing Obsidian", new Info(BreakInfo::pickaxe(10.0, ToolTier::DIAMOND, 50.0))));
|
||||||
self::register("glowstone", fn(BID $id) => new Glowstone($id, "Glowstone", new Info(BreakInfo::pickaxe(0.3))));
|
self::register("glowstone", fn(BID $id) => new Glowstone($id, "Glowstone", new Info(BreakInfo::pickaxe(0.3))));
|
||||||
self::register("glow_lichen", fn(BID $id) => new GlowLichen($id, "Glow Lichen", new Info(BreakInfo::axe(0.2))));
|
self::register("glow_lichen", fn(BID $id) => new GlowLichen($id, "Glow Lichen", new Info(BreakInfo::axe(0.2, null, 0.2))));
|
||||||
self::register("gold", fn(BID $id) => new Opaque($id, "Gold Block", new Info(BreakInfo::pickaxe(3.0, ToolTier::IRON, 30.0))));
|
self::register("gold", fn(BID $id) => new Opaque($id, "Gold Block", new Info(BreakInfo::pickaxe(3.0, ToolTier::IRON, 30.0))));
|
||||||
|
|
||||||
self::register("grass", fn(BID $id) => new Grass($id, "Grass", new Info(BreakInfo::shovel(0.6), [Tags::DIRT])));
|
$grassBreakInfo = BreakInfo::shovel(0.6);
|
||||||
self::register("grass_path", fn(BID $id) => new GrassPath($id, "Grass Path", new Info(BreakInfo::shovel(0.65))));
|
self::register("grass", fn(BID $id) => new Grass($id, "Grass", new Info($grassBreakInfo, [Tags::DIRT])));
|
||||||
|
self::register("grass_path", fn(BID $id) => new GrassPath($id, "Grass Path", new Info($grassBreakInfo)));
|
||||||
self::register("gravel", fn(BID $id) => new Gravel($id, "Gravel", new Info(BreakInfo::shovel(0.6))));
|
self::register("gravel", fn(BID $id) => new Gravel($id, "Gravel", new Info(BreakInfo::shovel(0.6))));
|
||||||
|
|
||||||
self::register("hardened_clay", fn(BID $id) => new HardenedClay($id, "Hardened Clay", new Info(BreakInfo::pickaxe(1.25, ToolTier::WOOD, 21.0))));
|
$hardenedClayBreakInfo = new Info(BreakInfo::pickaxe(1.25, ToolTier::WOOD, 21.0));
|
||||||
|
self::register("hardened_clay", fn(BID $id) => new HardenedClay($id, "Hardened Clay", $hardenedClayBreakInfo));
|
||||||
|
|
||||||
$hardenedGlassBreakInfo = new Info(new BreakInfo(10.0));
|
$hardenedGlassBreakInfo = new Info(new BreakInfo(10.0));
|
||||||
self::register("hardened_glass", fn(BID $id) => new HardenedGlass($id, "Hardened Glass", $hardenedGlassBreakInfo));
|
self::register("hardened_glass", fn(BID $id) => new HardenedGlass($id, "Hardened Glass", $hardenedGlassBreakInfo));
|
||||||
self::register("hardened_glass_pane", fn(BID $id) => new HardenedGlassPane($id, "Hardened Glass Pane", $hardenedGlassBreakInfo));
|
self::register("hardened_glass_pane", fn(BID $id) => new HardenedGlassPane($id, "Hardened Glass Pane", $hardenedGlassBreakInfo));
|
||||||
self::register("hay_bale", fn(BID $id) => new HayBale($id, "Hay Bale", new Info(new BreakInfo(0.5))));
|
self::register("hay_bale", fn(BID $id) => new HayBale($id, "Hay Bale", new Info(new BreakInfo(0.5))));
|
||||||
self::register("hopper", fn(BID $id) => new Hopper($id, "Hopper", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 24.0))), TileHopper::class);
|
self::register("hopper", fn(BID $id) => new Hopper($id, "Hopper", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 15.0))), TileHopper::class);
|
||||||
self::register("ice", fn(BID $id) => new Ice($id, "Ice", new Info(BreakInfo::pickaxe(0.5))));
|
self::register("ice", fn(BID $id) => new Ice($id, "Ice", new Info(BreakInfo::pickaxe(0.5))));
|
||||||
|
|
||||||
$updateBlockBreakInfo = new Info(new BreakInfo(1.0));
|
$updateBlockBreakInfo = new Info(new BreakInfo(1.0));
|
||||||
self::register("info_update", fn(BID $id) => new Opaque($id, "update!", $updateBlockBreakInfo));
|
self::register("info_update", fn(BID $id) => new Opaque($id, "update!", $updateBlockBreakInfo));
|
||||||
self::register("info_update2", fn(BID $id) => new Opaque($id, "ate!upd", $updateBlockBreakInfo));
|
self::register("info_update2", fn(BID $id) => new Opaque($id, "ate!upd", $updateBlockBreakInfo));
|
||||||
self::register("invisible_bedrock", fn(BID $id) => new Transparent($id, "Invisible Bedrock", new Info(BreakInfo::indestructible(18000000.0))));
|
self::register("invisible_bedrock", fn(BID $id) => new Transparent($id, "Invisible Bedrock", new Info(BreakInfo::indestructible())));
|
||||||
|
|
||||||
$ironBreakInfo = new Info(BreakInfo::pickaxe(5.0, ToolTier::STONE, 30.0));
|
$ironBreakInfo = new Info(BreakInfo::pickaxe(5.0, ToolTier::STONE, 30.0));
|
||||||
self::register("iron", fn(BID $id) => new Opaque($id, "Iron Block", $ironBreakInfo));
|
self::register("iron", fn(BID $id) => new Opaque($id, "Iron Block", $ironBreakInfo));
|
||||||
@ -1005,16 +1006,16 @@ final class VanillaBlocks{
|
|||||||
self::register("item_frame", fn(BID $id) => new ItemFrame($id, "Item Frame", $itemFrameInfo), TileItemFrame::class);
|
self::register("item_frame", fn(BID $id) => new ItemFrame($id, "Item Frame", $itemFrameInfo), TileItemFrame::class);
|
||||||
self::register("glowing_item_frame", fn(BID $id) => new ItemFrame($id, "Glow Item Frame", $itemFrameInfo), TileGlowingItemFrame::class);
|
self::register("glowing_item_frame", fn(BID $id) => new ItemFrame($id, "Glow Item Frame", $itemFrameInfo), TileGlowingItemFrame::class);
|
||||||
|
|
||||||
self::register("jukebox", fn(BID $id) => new Jukebox($id, "Jukebox", new Info(BreakInfo::axe(2.0, blastResistance: 30.0))), TileJukebox::class);
|
self::register("jukebox", fn(BID $id) => new Jukebox($id, "Jukebox", new Info(BreakInfo::axe(0.8))), TileJukebox::class); //TODO: in PC the hardness is 2.0, not 0.8, unsure if this is a MCPE bug or not
|
||||||
self::register("ladder", fn(BID $id) => new Ladder($id, "Ladder", new Info(BreakInfo::axe(0.4))));
|
self::register("ladder", fn(BID $id) => new Ladder($id, "Ladder", new Info(BreakInfo::axe(0.4))));
|
||||||
|
|
||||||
$lanternBreakInfo = new Info(BreakInfo::pickaxe(3.5));
|
$lanternBreakInfo = new Info(BreakInfo::pickaxe(5.0));
|
||||||
self::register("lantern", fn(BID $id) => new Lantern($id, "Lantern", $lanternBreakInfo, 15));
|
self::register("lantern", fn(BID $id) => new Lantern($id, "Lantern", $lanternBreakInfo, 15));
|
||||||
self::register("soul_lantern", fn(BID $id) => new Lantern($id, "Soul Lantern", $lanternBreakInfo, 10));
|
self::register("soul_lantern", fn(BID $id) => new Lantern($id, "Soul Lantern", $lanternBreakInfo, 10));
|
||||||
|
|
||||||
self::register("lapis_lazuli", fn(BID $id) => new Opaque($id, "Lapis Lazuli Block", new Info(BreakInfo::pickaxe(3.0, ToolTier::STONE))));
|
self::register("lapis_lazuli", fn(BID $id) => new Opaque($id, "Lapis Lazuli Block", new Info(BreakInfo::pickaxe(3.0, ToolTier::STONE))));
|
||||||
self::register("lava", fn(BID $id) => new Lava($id, "Lava", new Info(BreakInfo::indestructible(500.0))));
|
self::register("lava", fn(BID $id) => new Lava($id, "Lava", new Info(BreakInfo::indestructible(500.0))));
|
||||||
self::register("lectern", fn(BID $id) => new Lectern($id, "Lectern", new Info(BreakInfo::axe(2.5))), TileLectern::class);
|
self::register("lectern", fn(BID $id) => new Lectern($id, "Lectern", new Info(BreakInfo::axe(2.0))), TileLectern::class);
|
||||||
self::register("lever", fn(BID $id) => new Lever($id, "Lever", new Info(new BreakInfo(0.5))));
|
self::register("lever", fn(BID $id) => new Lever($id, "Lever", new Info(new BreakInfo(0.5))));
|
||||||
self::register("magma", fn(BID $id) => new Magma($id, "Magma Block", new Info(BreakInfo::pickaxe(0.5, ToolTier::WOOD))));
|
self::register("magma", fn(BID $id) => new Magma($id, "Magma Block", new Info(BreakInfo::pickaxe(0.5, ToolTier::WOOD))));
|
||||||
self::register("melon", fn(BID $id) => new Melon($id, "Melon Block", new Info(BreakInfo::axe(1.0))));
|
self::register("melon", fn(BID $id) => new Melon($id, "Melon Block", new Info(BreakInfo::axe(1.0))));
|
||||||
@ -1064,15 +1065,14 @@ final class VanillaBlocks{
|
|||||||
self::register("purpur_stairs", fn(BID $id) => new Stair($id, "Purpur Stairs", $purpurBreakInfo));
|
self::register("purpur_stairs", fn(BID $id) => new Stair($id, "Purpur Stairs", $purpurBreakInfo));
|
||||||
|
|
||||||
$quartzBreakInfo = new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD));
|
$quartzBreakInfo = new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD));
|
||||||
$smoothQuartzBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
|
||||||
self::register("quartz", fn(BID $id) => new Opaque($id, "Quartz Block", $quartzBreakInfo));
|
self::register("quartz", fn(BID $id) => new Opaque($id, "Quartz Block", $quartzBreakInfo));
|
||||||
self::register("chiseled_quartz", fn(BID $id) => new SimplePillar($id, "Chiseled Quartz Block", $quartzBreakInfo));
|
self::register("chiseled_quartz", fn(BID $id) => new SimplePillar($id, "Chiseled Quartz Block", $quartzBreakInfo));
|
||||||
self::register("quartz_pillar", fn(BID $id) => new SimplePillar($id, "Quartz Pillar", $quartzBreakInfo));
|
self::register("quartz_pillar", fn(BID $id) => new SimplePillar($id, "Quartz Pillar", $quartzBreakInfo));
|
||||||
self::register("smooth_quartz", fn(BID $id) => new Opaque($id, "Smooth Quartz Block", $smoothQuartzBreakInfo));
|
self::register("smooth_quartz", fn(BID $id) => new Opaque($id, "Smooth Quartz Block", $quartzBreakInfo));
|
||||||
self::register("quartz_bricks", fn(BID $id) => new Opaque($id, "Quartz Bricks", $quartzBreakInfo));
|
self::register("quartz_bricks", fn(BID $id) => new Opaque($id, "Quartz Bricks", $quartzBreakInfo));
|
||||||
|
|
||||||
self::register("quartz_stairs", fn(BID $id) => new Stair($id, "Quartz Stairs", $quartzBreakInfo));
|
self::register("quartz_stairs", fn(BID $id) => new Stair($id, "Quartz Stairs", $quartzBreakInfo));
|
||||||
self::register("smooth_quartz_stairs", fn(BID $id) => new Stair($id, "Smooth Quartz Stairs", $smoothQuartzBreakInfo));
|
self::register("smooth_quartz_stairs", fn(BID $id) => new Stair($id, "Smooth Quartz Stairs", $quartzBreakInfo));
|
||||||
|
|
||||||
self::register("rail", fn(BID $id) => new Rail($id, "Rail", $railBreakInfo));
|
self::register("rail", fn(BID $id) => new Rail($id, "Rail", $railBreakInfo));
|
||||||
self::register("red_mushroom", fn(BID $id) => new RedMushroom($id, "Red Mushroom", new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS])));
|
self::register("red_mushroom", fn(BID $id) => new RedMushroom($id, "Red Mushroom", new Info(BreakInfo::instant(), [Tags::POTTABLE_PLANTS])));
|
||||||
@ -1127,13 +1127,13 @@ final class VanillaBlocks{
|
|||||||
$infestedStoneBreakInfo = new Info(BreakInfo::pickaxe(0.75));
|
$infestedStoneBreakInfo = new Info(BreakInfo::pickaxe(0.75));
|
||||||
self::register("infested_stone", fn(BID $id) => new InfestedStone($id, "Infested Stone", $infestedStoneBreakInfo, $stone));
|
self::register("infested_stone", fn(BID $id) => new InfestedStone($id, "Infested Stone", $infestedStoneBreakInfo, $stone));
|
||||||
self::register("infested_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Stone Brick", $infestedStoneBreakInfo, $stoneBrick));
|
self::register("infested_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Stone Brick", $infestedStoneBreakInfo, $stoneBrick));
|
||||||
self::register("infested_cobblestone", fn(BID $id) => new InfestedStone($id, "Infested Cobblestone", new Info(BreakInfo::pickaxe(1.0, blastResistance: 3.75)), $cobblestone));
|
self::register("infested_cobblestone", fn(BID $id) => new InfestedStone($id, "Infested Cobblestone", $infestedStoneBreakInfo, $cobblestone));
|
||||||
self::register("infested_mossy_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Mossy Stone Brick", $infestedStoneBreakInfo, $mossyStoneBrick));
|
self::register("infested_mossy_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Mossy Stone Brick", $infestedStoneBreakInfo, $mossyStoneBrick));
|
||||||
self::register("infested_cracked_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Cracked Stone Brick", $infestedStoneBreakInfo, $crackedStoneBrick));
|
self::register("infested_cracked_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Cracked Stone Brick", $infestedStoneBreakInfo, $crackedStoneBrick));
|
||||||
self::register("infested_chiseled_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Chiseled Stone Brick", $infestedStoneBreakInfo, $chiseledStoneBrick));
|
self::register("infested_chiseled_stone_brick", fn(BID $id) => new InfestedStone($id, "Infested Chiseled Stone Brick", $infestedStoneBreakInfo, $chiseledStoneBrick));
|
||||||
|
|
||||||
self::register("stone_stairs", fn(BID $id) => new Stair($id, "Stone Stairs", $stoneBreakInfo));
|
self::register("stone_stairs", fn(BID $id) => new Stair($id, "Stone Stairs", $stoneBreakInfo));
|
||||||
self::register("smooth_stone", fn(BID $id) => new Opaque($id, "Smooth Stone", new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0))));
|
self::register("smooth_stone", fn(BID $id) => new Opaque($id, "Smooth Stone", $stoneBreakInfo));
|
||||||
self::register("andesite_stairs", fn(BID $id) => new Stair($id, "Andesite Stairs", $stoneBreakInfo));
|
self::register("andesite_stairs", fn(BID $id) => new Stair($id, "Andesite Stairs", $stoneBreakInfo));
|
||||||
self::register("diorite_stairs", fn(BID $id) => new Stair($id, "Diorite Stairs", $stoneBreakInfo));
|
self::register("diorite_stairs", fn(BID $id) => new Stair($id, "Diorite Stairs", $stoneBreakInfo));
|
||||||
self::register("granite_stairs", fn(BID $id) => new Stair($id, "Granite Stairs", $stoneBreakInfo));
|
self::register("granite_stairs", fn(BID $id) => new Stair($id, "Granite Stairs", $stoneBreakInfo));
|
||||||
@ -1146,6 +1146,7 @@ final class VanillaBlocks{
|
|||||||
self::register("stonecutter", fn(BID $id) => new Stonecutter($id, "Stonecutter", new Info(BreakInfo::pickaxe(3.5))));
|
self::register("stonecutter", fn(BID $id) => new Stonecutter($id, "Stonecutter", new Info(BreakInfo::pickaxe(3.5))));
|
||||||
self::register("stone_pressure_plate", fn(BID $id) => new StonePressurePlate($id, "Stone Pressure Plate", new Info(BreakInfo::pickaxe(0.5))));
|
self::register("stone_pressure_plate", fn(BID $id) => new StonePressurePlate($id, "Stone Pressure Plate", new Info(BreakInfo::pickaxe(0.5))));
|
||||||
|
|
||||||
|
//TODO: in the future this won't be the same for all the types
|
||||||
$stoneSlabBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
$stoneSlabBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
||||||
|
|
||||||
self::register("brick_slab", fn(BID $id) => new Slab($id, "Brick", $stoneSlabBreakInfo));
|
self::register("brick_slab", fn(BID $id) => new Slab($id, "Brick", $stoneSlabBreakInfo));
|
||||||
@ -1156,31 +1157,28 @@ final class VanillaBlocks{
|
|||||||
self::register("sandstone_slab", fn(BID $id) => new Slab($id, "Sandstone", $stoneSlabBreakInfo));
|
self::register("sandstone_slab", fn(BID $id) => new Slab($id, "Sandstone", $stoneSlabBreakInfo));
|
||||||
self::register("smooth_stone_slab", fn(BID $id) => new Slab($id, "Smooth Stone", $stoneSlabBreakInfo));
|
self::register("smooth_stone_slab", fn(BID $id) => new Slab($id, "Smooth Stone", $stoneSlabBreakInfo));
|
||||||
self::register("stone_brick_slab", fn(BID $id) => new Slab($id, "Stone Brick", $stoneSlabBreakInfo));
|
self::register("stone_brick_slab", fn(BID $id) => new Slab($id, "Stone Brick", $stoneSlabBreakInfo));
|
||||||
|
self::register("dark_prismarine_slab", fn(BID $id) => new Slab($id, "Dark Prismarine", $stoneSlabBreakInfo));
|
||||||
|
self::register("mossy_cobblestone_slab", fn(BID $id) => new Slab($id, "Mossy Cobblestone", $stoneSlabBreakInfo));
|
||||||
|
self::register("prismarine_slab", fn(BID $id) => new Slab($id, "Prismarine", $stoneSlabBreakInfo));
|
||||||
|
self::register("prismarine_bricks_slab", fn(BID $id) => new Slab($id, "Prismarine Bricks", $stoneSlabBreakInfo));
|
||||||
|
self::register("purpur_slab", fn(BID $id) => new Slab($id, "Purpur", $stoneSlabBreakInfo));
|
||||||
self::register("red_nether_brick_slab", fn(BID $id) => new Slab($id, "Red Nether Brick", $stoneSlabBreakInfo));
|
self::register("red_nether_brick_slab", fn(BID $id) => new Slab($id, "Red Nether Brick", $stoneSlabBreakInfo));
|
||||||
self::register("red_sandstone_slab", fn(BID $id) => new Slab($id, "Red Sandstone", $stoneSlabBreakInfo));
|
self::register("red_sandstone_slab", fn(BID $id) => new Slab($id, "Red Sandstone", $stoneSlabBreakInfo));
|
||||||
self::register("smooth_sandstone_slab", fn(BID $id) => new Slab($id, "Smooth Sandstone", $stoneSlabBreakInfo));
|
self::register("smooth_sandstone_slab", fn(BID $id) => new Slab($id, "Smooth Sandstone", $stoneSlabBreakInfo));
|
||||||
|
self::register("andesite_slab", fn(BID $id) => new Slab($id, "Andesite", $stoneSlabBreakInfo));
|
||||||
|
self::register("diorite_slab", fn(BID $id) => new Slab($id, "Diorite", $stoneSlabBreakInfo));
|
||||||
|
self::register("end_stone_brick_slab", fn(BID $id) => new Slab($id, "End Stone Brick", $stoneSlabBreakInfo));
|
||||||
|
self::register("granite_slab", fn(BID $id) => new Slab($id, "Granite", $stoneSlabBreakInfo));
|
||||||
|
self::register("polished_andesite_slab", fn(BID $id) => new Slab($id, "Polished Andesite", $stoneSlabBreakInfo));
|
||||||
|
self::register("polished_diorite_slab", fn(BID $id) => new Slab($id, "Polished Diorite", $stoneSlabBreakInfo));
|
||||||
|
self::register("polished_granite_slab", fn(BID $id) => new Slab($id, "Polished Granite", $stoneSlabBreakInfo));
|
||||||
|
self::register("smooth_red_sandstone_slab", fn(BID $id) => new Slab($id, "Smooth Red Sandstone", $stoneSlabBreakInfo));
|
||||||
self::register("cut_red_sandstone_slab", fn(BID $id) => new Slab($id, "Cut Red Sandstone", $stoneSlabBreakInfo));
|
self::register("cut_red_sandstone_slab", fn(BID $id) => new Slab($id, "Cut Red Sandstone", $stoneSlabBreakInfo));
|
||||||
self::register("cut_sandstone_slab", fn(BID $id) => new Slab($id, "Cut Sandstone", $stoneSlabBreakInfo));
|
self::register("cut_sandstone_slab", fn(BID $id) => new Slab($id, "Cut Sandstone", $stoneSlabBreakInfo));
|
||||||
self::register("mossy_cobblestone_slab", fn(BID $id) => new Slab($id, "Mossy Cobblestone", $stoneSlabBreakInfo));
|
self::register("mossy_stone_brick_slab", fn(BID $id) => new Slab($id, "Mossy Stone Brick", $stoneSlabBreakInfo));
|
||||||
self::register("purpur_slab", fn(BID $id) => new Slab($id, "Purpur", $stoneSlabBreakInfo));
|
|
||||||
self::register("smooth_red_sandstone_slab", fn(BID $id) => new Slab($id, "Smooth Red Sandstone", $stoneSlabBreakInfo));
|
|
||||||
self::register("smooth_quartz_slab", fn(BID $id) => new Slab($id, "Smooth Quartz", $stoneSlabBreakInfo));
|
self::register("smooth_quartz_slab", fn(BID $id) => new Slab($id, "Smooth Quartz", $stoneSlabBreakInfo));
|
||||||
self::register("stone_slab", fn(BID $id) => new Slab($id, "Stone", $stoneSlabBreakInfo));
|
self::register("stone_slab", fn(BID $id) => new Slab($id, "Stone", $stoneSlabBreakInfo));
|
||||||
|
|
||||||
self::register("end_stone_brick_slab", fn(BID $id) => new Slab($id, "End Stone Brick", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 30.0))));
|
|
||||||
|
|
||||||
$lightStoneSlabBreakInfo = new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
|
|
||||||
self::register("dark_prismarine_slab", fn(BID $id) => new Slab($id, "Dark Prismarine", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("prismarine_slab", fn(BID $id) => new Slab($id, "Prismarine", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("prismarine_bricks_slab", fn(BID $id) => new Slab($id, "Prismarine Bricks", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("andesite_slab", fn(BID $id) => new Slab($id, "Andesite", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("diorite_slab", fn(BID $id) => new Slab($id, "Diorite", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("granite_slab", fn(BID $id) => new Slab($id, "Granite", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("polished_andesite_slab", fn(BID $id) => new Slab($id, "Polished Andesite", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("polished_diorite_slab", fn(BID $id) => new Slab($id, "Polished Diorite", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("polished_granite_slab", fn(BID $id) => new Slab($id, "Polished Granite", $lightStoneSlabBreakInfo));
|
|
||||||
self::register("mossy_stone_brick_slab", fn(BID $id) => new Slab($id, "Mossy Stone Brick", $lightStoneSlabBreakInfo));
|
|
||||||
|
|
||||||
self::register("legacy_stonecutter", fn(BID $id) => new Opaque($id, "Legacy Stonecutter", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD))));
|
self::register("legacy_stonecutter", fn(BID $id) => new Opaque($id, "Legacy Stonecutter", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD))));
|
||||||
self::register("sugarcane", fn(BID $id) => new Sugarcane($id, "Sugarcane", new Info(BreakInfo::instant())));
|
self::register("sugarcane", fn(BID $id) => new Sugarcane($id, "Sugarcane", new Info(BreakInfo::instant())));
|
||||||
self::register("sweet_berry_bush", fn(BID $id) => new SweetBerryBush($id, "Sweet Berry Bush", new Info(BreakInfo::instant())));
|
self::register("sweet_berry_bush", fn(BID $id) => new SweetBerryBush($id, "Sweet Berry Bush", new Info(BreakInfo::instant())));
|
||||||
@ -1203,14 +1201,14 @@ final class VanillaBlocks{
|
|||||||
self::register("lily_pad", fn(BID $id) => new WaterLily($id, "Lily Pad", new Info(BreakInfo::instant())));
|
self::register("lily_pad", fn(BID $id) => new WaterLily($id, "Lily Pad", new Info(BreakInfo::instant())));
|
||||||
|
|
||||||
$weightedPressurePlateBreakInfo = new Info(BreakInfo::pickaxe(0.5));
|
$weightedPressurePlateBreakInfo = new Info(BreakInfo::pickaxe(0.5));
|
||||||
self::register("weighted_pressure_plate_heavy", fn(BID $id) => new WeightedPressurePlateHeavy(
|
self::register("weighted_pressure_plate_heavy", fn(BID $id) => new WeightedPressurePlate(
|
||||||
$id,
|
$id,
|
||||||
"Weighted Pressure Plate Heavy",
|
"Weighted Pressure Plate Heavy",
|
||||||
$weightedPressurePlateBreakInfo,
|
$weightedPressurePlateBreakInfo,
|
||||||
deactivationDelayTicks: 10,
|
deactivationDelayTicks: 10,
|
||||||
signalStrengthFactor: 0.1
|
signalStrengthFactor: 0.1
|
||||||
));
|
));
|
||||||
self::register("weighted_pressure_plate_light", fn(BID $id) => new WeightedPressurePlateLight(
|
self::register("weighted_pressure_plate_light", fn(BID $id) => new WeightedPressurePlate(
|
||||||
$id,
|
$id,
|
||||||
"Weighted Pressure Plate Light",
|
"Weighted Pressure Plate Light",
|
||||||
$weightedPressurePlateBreakInfo,
|
$weightedPressurePlateBreakInfo,
|
||||||
@ -1239,26 +1237,25 @@ final class VanillaBlocks{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sandstoneBreakInfo = new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD));
|
$sandstoneBreakInfo = new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD));
|
||||||
$smoothSandstoneBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
|
||||||
self::register("red_sandstone_stairs", fn(BID $id) => new Stair($id, "Red Sandstone Stairs", $sandstoneBreakInfo));
|
self::register("red_sandstone_stairs", fn(BID $id) => new Stair($id, "Red Sandstone Stairs", $sandstoneBreakInfo));
|
||||||
self::register("smooth_red_sandstone_stairs", fn(BID $id) => new Stair($id, "Smooth Red Sandstone Stairs", $smoothSandstoneBreakInfo));
|
self::register("smooth_red_sandstone_stairs", fn(BID $id) => new Stair($id, "Smooth Red Sandstone Stairs", $sandstoneBreakInfo));
|
||||||
self::register("red_sandstone", fn(BID $id) => new Opaque($id, "Red Sandstone", $sandstoneBreakInfo));
|
self::register("red_sandstone", fn(BID $id) => new Opaque($id, "Red Sandstone", $sandstoneBreakInfo));
|
||||||
self::register("chiseled_red_sandstone", fn(BID $id) => new Opaque($id, "Chiseled Red Sandstone", $sandstoneBreakInfo));
|
self::register("chiseled_red_sandstone", fn(BID $id) => new Opaque($id, "Chiseled Red Sandstone", $sandstoneBreakInfo));
|
||||||
self::register("cut_red_sandstone", fn(BID $id) => new Opaque($id, "Cut Red Sandstone", $sandstoneBreakInfo));
|
self::register("cut_red_sandstone", fn(BID $id) => new Opaque($id, "Cut Red Sandstone", $sandstoneBreakInfo));
|
||||||
self::register("smooth_red_sandstone", fn(BID $id) => new Opaque($id, "Smooth Red Sandstone", $smoothSandstoneBreakInfo));
|
self::register("smooth_red_sandstone", fn(BID $id) => new Opaque($id, "Smooth Red Sandstone", $sandstoneBreakInfo));
|
||||||
|
|
||||||
self::register("sandstone_stairs", fn(BID $id) => new Stair($id, "Sandstone Stairs", $sandstoneBreakInfo));
|
self::register("sandstone_stairs", fn(BID $id) => new Stair($id, "Sandstone Stairs", $sandstoneBreakInfo));
|
||||||
self::register("smooth_sandstone_stairs", fn(BID $id) => new Stair($id, "Smooth Sandstone Stairs", $smoothSandstoneBreakInfo));
|
self::register("smooth_sandstone_stairs", fn(BID $id) => new Stair($id, "Smooth Sandstone Stairs", $sandstoneBreakInfo));
|
||||||
self::register("sandstone", fn(BID $id) => new Opaque($id, "Sandstone", $sandstoneBreakInfo));
|
self::register("sandstone", fn(BID $id) => new Opaque($id, "Sandstone", $sandstoneBreakInfo));
|
||||||
self::register("chiseled_sandstone", fn(BID $id) => new Opaque($id, "Chiseled Sandstone", $sandstoneBreakInfo));
|
self::register("chiseled_sandstone", fn(BID $id) => new Opaque($id, "Chiseled Sandstone", $sandstoneBreakInfo));
|
||||||
self::register("cut_sandstone", fn(BID $id) => new Opaque($id, "Cut Sandstone", $sandstoneBreakInfo));
|
self::register("cut_sandstone", fn(BID $id) => new Opaque($id, "Cut Sandstone", $sandstoneBreakInfo));
|
||||||
self::register("smooth_sandstone", fn(BID $id) => new Opaque($id, "Smooth Sandstone", $smoothSandstoneBreakInfo));
|
self::register("smooth_sandstone", fn(BID $id) => new Opaque($id, "Smooth Sandstone", $sandstoneBreakInfo));
|
||||||
|
|
||||||
self::register("glazed_terracotta", fn(BID $id) => new GlazedTerracotta($id, "Glazed Terracotta", new Info(BreakInfo::pickaxe(1.4, ToolTier::WOOD))));
|
self::register("glazed_terracotta", fn(BID $id) => new GlazedTerracotta($id, "Glazed Terracotta", new Info(BreakInfo::pickaxe(1.4, ToolTier::WOOD))));
|
||||||
self::register("dyed_shulker_box", fn(BID $id) => new DyedShulkerBox($id, "Dyed Shulker Box", $shulkerBoxBreakInfo), TileShulkerBox::class);
|
self::register("dyed_shulker_box", fn(BID $id) => new DyedShulkerBox($id, "Dyed Shulker Box", $shulkerBoxBreakInfo), TileShulkerBox::class);
|
||||||
self::register("stained_glass", fn(BID $id) => new StainedGlass($id, "Stained Glass", $glassBreakInfo));
|
self::register("stained_glass", fn(BID $id) => new StainedGlass($id, "Stained Glass", $glassBreakInfo));
|
||||||
self::register("stained_glass_pane", fn(BID $id) => new StainedGlassPane($id, "Stained Glass Pane", $glassBreakInfo));
|
self::register("stained_glass_pane", fn(BID $id) => new StainedGlassPane($id, "Stained Glass Pane", $glassBreakInfo));
|
||||||
self::register("stained_clay", fn(BID $id) => new StainedHardenedClay($id, "Stained Clay", new Info(BreakInfo::pickaxe(1.25, ToolTier::WOOD, 6.25))));
|
self::register("stained_clay", fn(BID $id) => new StainedHardenedClay($id, "Stained Clay", $hardenedClayBreakInfo));
|
||||||
self::register("stained_hardened_glass", fn(BID $id) => new StainedHardenedGlass($id, "Stained Hardened Glass", $hardenedGlassBreakInfo));
|
self::register("stained_hardened_glass", fn(BID $id) => new StainedHardenedGlass($id, "Stained Hardened Glass", $hardenedGlassBreakInfo));
|
||||||
self::register("stained_hardened_glass_pane", fn(BID $id) => new StainedHardenedGlassPane($id, "Stained Hardened Glass Pane", $hardenedGlassBreakInfo));
|
self::register("stained_hardened_glass_pane", fn(BID $id) => new StainedHardenedGlassPane($id, "Stained Hardened Glass Pane", $hardenedGlassBreakInfo));
|
||||||
self::register("carpet", fn(BID $id) => new Carpet($id, "Carpet", new Info(new BreakInfo(0.1))));
|
self::register("carpet", fn(BID $id) => new Carpet($id, "Carpet", new Info(new BreakInfo(0.1))));
|
||||||
@ -1275,26 +1272,22 @@ final class VanillaBlocks{
|
|||||||
}
|
}
|
||||||
})));
|
})));
|
||||||
|
|
||||||
self::register("end_stone_brick_wall", fn(BID $id) => new Wall($id, "End Stone Brick Wall", new Info(BreakInfo::pickaxe(3.0, ToolTier::WOOD, 45.0))));
|
//TODO: in the future these won't all have the same hardness; they only do now because of the old metadata crap
|
||||||
|
$wallBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
||||||
$brickWallBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
self::register("cobblestone_wall", fn(BID $id) => new Wall($id, "Cobblestone Wall", $wallBreakInfo));
|
||||||
self::register("cobblestone_wall", fn(BID $id) => new Wall($id, "Cobblestone Wall", $brickWallBreakInfo));
|
self::register("andesite_wall", fn(BID $id) => new Wall($id, "Andesite Wall", $wallBreakInfo));
|
||||||
self::register("brick_wall", fn(BID $id) => new Wall($id, "Brick Wall", $brickWallBreakInfo));
|
self::register("brick_wall", fn(BID $id) => new Wall($id, "Brick Wall", $wallBreakInfo));
|
||||||
self::register("mossy_cobblestone_wall", fn(BID $id) => new Wall($id, "Mossy Cobblestone Wall", $brickWallBreakInfo));
|
self::register("diorite_wall", fn(BID $id) => new Wall($id, "Diorite Wall", $wallBreakInfo));
|
||||||
self::register("nether_brick_wall", fn(BID $id) => new Wall($id, "Nether Brick Wall", $brickWallBreakInfo));
|
self::register("end_stone_brick_wall", fn(BID $id) => new Wall($id, "End Stone Brick Wall", $wallBreakInfo));
|
||||||
self::register("red_nether_brick_wall", fn(BID $id) => new Wall($id, "Red Nether Brick Wall", $brickWallBreakInfo));
|
self::register("granite_wall", fn(BID $id) => new Wall($id, "Granite Wall", $wallBreakInfo));
|
||||||
|
self::register("mossy_stone_brick_wall", fn(BID $id) => new Wall($id, "Mossy Stone Brick Wall", $wallBreakInfo));
|
||||||
$stoneWallBreakInfo = new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
|
self::register("mossy_cobblestone_wall", fn(BID $id) => new Wall($id, "Mossy Cobblestone Wall", $wallBreakInfo));
|
||||||
self::register("stone_brick_wall", fn(BID $id) => new Wall($id, "Stone Brick Wall", $stoneWallBreakInfo));
|
self::register("nether_brick_wall", fn(BID $id) => new Wall($id, "Nether Brick Wall", $wallBreakInfo));
|
||||||
self::register("mossy_stone_brick_wall", fn(BID $id) => new Wall($id, "Mossy Stone Brick Wall", $stoneWallBreakInfo));
|
self::register("prismarine_wall", fn(BID $id) => new Wall($id, "Prismarine Wall", $wallBreakInfo));
|
||||||
self::register("granite_wall", fn(BID $id) => new Wall($id, "Granite Wall", $stoneWallBreakInfo));
|
self::register("red_nether_brick_wall", fn(BID $id) => new Wall($id, "Red Nether Brick Wall", $wallBreakInfo));
|
||||||
self::register("diorite_wall", fn(BID $id) => new Wall($id, "Diorite Wall", $stoneWallBreakInfo));
|
self::register("red_sandstone_wall", fn(BID $id) => new Wall($id, "Red Sandstone Wall", $wallBreakInfo));
|
||||||
self::register("andesite_wall", fn(BID $id) => new Wall($id, "Andesite Wall", $stoneWallBreakInfo));
|
self::register("sandstone_wall", fn(BID $id) => new Wall($id, "Sandstone Wall", $wallBreakInfo));
|
||||||
self::register("prismarine_wall", fn(BID $id) => new Wall($id, "Prismarine Wall", $stoneWallBreakInfo));
|
self::register("stone_brick_wall", fn(BID $id) => new Wall($id, "Stone Brick Wall", $wallBreakInfo));
|
||||||
|
|
||||||
$sandstoneWallBreakInfo = new Info(BreakInfo::pickaxe(0.8, ToolTier::WOOD, 4.0));
|
|
||||||
self::register("red_sandstone_wall", fn(BID $id) => new Wall($id, "Red Sandstone Wall", $sandstoneWallBreakInfo));
|
|
||||||
self::register("sandstone_wall", fn(BID $id) => new Wall($id, "Sandstone Wall", $sandstoneWallBreakInfo));
|
|
||||||
|
|
||||||
self::registerElements();
|
self::registerElements();
|
||||||
|
|
||||||
@ -1327,8 +1320,8 @@ final class VanillaBlocks{
|
|||||||
self::register("mangrove_roots", fn(BID $id) => new MangroveRoots($id, "Mangrove Roots", new Info(BreakInfo::axe(0.7))));
|
self::register("mangrove_roots", fn(BID $id) => new MangroveRoots($id, "Mangrove Roots", new Info(BreakInfo::axe(0.7))));
|
||||||
self::register("muddy_mangrove_roots", fn(BID $id) => new SimplePillar($id, "Muddy Mangrove Roots", new Info(BreakInfo::shovel(0.7), [Tags::MUD])));
|
self::register("muddy_mangrove_roots", fn(BID $id) => new SimplePillar($id, "Muddy Mangrove Roots", new Info(BreakInfo::shovel(0.7), [Tags::MUD])));
|
||||||
self::register("froglight", fn(BID $id) => new Froglight($id, "Froglight", new Info(new BreakInfo(0.3))));
|
self::register("froglight", fn(BID $id) => new Froglight($id, "Froglight", new Info(new BreakInfo(0.3))));
|
||||||
self::register("sculk", fn(BID $id) => new Sculk($id, "Sculk", new Info(new BreakInfo(0.2, ToolType::HOE))));
|
self::register("sculk", fn(BID $id) => new Sculk($id, "Sculk", new Info(new BreakInfo(0.6, ToolType::HOE))));
|
||||||
self::register("reinforced_deepslate", fn(BID $id) => new class($id, "Reinforced Deepslate", new Info(new BreakInfo(55.0, ToolType::NONE, 0, 6000.0))) extends Opaque{
|
self::register("reinforced_deepslate", fn(BID $id) => new class($id, "Reinforced Deepslate", new Info(new BreakInfo(55.0, ToolType::NONE, 0, 3600.0))) extends Opaque{
|
||||||
public function getDropsForCompatibleTool(Item $item) : array{
|
public function getDropsForCompatibleTool(Item $item) : array{
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@ -1544,7 +1537,7 @@ final class VanillaBlocks{
|
|||||||
self::register("lapis_lazuli_ore", fn(BID $id) => new LapisOre($id, "Lapis Lazuli Ore", $stoneOreBreakInfo(ToolTier::STONE)));
|
self::register("lapis_lazuli_ore", fn(BID $id) => new LapisOre($id, "Lapis Lazuli Ore", $stoneOreBreakInfo(ToolTier::STONE)));
|
||||||
self::register("redstone_ore", fn(BID $id) => new RedstoneOre($id, "Redstone Ore", $stoneOreBreakInfo(ToolTier::IRON)));
|
self::register("redstone_ore", fn(BID $id) => new RedstoneOre($id, "Redstone Ore", $stoneOreBreakInfo(ToolTier::IRON)));
|
||||||
|
|
||||||
$deepslateOreBreakInfo = fn(ToolTier $toolTier) => new Info(BreakInfo::pickaxe(4.5, $toolTier, 15.0));
|
$deepslateOreBreakInfo = fn(ToolTier $toolTier) => new Info(BreakInfo::pickaxe(4.5, $toolTier));
|
||||||
self::register("deepslate_coal_ore", fn(BID $id) => new CoalOre($id, "Deepslate Coal Ore", $deepslateOreBreakInfo(ToolTier::WOOD)));
|
self::register("deepslate_coal_ore", fn(BID $id) => new CoalOre($id, "Deepslate Coal Ore", $deepslateOreBreakInfo(ToolTier::WOOD)));
|
||||||
self::register("deepslate_copper_ore", fn(BID $id) => new CopperOre($id, "Deepslate Copper Ore", $deepslateOreBreakInfo(ToolTier::STONE)));
|
self::register("deepslate_copper_ore", fn(BID $id) => new CopperOre($id, "Deepslate Copper Ore", $deepslateOreBreakInfo(ToolTier::STONE)));
|
||||||
self::register("deepslate_diamond_ore", fn(BID $id) => new DiamondOre($id, "Deepslate Diamond Ore", $deepslateOreBreakInfo(ToolTier::IRON)));
|
self::register("deepslate_diamond_ore", fn(BID $id) => new DiamondOre($id, "Deepslate Diamond Ore", $deepslateOreBreakInfo(ToolTier::IRON)));
|
||||||
@ -1588,10 +1581,10 @@ final class VanillaBlocks{
|
|||||||
//for some reason, slabs have weird hardness like the legacy ones
|
//for some reason, slabs have weird hardness like the legacy ones
|
||||||
$slabBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
$slabBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
||||||
|
|
||||||
self::register("ancient_debris", fn(BID $id) => new class($id, "Ancient Debris", new Info(BreakInfo::pickaxe(30, ToolTier::DIAMOND, 6000.0))) extends Opaque{
|
self::register("ancient_debris", fn(BID $id) => new class($id, "Ancient Debris", new Info(BreakInfo::pickaxe(30, ToolTier::DIAMOND, 3600.0))) extends Opaque{
|
||||||
public function isFireProofAsItem() : bool{ return true; }
|
public function isFireProofAsItem() : bool{ return true; }
|
||||||
});
|
});
|
||||||
$netheriteBreakInfo = new Info(BreakInfo::pickaxe(50, ToolTier::DIAMOND, 6000.0));
|
$netheriteBreakInfo = new Info(BreakInfo::pickaxe(50, ToolTier::DIAMOND, 3600.0));
|
||||||
self::register("netherite", fn(BID $id) => new class($id, "Netherite Block", $netheriteBreakInfo) extends Opaque{
|
self::register("netherite", fn(BID $id) => new class($id, "Netherite Block", $netheriteBreakInfo) extends Opaque{
|
||||||
public function isFireProofAsItem() : bool{ return true; }
|
public function isFireProofAsItem() : bool{ return true; }
|
||||||
});
|
});
|
||||||
@ -1609,14 +1602,14 @@ final class VanillaBlocks{
|
|||||||
|
|
||||||
self::register("gilded_blackstone", fn(BID $id) => new GildedBlackstone($id, "Gilded Blackstone", $blackstoneBreakInfo));
|
self::register("gilded_blackstone", fn(BID $id) => new GildedBlackstone($id, "Gilded Blackstone", $blackstoneBreakInfo));
|
||||||
|
|
||||||
$polishedBlackstoneBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
//TODO: polished blackstone ought to have 2.0 hardness (as per java) but it's 1.5 in Bedrock (probably parity bug)
|
||||||
$prefix = fn(string $thing) => "Polished Blackstone" . ($thing !== "" ? " $thing" : "");
|
$prefix = fn(string $thing) => "Polished Blackstone" . ($thing !== "" ? " $thing" : "");
|
||||||
self::register("polished_blackstone", fn(BID $id) => new Opaque($id, $prefix(""), $polishedBlackstoneBreakInfo));
|
self::register("polished_blackstone", fn(BID $id) => new Opaque($id, $prefix(""), $blackstoneBreakInfo));
|
||||||
self::register("polished_blackstone_button", fn(BID $id) => new StoneButton($id, $prefix("Button"), new Info(BreakInfo::pickaxe(0.5))));
|
self::register("polished_blackstone_button", fn(BID $id) => new StoneButton($id, $prefix("Button"), new Info(BreakInfo::pickaxe(0.5))));
|
||||||
self::register("polished_blackstone_pressure_plate", fn(BID $id) => new StonePressurePlate($id, $prefix("Pressure Plate"), new Info(BreakInfo::pickaxe(0.5)), 20));
|
self::register("polished_blackstone_pressure_plate", fn(BID $id) => new StonePressurePlate($id, $prefix("Pressure Plate"), new Info(BreakInfo::pickaxe(0.5)), 20));
|
||||||
self::register("polished_blackstone_slab", fn(BID $id) => new Slab($id, $prefix(""), $slabBreakInfo));
|
self::register("polished_blackstone_slab", fn(BID $id) => new Slab($id, $prefix(""), $slabBreakInfo));
|
||||||
self::register("polished_blackstone_stairs", fn(BID $id) => new Stair($id, $prefix("Stairs"), $polishedBlackstoneBreakInfo));
|
self::register("polished_blackstone_stairs", fn(BID $id) => new Stair($id, $prefix("Stairs"), $blackstoneBreakInfo));
|
||||||
self::register("polished_blackstone_wall", fn(BID $id) => new Wall($id, $prefix("Wall"), $polishedBlackstoneBreakInfo));
|
self::register("polished_blackstone_wall", fn(BID $id) => new Wall($id, $prefix("Wall"), $blackstoneBreakInfo));
|
||||||
self::register("chiseled_polished_blackstone", fn(BID $id) => new Opaque($id, "Chiseled Polished Blackstone", $blackstoneBreakInfo));
|
self::register("chiseled_polished_blackstone", fn(BID $id) => new Opaque($id, "Chiseled Polished Blackstone", $blackstoneBreakInfo));
|
||||||
|
|
||||||
$prefix = fn(string $thing) => "Polished Blackstone Brick" . ($thing !== "" ? " $thing" : "");
|
$prefix = fn(string $thing) => "Polished Blackstone Brick" . ($thing !== "" ? " $thing" : "");
|
||||||
@ -1629,7 +1622,8 @@ final class VanillaBlocks{
|
|||||||
self::register("soul_torch", fn(BID $id) => new Torch($id, "Soul Torch", new Info(BreakInfo::instant())));
|
self::register("soul_torch", fn(BID $id) => new Torch($id, "Soul Torch", new Info(BreakInfo::instant())));
|
||||||
self::register("soul_fire", fn(BID $id) => new SoulFire($id, "Soul Fire", new Info(BreakInfo::instant(), [Tags::FIRE])));
|
self::register("soul_fire", fn(BID $id) => new SoulFire($id, "Soul Fire", new Info(BreakInfo::instant(), [Tags::FIRE])));
|
||||||
|
|
||||||
self::register("soul_soil", fn(BID $id) => new Opaque($id, "Soul Soil", new Info(BreakInfo::shovel(0.5))));
|
//TODO: soul soul ought to have 0.5 hardness (as per java) but it's 1.0 in Bedrock (probably parity bug)
|
||||||
|
self::register("soul_soil", fn(BID $id) => new Opaque($id, "Soul Soil", new Info(BreakInfo::shovel(1.0))));
|
||||||
|
|
||||||
self::register("shroomlight", fn(BID $id) => new class($id, "Shroomlight", new Info(new BreakInfo(1.0, ToolType::HOE))) extends Opaque{
|
self::register("shroomlight", fn(BID $id) => new class($id, "Shroomlight", new Info(new BreakInfo(1.0, ToolType::HOE))) extends Opaque{
|
||||||
public function getLightLevel() : int{ return 15; }
|
public function getLightLevel() : int{ return 15; }
|
||||||
@ -1647,9 +1641,7 @@ final class VanillaBlocks{
|
|||||||
self::register("crimson_roots", fn(BID $id) => new NetherRoots($id, "Crimson Roots", $netherRootsInfo));
|
self::register("crimson_roots", fn(BID $id) => new NetherRoots($id, "Crimson Roots", $netherRootsInfo));
|
||||||
self::register("warped_roots", fn(BID $id) => new NetherRoots($id, "Warped Roots", $netherRootsInfo));
|
self::register("warped_roots", fn(BID $id) => new NetherRoots($id, "Warped Roots", $netherRootsInfo));
|
||||||
|
|
||||||
self::register("chain", fn(BID $id) => new Chain($id, "Chain", new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD, 30.0))));
|
self::register("chain", fn(BID $id) => new Chain($id, "Chain", new Info(BreakInfo::pickaxe(5.0, ToolTier::WOOD))));
|
||||||
|
|
||||||
self::register("respawn_anchor", fn(BID $id) => new RespawnAnchor($id, "Respawn Anchor", new Info(BreakInfo::pickaxe(50.0, ToolTier::DIAMOND, 6000.0))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function registerBlocksR17() : void{
|
private static function registerBlocksR17() : void{
|
||||||
@ -1667,7 +1659,7 @@ final class VanillaBlocks{
|
|||||||
self::register("raw_gold", fn(BID $id) => new Opaque($id, "Raw Gold Block", new Info(BreakInfo::pickaxe(5, ToolTier::IRON, 30.0))));
|
self::register("raw_gold", fn(BID $id) => new Opaque($id, "Raw Gold Block", new Info(BreakInfo::pickaxe(5, ToolTier::IRON, 30.0))));
|
||||||
self::register("raw_iron", fn(BID $id) => new Opaque($id, "Raw Iron Block", new Info(BreakInfo::pickaxe(5, ToolTier::STONE, 30.0))));
|
self::register("raw_iron", fn(BID $id) => new Opaque($id, "Raw Iron Block", new Info(BreakInfo::pickaxe(5, ToolTier::STONE, 30.0))));
|
||||||
|
|
||||||
$deepslateBreakInfo = new Info(BreakInfo::pickaxe(3, ToolTier::WOOD, 30.0));
|
$deepslateBreakInfo = new Info(BreakInfo::pickaxe(3, ToolTier::WOOD, 18.0));
|
||||||
self::register("deepslate", fn(BID $id) => new class($id, "Deepslate", $deepslateBreakInfo) extends SimplePillar{
|
self::register("deepslate", fn(BID $id) => new class($id, "Deepslate", $deepslateBreakInfo) extends SimplePillar{
|
||||||
public function getDropsForCompatibleTool(Item $item) : array{
|
public function getDropsForCompatibleTool(Item $item) : array{
|
||||||
return [VanillaBlocks::COBBLED_DEEPSLATE()->asItem()];
|
return [VanillaBlocks::COBBLED_DEEPSLATE()->asItem()];
|
||||||
@ -1679,29 +1671,29 @@ final class VanillaBlocks{
|
|||||||
});
|
});
|
||||||
|
|
||||||
//TODO: parity issue here - in Java this has a hardness of 3.0, but in bedrock it's 3.5
|
//TODO: parity issue here - in Java this has a hardness of 3.0, but in bedrock it's 3.5
|
||||||
self::register("chiseled_deepslate", fn(BID $id) => new Opaque($id, "Chiseled Deepslate", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0))));
|
self::register("chiseled_deepslate", fn(BID $id) => new Opaque($id, "Chiseled Deepslate", new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 18.0))));
|
||||||
|
|
||||||
$deepslateBrickBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
|
$deepslateBrickBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 18.0));
|
||||||
self::register("deepslate_bricks", fn(BID $id) => new Opaque($id, "Deepslate Bricks", $deepslateBrickBreakInfo));
|
self::register("deepslate_bricks", fn(BID $id) => new Opaque($id, "Deepslate Bricks", $deepslateBrickBreakInfo));
|
||||||
self::register("deepslate_brick_slab", fn(BID $id) => new Slab($id, "Deepslate Brick", $deepslateBrickBreakInfo));
|
self::register("deepslate_brick_slab", fn(BID $id) => new Slab($id, "Deepslate Brick", $deepslateBrickBreakInfo));
|
||||||
self::register("deepslate_brick_stairs", fn(BID $id) => new Stair($id, "Deepslate Brick Stairs", $deepslateBrickBreakInfo));
|
self::register("deepslate_brick_stairs", fn(BID $id) => new Stair($id, "Deepslate Brick Stairs", $deepslateBrickBreakInfo));
|
||||||
self::register("deepslate_brick_wall", fn(BID $id) => new Wall($id, "Deepslate Brick Wall", $deepslateBrickBreakInfo));
|
self::register("deepslate_brick_wall", fn(BID $id) => new Wall($id, "Deepslate Brick Wall", $deepslateBrickBreakInfo));
|
||||||
self::register("cracked_deepslate_bricks", fn(BID $id) => new Opaque($id, "Cracked Deepslate Bricks", $deepslateBrickBreakInfo));
|
self::register("cracked_deepslate_bricks", fn(BID $id) => new Opaque($id, "Cracked Deepslate Bricks", $deepslateBrickBreakInfo));
|
||||||
|
|
||||||
$deepslateTilesBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
|
$deepslateTilesBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 18.0));
|
||||||
self::register("deepslate_tiles", fn(BID $id) => new Opaque($id, "Deepslate Tiles", $deepslateTilesBreakInfo));
|
self::register("deepslate_tiles", fn(BID $id) => new Opaque($id, "Deepslate Tiles", $deepslateTilesBreakInfo));
|
||||||
self::register("deepslate_tile_slab", fn(BID $id) => new Slab($id, "Deepslate Tile", $deepslateTilesBreakInfo));
|
self::register("deepslate_tile_slab", fn(BID $id) => new Slab($id, "Deepslate Tile", $deepslateTilesBreakInfo));
|
||||||
self::register("deepslate_tile_stairs", fn(BID $id) => new Stair($id, "Deepslate Tile Stairs", $deepslateTilesBreakInfo));
|
self::register("deepslate_tile_stairs", fn(BID $id) => new Stair($id, "Deepslate Tile Stairs", $deepslateTilesBreakInfo));
|
||||||
self::register("deepslate_tile_wall", fn(BID $id) => new Wall($id, "Deepslate Tile Wall", $deepslateTilesBreakInfo));
|
self::register("deepslate_tile_wall", fn(BID $id) => new Wall($id, "Deepslate Tile Wall", $deepslateTilesBreakInfo));
|
||||||
self::register("cracked_deepslate_tiles", fn(BID $id) => new Opaque($id, "Cracked Deepslate Tiles", $deepslateTilesBreakInfo));
|
self::register("cracked_deepslate_tiles", fn(BID $id) => new Opaque($id, "Cracked Deepslate Tiles", $deepslateTilesBreakInfo));
|
||||||
|
|
||||||
$cobbledDeepslateBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
|
$cobbledDeepslateBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 18.0));
|
||||||
self::register("cobbled_deepslate", fn(BID $id) => new Opaque($id, "Cobbled Deepslate", $cobbledDeepslateBreakInfo));
|
self::register("cobbled_deepslate", fn(BID $id) => new Opaque($id, "Cobbled Deepslate", $cobbledDeepslateBreakInfo));
|
||||||
self::register("cobbled_deepslate_slab", fn(BID $id) => new Slab($id, "Cobbled Deepslate", $cobbledDeepslateBreakInfo));
|
self::register("cobbled_deepslate_slab", fn(BID $id) => new Slab($id, "Cobbled Deepslate", $cobbledDeepslateBreakInfo));
|
||||||
self::register("cobbled_deepslate_stairs", fn(BID $id) => new Stair($id, "Cobbled Deepslate Stairs", $cobbledDeepslateBreakInfo));
|
self::register("cobbled_deepslate_stairs", fn(BID $id) => new Stair($id, "Cobbled Deepslate Stairs", $cobbledDeepslateBreakInfo));
|
||||||
self::register("cobbled_deepslate_wall", fn(BID $id) => new Wall($id, "Cobbled Deepslate Wall", $cobbledDeepslateBreakInfo));
|
self::register("cobbled_deepslate_wall", fn(BID $id) => new Wall($id, "Cobbled Deepslate Wall", $cobbledDeepslateBreakInfo));
|
||||||
|
|
||||||
$polishedDeepslateBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 30.0));
|
$polishedDeepslateBreakInfo = new Info(BreakInfo::pickaxe(3.5, ToolTier::WOOD, 18.0));
|
||||||
self::register("polished_deepslate", fn(BID $id) => new Opaque($id, "Polished Deepslate", $polishedDeepslateBreakInfo));
|
self::register("polished_deepslate", fn(BID $id) => new Opaque($id, "Polished Deepslate", $polishedDeepslateBreakInfo));
|
||||||
self::register("polished_deepslate_slab", fn(BID $id) => new Slab($id, "Polished Deepslate", $polishedDeepslateBreakInfo));
|
self::register("polished_deepslate_slab", fn(BID $id) => new Slab($id, "Polished Deepslate", $polishedDeepslateBreakInfo));
|
||||||
self::register("polished_deepslate_stairs", fn(BID $id) => new Stair($id, "Polished Deepslate Stairs", $polishedDeepslateBreakInfo));
|
self::register("polished_deepslate_stairs", fn(BID $id) => new Stair($id, "Polished Deepslate Stairs", $polishedDeepslateBreakInfo));
|
||||||
@ -1710,7 +1702,7 @@ final class VanillaBlocks{
|
|||||||
self::register("tinted_glass", fn(BID $id) => new TintedGlass($id, "Tinted Glass", new Info(new BreakInfo(0.3))));
|
self::register("tinted_glass", fn(BID $id) => new TintedGlass($id, "Tinted Glass", new Info(new BreakInfo(0.3))));
|
||||||
|
|
||||||
//blast resistance should be 30 if we were matched with java :(
|
//blast resistance should be 30 if we were matched with java :(
|
||||||
$copperBreakInfo = new Info(BreakInfo::pickaxe(3.0, ToolTier::STONE, 30.0));
|
$copperBreakInfo = new Info(BreakInfo::pickaxe(3.0, ToolTier::STONE, 18.0));
|
||||||
self::register("lightning_rod", fn(BID $id) => new LightningRod($id, "Lightning Rod", $copperBreakInfo));
|
self::register("lightning_rod", fn(BID $id) => new LightningRod($id, "Lightning Rod", $copperBreakInfo));
|
||||||
|
|
||||||
self::register("copper", fn(BID $id) => new Copper($id, "Copper Block", $copperBreakInfo));
|
self::register("copper", fn(BID $id) => new Copper($id, "Copper Block", $copperBreakInfo));
|
||||||
@ -1738,8 +1730,8 @@ final class VanillaBlocks{
|
|||||||
self::register("cave_vines", fn(BID $id) => new CaveVines($id, "Cave Vines", new Info(BreakInfo::instant())));
|
self::register("cave_vines", fn(BID $id) => new CaveVines($id, "Cave Vines", new Info(BreakInfo::instant())));
|
||||||
|
|
||||||
self::register("small_dripleaf", fn(BID $id) => new SmallDripleaf($id, "Small Dripleaf", new Info(BreakInfo::instant(ToolType::SHEARS, toolHarvestLevel: 1))));
|
self::register("small_dripleaf", fn(BID $id) => new SmallDripleaf($id, "Small Dripleaf", new Info(BreakInfo::instant(ToolType::SHEARS, toolHarvestLevel: 1))));
|
||||||
self::register("big_dripleaf_head", fn(BID $id) => new BigDripleafHead($id, "Big Dripleaf", new Info(new BreakInfo(0.1))));
|
self::register("big_dripleaf_head", fn(BID $id) => new BigDripleafHead($id, "Big Dripleaf", new Info(BreakInfo::instant())));
|
||||||
self::register("big_dripleaf_stem", fn(BID $id) => new BigDripleafStem($id, "Big Dripleaf Stem", new Info(new BreakInfo(0.1))));
|
self::register("big_dripleaf_stem", fn(BID $id) => new BigDripleafStem($id, "Big Dripleaf Stem", new Info(BreakInfo::instant())));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function registerBlocksR18() : void{
|
private static function registerBlocksR18() : void{
|
||||||
@ -1750,7 +1742,7 @@ final class VanillaBlocks{
|
|||||||
self::register("mud", fn(BID $id) => new Opaque($id, "Mud", new Info(BreakInfo::shovel(0.5), [Tags::MUD])));
|
self::register("mud", fn(BID $id) => new Opaque($id, "Mud", new Info(BreakInfo::shovel(0.5), [Tags::MUD])));
|
||||||
self::register("packed_mud", fn(BID $id) => new Opaque($id, "Packed Mud", new Info(BreakInfo::pickaxe(1.0, null, 15.0))));
|
self::register("packed_mud", fn(BID $id) => new Opaque($id, "Packed Mud", new Info(BreakInfo::pickaxe(1.0, null, 15.0))));
|
||||||
|
|
||||||
$mudBricksBreakInfo = new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 15.0));
|
$mudBricksBreakInfo = new Info(BreakInfo::pickaxe(2.0, ToolTier::WOOD, 30.0));
|
||||||
|
|
||||||
self::register("mud_bricks", fn(BID $id) => new Opaque($id, "Mud Bricks", $mudBricksBreakInfo));
|
self::register("mud_bricks", fn(BID $id) => new Opaque($id, "Mud Bricks", $mudBricksBreakInfo));
|
||||||
self::register("mud_brick_slab", fn(BID $id) => new Slab($id, "Mud Brick", $mudBricksBreakInfo));
|
self::register("mud_brick_slab", fn(BID $id) => new Slab($id, "Mud Brick", $mudBricksBreakInfo));
|
||||||
@ -1762,7 +1754,7 @@ final class VanillaBlocks{
|
|||||||
self::register("resin", fn(BID $id) => new Opaque($id, "Block of Resin", new Info(BreakInfo::instant())));
|
self::register("resin", fn(BID $id) => new Opaque($id, "Block of Resin", new Info(BreakInfo::instant())));
|
||||||
self::register("resin_clump", fn(BID $id) => new ResinClump($id, "Resin Clump", new Info(BreakInfo::instant())));
|
self::register("resin_clump", fn(BID $id) => new ResinClump($id, "Resin Clump", new Info(BreakInfo::instant())));
|
||||||
|
|
||||||
$resinBricksInfo = new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD, 30.0));
|
$resinBricksInfo = new Info(BreakInfo::pickaxe(1.5, ToolTier::WOOD));
|
||||||
self::register("resin_brick_slab", fn(BID $id) => new Slab($id, "Resin Brick", $resinBricksInfo));
|
self::register("resin_brick_slab", fn(BID $id) => new Slab($id, "Resin Brick", $resinBricksInfo));
|
||||||
self::register("resin_brick_stairs", fn(BID $id) => new Stair($id, "Resin Brick Stairs", $resinBricksInfo));
|
self::register("resin_brick_stairs", fn(BID $id) => new Stair($id, "Resin Brick Stairs", $resinBricksInfo));
|
||||||
self::register("resin_brick_wall", fn(BID $id) => new Wall($id, "Resin Brick Wall", $resinBricksInfo));
|
self::register("resin_brick_wall", fn(BID $id) => new Wall($id, "Resin Brick Wall", $resinBricksInfo));
|
||||||
|
@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\event\entity\EntityExtinguishEvent;
|
|
||||||
use pocketmine\world\sound\BucketEmptyWaterSound;
|
use pocketmine\world\sound\BucketEmptyWaterSound;
|
||||||
use pocketmine\world\sound\BucketFillWaterSound;
|
use pocketmine\world\sound\BucketFillWaterSound;
|
||||||
use pocketmine\world\sound\Sound;
|
use pocketmine\world\sound\Sound;
|
||||||
@ -54,7 +53,7 @@ class Water extends Liquid{
|
|||||||
public function onEntityInside(Entity $entity) : bool{
|
public function onEntityInside(Entity $entity) : bool{
|
||||||
$entity->resetFallDistance();
|
$entity->resetFallDistance();
|
||||||
if($entity->isOnFire()){
|
if($entity->isOnFire()){
|
||||||
$entity->extinguish(EntityExtinguishEvent::CAUSE_WATER);
|
$entity->extinguish();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,6 @@ use pocketmine\block\tile\Cauldron as TileCauldron;
|
|||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
use pocketmine\color\Color;
|
use pocketmine\color\Color;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\event\entity\EntityExtinguishEvent;
|
|
||||||
use pocketmine\item\Armor;
|
use pocketmine\item\Armor;
|
||||||
use pocketmine\item\Banner;
|
use pocketmine\item\Banner;
|
||||||
use pocketmine\item\Dye;
|
use pocketmine\item\Dye;
|
||||||
@ -184,7 +183,7 @@ final class WaterCauldron extends FillableCauldron{
|
|||||||
|
|
||||||
public function onEntityInside(Entity $entity) : bool{
|
public function onEntityInside(Entity $entity) : bool{
|
||||||
if($entity->isOnFire()){
|
if($entity->isOnFire()){
|
||||||
$entity->extinguish(EntityExtinguishEvent::CAUSE_WATER_CAULDRON);
|
$entity->extinguish();
|
||||||
//TODO: particles
|
//TODO: particles
|
||||||
|
|
||||||
$this->position->getWorld()->setBlock($this->position, $this->withFillLevel($this->getFillLevel() - self::ENTITY_EXTINGUISH_USE_AMOUNT));
|
$this->position->getWorld()->setBlock($this->position, $this->withFillLevel($this->getFillLevel() - self::ENTITY_EXTINGUISH_USE_AMOUNT));
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace pocketmine\block;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
class WeightedPressurePlateHeavy extends WeightedPressurePlate{
|
|
||||||
|
|
||||||
}
|
|
@ -32,23 +32,9 @@ use pocketmine\network\mcpe\protocol\types\CacheableNbt;
|
|||||||
use function get_class;
|
use function get_class;
|
||||||
|
|
||||||
abstract class Spawnable extends Tile{
|
abstract class Spawnable extends Tile{
|
||||||
/** @phpstan-var CacheableNbt<CompoundTag>|null */
|
/** @phpstan-var CacheableNbt<\pocketmine\nbt\tag\CompoundTag>|null */
|
||||||
private ?CacheableNbt $spawnCompoundCache = null;
|
private ?CacheableNbt $spawnCompoundCache = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public function isDirty() : bool{
|
|
||||||
return $this->spawnCompoundCache === null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public function setDirty(bool $dirty = true) : void{
|
|
||||||
$this->clearSpawnCompoundCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function clearSpawnCompoundCache() : void{
|
public function clearSpawnCompoundCache() : void{
|
||||||
$this->spawnCompoundCache = null;
|
$this->spawnCompoundCache = null;
|
||||||
}
|
}
|
||||||
@ -73,7 +59,7 @@ abstract class Spawnable extends Tile{
|
|||||||
* Returns encoded NBT (varint, little-endian) used to spawn this tile to clients. Uses cache where possible,
|
* Returns encoded NBT (varint, little-endian) used to spawn this tile to clients. Uses cache where possible,
|
||||||
* populates cache if it is null.
|
* populates cache if it is null.
|
||||||
*
|
*
|
||||||
* @phpstan-return CacheableNbt<CompoundTag>
|
* @phpstan-return CacheableNbt<\pocketmine\nbt\tag\CompoundTag>
|
||||||
*/
|
*/
|
||||||
final public function getSerializedSpawnCompound() : CacheableNbt{
|
final public function getSerializedSpawnCompound() : CacheableNbt{
|
||||||
if($this->spawnCompoundCache === null){
|
if($this->spawnCompoundCache === null){
|
||||||
|
@ -114,13 +114,6 @@ final class TileFactory{
|
|||||||
$this->saveNames[$className] = reset($saveNames);
|
$this->saveNames[$className] = reset($saveNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @phpstan-param class-string<Tile> $class
|
|
||||||
*/
|
|
||||||
public function isRegistered(string $class) : bool{
|
|
||||||
return isset($this->saveNames[$class]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
* @throws SavedDataLoadingException
|
* @throws SavedDataLoadingException
|
||||||
|
@ -23,54 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static BannerPatternType BORDER()
|
|
||||||
* @method static BannerPatternType BRICKS()
|
|
||||||
* @method static BannerPatternType CIRCLE()
|
|
||||||
* @method static BannerPatternType CREEPER()
|
|
||||||
* @method static BannerPatternType CROSS()
|
|
||||||
* @method static BannerPatternType CURLY_BORDER()
|
|
||||||
* @method static BannerPatternType DIAGONAL_LEFT()
|
|
||||||
* @method static BannerPatternType DIAGONAL_RIGHT()
|
|
||||||
* @method static BannerPatternType DIAGONAL_UP_LEFT()
|
|
||||||
* @method static BannerPatternType DIAGONAL_UP_RIGHT()
|
|
||||||
* @method static BannerPatternType FLOWER()
|
|
||||||
* @method static BannerPatternType GRADIENT()
|
|
||||||
* @method static BannerPatternType GRADIENT_UP()
|
|
||||||
* @method static BannerPatternType HALF_HORIZONTAL()
|
|
||||||
* @method static BannerPatternType HALF_HORIZONTAL_BOTTOM()
|
|
||||||
* @method static BannerPatternType HALF_VERTICAL()
|
|
||||||
* @method static BannerPatternType HALF_VERTICAL_RIGHT()
|
|
||||||
* @method static BannerPatternType MOJANG()
|
|
||||||
* @method static BannerPatternType RHOMBUS()
|
|
||||||
* @method static BannerPatternType SKULL()
|
|
||||||
* @method static BannerPatternType SMALL_STRIPES()
|
|
||||||
* @method static BannerPatternType SQUARE_BOTTOM_LEFT()
|
|
||||||
* @method static BannerPatternType SQUARE_BOTTOM_RIGHT()
|
|
||||||
* @method static BannerPatternType SQUARE_TOP_LEFT()
|
|
||||||
* @method static BannerPatternType SQUARE_TOP_RIGHT()
|
|
||||||
* @method static BannerPatternType STRAIGHT_CROSS()
|
|
||||||
* @method static BannerPatternType STRIPE_BOTTOM()
|
|
||||||
* @method static BannerPatternType STRIPE_CENTER()
|
|
||||||
* @method static BannerPatternType STRIPE_DOWNLEFT()
|
|
||||||
* @method static BannerPatternType STRIPE_DOWNRIGHT()
|
|
||||||
* @method static BannerPatternType STRIPE_LEFT()
|
|
||||||
* @method static BannerPatternType STRIPE_MIDDLE()
|
|
||||||
* @method static BannerPatternType STRIPE_RIGHT()
|
|
||||||
* @method static BannerPatternType STRIPE_TOP()
|
|
||||||
* @method static BannerPatternType TRIANGLES_BOTTOM()
|
|
||||||
* @method static BannerPatternType TRIANGLES_TOP()
|
|
||||||
* @method static BannerPatternType TRIANGLE_BOTTOM()
|
|
||||||
* @method static BannerPatternType TRIANGLE_TOP()
|
|
||||||
*/
|
|
||||||
enum BannerPatternType{
|
enum BannerPatternType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case BORDER;
|
case BORDER;
|
||||||
case BRICKS;
|
case BRICKS;
|
||||||
case CIRCLE;
|
case CIRCLE;
|
||||||
|
@ -23,20 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static BellAttachmentType CEILING()
|
|
||||||
* @method static BellAttachmentType FLOOR()
|
|
||||||
* @method static BellAttachmentType ONE_WALL()
|
|
||||||
* @method static BellAttachmentType TWO_WALLS()
|
|
||||||
*/
|
|
||||||
enum BellAttachmentType{
|
enum BellAttachmentType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case CEILING;
|
case CEILING;
|
||||||
case FLOOR;
|
case FLOOR;
|
||||||
case ONE_WALL;
|
case ONE_WALL;
|
||||||
|
@ -24,19 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\block\inventory\BrewingStandInventory;
|
use pocketmine\block\inventory\BrewingStandInventory;
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static BrewingStandSlot EAST()
|
|
||||||
* @method static BrewingStandSlot NORTHWEST()
|
|
||||||
* @method static BrewingStandSlot SOUTHWEST()
|
|
||||||
*/
|
|
||||||
enum BrewingStandSlot{
|
enum BrewingStandSlot{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case EAST;
|
case EAST;
|
||||||
case NORTHWEST;
|
case NORTHWEST;
|
||||||
case SOUTHWEST;
|
case SOUTHWEST;
|
||||||
|
@ -23,20 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static CopperOxidation EXPOSED()
|
|
||||||
* @method static CopperOxidation NONE()
|
|
||||||
* @method static CopperOxidation OXIDIZED()
|
|
||||||
* @method static CopperOxidation WEATHERED()
|
|
||||||
*/
|
|
||||||
enum CopperOxidation : int{
|
enum CopperOxidation : int{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case NONE = 0;
|
case NONE = 0;
|
||||||
case EXPOSED = 1;
|
case EXPOSED = 1;
|
||||||
case WEATHERED = 2;
|
case WEATHERED = 2;
|
||||||
|
@ -23,21 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static CoralType BRAIN()
|
|
||||||
* @method static CoralType BUBBLE()
|
|
||||||
* @method static CoralType FIRE()
|
|
||||||
* @method static CoralType HORN()
|
|
||||||
* @method static CoralType TUBE()
|
|
||||||
*/
|
|
||||||
enum CoralType{
|
enum CoralType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case TUBE;
|
case TUBE;
|
||||||
case BRAIN;
|
case BRAIN;
|
||||||
case BUBBLE;
|
case BUBBLE;
|
||||||
|
@ -23,19 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static DirtType COARSE()
|
|
||||||
* @method static DirtType NORMAL()
|
|
||||||
* @method static DirtType ROOTED()
|
|
||||||
*/
|
|
||||||
enum DirtType{
|
enum DirtType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case NORMAL;
|
case NORMAL;
|
||||||
case COARSE;
|
case COARSE;
|
||||||
case ROOTED;
|
case ROOTED;
|
||||||
|
@ -23,20 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static DripleafState FULL_TILT()
|
|
||||||
* @method static DripleafState PARTIAL_TILT()
|
|
||||||
* @method static DripleafState STABLE()
|
|
||||||
* @method static DripleafState UNSTABLE()
|
|
||||||
*/
|
|
||||||
enum DripleafState{
|
enum DripleafState{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case STABLE;
|
case STABLE;
|
||||||
case UNSTABLE;
|
case UNSTABLE;
|
||||||
case PARTIAL_TILT;
|
case PARTIAL_TILT;
|
||||||
|
@ -24,35 +24,12 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\color\Color;
|
use pocketmine\color\Color;
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
use function spl_object_id;
|
use function spl_object_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static DyeColor BLACK()
|
|
||||||
* @method static DyeColor BLUE()
|
|
||||||
* @method static DyeColor BROWN()
|
|
||||||
* @method static DyeColor CYAN()
|
|
||||||
* @method static DyeColor GRAY()
|
|
||||||
* @method static DyeColor GREEN()
|
|
||||||
* @method static DyeColor LIGHT_BLUE()
|
|
||||||
* @method static DyeColor LIGHT_GRAY()
|
|
||||||
* @method static DyeColor LIME()
|
|
||||||
* @method static DyeColor MAGENTA()
|
|
||||||
* @method static DyeColor ORANGE()
|
|
||||||
* @method static DyeColor PINK()
|
|
||||||
* @method static DyeColor PURPLE()
|
|
||||||
* @method static DyeColor RED()
|
|
||||||
* @method static DyeColor WHITE()
|
|
||||||
* @method static DyeColor YELLOW()
|
|
||||||
*
|
|
||||||
* @phpstan-type TMetadata array{0: string, 1: Color}
|
* @phpstan-type TMetadata array{0: string, 1: Color}
|
||||||
*/
|
*/
|
||||||
enum DyeColor{
|
enum DyeColor{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case WHITE;
|
case WHITE;
|
||||||
case ORANGE;
|
case ORANGE;
|
||||||
case MAGENTA;
|
case MAGENTA;
|
||||||
|
@ -23,19 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static FroglightType OCHRE()
|
|
||||||
* @method static FroglightType PEARLESCENT()
|
|
||||||
* @method static FroglightType VERDANT()
|
|
||||||
*/
|
|
||||||
enum FroglightType{
|
enum FroglightType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case OCHRE;
|
case OCHRE;
|
||||||
case PEARLESCENT;
|
case PEARLESCENT;
|
||||||
case VERDANT;
|
case VERDANT;
|
||||||
|
@ -23,26 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static LeavesType ACACIA()
|
|
||||||
* @method static LeavesType AZALEA()
|
|
||||||
* @method static LeavesType BIRCH()
|
|
||||||
* @method static LeavesType CHERRY()
|
|
||||||
* @method static LeavesType DARK_OAK()
|
|
||||||
* @method static LeavesType FLOWERING_AZALEA()
|
|
||||||
* @method static LeavesType JUNGLE()
|
|
||||||
* @method static LeavesType MANGROVE()
|
|
||||||
* @method static LeavesType OAK()
|
|
||||||
* @method static LeavesType SPRUCE()
|
|
||||||
*/
|
|
||||||
enum LeavesType{
|
enum LeavesType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case OAK;
|
case OAK;
|
||||||
case SPRUCE;
|
case SPRUCE;
|
||||||
case BIRCH;
|
case BIRCH;
|
||||||
|
@ -24,24 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static LeverFacing DOWN_AXIS_X()
|
|
||||||
* @method static LeverFacing DOWN_AXIS_Z()
|
|
||||||
* @method static LeverFacing EAST()
|
|
||||||
* @method static LeverFacing NORTH()
|
|
||||||
* @method static LeverFacing SOUTH()
|
|
||||||
* @method static LeverFacing UP_AXIS_X()
|
|
||||||
* @method static LeverFacing UP_AXIS_Z()
|
|
||||||
* @method static LeverFacing WEST()
|
|
||||||
*/
|
|
||||||
enum LeverFacing{
|
enum LeverFacing{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case UP_AXIS_X;
|
case UP_AXIS_X;
|
||||||
case UP_AXIS_Z;
|
case UP_AXIS_Z;
|
||||||
case DOWN_AXIS_X;
|
case DOWN_AXIS_X;
|
||||||
|
@ -23,23 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static MobHeadType CREEPER()
|
|
||||||
* @method static MobHeadType DRAGON()
|
|
||||||
* @method static MobHeadType PIGLIN()
|
|
||||||
* @method static MobHeadType PLAYER()
|
|
||||||
* @method static MobHeadType SKELETON()
|
|
||||||
* @method static MobHeadType WITHER_SKELETON()
|
|
||||||
* @method static MobHeadType ZOMBIE()
|
|
||||||
*/
|
|
||||||
enum MobHeadType{
|
enum MobHeadType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case SKELETON;
|
case SKELETON;
|
||||||
case WITHER_SKELETON;
|
case WITHER_SKELETON;
|
||||||
case ZOMBIE;
|
case ZOMBIE;
|
||||||
|
@ -23,27 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static MushroomBlockType ALL_CAP()
|
|
||||||
* @method static MushroomBlockType CAP_EAST()
|
|
||||||
* @method static MushroomBlockType CAP_MIDDLE()
|
|
||||||
* @method static MushroomBlockType CAP_NORTH()
|
|
||||||
* @method static MushroomBlockType CAP_NORTHEAST()
|
|
||||||
* @method static MushroomBlockType CAP_NORTHWEST()
|
|
||||||
* @method static MushroomBlockType CAP_SOUTH()
|
|
||||||
* @method static MushroomBlockType CAP_SOUTHEAST()
|
|
||||||
* @method static MushroomBlockType CAP_SOUTHWEST()
|
|
||||||
* @method static MushroomBlockType CAP_WEST()
|
|
||||||
* @method static MushroomBlockType PORES()
|
|
||||||
*/
|
|
||||||
enum MushroomBlockType{
|
enum MushroomBlockType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case PORES;
|
case PORES;
|
||||||
case CAP_NORTHWEST;
|
case CAP_NORTHWEST;
|
||||||
case CAP_NORTH;
|
case CAP_NORTH;
|
||||||
|
@ -26,34 +26,12 @@ namespace pocketmine\block\utils;
|
|||||||
use pocketmine\lang\KnownTranslationFactory;
|
use pocketmine\lang\KnownTranslationFactory;
|
||||||
use pocketmine\lang\Translatable;
|
use pocketmine\lang\Translatable;
|
||||||
use pocketmine\network\mcpe\protocol\types\LevelSoundEvent;
|
use pocketmine\network\mcpe\protocol\types\LevelSoundEvent;
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
use function spl_object_id;
|
use function spl_object_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static RecordType DISK_11()
|
|
||||||
* @method static RecordType DISK_13()
|
|
||||||
* @method static RecordType DISK_5()
|
|
||||||
* @method static RecordType DISK_BLOCKS()
|
|
||||||
* @method static RecordType DISK_CAT()
|
|
||||||
* @method static RecordType DISK_CHIRP()
|
|
||||||
* @method static RecordType DISK_FAR()
|
|
||||||
* @method static RecordType DISK_MALL()
|
|
||||||
* @method static RecordType DISK_MELLOHI()
|
|
||||||
* @method static RecordType DISK_OTHERSIDE()
|
|
||||||
* @method static RecordType DISK_PIGSTEP()
|
|
||||||
* @method static RecordType DISK_STAL()
|
|
||||||
* @method static RecordType DISK_STRAD()
|
|
||||||
* @method static RecordType DISK_WAIT()
|
|
||||||
* @method static RecordType DISK_WARD()
|
|
||||||
*
|
|
||||||
* @phpstan-type TMetadata array{0: string, 1: LevelSoundEvent::*, 2: Translatable}
|
* @phpstan-type TMetadata array{0: string, 1: LevelSoundEvent::*, 2: Translatable}
|
||||||
*/
|
*/
|
||||||
enum RecordType{
|
enum RecordType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case DISK_13;
|
case DISK_13;
|
||||||
case DISK_5;
|
case DISK_5;
|
||||||
case DISK_CAT;
|
case DISK_CAT;
|
||||||
|
@ -23,23 +23,9 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
use pocketmine\world\generator\object\TreeType;
|
use pocketmine\world\generator\object\TreeType;
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static SaplingType ACACIA()
|
|
||||||
* @method static SaplingType BIRCH()
|
|
||||||
* @method static SaplingType DARK_OAK()
|
|
||||||
* @method static SaplingType JUNGLE()
|
|
||||||
* @method static SaplingType OAK()
|
|
||||||
* @method static SaplingType SPRUCE()
|
|
||||||
*/
|
|
||||||
enum SaplingType{
|
enum SaplingType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case OAK;
|
case OAK;
|
||||||
case SPRUCE;
|
case SPRUCE;
|
||||||
case BIRCH;
|
case BIRCH;
|
||||||
|
@ -23,19 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static SlabType BOTTOM()
|
|
||||||
* @method static SlabType DOUBLE()
|
|
||||||
* @method static SlabType TOP()
|
|
||||||
*/
|
|
||||||
enum SlabType{
|
enum SlabType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case BOTTOM;
|
case BOTTOM;
|
||||||
case TOP;
|
case TOP;
|
||||||
case DOUBLE;
|
case DOUBLE;
|
||||||
|
@ -23,21 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static StairShape INNER_LEFT()
|
|
||||||
* @method static StairShape INNER_RIGHT()
|
|
||||||
* @method static StairShape OUTER_LEFT()
|
|
||||||
* @method static StairShape OUTER_RIGHT()
|
|
||||||
* @method static StairShape STRAIGHT()
|
|
||||||
*/
|
|
||||||
enum StairShape{
|
enum StairShape{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case STRAIGHT;
|
case STRAIGHT;
|
||||||
case INNER_LEFT;
|
case INNER_LEFT;
|
||||||
case INNER_RIGHT;
|
case INNER_RIGHT;
|
||||||
|
@ -23,20 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static SupportType CENTER()
|
|
||||||
* @method static SupportType EDGE()
|
|
||||||
* @method static SupportType FULL()
|
|
||||||
* @method static SupportType NONE()
|
|
||||||
*/
|
|
||||||
enum SupportType{
|
enum SupportType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case FULL;
|
case FULL;
|
||||||
case CENTER;
|
case CENTER;
|
||||||
case EDGE;
|
case EDGE;
|
||||||
|
@ -23,18 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static WallConnectionType SHORT()
|
|
||||||
* @method static WallConnectionType TALL()
|
|
||||||
*/
|
|
||||||
enum WallConnectionType{
|
enum WallConnectionType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case SHORT;
|
case SHORT;
|
||||||
case TALL;
|
case TALL;
|
||||||
}
|
}
|
||||||
|
@ -21,11 +21,12 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
/**
|
use pocketmine\block\Water;
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
class WeightedPressurePlateLight extends WeightedPressurePlate{
|
|
||||||
|
|
||||||
|
interface Waterloggable{
|
||||||
|
public function getWaterState() : ?Water;
|
||||||
|
|
||||||
|
public function setWaterState(?Water $state) : Waterloggable;
|
||||||
}
|
}
|
@ -21,20 +21,32 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace pocketmine\scheduler;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
class PublishProgressRaceAsyncTask extends AsyncTask{
|
use pocketmine\block\Water;
|
||||||
/** @var bool */
|
|
||||||
public static $success = false;
|
|
||||||
|
|
||||||
public function onRun() : void{
|
trait WaterloggableTrait{
|
||||||
$this->publishProgress("hello");
|
protected ?Water $waterState = null;
|
||||||
|
|
||||||
|
public function getWaterState() : ?Water {
|
||||||
|
return $this->waterState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onProgressUpdate($progress) : void{
|
public function setWaterState(?Water $state) : self{
|
||||||
if($progress === "hello"){
|
$this->waterState = $state;
|
||||||
// thread local on main thread
|
|
||||||
self::$success = true;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function readStateFromWorld() : void{
|
||||||
|
$this->waterState?->readStateFromWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onNearbyBlockChange() : void{
|
||||||
|
$this->waterState?->onNearbyBlockChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onScheduledUpdate() : void{
|
||||||
|
$this->waterState?->onScheduledUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -23,26 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\utils;
|
namespace pocketmine\block\utils;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static WoodType ACACIA()
|
|
||||||
* @method static WoodType BIRCH()
|
|
||||||
* @method static WoodType CHERRY()
|
|
||||||
* @method static WoodType CRIMSON()
|
|
||||||
* @method static WoodType DARK_OAK()
|
|
||||||
* @method static WoodType JUNGLE()
|
|
||||||
* @method static WoodType MANGROVE()
|
|
||||||
* @method static WoodType OAK()
|
|
||||||
* @method static WoodType SPRUCE()
|
|
||||||
* @method static WoodType WARPED()
|
|
||||||
*/
|
|
||||||
enum WoodType{
|
enum WoodType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case OAK;
|
case OAK;
|
||||||
case SPRUCE;
|
case SPRUCE;
|
||||||
case BIRCH;
|
case BIRCH;
|
||||||
|
@ -66,7 +66,7 @@ abstract class Command{
|
|||||||
|
|
||||||
/** @var string[] */
|
/** @var string[] */
|
||||||
private array $permission = [];
|
private array $permission = [];
|
||||||
private ?string $permissionMessage = null;
|
private Translatable|string|null $permissionMessage = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string[] $aliases
|
* @param string[] $aliases
|
||||||
@ -122,10 +122,11 @@ abstract class Command{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->permissionMessage === null){
|
$message = $this->permissionMessage ?? KnownTranslationFactory::pocketmine_command_error_permission($this->name);
|
||||||
$target->sendMessage(KnownTranslationFactory::pocketmine_command_error_permission($this->name)->prefix(TextFormat::RED));
|
if($message instanceof Translatable){
|
||||||
}elseif($this->permissionMessage !== ""){
|
$target->sendMessage($message->prefix(TextFormat::RED));
|
||||||
$target->sendMessage(str_replace("<permission>", $permission ?? implode(";", $this->permission), $this->permissionMessage));
|
}elseif($message !== ""){
|
||||||
|
$target->sendMessage(str_replace("<permission>", $permission ?? implode(";", $this->permission), $message));
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -198,7 +199,7 @@ abstract class Command{
|
|||||||
return $this->activeAliases;
|
return $this->activeAliases;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPermissionMessage() : ?string{
|
public function getPermissionMessage() : Translatable|string|null{
|
||||||
return $this->permissionMessage;
|
return $this->permissionMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +227,7 @@ abstract class Command{
|
|||||||
$this->description = $description;
|
$this->description = $description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setPermissionMessage(string $permissionMessage) : void{
|
public function setPermissionMessage(Translatable|string $permissionMessage) : void{
|
||||||
$this->permissionMessage = $permissionMessage;
|
$this->permissionMessage = $permissionMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,10 +152,10 @@ final class CraftingManagerFromDataHelper{
|
|||||||
* @return mixed[]
|
* @return mixed[]
|
||||||
*
|
*
|
||||||
* @phpstan-template TData of object
|
* @phpstan-template TData of object
|
||||||
* @phpstan-param class-string<TData> $modelCLass
|
* @phpstan-param class-string<TData> $modelClass
|
||||||
* @phpstan-return list<TData>
|
* @phpstan-return list<TData>
|
||||||
*/
|
*/
|
||||||
public static function loadJsonArrayOfObjectsFile(string $filePath, string $modelCLass) : array{
|
public static function loadJsonArrayOfObjectsFile(string $filePath, string $modelClass) : array{
|
||||||
$recipes = json_decode(Filesystem::fileGetContents($filePath));
|
$recipes = json_decode(Filesystem::fileGetContents($filePath));
|
||||||
if(!is_array($recipes)){
|
if(!is_array($recipes)){
|
||||||
throw new SavedDataLoadingException("$filePath root should be an array, got " . get_debug_type($recipes));
|
throw new SavedDataLoadingException("$filePath root should be an array, got " . get_debug_type($recipes));
|
||||||
@ -166,7 +166,7 @@ final class CraftingManagerFromDataHelper{
|
|||||||
$mapper->bExceptionOnUndefinedProperty = true;
|
$mapper->bExceptionOnUndefinedProperty = true;
|
||||||
$mapper->bExceptionOnMissingData = true;
|
$mapper->bExceptionOnMissingData = true;
|
||||||
|
|
||||||
return self::loadJsonObjectListIntoModel($mapper, $modelCLass, $recipes);
|
return self::loadJsonObjectListIntoModel($mapper, $modelClass, $recipes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,7 +23,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\crafting;
|
namespace pocketmine\crafting;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
use pocketmine\world\sound\BlastFurnaceSound;
|
use pocketmine\world\sound\BlastFurnaceSound;
|
||||||
use pocketmine\world\sound\CampfireSound;
|
use pocketmine\world\sound\CampfireSound;
|
||||||
use pocketmine\world\sound\FurnaceSound;
|
use pocketmine\world\sound\FurnaceSound;
|
||||||
@ -32,20 +31,9 @@ use pocketmine\world\sound\Sound;
|
|||||||
use function spl_object_id;
|
use function spl_object_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static FurnaceType BLAST_FURNACE()
|
|
||||||
* @method static FurnaceType CAMPFIRE()
|
|
||||||
* @method static FurnaceType FURNACE()
|
|
||||||
* @method static FurnaceType SMOKER()
|
|
||||||
* @method static FurnaceType SOUL_CAMPFIRE()
|
|
||||||
*
|
|
||||||
* @phpstan-type TMetadata array{0: int, 1: Sound}
|
* @phpstan-type TMetadata array{0: int, 1: Sound}
|
||||||
*/
|
*/
|
||||||
enum FurnaceType{
|
enum FurnaceType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case FURNACE;
|
case FURNACE;
|
||||||
case BLAST_FURNACE;
|
case BLAST_FURNACE;
|
||||||
case SMOKER;
|
case SMOKER;
|
||||||
|
@ -23,20 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\crafting;
|
namespace pocketmine\crafting;
|
||||||
|
|
||||||
use pocketmine\utils\LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: These tags need to be removed once we get rid of LegacyEnumShimTrait (PM6)
|
|
||||||
* These are retained for backwards compatibility only.
|
|
||||||
*
|
|
||||||
* @method static ShapelessRecipeType CARTOGRAPHY()
|
|
||||||
* @method static ShapelessRecipeType CRAFTING()
|
|
||||||
* @method static ShapelessRecipeType SMITHING()
|
|
||||||
* @method static ShapelessRecipeType STONECUTTER()
|
|
||||||
*/
|
|
||||||
enum ShapelessRecipeType{
|
enum ShapelessRecipeType{
|
||||||
use LegacyEnumShimTrait;
|
|
||||||
|
|
||||||
case CRAFTING;
|
case CRAFTING;
|
||||||
case STONECUTTER;
|
case STONECUTTER;
|
||||||
case SMITHING;
|
case SMITHING;
|
||||||
|
@ -31,7 +31,8 @@ final class BedrockDataFiles{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public const BANNER_PATTERNS_JSON = BEDROCK_DATA_PATH . '/banner_patterns.json';
|
public const BANNER_PATTERNS_JSON = BEDROCK_DATA_PATH . '/banner_patterns.json';
|
||||||
public const BIOME_DEFINITIONS_JSON = BEDROCK_DATA_PATH . '/biome_definitions.json';
|
public const BIOME_DEFINITIONS_NBT = BEDROCK_DATA_PATH . '/biome_definitions.nbt';
|
||||||
|
public const BIOME_DEFINITIONS_FULL_NBT = BEDROCK_DATA_PATH . '/biome_definitions_full.nbt';
|
||||||
public const BIOME_ID_MAP_JSON = BEDROCK_DATA_PATH . '/biome_id_map.json';
|
public const BIOME_ID_MAP_JSON = BEDROCK_DATA_PATH . '/biome_id_map.json';
|
||||||
public const BLOCK_ID_TO_ITEM_ID_MAP_JSON = BEDROCK_DATA_PATH . '/block_id_to_item_id_map.json';
|
public const BLOCK_ID_TO_ITEM_ID_MAP_JSON = BEDROCK_DATA_PATH . '/block_id_to_item_id_map.json';
|
||||||
public const BLOCK_PROPERTIES_TABLE_JSON = BEDROCK_DATA_PATH . '/block_properties_table.json';
|
public const BLOCK_PROPERTIES_TABLE_JSON = BEDROCK_DATA_PATH . '/block_properties_table.json';
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace pocketmine\data\bedrock;
|
|
||||||
|
|
||||||
use pocketmine\world\format\io\leveldb\ChunkVersion;
|
|
||||||
use pocketmine\world\format\io\leveldb\SubChunkVersion;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* All version infos related to current Minecraft data version support
|
|
||||||
* These are mostly related to world storage but may also influence network stuff
|
|
||||||
*/
|
|
||||||
final class WorldDataVersions{
|
|
||||||
/**
|
|
||||||
* Bedrock version of the most recent backwards-incompatible change to blockstates.
|
|
||||||
*
|
|
||||||
* This is *NOT* the same as current game version. It should match the numbers in the
|
|
||||||
* newest blockstate upgrade schema used in BedrockBlockUpgradeSchema.
|
|
||||||
*/
|
|
||||||
public const BLOCK_STATES =
|
|
||||||
(1 << 24) | //major
|
|
||||||
(21 << 16) | //minor
|
|
||||||
(60 << 8) | //patch
|
|
||||||
(33); //revision
|
|
||||||
|
|
||||||
public const CHUNK = ChunkVersion::v1_21_40;
|
|
||||||
public const SUBCHUNK = SubChunkVersion::PALETTED_MULTI;
|
|
||||||
|
|
||||||
public const STORAGE = 10;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Highest NetworkVersion of Bedrock worlds currently supported by PocketMine-MP.
|
|
||||||
*
|
|
||||||
* This may be lower than the current protocol version if PocketMine-MP does not yet support features of the newer
|
|
||||||
* version. This allows the protocol to be updated independently of world format support.
|
|
||||||
*/
|
|
||||||
public const NETWORK = 827;
|
|
||||||
|
|
||||||
public const LAST_OPENED_IN = [
|
|
||||||
1, //major
|
|
||||||
21, //minor
|
|
||||||
100, //patch
|
|
||||||
23, //revision
|
|
||||||
0 //is beta
|
|
||||||
];
|
|
||||||
}
|
|
@ -23,7 +23,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\data\bedrock\block;
|
namespace pocketmine\data\bedrock\block;
|
||||||
|
|
||||||
use pocketmine\data\bedrock\WorldDataVersions;
|
|
||||||
use pocketmine\nbt\NbtException;
|
use pocketmine\nbt\NbtException;
|
||||||
use pocketmine\nbt\tag\CompoundTag;
|
use pocketmine\nbt\tag\CompoundTag;
|
||||||
use pocketmine\nbt\tag\Tag;
|
use pocketmine\nbt\tag\Tag;
|
||||||
@ -37,7 +36,17 @@ use function implode;
|
|||||||
* Contains the common information found in a serialized blockstate.
|
* Contains the common information found in a serialized blockstate.
|
||||||
*/
|
*/
|
||||||
final class BlockStateData{
|
final class BlockStateData{
|
||||||
public const CURRENT_VERSION = WorldDataVersions::BLOCK_STATES;
|
/**
|
||||||
|
* Bedrock version of the most recent backwards-incompatible change to blockstates.
|
||||||
|
*
|
||||||
|
* This is *not* the same as current game version. It should match the numbers in the
|
||||||
|
* newest blockstate upgrade schema used in BedrockBlockUpgradeSchema.
|
||||||
|
*/
|
||||||
|
public const CURRENT_VERSION =
|
||||||
|
(1 << 24) | //major
|
||||||
|
(21 << 16) | //minor
|
||||||
|
(60 << 8) | //patch
|
||||||
|
(33); //revision
|
||||||
|
|
||||||
public const TAG_NAME = "name";
|
public const TAG_NAME = "name";
|
||||||
public const TAG_STATES = "states";
|
public const TAG_STATES = "states";
|
||||||
|
@ -113,7 +113,6 @@ final class BlockStateNames{
|
|||||||
public const RAIL_DATA_BIT = "rail_data_bit";
|
public const RAIL_DATA_BIT = "rail_data_bit";
|
||||||
public const RAIL_DIRECTION = "rail_direction";
|
public const RAIL_DIRECTION = "rail_direction";
|
||||||
public const REDSTONE_SIGNAL = "redstone_signal";
|
public const REDSTONE_SIGNAL = "redstone_signal";
|
||||||
public const REHYDRATION_LEVEL = "rehydration_level";
|
|
||||||
public const REPEATER_DELAY = "repeater_delay";
|
public const REPEATER_DELAY = "repeater_delay";
|
||||||
public const RESPAWN_ANCHOR_CHARGE = "respawn_anchor_charge";
|
public const RESPAWN_ANCHOR_CHARGE = "respawn_anchor_charge";
|
||||||
public const ROTATION = "rotation";
|
public const ROTATION = "rotation";
|
||||||
|
@ -175,9 +175,7 @@ final class BlockTypeNames{
|
|||||||
public const BUBBLE_CORAL_FAN = "minecraft:bubble_coral_fan";
|
public const BUBBLE_CORAL_FAN = "minecraft:bubble_coral_fan";
|
||||||
public const BUBBLE_CORAL_WALL_FAN = "minecraft:bubble_coral_wall_fan";
|
public const BUBBLE_CORAL_WALL_FAN = "minecraft:bubble_coral_wall_fan";
|
||||||
public const BUDDING_AMETHYST = "minecraft:budding_amethyst";
|
public const BUDDING_AMETHYST = "minecraft:budding_amethyst";
|
||||||
public const BUSH = "minecraft:bush";
|
|
||||||
public const CACTUS = "minecraft:cactus";
|
public const CACTUS = "minecraft:cactus";
|
||||||
public const CACTUS_FLOWER = "minecraft:cactus_flower";
|
|
||||||
public const CAKE = "minecraft:cake";
|
public const CAKE = "minecraft:cake";
|
||||||
public const CALCITE = "minecraft:calcite";
|
public const CALCITE = "minecraft:calcite";
|
||||||
public const CALIBRATED_SCULK_SENSOR = "minecraft:calibrated_sculk_sensor";
|
public const CALIBRATED_SCULK_SENSOR = "minecraft:calibrated_sculk_sensor";
|
||||||
@ -255,7 +253,6 @@ final class BlockTypeNames{
|
|||||||
public const CONDUIT = "minecraft:conduit";
|
public const CONDUIT = "minecraft:conduit";
|
||||||
public const COPPER_BLOCK = "minecraft:copper_block";
|
public const COPPER_BLOCK = "minecraft:copper_block";
|
||||||
public const COPPER_BULB = "minecraft:copper_bulb";
|
public const COPPER_BULB = "minecraft:copper_bulb";
|
||||||
public const COPPER_CHEST = "minecraft:copper_chest";
|
|
||||||
public const COPPER_DOOR = "minecraft:copper_door";
|
public const COPPER_DOOR = "minecraft:copper_door";
|
||||||
public const COPPER_GRATE = "minecraft:copper_grate";
|
public const COPPER_GRATE = "minecraft:copper_grate";
|
||||||
public const COPPER_ORE = "minecraft:copper_ore";
|
public const COPPER_ORE = "minecraft:copper_ore";
|
||||||
@ -393,7 +390,6 @@ final class BlockTypeNames{
|
|||||||
public const DOUBLE_CUT_COPPER_SLAB = "minecraft:double_cut_copper_slab";
|
public const DOUBLE_CUT_COPPER_SLAB = "minecraft:double_cut_copper_slab";
|
||||||
public const DRAGON_EGG = "minecraft:dragon_egg";
|
public const DRAGON_EGG = "minecraft:dragon_egg";
|
||||||
public const DRAGON_HEAD = "minecraft:dragon_head";
|
public const DRAGON_HEAD = "minecraft:dragon_head";
|
||||||
public const DRIED_GHAST = "minecraft:dried_ghast";
|
|
||||||
public const DRIED_KELP_BLOCK = "minecraft:dried_kelp_block";
|
public const DRIED_KELP_BLOCK = "minecraft:dried_kelp_block";
|
||||||
public const DRIPSTONE_BLOCK = "minecraft:dripstone_block";
|
public const DRIPSTONE_BLOCK = "minecraft:dripstone_block";
|
||||||
public const DROPPER = "minecraft:dropper";
|
public const DROPPER = "minecraft:dropper";
|
||||||
@ -534,7 +530,6 @@ final class BlockTypeNames{
|
|||||||
public const EXPOSED_CHISELED_COPPER = "minecraft:exposed_chiseled_copper";
|
public const EXPOSED_CHISELED_COPPER = "minecraft:exposed_chiseled_copper";
|
||||||
public const EXPOSED_COPPER = "minecraft:exposed_copper";
|
public const EXPOSED_COPPER = "minecraft:exposed_copper";
|
||||||
public const EXPOSED_COPPER_BULB = "minecraft:exposed_copper_bulb";
|
public const EXPOSED_COPPER_BULB = "minecraft:exposed_copper_bulb";
|
||||||
public const EXPOSED_COPPER_CHEST = "minecraft:exposed_copper_chest";
|
|
||||||
public const EXPOSED_COPPER_DOOR = "minecraft:exposed_copper_door";
|
public const EXPOSED_COPPER_DOOR = "minecraft:exposed_copper_door";
|
||||||
public const EXPOSED_COPPER_GRATE = "minecraft:exposed_copper_grate";
|
public const EXPOSED_COPPER_GRATE = "minecraft:exposed_copper_grate";
|
||||||
public const EXPOSED_COPPER_TRAPDOOR = "minecraft:exposed_copper_trapdoor";
|
public const EXPOSED_COPPER_TRAPDOOR = "minecraft:exposed_copper_trapdoor";
|
||||||
@ -550,7 +545,6 @@ final class BlockTypeNames{
|
|||||||
public const FIRE_CORAL_BLOCK = "minecraft:fire_coral_block";
|
public const FIRE_CORAL_BLOCK = "minecraft:fire_coral_block";
|
||||||
public const FIRE_CORAL_FAN = "minecraft:fire_coral_fan";
|
public const FIRE_CORAL_FAN = "minecraft:fire_coral_fan";
|
||||||
public const FIRE_CORAL_WALL_FAN = "minecraft:fire_coral_wall_fan";
|
public const FIRE_CORAL_WALL_FAN = "minecraft:fire_coral_wall_fan";
|
||||||
public const FIREFLY_BUSH = "minecraft:firefly_bush";
|
|
||||||
public const FLETCHING_TABLE = "minecraft:fletching_table";
|
public const FLETCHING_TABLE = "minecraft:fletching_table";
|
||||||
public const FLOWER_POT = "minecraft:flower_pot";
|
public const FLOWER_POT = "minecraft:flower_pot";
|
||||||
public const FLOWERING_AZALEA = "minecraft:flowering_azalea";
|
public const FLOWERING_AZALEA = "minecraft:flowering_azalea";
|
||||||
@ -691,7 +685,6 @@ final class BlockTypeNames{
|
|||||||
public const LARGE_AMETHYST_BUD = "minecraft:large_amethyst_bud";
|
public const LARGE_AMETHYST_BUD = "minecraft:large_amethyst_bud";
|
||||||
public const LARGE_FERN = "minecraft:large_fern";
|
public const LARGE_FERN = "minecraft:large_fern";
|
||||||
public const LAVA = "minecraft:lava";
|
public const LAVA = "minecraft:lava";
|
||||||
public const LEAF_LITTER = "minecraft:leaf_litter";
|
|
||||||
public const LECTERN = "minecraft:lectern";
|
public const LECTERN = "minecraft:lectern";
|
||||||
public const LEVER = "minecraft:lever";
|
public const LEVER = "minecraft:lever";
|
||||||
public const LIGHT_BLOCK_0 = "minecraft:light_block_0";
|
public const LIGHT_BLOCK_0 = "minecraft:light_block_0";
|
||||||
@ -859,7 +852,6 @@ final class BlockTypeNames{
|
|||||||
public const OXIDIZED_CHISELED_COPPER = "minecraft:oxidized_chiseled_copper";
|
public const OXIDIZED_CHISELED_COPPER = "minecraft:oxidized_chiseled_copper";
|
||||||
public const OXIDIZED_COPPER = "minecraft:oxidized_copper";
|
public const OXIDIZED_COPPER = "minecraft:oxidized_copper";
|
||||||
public const OXIDIZED_COPPER_BULB = "minecraft:oxidized_copper_bulb";
|
public const OXIDIZED_COPPER_BULB = "minecraft:oxidized_copper_bulb";
|
||||||
public const OXIDIZED_COPPER_CHEST = "minecraft:oxidized_copper_chest";
|
|
||||||
public const OXIDIZED_COPPER_DOOR = "minecraft:oxidized_copper_door";
|
public const OXIDIZED_COPPER_DOOR = "minecraft:oxidized_copper_door";
|
||||||
public const OXIDIZED_COPPER_GRATE = "minecraft:oxidized_copper_grate";
|
public const OXIDIZED_COPPER_GRATE = "minecraft:oxidized_copper_grate";
|
||||||
public const OXIDIZED_COPPER_TRAPDOOR = "minecraft:oxidized_copper_trapdoor";
|
public const OXIDIZED_COPPER_TRAPDOOR = "minecraft:oxidized_copper_trapdoor";
|
||||||
@ -1051,7 +1043,6 @@ final class BlockTypeNames{
|
|||||||
public const SEA_LANTERN = "minecraft:sea_lantern";
|
public const SEA_LANTERN = "minecraft:sea_lantern";
|
||||||
public const SEA_PICKLE = "minecraft:sea_pickle";
|
public const SEA_PICKLE = "minecraft:sea_pickle";
|
||||||
public const SEAGRASS = "minecraft:seagrass";
|
public const SEAGRASS = "minecraft:seagrass";
|
||||||
public const SHORT_DRY_GRASS = "minecraft:short_dry_grass";
|
|
||||||
public const SHORT_GRASS = "minecraft:short_grass";
|
public const SHORT_GRASS = "minecraft:short_grass";
|
||||||
public const SHROOMLIGHT = "minecraft:shroomlight";
|
public const SHROOMLIGHT = "minecraft:shroomlight";
|
||||||
public const SILVER_GLAZED_TERRACOTTA = "minecraft:silver_glazed_terracotta";
|
public const SILVER_GLAZED_TERRACOTTA = "minecraft:silver_glazed_terracotta";
|
||||||
@ -1149,7 +1140,6 @@ final class BlockTypeNames{
|
|||||||
public const SUSPICIOUS_GRAVEL = "minecraft:suspicious_gravel";
|
public const SUSPICIOUS_GRAVEL = "minecraft:suspicious_gravel";
|
||||||
public const SUSPICIOUS_SAND = "minecraft:suspicious_sand";
|
public const SUSPICIOUS_SAND = "minecraft:suspicious_sand";
|
||||||
public const SWEET_BERRY_BUSH = "minecraft:sweet_berry_bush";
|
public const SWEET_BERRY_BUSH = "minecraft:sweet_berry_bush";
|
||||||
public const TALL_DRY_GRASS = "minecraft:tall_dry_grass";
|
|
||||||
public const TALL_GRASS = "minecraft:tall_grass";
|
public const TALL_GRASS = "minecraft:tall_grass";
|
||||||
public const TARGET = "minecraft:target";
|
public const TARGET = "minecraft:target";
|
||||||
public const TINTED_GLASS = "minecraft:tinted_glass";
|
public const TINTED_GLASS = "minecraft:tinted_glass";
|
||||||
@ -1214,7 +1204,6 @@ final class BlockTypeNames{
|
|||||||
public const WAXED_CHISELED_COPPER = "minecraft:waxed_chiseled_copper";
|
public const WAXED_CHISELED_COPPER = "minecraft:waxed_chiseled_copper";
|
||||||
public const WAXED_COPPER = "minecraft:waxed_copper";
|
public const WAXED_COPPER = "minecraft:waxed_copper";
|
||||||
public const WAXED_COPPER_BULB = "minecraft:waxed_copper_bulb";
|
public const WAXED_COPPER_BULB = "minecraft:waxed_copper_bulb";
|
||||||
public const WAXED_COPPER_CHEST = "minecraft:waxed_copper_chest";
|
|
||||||
public const WAXED_COPPER_DOOR = "minecraft:waxed_copper_door";
|
public const WAXED_COPPER_DOOR = "minecraft:waxed_copper_door";
|
||||||
public const WAXED_COPPER_GRATE = "minecraft:waxed_copper_grate";
|
public const WAXED_COPPER_GRATE = "minecraft:waxed_copper_grate";
|
||||||
public const WAXED_COPPER_TRAPDOOR = "minecraft:waxed_copper_trapdoor";
|
public const WAXED_COPPER_TRAPDOOR = "minecraft:waxed_copper_trapdoor";
|
||||||
@ -1225,7 +1214,6 @@ final class BlockTypeNames{
|
|||||||
public const WAXED_EXPOSED_CHISELED_COPPER = "minecraft:waxed_exposed_chiseled_copper";
|
public const WAXED_EXPOSED_CHISELED_COPPER = "minecraft:waxed_exposed_chiseled_copper";
|
||||||
public const WAXED_EXPOSED_COPPER = "minecraft:waxed_exposed_copper";
|
public const WAXED_EXPOSED_COPPER = "minecraft:waxed_exposed_copper";
|
||||||
public const WAXED_EXPOSED_COPPER_BULB = "minecraft:waxed_exposed_copper_bulb";
|
public const WAXED_EXPOSED_COPPER_BULB = "minecraft:waxed_exposed_copper_bulb";
|
||||||
public const WAXED_EXPOSED_COPPER_CHEST = "minecraft:waxed_exposed_copper_chest";
|
|
||||||
public const WAXED_EXPOSED_COPPER_DOOR = "minecraft:waxed_exposed_copper_door";
|
public const WAXED_EXPOSED_COPPER_DOOR = "minecraft:waxed_exposed_copper_door";
|
||||||
public const WAXED_EXPOSED_COPPER_GRATE = "minecraft:waxed_exposed_copper_grate";
|
public const WAXED_EXPOSED_COPPER_GRATE = "minecraft:waxed_exposed_copper_grate";
|
||||||
public const WAXED_EXPOSED_COPPER_TRAPDOOR = "minecraft:waxed_exposed_copper_trapdoor";
|
public const WAXED_EXPOSED_COPPER_TRAPDOOR = "minecraft:waxed_exposed_copper_trapdoor";
|
||||||
@ -1236,7 +1224,6 @@ final class BlockTypeNames{
|
|||||||
public const WAXED_OXIDIZED_CHISELED_COPPER = "minecraft:waxed_oxidized_chiseled_copper";
|
public const WAXED_OXIDIZED_CHISELED_COPPER = "minecraft:waxed_oxidized_chiseled_copper";
|
||||||
public const WAXED_OXIDIZED_COPPER = "minecraft:waxed_oxidized_copper";
|
public const WAXED_OXIDIZED_COPPER = "minecraft:waxed_oxidized_copper";
|
||||||
public const WAXED_OXIDIZED_COPPER_BULB = "minecraft:waxed_oxidized_copper_bulb";
|
public const WAXED_OXIDIZED_COPPER_BULB = "minecraft:waxed_oxidized_copper_bulb";
|
||||||
public const WAXED_OXIDIZED_COPPER_CHEST = "minecraft:waxed_oxidized_copper_chest";
|
|
||||||
public const WAXED_OXIDIZED_COPPER_DOOR = "minecraft:waxed_oxidized_copper_door";
|
public const WAXED_OXIDIZED_COPPER_DOOR = "minecraft:waxed_oxidized_copper_door";
|
||||||
public const WAXED_OXIDIZED_COPPER_GRATE = "minecraft:waxed_oxidized_copper_grate";
|
public const WAXED_OXIDIZED_COPPER_GRATE = "minecraft:waxed_oxidized_copper_grate";
|
||||||
public const WAXED_OXIDIZED_COPPER_TRAPDOOR = "minecraft:waxed_oxidized_copper_trapdoor";
|
public const WAXED_OXIDIZED_COPPER_TRAPDOOR = "minecraft:waxed_oxidized_copper_trapdoor";
|
||||||
@ -1247,7 +1234,6 @@ final class BlockTypeNames{
|
|||||||
public const WAXED_WEATHERED_CHISELED_COPPER = "minecraft:waxed_weathered_chiseled_copper";
|
public const WAXED_WEATHERED_CHISELED_COPPER = "minecraft:waxed_weathered_chiseled_copper";
|
||||||
public const WAXED_WEATHERED_COPPER = "minecraft:waxed_weathered_copper";
|
public const WAXED_WEATHERED_COPPER = "minecraft:waxed_weathered_copper";
|
||||||
public const WAXED_WEATHERED_COPPER_BULB = "minecraft:waxed_weathered_copper_bulb";
|
public const WAXED_WEATHERED_COPPER_BULB = "minecraft:waxed_weathered_copper_bulb";
|
||||||
public const WAXED_WEATHERED_COPPER_CHEST = "minecraft:waxed_weathered_copper_chest";
|
|
||||||
public const WAXED_WEATHERED_COPPER_DOOR = "minecraft:waxed_weathered_copper_door";
|
public const WAXED_WEATHERED_COPPER_DOOR = "minecraft:waxed_weathered_copper_door";
|
||||||
public const WAXED_WEATHERED_COPPER_GRATE = "minecraft:waxed_weathered_copper_grate";
|
public const WAXED_WEATHERED_COPPER_GRATE = "minecraft:waxed_weathered_copper_grate";
|
||||||
public const WAXED_WEATHERED_COPPER_TRAPDOOR = "minecraft:waxed_weathered_copper_trapdoor";
|
public const WAXED_WEATHERED_COPPER_TRAPDOOR = "minecraft:waxed_weathered_copper_trapdoor";
|
||||||
@ -1258,7 +1244,6 @@ final class BlockTypeNames{
|
|||||||
public const WEATHERED_CHISELED_COPPER = "minecraft:weathered_chiseled_copper";
|
public const WEATHERED_CHISELED_COPPER = "minecraft:weathered_chiseled_copper";
|
||||||
public const WEATHERED_COPPER = "minecraft:weathered_copper";
|
public const WEATHERED_COPPER = "minecraft:weathered_copper";
|
||||||
public const WEATHERED_COPPER_BULB = "minecraft:weathered_copper_bulb";
|
public const WEATHERED_COPPER_BULB = "minecraft:weathered_copper_bulb";
|
||||||
public const WEATHERED_COPPER_CHEST = "minecraft:weathered_copper_chest";
|
|
||||||
public const WEATHERED_COPPER_DOOR = "minecraft:weathered_copper_door";
|
public const WEATHERED_COPPER_DOOR = "minecraft:weathered_copper_door";
|
||||||
public const WEATHERED_COPPER_GRATE = "minecraft:weathered_copper_grate";
|
public const WEATHERED_COPPER_GRATE = "minecraft:weathered_copper_grate";
|
||||||
public const WEATHERED_COPPER_TRAPDOOR = "minecraft:weathered_copper_trapdoor";
|
public const WEATHERED_COPPER_TRAPDOOR = "minecraft:weathered_copper_trapdoor";
|
||||||
@ -1282,7 +1267,6 @@ final class BlockTypeNames{
|
|||||||
public const WHITE_TERRACOTTA = "minecraft:white_terracotta";
|
public const WHITE_TERRACOTTA = "minecraft:white_terracotta";
|
||||||
public const WHITE_TULIP = "minecraft:white_tulip";
|
public const WHITE_TULIP = "minecraft:white_tulip";
|
||||||
public const WHITE_WOOL = "minecraft:white_wool";
|
public const WHITE_WOOL = "minecraft:white_wool";
|
||||||
public const WILDFLOWERS = "minecraft:wildflowers";
|
|
||||||
public const WITHER_ROSE = "minecraft:wither_rose";
|
public const WITHER_ROSE = "minecraft:wither_rose";
|
||||||
public const WITHER_SKELETON_SKULL = "minecraft:wither_skeleton_skull";
|
public const WITHER_SKELETON_SKULL = "minecraft:wither_skeleton_skull";
|
||||||
public const WOODEN_BUTTON = "minecraft:wooden_button";
|
public const WOODEN_BUTTON = "minecraft:wooden_button";
|
||||||
|
@ -122,7 +122,6 @@ use pocketmine\block\RedstoneRepeater;
|
|||||||
use pocketmine\block\RedstoneTorch;
|
use pocketmine\block\RedstoneTorch;
|
||||||
use pocketmine\block\RedstoneWire;
|
use pocketmine\block\RedstoneWire;
|
||||||
use pocketmine\block\ResinClump;
|
use pocketmine\block\ResinClump;
|
||||||
use pocketmine\block\RespawnAnchor;
|
|
||||||
use pocketmine\block\RuntimeBlockStateRegistry;
|
use pocketmine\block\RuntimeBlockStateRegistry;
|
||||||
use pocketmine\block\Sapling;
|
use pocketmine\block\Sapling;
|
||||||
use pocketmine\block\SeaPickle;
|
use pocketmine\block\SeaPickle;
|
||||||
@ -167,8 +166,7 @@ use pocketmine\block\WallBanner;
|
|||||||
use pocketmine\block\WallCoralFan;
|
use pocketmine\block\WallCoralFan;
|
||||||
use pocketmine\block\WallSign;
|
use pocketmine\block\WallSign;
|
||||||
use pocketmine\block\Water;
|
use pocketmine\block\Water;
|
||||||
use pocketmine\block\WeightedPressurePlateHeavy;
|
use pocketmine\block\WeightedPressurePlate;
|
||||||
use pocketmine\block\WeightedPressurePlateLight;
|
|
||||||
use pocketmine\block\Wheat;
|
use pocketmine\block\Wheat;
|
||||||
use pocketmine\block\Wood;
|
use pocketmine\block\Wood;
|
||||||
use pocketmine\block\WoodenButton;
|
use pocketmine\block\WoodenButton;
|
||||||
@ -226,10 +224,6 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
|
|||||||
return $this->cache[$stateId] ??= $this->serializeBlock(RuntimeBlockStateRegistry::getInstance()->fromStateId($stateId));
|
return $this->cache[$stateId] ??= $this->serializeBlock(RuntimeBlockStateRegistry::getInstance()->fromStateId($stateId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isRegistered(Block $block) : bool{
|
|
||||||
return isset($this->serializers[$block->getTypeId()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @phpstan-template TBlockType of Block
|
* @phpstan-template TBlockType of Block
|
||||||
* @phpstan-param TBlockType $block
|
* @phpstan-param TBlockType $block
|
||||||
@ -1755,10 +1749,6 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
|
|||||||
return Writer::create(Ids::RESIN_CLUMP)
|
return Writer::create(Ids::RESIN_CLUMP)
|
||||||
->writeFacingFlags($block->getFaces());
|
->writeFacingFlags($block->getFaces());
|
||||||
});
|
});
|
||||||
$this->map(Blocks::RESPAWN_ANCHOR(), function(RespawnAnchor $block) : Writer{
|
|
||||||
return Writer::create(Ids::RESPAWN_ANCHOR)
|
|
||||||
->writeInt(StateNames::RESPAWN_ANCHOR_CHARGE, $block->getCharges());
|
|
||||||
});
|
|
||||||
$this->map(Blocks::ROSE_BUSH(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, Writer::create(Ids::ROSE_BUSH)));
|
$this->map(Blocks::ROSE_BUSH(), fn(DoublePlant $block) => Helper::encodeDoublePlant($block, Writer::create(Ids::ROSE_BUSH)));
|
||||||
$this->mapSlab(Blocks::SANDSTONE_SLAB(), Ids::SANDSTONE_SLAB, Ids::SANDSTONE_DOUBLE_SLAB);
|
$this->mapSlab(Blocks::SANDSTONE_SLAB(), Ids::SANDSTONE_SLAB, Ids::SANDSTONE_DOUBLE_SLAB);
|
||||||
$this->mapStairs(Blocks::SANDSTONE_STAIRS(), Ids::SANDSTONE_STAIRS);
|
$this->mapStairs(Blocks::SANDSTONE_STAIRS(), Ids::SANDSTONE_STAIRS);
|
||||||
@ -1878,11 +1868,11 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
|
|||||||
return Writer::create(Ids::WEEPING_VINES)
|
return Writer::create(Ids::WEEPING_VINES)
|
||||||
->writeInt(StateNames::WEEPING_VINES_AGE, $block->getAge());
|
->writeInt(StateNames::WEEPING_VINES_AGE, $block->getAge());
|
||||||
});
|
});
|
||||||
$this->map(Blocks::WEIGHTED_PRESSURE_PLATE_HEAVY(), function(WeightedPressurePlateHeavy $block) : Writer{
|
$this->map(Blocks::WEIGHTED_PRESSURE_PLATE_HEAVY(), function(WeightedPressurePlate $block) : Writer{
|
||||||
return Writer::create(Ids::HEAVY_WEIGHTED_PRESSURE_PLATE)
|
return Writer::create(Ids::HEAVY_WEIGHTED_PRESSURE_PLATE)
|
||||||
->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength());
|
->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength());
|
||||||
});
|
});
|
||||||
$this->map(Blocks::WEIGHTED_PRESSURE_PLATE_LIGHT(), function(WeightedPressurePlateLight $block) : Writer{
|
$this->map(Blocks::WEIGHTED_PRESSURE_PLATE_LIGHT(), function(WeightedPressurePlate $block) : Writer{
|
||||||
return Writer::create(Ids::LIGHT_WEIGHTED_PRESSURE_PLATE)
|
return Writer::create(Ids::LIGHT_WEIGHTED_PRESSURE_PLATE)
|
||||||
->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength());
|
->writeInt(StateNames::REDSTONE_SIGNAL, $block->getOutputSignalStrength());
|
||||||
});
|
});
|
||||||
|
@ -1717,10 +1717,6 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
|
|||||||
$this->mapStairs(Ids::RESIN_BRICK_STAIRS, fn() => Blocks::RESIN_BRICK_STAIRS());
|
$this->mapStairs(Ids::RESIN_BRICK_STAIRS, fn() => Blocks::RESIN_BRICK_STAIRS());
|
||||||
$this->map(Ids::RESIN_BRICK_WALL, fn(Reader $in) => Helper::decodeWall(Blocks::RESIN_BRICK_WALL(), $in));
|
$this->map(Ids::RESIN_BRICK_WALL, fn(Reader $in) => Helper::decodeWall(Blocks::RESIN_BRICK_WALL(), $in));
|
||||||
$this->map(Ids::RESIN_CLUMP, fn(Reader $in) => Blocks::RESIN_CLUMP()->setFaces($in->readFacingFlags()));
|
$this->map(Ids::RESIN_CLUMP, fn(Reader $in) => Blocks::RESIN_CLUMP()->setFaces($in->readFacingFlags()));
|
||||||
$this->map(Ids::RESPAWN_ANCHOR, function(Reader $in) : Block{
|
|
||||||
return Blocks::RESPAWN_ANCHOR()
|
|
||||||
->setCharges($in->readBoundedInt(StateNames::RESPAWN_ANCHOR_CHARGE, 0, 4));
|
|
||||||
});
|
|
||||||
$this->mapSlab(Ids::SANDSTONE_SLAB, Ids::SANDSTONE_DOUBLE_SLAB, fn() => Blocks::SANDSTONE_SLAB());
|
$this->mapSlab(Ids::SANDSTONE_SLAB, Ids::SANDSTONE_DOUBLE_SLAB, fn() => Blocks::SANDSTONE_SLAB());
|
||||||
$this->mapStairs(Ids::SANDSTONE_STAIRS, fn() => Blocks::SANDSTONE_STAIRS());
|
$this->mapStairs(Ids::SANDSTONE_STAIRS, fn() => Blocks::SANDSTONE_STAIRS());
|
||||||
$this->map(Ids::SANDSTONE_WALL, fn(Reader $in) => Helper::decodeWall(Blocks::SANDSTONE_WALL(), $in));
|
$this->map(Ids::SANDSTONE_WALL, fn(Reader $in) => Helper::decodeWall(Blocks::SANDSTONE_WALL(), $in));
|
||||||
|
@ -68,7 +68,6 @@ final class ItemTypeNames{
|
|||||||
public const BIRCH_SIGN = "minecraft:birch_sign";
|
public const BIRCH_SIGN = "minecraft:birch_sign";
|
||||||
public const BLACK_BUNDLE = "minecraft:black_bundle";
|
public const BLACK_BUNDLE = "minecraft:black_bundle";
|
||||||
public const BLACK_DYE = "minecraft:black_dye";
|
public const BLACK_DYE = "minecraft:black_dye";
|
||||||
public const BLACK_HARNESS = "minecraft:black_harness";
|
|
||||||
public const BLADE_POTTERY_SHERD = "minecraft:blade_pottery_sherd";
|
public const BLADE_POTTERY_SHERD = "minecraft:blade_pottery_sherd";
|
||||||
public const BLAZE_POWDER = "minecraft:blaze_powder";
|
public const BLAZE_POWDER = "minecraft:blaze_powder";
|
||||||
public const BLAZE_ROD = "minecraft:blaze_rod";
|
public const BLAZE_ROD = "minecraft:blaze_rod";
|
||||||
@ -76,8 +75,6 @@ final class ItemTypeNames{
|
|||||||
public const BLEACH = "minecraft:bleach";
|
public const BLEACH = "minecraft:bleach";
|
||||||
public const BLUE_BUNDLE = "minecraft:blue_bundle";
|
public const BLUE_BUNDLE = "minecraft:blue_bundle";
|
||||||
public const BLUE_DYE = "minecraft:blue_dye";
|
public const BLUE_DYE = "minecraft:blue_dye";
|
||||||
public const BLUE_EGG = "minecraft:blue_egg";
|
|
||||||
public const BLUE_HARNESS = "minecraft:blue_harness";
|
|
||||||
public const BOARD = "minecraft:board";
|
public const BOARD = "minecraft:board";
|
||||||
public const BOAT = "minecraft:boat";
|
public const BOAT = "minecraft:boat";
|
||||||
public const BOGGED_SPAWN_EGG = "minecraft:bogged_spawn_egg";
|
public const BOGGED_SPAWN_EGG = "minecraft:bogged_spawn_egg";
|
||||||
@ -96,8 +93,6 @@ final class ItemTypeNames{
|
|||||||
public const BRICK = "minecraft:brick";
|
public const BRICK = "minecraft:brick";
|
||||||
public const BROWN_BUNDLE = "minecraft:brown_bundle";
|
public const BROWN_BUNDLE = "minecraft:brown_bundle";
|
||||||
public const BROWN_DYE = "minecraft:brown_dye";
|
public const BROWN_DYE = "minecraft:brown_dye";
|
||||||
public const BROWN_EGG = "minecraft:brown_egg";
|
|
||||||
public const BROWN_HARNESS = "minecraft:brown_harness";
|
|
||||||
public const BRUSH = "minecraft:brush";
|
public const BRUSH = "minecraft:brush";
|
||||||
public const BUCKET = "minecraft:bucket";
|
public const BUCKET = "minecraft:bucket";
|
||||||
public const BUNDLE = "minecraft:bundle";
|
public const BUNDLE = "minecraft:bundle";
|
||||||
@ -153,19 +148,8 @@ final class ItemTypeNames{
|
|||||||
public const COOKED_RABBIT = "minecraft:cooked_rabbit";
|
public const COOKED_RABBIT = "minecraft:cooked_rabbit";
|
||||||
public const COOKED_SALMON = "minecraft:cooked_salmon";
|
public const COOKED_SALMON = "minecraft:cooked_salmon";
|
||||||
public const COOKIE = "minecraft:cookie";
|
public const COOKIE = "minecraft:cookie";
|
||||||
public const COPPER_AXE = "minecraft:copper_axe";
|
|
||||||
public const COPPER_BOOTS = "minecraft:copper_boots";
|
|
||||||
public const COPPER_CHESTPLATE = "minecraft:copper_chestplate";
|
|
||||||
public const COPPER_DOOR = "minecraft:copper_door";
|
public const COPPER_DOOR = "minecraft:copper_door";
|
||||||
public const COPPER_GOLEM_SPAWN_EGG = "minecraft:copper_golem_spawn_egg";
|
|
||||||
public const COPPER_HELMET = "minecraft:copper_helmet";
|
|
||||||
public const COPPER_HOE = "minecraft:copper_hoe";
|
|
||||||
public const COPPER_INGOT = "minecraft:copper_ingot";
|
public const COPPER_INGOT = "minecraft:copper_ingot";
|
||||||
public const COPPER_LEGGINGS = "minecraft:copper_leggings";
|
|
||||||
public const COPPER_NUGGET = "minecraft:copper_nugget";
|
|
||||||
public const COPPER_PICKAXE = "minecraft:copper_pickaxe";
|
|
||||||
public const COPPER_SHOVEL = "minecraft:copper_shovel";
|
|
||||||
public const COPPER_SWORD = "minecraft:copper_sword";
|
|
||||||
public const CORAL = "minecraft:coral";
|
public const CORAL = "minecraft:coral";
|
||||||
public const CORAL_BLOCK = "minecraft:coral_block";
|
public const CORAL_BLOCK = "minecraft:coral_block";
|
||||||
public const CORAL_FAN = "minecraft:coral_fan";
|
public const CORAL_FAN = "minecraft:coral_fan";
|
||||||
@ -180,7 +164,6 @@ final class ItemTypeNames{
|
|||||||
public const CROSSBOW = "minecraft:crossbow";
|
public const CROSSBOW = "minecraft:crossbow";
|
||||||
public const CYAN_BUNDLE = "minecraft:cyan_bundle";
|
public const CYAN_BUNDLE = "minecraft:cyan_bundle";
|
||||||
public const CYAN_DYE = "minecraft:cyan_dye";
|
public const CYAN_DYE = "minecraft:cyan_dye";
|
||||||
public const CYAN_HARNESS = "minecraft:cyan_harness";
|
|
||||||
public const DANGER_POTTERY_SHERD = "minecraft:danger_pottery_sherd";
|
public const DANGER_POTTERY_SHERD = "minecraft:danger_pottery_sherd";
|
||||||
public const DARK_OAK_BOAT = "minecraft:dark_oak_boat";
|
public const DARK_OAK_BOAT = "minecraft:dark_oak_boat";
|
||||||
public const DARK_OAK_CHEST_BOAT = "minecraft:dark_oak_chest_boat";
|
public const DARK_OAK_CHEST_BOAT = "minecraft:dark_oak_chest_boat";
|
||||||
@ -280,15 +263,12 @@ final class ItemTypeNames{
|
|||||||
public const GOLDEN_SWORD = "minecraft:golden_sword";
|
public const GOLDEN_SWORD = "minecraft:golden_sword";
|
||||||
public const GRAY_BUNDLE = "minecraft:gray_bundle";
|
public const GRAY_BUNDLE = "minecraft:gray_bundle";
|
||||||
public const GRAY_DYE = "minecraft:gray_dye";
|
public const GRAY_DYE = "minecraft:gray_dye";
|
||||||
public const GRAY_HARNESS = "minecraft:gray_harness";
|
|
||||||
public const GREEN_BUNDLE = "minecraft:green_bundle";
|
public const GREEN_BUNDLE = "minecraft:green_bundle";
|
||||||
public const GREEN_DYE = "minecraft:green_dye";
|
public const GREEN_DYE = "minecraft:green_dye";
|
||||||
public const GREEN_HARNESS = "minecraft:green_harness";
|
|
||||||
public const GUARDIAN_SPAWN_EGG = "minecraft:guardian_spawn_egg";
|
public const GUARDIAN_SPAWN_EGG = "minecraft:guardian_spawn_egg";
|
||||||
public const GUNPOWDER = "minecraft:gunpowder";
|
public const GUNPOWDER = "minecraft:gunpowder";
|
||||||
public const GUSTER_BANNER_PATTERN = "minecraft:guster_banner_pattern";
|
public const GUSTER_BANNER_PATTERN = "minecraft:guster_banner_pattern";
|
||||||
public const GUSTER_POTTERY_SHERD = "minecraft:guster_pottery_sherd";
|
public const GUSTER_POTTERY_SHERD = "minecraft:guster_pottery_sherd";
|
||||||
public const HAPPY_GHAST_SPAWN_EGG = "minecraft:happy_ghast_spawn_egg";
|
|
||||||
public const HARD_STAINED_GLASS = "minecraft:hard_stained_glass";
|
public const HARD_STAINED_GLASS = "minecraft:hard_stained_glass";
|
||||||
public const HARD_STAINED_GLASS_PANE = "minecraft:hard_stained_glass_pane";
|
public const HARD_STAINED_GLASS_PANE = "minecraft:hard_stained_glass_pane";
|
||||||
public const HEART_OF_THE_SEA = "minecraft:heart_of_the_sea";
|
public const HEART_OF_THE_SEA = "minecraft:heart_of_the_sea";
|
||||||
@ -339,13 +319,10 @@ final class ItemTypeNames{
|
|||||||
public const LIGHT_BLOCK = "minecraft:light_block";
|
public const LIGHT_BLOCK = "minecraft:light_block";
|
||||||
public const LIGHT_BLUE_BUNDLE = "minecraft:light_blue_bundle";
|
public const LIGHT_BLUE_BUNDLE = "minecraft:light_blue_bundle";
|
||||||
public const LIGHT_BLUE_DYE = "minecraft:light_blue_dye";
|
public const LIGHT_BLUE_DYE = "minecraft:light_blue_dye";
|
||||||
public const LIGHT_BLUE_HARNESS = "minecraft:light_blue_harness";
|
|
||||||
public const LIGHT_GRAY_BUNDLE = "minecraft:light_gray_bundle";
|
public const LIGHT_GRAY_BUNDLE = "minecraft:light_gray_bundle";
|
||||||
public const LIGHT_GRAY_DYE = "minecraft:light_gray_dye";
|
public const LIGHT_GRAY_DYE = "minecraft:light_gray_dye";
|
||||||
public const LIGHT_GRAY_HARNESS = "minecraft:light_gray_harness";
|
|
||||||
public const LIME_BUNDLE = "minecraft:lime_bundle";
|
public const LIME_BUNDLE = "minecraft:lime_bundle";
|
||||||
public const LIME_DYE = "minecraft:lime_dye";
|
public const LIME_DYE = "minecraft:lime_dye";
|
||||||
public const LIME_HARNESS = "minecraft:lime_harness";
|
|
||||||
public const LINGERING_POTION = "minecraft:lingering_potion";
|
public const LINGERING_POTION = "minecraft:lingering_potion";
|
||||||
public const LLAMA_SPAWN_EGG = "minecraft:llama_spawn_egg";
|
public const LLAMA_SPAWN_EGG = "minecraft:llama_spawn_egg";
|
||||||
public const LODESTONE_COMPASS = "minecraft:lodestone_compass";
|
public const LODESTONE_COMPASS = "minecraft:lodestone_compass";
|
||||||
@ -354,7 +331,6 @@ final class ItemTypeNames{
|
|||||||
public const MACE = "minecraft:mace";
|
public const MACE = "minecraft:mace";
|
||||||
public const MAGENTA_BUNDLE = "minecraft:magenta_bundle";
|
public const MAGENTA_BUNDLE = "minecraft:magenta_bundle";
|
||||||
public const MAGENTA_DYE = "minecraft:magenta_dye";
|
public const MAGENTA_DYE = "minecraft:magenta_dye";
|
||||||
public const MAGENTA_HARNESS = "minecraft:magenta_harness";
|
|
||||||
public const MAGMA_CREAM = "minecraft:magma_cream";
|
public const MAGMA_CREAM = "minecraft:magma_cream";
|
||||||
public const MAGMA_CUBE_SPAWN_EGG = "minecraft:magma_cube_spawn_egg";
|
public const MAGMA_CUBE_SPAWN_EGG = "minecraft:magma_cube_spawn_egg";
|
||||||
public const MANGROVE_BOAT = "minecraft:mangrove_boat";
|
public const MANGROVE_BOAT = "minecraft:mangrove_boat";
|
||||||
@ -383,7 +359,6 @@ final class ItemTypeNames{
|
|||||||
public const MUSIC_DISC_CREATOR = "minecraft:music_disc_creator";
|
public const MUSIC_DISC_CREATOR = "minecraft:music_disc_creator";
|
||||||
public const MUSIC_DISC_CREATOR_MUSIC_BOX = "minecraft:music_disc_creator_music_box";
|
public const MUSIC_DISC_CREATOR_MUSIC_BOX = "minecraft:music_disc_creator_music_box";
|
||||||
public const MUSIC_DISC_FAR = "minecraft:music_disc_far";
|
public const MUSIC_DISC_FAR = "minecraft:music_disc_far";
|
||||||
public const MUSIC_DISC_LAVA_CHICKEN = "minecraft:music_disc_lava_chicken";
|
|
||||||
public const MUSIC_DISC_MALL = "minecraft:music_disc_mall";
|
public const MUSIC_DISC_MALL = "minecraft:music_disc_mall";
|
||||||
public const MUSIC_DISC_MELLOHI = "minecraft:music_disc_mellohi";
|
public const MUSIC_DISC_MELLOHI = "minecraft:music_disc_mellohi";
|
||||||
public const MUSIC_DISC_OTHERSIDE = "minecraft:music_disc_otherside";
|
public const MUSIC_DISC_OTHERSIDE = "minecraft:music_disc_otherside";
|
||||||
@ -392,7 +367,6 @@ final class ItemTypeNames{
|
|||||||
public const MUSIC_DISC_RELIC = "minecraft:music_disc_relic";
|
public const MUSIC_DISC_RELIC = "minecraft:music_disc_relic";
|
||||||
public const MUSIC_DISC_STAL = "minecraft:music_disc_stal";
|
public const MUSIC_DISC_STAL = "minecraft:music_disc_stal";
|
||||||
public const MUSIC_DISC_STRAD = "minecraft:music_disc_strad";
|
public const MUSIC_DISC_STRAD = "minecraft:music_disc_strad";
|
||||||
public const MUSIC_DISC_TEARS = "minecraft:music_disc_tears";
|
|
||||||
public const MUSIC_DISC_WAIT = "minecraft:music_disc_wait";
|
public const MUSIC_DISC_WAIT = "minecraft:music_disc_wait";
|
||||||
public const MUSIC_DISC_WARD = "minecraft:music_disc_ward";
|
public const MUSIC_DISC_WARD = "minecraft:music_disc_ward";
|
||||||
public const MUTTON = "minecraft:mutton";
|
public const MUTTON = "minecraft:mutton";
|
||||||
@ -424,7 +398,6 @@ final class ItemTypeNames{
|
|||||||
public const OMINOUS_TRIAL_KEY = "minecraft:ominous_trial_key";
|
public const OMINOUS_TRIAL_KEY = "minecraft:ominous_trial_key";
|
||||||
public const ORANGE_BUNDLE = "minecraft:orange_bundle";
|
public const ORANGE_BUNDLE = "minecraft:orange_bundle";
|
||||||
public const ORANGE_DYE = "minecraft:orange_dye";
|
public const ORANGE_DYE = "minecraft:orange_dye";
|
||||||
public const ORANGE_HARNESS = "minecraft:orange_harness";
|
|
||||||
public const OXIDIZED_COPPER_DOOR = "minecraft:oxidized_copper_door";
|
public const OXIDIZED_COPPER_DOOR = "minecraft:oxidized_copper_door";
|
||||||
public const PAINTING = "minecraft:painting";
|
public const PAINTING = "minecraft:painting";
|
||||||
public const PALE_OAK_BOAT = "minecraft:pale_oak_boat";
|
public const PALE_OAK_BOAT = "minecraft:pale_oak_boat";
|
||||||
@ -444,7 +417,6 @@ final class ItemTypeNames{
|
|||||||
public const PILLAGER_SPAWN_EGG = "minecraft:pillager_spawn_egg";
|
public const PILLAGER_SPAWN_EGG = "minecraft:pillager_spawn_egg";
|
||||||
public const PINK_BUNDLE = "minecraft:pink_bundle";
|
public const PINK_BUNDLE = "minecraft:pink_bundle";
|
||||||
public const PINK_DYE = "minecraft:pink_dye";
|
public const PINK_DYE = "minecraft:pink_dye";
|
||||||
public const PINK_HARNESS = "minecraft:pink_harness";
|
|
||||||
public const PITCHER_POD = "minecraft:pitcher_pod";
|
public const PITCHER_POD = "minecraft:pitcher_pod";
|
||||||
public const PLANKS = "minecraft:planks";
|
public const PLANKS = "minecraft:planks";
|
||||||
public const PLENTY_POTTERY_SHERD = "minecraft:plenty_pottery_sherd";
|
public const PLENTY_POTTERY_SHERD = "minecraft:plenty_pottery_sherd";
|
||||||
@ -465,7 +437,6 @@ final class ItemTypeNames{
|
|||||||
public const PUMPKIN_SEEDS = "minecraft:pumpkin_seeds";
|
public const PUMPKIN_SEEDS = "minecraft:pumpkin_seeds";
|
||||||
public const PURPLE_BUNDLE = "minecraft:purple_bundle";
|
public const PURPLE_BUNDLE = "minecraft:purple_bundle";
|
||||||
public const PURPLE_DYE = "minecraft:purple_dye";
|
public const PURPLE_DYE = "minecraft:purple_dye";
|
||||||
public const PURPLE_HARNESS = "minecraft:purple_harness";
|
|
||||||
public const QUARTZ = "minecraft:quartz";
|
public const QUARTZ = "minecraft:quartz";
|
||||||
public const RABBIT = "minecraft:rabbit";
|
public const RABBIT = "minecraft:rabbit";
|
||||||
public const RABBIT_FOOT = "minecraft:rabbit_foot";
|
public const RABBIT_FOOT = "minecraft:rabbit_foot";
|
||||||
@ -482,7 +453,6 @@ final class ItemTypeNames{
|
|||||||
public const RED_BUNDLE = "minecraft:red_bundle";
|
public const RED_BUNDLE = "minecraft:red_bundle";
|
||||||
public const RED_DYE = "minecraft:red_dye";
|
public const RED_DYE = "minecraft:red_dye";
|
||||||
public const RED_FLOWER = "minecraft:red_flower";
|
public const RED_FLOWER = "minecraft:red_flower";
|
||||||
public const RED_HARNESS = "minecraft:red_harness";
|
|
||||||
public const REDSTONE = "minecraft:redstone";
|
public const REDSTONE = "minecraft:redstone";
|
||||||
public const REPEATER = "minecraft:repeater";
|
public const REPEATER = "minecraft:repeater";
|
||||||
public const RESIN_BRICK = "minecraft:resin_brick";
|
public const RESIN_BRICK = "minecraft:resin_brick";
|
||||||
@ -591,7 +561,6 @@ final class ItemTypeNames{
|
|||||||
public const WHEAT_SEEDS = "minecraft:wheat_seeds";
|
public const WHEAT_SEEDS = "minecraft:wheat_seeds";
|
||||||
public const WHITE_BUNDLE = "minecraft:white_bundle";
|
public const WHITE_BUNDLE = "minecraft:white_bundle";
|
||||||
public const WHITE_DYE = "minecraft:white_dye";
|
public const WHITE_DYE = "minecraft:white_dye";
|
||||||
public const WHITE_HARNESS = "minecraft:white_harness";
|
|
||||||
public const WILD_ARMOR_TRIM_SMITHING_TEMPLATE = "minecraft:wild_armor_trim_smithing_template";
|
public const WILD_ARMOR_TRIM_SMITHING_TEMPLATE = "minecraft:wild_armor_trim_smithing_template";
|
||||||
public const WIND_CHARGE = "minecraft:wind_charge";
|
public const WIND_CHARGE = "minecraft:wind_charge";
|
||||||
public const WITCH_SPAWN_EGG = "minecraft:witch_spawn_egg";
|
public const WITCH_SPAWN_EGG = "minecraft:witch_spawn_egg";
|
||||||
@ -612,7 +581,6 @@ final class ItemTypeNames{
|
|||||||
public const WRITTEN_BOOK = "minecraft:written_book";
|
public const WRITTEN_BOOK = "minecraft:written_book";
|
||||||
public const YELLOW_BUNDLE = "minecraft:yellow_bundle";
|
public const YELLOW_BUNDLE = "minecraft:yellow_bundle";
|
||||||
public const YELLOW_DYE = "minecraft:yellow_dye";
|
public const YELLOW_DYE = "minecraft:yellow_dye";
|
||||||
public const YELLOW_HARNESS = "minecraft:yellow_harness";
|
|
||||||
public const ZOGLIN_SPAWN_EGG = "minecraft:zoglin_spawn_egg";
|
public const ZOGLIN_SPAWN_EGG = "minecraft:zoglin_spawn_egg";
|
||||||
public const ZOMBIE_HORSE_SPAWN_EGG = "minecraft:zombie_horse_spawn_egg";
|
public const ZOMBIE_HORSE_SPAWN_EGG = "minecraft:zombie_horse_spawn_egg";
|
||||||
public const ZOMBIE_PIGMAN_SPAWN_EGG = "minecraft:zombie_pigman_spawn_egg";
|
public const ZOMBIE_PIGMAN_SPAWN_EGG = "minecraft:zombie_pigman_spawn_egg";
|
||||||
|
@ -1,89 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace pocketmine\data\runtime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides backwards-compatible shims for the old codegen'd enum describer methods.
|
|
||||||
* This is kept for plugin backwards compatibility, but these functions should not be used in new code.
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
trait LegacyRuntimeEnumDescriberTrait{
|
|
||||||
abstract protected function enum(\UnitEnum &$case) : void;
|
|
||||||
|
|
||||||
public function bellAttachmentType(\pocketmine\block\utils\BellAttachmentType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function copperOxidation(\pocketmine\block\utils\CopperOxidation &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function coralType(\pocketmine\block\utils\CoralType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dirtType(\pocketmine\block\utils\DirtType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dripleafState(\pocketmine\block\utils\DripleafState &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dyeColor(\pocketmine\block\utils\DyeColor &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function froglightType(\pocketmine\block\utils\FroglightType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function leverFacing(\pocketmine\block\utils\LeverFacing &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function medicineType(\pocketmine\item\MedicineType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function mobHeadType(\pocketmine\block\utils\MobHeadType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function mushroomBlockType(\pocketmine\block\utils\MushroomBlockType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function potionType(\pocketmine\item\PotionType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function slabType(\pocketmine\block\utils\SlabType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function suspiciousStewType(\pocketmine\item\SuspiciousStewType &$value) : void{
|
|
||||||
$this->enum($value);
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,7 +23,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\data\runtime;
|
namespace pocketmine\data\runtime;
|
||||||
|
|
||||||
use pocketmine\block\utils\BrewingStandSlot;
|
|
||||||
use pocketmine\block\utils\WallConnectionType;
|
use pocketmine\block\utils\WallConnectionType;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
|
|
||||||
@ -35,14 +34,9 @@ use pocketmine\math\Facing;
|
|||||||
* You may use it as a type for parameters and return values, but it should not be implemented outside of this package.
|
* You may use it as a type for parameters and return values, but it should not be implemented outside of this package.
|
||||||
* New methods may be added without warning.
|
* New methods may be added without warning.
|
||||||
*/
|
*/
|
||||||
interface RuntimeDataDescriber extends RuntimeEnumDescriber{
|
interface RuntimeDataDescriber{
|
||||||
public function int(int $bits, int &$value) : void;
|
public function int(int $bits, int &$value) : void;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use {@link RuntimeDataDescriber::boundedIntAuto()} instead.
|
|
||||||
*/
|
|
||||||
public function boundedInt(int $bits, int $min, int $max, int &$value) : void;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Same as boundedInt() but automatically calculates the required number of bits from the range.
|
* Same as boundedInt() but automatically calculates the required number of bits from the range.
|
||||||
* The range bounds must be constant.
|
* The range bounds must be constant.
|
||||||
@ -77,14 +71,6 @@ interface RuntimeDataDescriber extends RuntimeEnumDescriber{
|
|||||||
*/
|
*/
|
||||||
public function wallConnections(array &$connections) : void;
|
public function wallConnections(array &$connections) : void;
|
||||||
|
|
||||||
/**
|
|
||||||
* @param BrewingStandSlot[] $slots
|
|
||||||
* @phpstan-param array<int, BrewingStandSlot> $slots
|
|
||||||
*
|
|
||||||
* @deprecated Use {@link enumSet()} instead.
|
|
||||||
*/
|
|
||||||
public function brewingStandSlots(array &$slots) : void;
|
|
||||||
|
|
||||||
public function railShape(int &$railShape) : void;
|
public function railShape(int &$railShape) : void;
|
||||||
|
|
||||||
public function straightOnlyRailShape(int &$railShape) : void;
|
public function straightOnlyRailShape(int &$railShape) : void;
|
||||||
|
@ -23,7 +23,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\data\runtime;
|
namespace pocketmine\data\runtime;
|
||||||
|
|
||||||
use pocketmine\block\utils\BrewingStandSlot;
|
|
||||||
use pocketmine\block\utils\RailConnectionInfo;
|
use pocketmine\block\utils\RailConnectionInfo;
|
||||||
use pocketmine\block\utils\WallConnectionType;
|
use pocketmine\block\utils\WallConnectionType;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
@ -35,8 +34,6 @@ use function log;
|
|||||||
use function spl_object_id;
|
use function spl_object_id;
|
||||||
|
|
||||||
final class RuntimeDataReader implements RuntimeDataDescriber{
|
final class RuntimeDataReader implements RuntimeDataDescriber{
|
||||||
use LegacyRuntimeEnumDescriberTrait;
|
|
||||||
|
|
||||||
private int $offset = 0;
|
private int $offset = 0;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
@ -59,18 +56,6 @@ final class RuntimeDataReader implements RuntimeDataDescriber{
|
|||||||
$value = $this->readInt($bits);
|
$value = $this->readInt($bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use {@link self::boundedIntAuto()} instead.
|
|
||||||
*/
|
|
||||||
public function boundedInt(int $bits, int $min, int $max, int &$value) : void{
|
|
||||||
$offset = $this->offset;
|
|
||||||
$this->boundedIntAuto($min, $max, $value);
|
|
||||||
$actualBits = $this->offset - $offset;
|
|
||||||
if($this->offset !== $offset + $bits){
|
|
||||||
throw new \InvalidArgumentException("Bits should be $actualBits for the given bounds, but received $bits. Use boundedIntAuto() for automatic bits calculation.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function readBoundedIntAuto(int $min, int $max) : int{
|
private function readBoundedIntAuto(int $min, int $max) : int{
|
||||||
$bits = ((int) log($max - $min, 2)) + 1;
|
$bits = ((int) log($max - $min, 2)) + 1;
|
||||||
$result = $this->readInt($bits) + $min;
|
$result = $this->readInt($bits) + $min;
|
||||||
@ -192,16 +177,6 @@ final class RuntimeDataReader implements RuntimeDataDescriber{
|
|||||||
$connections = $result;
|
$connections = $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param BrewingStandSlot[] $slots
|
|
||||||
* @phpstan-param array<int, BrewingStandSlot> $slots
|
|
||||||
*
|
|
||||||
* @deprecated Use {@link enumSet()} instead.
|
|
||||||
*/
|
|
||||||
public function brewingStandSlots(array &$slots) : void{
|
|
||||||
$this->enumSet($slots, BrewingStandSlot::cases());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function railShape(int &$railShape) : void{
|
public function railShape(int &$railShape) : void{
|
||||||
$result = $this->readInt(4);
|
$result = $this->readInt(4);
|
||||||
if(!isset(RailConnectionInfo::CONNECTIONS[$result]) && !isset(RailConnectionInfo::CURVE_CONNECTIONS[$result])){
|
if(!isset(RailConnectionInfo::CONNECTIONS[$result]) && !isset(RailConnectionInfo::CURVE_CONNECTIONS[$result])){
|
||||||
|
@ -23,14 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\data\runtime;
|
namespace pocketmine\data\runtime;
|
||||||
|
|
||||||
use pocketmine\block\utils\BrewingStandSlot;
|
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use function count;
|
use function count;
|
||||||
use function log;
|
use function log;
|
||||||
|
|
||||||
final class RuntimeDataSizeCalculator implements RuntimeDataDescriber{
|
final class RuntimeDataSizeCalculator implements RuntimeDataDescriber{
|
||||||
use LegacyRuntimeEnumDescriberTrait;
|
|
||||||
|
|
||||||
private int $bits = 0;
|
private int $bits = 0;
|
||||||
|
|
||||||
protected function addBits(int $bits) : void{
|
protected function addBits(int $bits) : void{
|
||||||
@ -45,18 +42,6 @@ final class RuntimeDataSizeCalculator implements RuntimeDataDescriber{
|
|||||||
$this->addBits($bits);
|
$this->addBits($bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use {@link self::boundedIntAuto()} instead.
|
|
||||||
*/
|
|
||||||
public function boundedInt(int $bits, int $min, int $max, int &$value) : void{
|
|
||||||
$currentBits = $this->bits;
|
|
||||||
$this->boundedIntAuto($min, $max, $value);
|
|
||||||
$actualBits = $this->bits - $currentBits;
|
|
||||||
if($actualBits !== $bits){
|
|
||||||
throw new \InvalidArgumentException("Bits should be $actualBits for the given bounds, but received $bits. Use boundedIntAuto() for automatic bits calculation.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function boundedIntAuto(int $min, int $max, int &$value) : void{
|
public function boundedIntAuto(int $min, int $max, int &$value) : void{
|
||||||
$this->addBits(((int) log($max - $min, 2)) + 1);
|
$this->addBits(((int) log($max - $min, 2)) + 1);
|
||||||
}
|
}
|
||||||
@ -97,10 +82,6 @@ final class RuntimeDataSizeCalculator implements RuntimeDataDescriber{
|
|||||||
$this->addBits(7);
|
$this->addBits(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function brewingStandSlots(array &$slots) : void{
|
|
||||||
$this->addBits(count(BrewingStandSlot::cases()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function railShape(int &$railShape) : void{
|
public function railShape(int &$railShape) : void{
|
||||||
$this->addBits(4);
|
$this->addBits(4);
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\data\runtime;
|
namespace pocketmine\data\runtime;
|
||||||
|
|
||||||
use pocketmine\block\utils\BrewingStandSlot;
|
|
||||||
use pocketmine\block\utils\WallConnectionType;
|
use pocketmine\block\utils\WallConnectionType;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -32,8 +31,6 @@ use function log;
|
|||||||
use function spl_object_id;
|
use function spl_object_id;
|
||||||
|
|
||||||
final class RuntimeDataWriter implements RuntimeDataDescriber{
|
final class RuntimeDataWriter implements RuntimeDataDescriber{
|
||||||
use LegacyRuntimeEnumDescriberTrait;
|
|
||||||
|
|
||||||
private int $value = 0;
|
private int $value = 0;
|
||||||
private int $offset = 0;
|
private int $offset = 0;
|
||||||
|
|
||||||
@ -57,18 +54,6 @@ final class RuntimeDataWriter implements RuntimeDataDescriber{
|
|||||||
$this->writeInt($bits, $value);
|
$this->writeInt($bits, $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use {@link self::boundedIntAuto()} instead.
|
|
||||||
*/
|
|
||||||
public function boundedInt(int $bits, int $min, int $max, int &$value) : void{
|
|
||||||
$offset = $this->offset;
|
|
||||||
$this->writeBoundedIntAuto($min, $max, $value);
|
|
||||||
$actualBits = $this->offset - $offset;
|
|
||||||
if($actualBits !== $bits){
|
|
||||||
throw new \InvalidArgumentException("Bits should be $actualBits for the given bounds, but received $bits. Use boundedIntAuto() for automatic bits calculation.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function writeBoundedIntAuto(int $min, int $max, int $value) : void{
|
private function writeBoundedIntAuto(int $min, int $max, int $value) : void{
|
||||||
if($value < $min || $value > $max){
|
if($value < $min || $value > $max){
|
||||||
throw new \InvalidArgumentException("Value $value is outside the range $min - $max");
|
throw new \InvalidArgumentException("Value $value is outside the range $min - $max");
|
||||||
@ -170,16 +155,6 @@ final class RuntimeDataWriter implements RuntimeDataDescriber{
|
|||||||
$this->writeBoundedIntAuto(0, (3 ** 4) - 1, $packed);
|
$this->writeBoundedIntAuto(0, (3 ** 4) - 1, $packed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param BrewingStandSlot[] $slots
|
|
||||||
* @phpstan-param array<int, BrewingStandSlot> $slots
|
|
||||||
*
|
|
||||||
* @deprecated Use {@link enumSet()} instead.
|
|
||||||
*/
|
|
||||||
public function brewingStandSlots(array &$slots) : void{
|
|
||||||
$this->enumSet($slots, BrewingStandSlot::cases());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function railShape(int &$railShape) : void{
|
public function railShape(int &$railShape) : void{
|
||||||
$this->int(4, $railShape);
|
$this->int(4, $railShape);
|
||||||
}
|
}
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* ____ _ _ __ __ _ __ __ ____
|
|
||||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
||||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
||||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
||||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* @author PocketMine Team
|
|
||||||
* @link http://www.pocketmine.net/
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace pocketmine\data\runtime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides backwards-compatible shims for the old codegen'd enum describer methods.
|
|
||||||
* This is kept for plugin backwards compatibility, but these functions should not be used in new code.
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
interface RuntimeEnumDescriber{
|
|
||||||
|
|
||||||
public function bellAttachmentType(\pocketmine\block\utils\BellAttachmentType &$value) : void;
|
|
||||||
|
|
||||||
public function copperOxidation(\pocketmine\block\utils\CopperOxidation &$value) : void;
|
|
||||||
|
|
||||||
public function coralType(\pocketmine\block\utils\CoralType &$value) : void;
|
|
||||||
|
|
||||||
public function dirtType(\pocketmine\block\utils\DirtType &$value) : void;
|
|
||||||
|
|
||||||
public function dripleafState(\pocketmine\block\utils\DripleafState &$value) : void;
|
|
||||||
|
|
||||||
public function dyeColor(\pocketmine\block\utils\DyeColor &$value) : void;
|
|
||||||
|
|
||||||
public function froglightType(\pocketmine\block\utils\FroglightType &$value) : void;
|
|
||||||
|
|
||||||
public function leverFacing(\pocketmine\block\utils\LeverFacing &$value) : void;
|
|
||||||
|
|
||||||
public function medicineType(\pocketmine\item\MedicineType &$value) : void;
|
|
||||||
|
|
||||||
public function mobHeadType(\pocketmine\block\utils\MobHeadType &$value) : void;
|
|
||||||
|
|
||||||
public function mushroomBlockType(\pocketmine\block\utils\MushroomBlockType &$value) : void;
|
|
||||||
|
|
||||||
public function potionType(\pocketmine\item\PotionType &$value) : void;
|
|
||||||
|
|
||||||
public function slabType(\pocketmine\block\utils\SlabType &$value) : void;
|
|
||||||
|
|
||||||
public function suspiciousStewType(\pocketmine\item\SuspiciousStewType &$value) : void;
|
|
||||||
|
|
||||||
}
|
|
@ -31,7 +31,6 @@ use pocketmine\block\Water;
|
|||||||
use pocketmine\entity\animation\Animation;
|
use pocketmine\entity\animation\Animation;
|
||||||
use pocketmine\event\entity\EntityDamageEvent;
|
use pocketmine\event\entity\EntityDamageEvent;
|
||||||
use pocketmine\event\entity\EntityDespawnEvent;
|
use pocketmine\event\entity\EntityDespawnEvent;
|
||||||
use pocketmine\event\entity\EntityExtinguishEvent;
|
|
||||||
use pocketmine\event\entity\EntityMotionEvent;
|
use pocketmine\event\entity\EntityMotionEvent;
|
||||||
use pocketmine\event\entity\EntityRegainHealthEvent;
|
use pocketmine\event\entity\EntityRegainHealthEvent;
|
||||||
use pocketmine\event\entity\EntitySpawnEvent;
|
use pocketmine\event\entity\EntitySpawnEvent;
|
||||||
@ -61,7 +60,6 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\Server;
|
use pocketmine\Server;
|
||||||
use pocketmine\timings\Timings;
|
use pocketmine\timings\Timings;
|
||||||
use pocketmine\timings\TimingsHandler;
|
use pocketmine\timings\TimingsHandler;
|
||||||
use pocketmine\utils\Limits;
|
|
||||||
use pocketmine\utils\Utils;
|
use pocketmine\utils\Utils;
|
||||||
use pocketmine\VersionInfo;
|
use pocketmine\VersionInfo;
|
||||||
use pocketmine\world\format\Chunk;
|
use pocketmine\world\format\Chunk;
|
||||||
@ -78,7 +76,6 @@ use function floatval;
|
|||||||
use function floor;
|
use function floor;
|
||||||
use function fmod;
|
use function fmod;
|
||||||
use function get_class;
|
use function get_class;
|
||||||
use function min;
|
|
||||||
use function sin;
|
use function sin;
|
||||||
use function spl_object_id;
|
use function spl_object_id;
|
||||||
use const M_PI_2;
|
use const M_PI_2;
|
||||||
@ -703,26 +700,16 @@ abstract class Entity{
|
|||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
public function setFireTicks(int $fireTicks) : void{
|
public function setFireTicks(int $fireTicks) : void{
|
||||||
if($fireTicks < 0){
|
if($fireTicks < 0 || $fireTicks > 0x7fff){
|
||||||
throw new \InvalidArgumentException("Fire ticks cannot be negative");
|
throw new \InvalidArgumentException("Fire ticks must be in range 0 ... " . 0x7fff . ", got $fireTicks");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Since the max value is not externally obvious or intuitive, many plugins use this without being aware that
|
|
||||||
//reasonably large values are not accepted. We even have such usages within PM itself. It doesn't make sense
|
|
||||||
//to force all those calls to be aware of this limitation, as it's not a functional limit but a limitation of
|
|
||||||
//the Mojang save format. Truncating this to the max acceptable value is the next best thing we can do.
|
|
||||||
$fireTicks = min($fireTicks, Limits::INT16_MAX);
|
|
||||||
|
|
||||||
if(!$this->isFireProof()){
|
if(!$this->isFireProof()){
|
||||||
$this->fireTicks = $fireTicks;
|
$this->fireTicks = $fireTicks;
|
||||||
$this->networkPropertiesDirty = true;
|
$this->networkPropertiesDirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function extinguish(int $cause = EntityExtinguishEvent::CAUSE_CUSTOM) : void{
|
public function extinguish() : void{
|
||||||
$ev = new EntityExtinguishEvent($this, $cause);
|
|
||||||
$ev->call();
|
|
||||||
|
|
||||||
$this->fireTicks = 0;
|
$this->fireTicks = 0;
|
||||||
$this->networkPropertiesDirty = true;
|
$this->networkPropertiesDirty = true;
|
||||||
}
|
}
|
||||||
@ -733,7 +720,7 @@ abstract class Entity{
|
|||||||
|
|
||||||
protected function doOnFireTick(int $tickDiff = 1) : bool{
|
protected function doOnFireTick(int $tickDiff = 1) : bool{
|
||||||
if($this->isFireProof() && $this->isOnFire()){
|
if($this->isFireProof() && $this->isOnFire()){
|
||||||
$this->extinguish(EntityExtinguishEvent::CAUSE_FIRE_PROOF);
|
$this->extinguish();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -744,7 +731,7 @@ abstract class Entity{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!$this->isOnFire()){
|
if(!$this->isOnFire()){
|
||||||
$this->extinguish(EntityExtinguishEvent::CAUSE_TICKING);
|
$this->extinguish();
|
||||||
}else{
|
}else{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1191,14 +1178,12 @@ abstract class Entity{
|
|||||||
|
|
||||||
$moveBB->offset(0, 0, $dz);
|
$moveBB->offset(0, 0, $dz);
|
||||||
|
|
||||||
$stepHeight = $this->getStepHeight();
|
if($this->stepHeight > 0 && $fallingFlag && ($wantedX !== $dx || $wantedZ !== $dz)){
|
||||||
|
|
||||||
if($stepHeight > 0 && $fallingFlag && ($wantedX !== $dx || $wantedZ !== $dz)){
|
|
||||||
$cx = $dx;
|
$cx = $dx;
|
||||||
$cy = $dy;
|
$cy = $dy;
|
||||||
$cz = $dz;
|
$cz = $dz;
|
||||||
$dx = $wantedX;
|
$dx = $wantedX;
|
||||||
$dy = $stepHeight;
|
$dy = $this->stepHeight;
|
||||||
$dz = $wantedZ;
|
$dz = $wantedZ;
|
||||||
|
|
||||||
$stepBB = clone $this->boundingBox;
|
$stepBB = clone $this->boundingBox;
|
||||||
@ -1268,14 +1253,6 @@ abstract class Entity{
|
|||||||
Timings::$entityMove->stopTiming();
|
Timings::$entityMove->stopTiming();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setStepHeight(float $stepHeight) : void{
|
|
||||||
$this->stepHeight = $stepHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStepHeight() : float{
|
|
||||||
return $this->stepHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function checkGroundState(float $wantedX, float $wantedY, float $wantedZ, float $dx, float $dy, float $dz) : void{
|
protected function checkGroundState(float $wantedX, float $wantedY, float $wantedZ, float $dx, float $dy, float $dz) : void{
|
||||||
$this->isCollidedVertically = $wantedY !== $dy;
|
$this->isCollidedVertically = $wantedY !== $dy;
|
||||||
$this->isCollidedHorizontally = ($wantedX !== $dx || $wantedZ !== $dz);
|
$this->isCollidedHorizontally = ($wantedX !== $dx || $wantedZ !== $dz);
|
||||||
@ -1508,7 +1485,7 @@ abstract class Entity{
|
|||||||
return $this->hasSpawned;
|
return $this->hasSpawned;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public static function getNetworkTypeId() : string;
|
abstract public function getNetworkTypeId() : string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by spawnTo() to send whatever packets needed to spawn the entity to the client.
|
* Called by spawnTo() to send whatever packets needed to spawn the entity to the client.
|
||||||
@ -1517,7 +1494,7 @@ abstract class Entity{
|
|||||||
$player->getNetworkSession()->sendDataPacket(AddActorPacket::create(
|
$player->getNetworkSession()->sendDataPacket(AddActorPacket::create(
|
||||||
$this->getId(), //TODO: actor unique ID
|
$this->getId(), //TODO: actor unique ID
|
||||||
$this->getId(),
|
$this->getId(),
|
||||||
static::getNetworkTypeId(),
|
$this->getNetworkTypeId(),
|
||||||
$this->getOffsetPosition($this->location->asVector3()),
|
$this->getOffsetPosition($this->location->asVector3()),
|
||||||
$this->getMotion(),
|
$this->getMotion(),
|
||||||
$this->location->pitch,
|
$this->location->pitch,
|
||||||
|
@ -219,13 +219,6 @@ final class EntityFactory{
|
|||||||
$this->saveNames[$className] = reset($saveNames);
|
$this->saveNames[$className] = reset($saveNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @phpstan-param class-string<Entity> $class
|
|
||||||
*/
|
|
||||||
public function isRegistered(string $class) : bool{
|
|
||||||
return isset($this->saveNames[$class]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an entity from data stored on a chunk.
|
* Creates an entity from data stored on a chunk.
|
||||||
*
|
*
|
||||||
|
@ -99,7 +99,7 @@ class Human extends Living implements ProjectileSource, InventoryHolder{
|
|||||||
private const TAG_SKIN_GEOMETRY_NAME = "GeometryName"; //TAG_String
|
private const TAG_SKIN_GEOMETRY_NAME = "GeometryName"; //TAG_String
|
||||||
private const TAG_SKIN_GEOMETRY_DATA = "GeometryData"; //TAG_ByteArray
|
private const TAG_SKIN_GEOMETRY_DATA = "GeometryData"; //TAG_ByteArray
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::PLAYER; }
|
public function getNetworkTypeId() : string{ return EntityIds::PLAYER; }
|
||||||
|
|
||||||
protected PlayerInventory $inventory;
|
protected PlayerInventory $inventory;
|
||||||
protected PlayerOffHandInventory $offHandInventory;
|
protected PlayerOffHandInventory $offHandInventory;
|
||||||
|
@ -38,7 +38,6 @@ use pocketmine\event\entity\EntityDamageByChildEntityEvent;
|
|||||||
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
||||||
use pocketmine\event\entity\EntityDamageEvent;
|
use pocketmine\event\entity\EntityDamageEvent;
|
||||||
use pocketmine\event\entity\EntityDeathEvent;
|
use pocketmine\event\entity\EntityDeathEvent;
|
||||||
use pocketmine\event\entity\EntityFrostWalkerEvent;
|
|
||||||
use pocketmine\inventory\ArmorInventory;
|
use pocketmine\inventory\ArmorInventory;
|
||||||
use pocketmine\inventory\CallbackInventoryListener;
|
use pocketmine\inventory\CallbackInventoryListener;
|
||||||
use pocketmine\inventory\Inventory;
|
use pocketmine\inventory\Inventory;
|
||||||
@ -722,30 +721,19 @@ abstract class Living extends Entity{
|
|||||||
$y = $this->location->getFloorY() - 1;
|
$y = $this->location->getFloorY() - 1;
|
||||||
$baseZ = $this->location->getFloorZ();
|
$baseZ = $this->location->getFloorZ();
|
||||||
|
|
||||||
$liquid = VanillaBlocks::WATER();
|
$frostedIce = VanillaBlocks::FROSTED_ICE();
|
||||||
$targetBlock = VanillaBlocks::FROSTED_ICE();
|
|
||||||
if(EntityFrostWalkerEvent::hasHandlers()){
|
|
||||||
$ev = new EntityFrostWalkerEvent($this, $radius, $liquid, $targetBlock);
|
|
||||||
$ev->call();
|
|
||||||
if($ev->isCancelled()){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$radius = $ev->getRadius();
|
|
||||||
$liquid = $ev->getLiquid();
|
|
||||||
$targetBlock = $ev->getTargetBlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
for($x = $baseX - $radius; $x <= $baseX + $radius; $x++){
|
for($x = $baseX - $radius; $x <= $baseX + $radius; $x++){
|
||||||
for($z = $baseZ - $radius; $z <= $baseZ + $radius; $z++){
|
for($z = $baseZ - $radius; $z <= $baseZ + $radius; $z++){
|
||||||
$block = $world->getBlockAt($x, $y, $z);
|
$block = $world->getBlockAt($x, $y, $z);
|
||||||
if(
|
if(
|
||||||
!$block->isSameState($liquid) ||
|
!$block instanceof Water ||
|
||||||
|
!$block->isSource() ||
|
||||||
$world->getBlockAt($x, $y + 1, $z)->getTypeId() !== BlockTypeIds::AIR ||
|
$world->getBlockAt($x, $y + 1, $z)->getTypeId() !== BlockTypeIds::AIR ||
|
||||||
count($world->getNearbyEntities(AxisAlignedBB::one()->offset($x, $y, $z))) !== 0
|
count($world->getNearbyEntities(AxisAlignedBB::one()->offset($x, $y, $z))) !== 0
|
||||||
){
|
){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$world->setBlockAt($x, $y, $z, $targetBlock);
|
$world->setBlockAt($x, $y, $z, $frostedIce);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ use const M_PI;
|
|||||||
|
|
||||||
class Squid extends WaterAnimal{
|
class Squid extends WaterAnimal{
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::SQUID; }
|
public function getNetworkTypeId() : string{ return EntityIds::SQUID; }
|
||||||
|
|
||||||
public ?Vector3 $swimDirection = null;
|
public ?Vector3 $swimDirection = null;
|
||||||
public float $swimSpeed = 0.1;
|
public float $swimSpeed = 0.1;
|
||||||
|
@ -40,7 +40,7 @@ class Villager extends Living implements Ageable{
|
|||||||
|
|
||||||
private const TAG_PROFESSION = "Profession"; //TAG_Int
|
private const TAG_PROFESSION = "Profession"; //TAG_Int
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::VILLAGER; }
|
public function getNetworkTypeId() : string{ return EntityIds::VILLAGER; }
|
||||||
|
|
||||||
private bool $baby = false;
|
private bool $baby = false;
|
||||||
private int $profession = self::PROFESSION_FARMER;
|
private int $profession = self::PROFESSION_FARMER;
|
||||||
|
@ -30,7 +30,7 @@ use function mt_rand;
|
|||||||
|
|
||||||
class Zombie extends Living{
|
class Zombie extends Living{
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::ZOMBIE; }
|
public function getNetworkTypeId() : string{ return EntityIds::ZOMBIE; }
|
||||||
|
|
||||||
protected function getInitialSizeInfo() : EntitySizeInfo{
|
protected function getInitialSizeInfo() : EntitySizeInfo{
|
||||||
return new EntitySizeInfo(1.8, 0.6); //TODO: eye height ??
|
return new EntitySizeInfo(1.8, 0.6); //TODO: eye height ??
|
||||||
|
@ -47,7 +47,7 @@ class EndCrystal extends Entity implements Explosive{
|
|||||||
private const TAG_BLOCKTARGET_Y = "BlockTargetY"; //TAG_Int
|
private const TAG_BLOCKTARGET_Y = "BlockTargetY"; //TAG_Int
|
||||||
private const TAG_BLOCKTARGET_Z = "BlockTargetZ"; //TAG_Int
|
private const TAG_BLOCKTARGET_Z = "BlockTargetZ"; //TAG_Int
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::ENDER_CRYSTAL; }
|
public function getNetworkTypeId() : string{ return EntityIds::ENDER_CRYSTAL; }
|
||||||
|
|
||||||
protected bool $showBase = false;
|
protected bool $showBase = false;
|
||||||
protected ?Vector3 $beamTarget = null;
|
protected ?Vector3 $beamTarget = null;
|
||||||
@ -129,7 +129,7 @@ class EndCrystal extends Entity implements Explosive{
|
|||||||
$ev = new EntityPreExplodeEvent($this, 6);
|
$ev = new EntityPreExplodeEvent($this, 6);
|
||||||
$ev->call();
|
$ev->call();
|
||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
$explosion = new Explosion($this->getPosition(), $ev->getRadius(), $this, $ev->getFireChance());
|
$explosion = new Explosion($this->getPosition(), $ev->getRadius(), $this);
|
||||||
if($ev->isBlockBreaking()){
|
if($ev->isBlockBreaking()){
|
||||||
$explosion->explodeA();
|
$explosion->explodeA();
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ use function sqrt;
|
|||||||
|
|
||||||
class ExperienceOrb extends Entity{
|
class ExperienceOrb extends Entity{
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::XP_ORB; }
|
public function getNetworkTypeId() : string{ return EntityIds::XP_ORB; }
|
||||||
|
|
||||||
public const TAG_VALUE_PC = "Value"; //short
|
public const TAG_VALUE_PC = "Value"; //short
|
||||||
public const TAG_VALUE_PE = "experience value"; //int (WTF?)
|
public const TAG_VALUE_PE = "experience value"; //int (WTF?)
|
||||||
|
@ -56,7 +56,7 @@ class FallingBlock extends Entity{
|
|||||||
private const TAG_TILE = "Tile"; //TAG_Byte
|
private const TAG_TILE = "Tile"; //TAG_Byte
|
||||||
private const TAG_DATA = "Data"; //TAG_Byte
|
private const TAG_DATA = "Data"; //TAG_Byte
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::FALLING_BLOCK; }
|
public function getNetworkTypeId() : string{ return EntityIds::FALLING_BLOCK; }
|
||||||
|
|
||||||
protected Block $block;
|
protected Block $block;
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class ItemEntity extends Entity{
|
|||||||
private const TAG_THROWER = "Thrower"; //TAG_String
|
private const TAG_THROWER = "Thrower"; //TAG_String
|
||||||
public const TAG_ITEM = "Item"; //TAG_Compound
|
public const TAG_ITEM = "Item"; //TAG_Compound
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::ITEM; }
|
public function getNetworkTypeId() : string{ return EntityIds::ITEM; }
|
||||||
|
|
||||||
public const MERGE_CHECK_PERIOD = 2; //0.1 seconds
|
public const MERGE_CHECK_PERIOD = 2; //0.1 seconds
|
||||||
public const DEFAULT_DESPAWN_DELAY = 6000; //5 minutes
|
public const DEFAULT_DESPAWN_DELAY = 6000; //5 minutes
|
||||||
|
@ -49,7 +49,7 @@ class Painting extends Entity{
|
|||||||
public const TAG_DIRECTION_BE = "Direction"; //TAG_Byte
|
public const TAG_DIRECTION_BE = "Direction"; //TAG_Byte
|
||||||
public const TAG_MOTIVE = "Motive"; //TAG_String
|
public const TAG_MOTIVE = "Motive"; //TAG_String
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::PAINTING; }
|
public function getNetworkTypeId() : string{ return EntityIds::PAINTING; }
|
||||||
|
|
||||||
public const DATA_TO_FACING = [
|
public const DATA_TO_FACING = [
|
||||||
0 => Facing::SOUTH,
|
0 => Facing::SOUTH,
|
||||||
|
@ -43,7 +43,7 @@ class PrimedTNT extends Entity implements Explosive{
|
|||||||
|
|
||||||
private const TAG_FUSE = "Fuse"; //TAG_Short
|
private const TAG_FUSE = "Fuse"; //TAG_Short
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::TNT; }
|
public function getNetworkTypeId() : string{ return EntityIds::TNT; }
|
||||||
|
|
||||||
protected int $fuse;
|
protected int $fuse;
|
||||||
protected bool $worksUnderwater = false;
|
protected bool $worksUnderwater = false;
|
||||||
@ -121,7 +121,7 @@ class PrimedTNT extends Entity implements Explosive{
|
|||||||
$ev->call();
|
$ev->call();
|
||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
//TODO: deal with underwater TNT (underwater TNT treats water as if it has a blast resistance of 0)
|
//TODO: deal with underwater TNT (underwater TNT treats water as if it has a blast resistance of 0)
|
||||||
$explosion = new Explosion(Position::fromObject($this->location->add(0, $this->size->getHeight() / 2, 0), $this->getWorld()), $ev->getRadius(), $this, $ev->getFireChance());
|
$explosion = new Explosion(Position::fromObject($this->location->add(0, $this->size->getHeight() / 2, 0), $this->getWorld()), $ev->getRadius(), $this);
|
||||||
if($ev->isBlockBreaking()){
|
if($ev->isBlockBreaking()){
|
||||||
$explosion->explodeA();
|
$explosion->explodeA();
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ use function sqrt;
|
|||||||
|
|
||||||
class Arrow extends Projectile{
|
class Arrow extends Projectile{
|
||||||
|
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::ARROW; }
|
public function getNetworkTypeId() : string{ return EntityIds::ARROW; }
|
||||||
|
|
||||||
public const PICKUP_NONE = 0;
|
public const PICKUP_NONE = 0;
|
||||||
public const PICKUP_ANY = 1;
|
public const PICKUP_ANY = 1;
|
||||||
|
@ -29,7 +29,7 @@ use pocketmine\network\mcpe\protocol\types\entity\EntityIds;
|
|||||||
use pocketmine\world\particle\ItemBreakParticle;
|
use pocketmine\world\particle\ItemBreakParticle;
|
||||||
|
|
||||||
class Egg extends Throwable{
|
class Egg extends Throwable{
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::EGG; }
|
public function getNetworkTypeId() : string{ return EntityIds::EGG; }
|
||||||
|
|
||||||
//TODO: spawn chickens on collision
|
//TODO: spawn chickens on collision
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ use pocketmine\world\particle\EndermanTeleportParticle;
|
|||||||
use pocketmine\world\sound\EndermanTeleportSound;
|
use pocketmine\world\sound\EndermanTeleportSound;
|
||||||
|
|
||||||
class EnderPearl extends Throwable{
|
class EnderPearl extends Throwable{
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::ENDER_PEARL; }
|
public function getNetworkTypeId() : string{ return EntityIds::ENDER_PEARL; }
|
||||||
|
|
||||||
protected function onHit(ProjectileHitEvent $event) : void{
|
protected function onHit(ProjectileHitEvent $event) : void{
|
||||||
$owner = $this->getOwningEntity();
|
$owner = $this->getOwningEntity();
|
||||||
|
@ -30,7 +30,7 @@ use pocketmine\world\sound\PotionSplashSound;
|
|||||||
use function mt_rand;
|
use function mt_rand;
|
||||||
|
|
||||||
class ExperienceBottle extends Throwable{
|
class ExperienceBottle extends Throwable{
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::XP_BOTTLE; }
|
public function getNetworkTypeId() : string{ return EntityIds::XP_BOTTLE; }
|
||||||
|
|
||||||
protected function getInitialGravity() : float{ return 0.07; }
|
protected function getInitialGravity() : float{ return 0.07; }
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ use pocketmine\world\particle\ItemBreakParticle;
|
|||||||
use pocketmine\world\sound\IceBombHitSound;
|
use pocketmine\world\sound\IceBombHitSound;
|
||||||
|
|
||||||
class IceBomb extends Throwable{
|
class IceBomb extends Throwable{
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::ICE_BOMB; }
|
public function getNetworkTypeId() : string{ return EntityIds::ICE_BOMB; }
|
||||||
|
|
||||||
public function getResultDamage() : int{
|
public function getResultDamage() : int{
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -28,7 +28,7 @@ use pocketmine\network\mcpe\protocol\types\entity\EntityIds;
|
|||||||
use pocketmine\world\particle\SnowballPoofParticle;
|
use pocketmine\world\particle\SnowballPoofParticle;
|
||||||
|
|
||||||
class Snowball extends Throwable{
|
class Snowball extends Throwable{
|
||||||
public static function getNetworkTypeId() : string{ return EntityIds::SNOWBALL; }
|
public function getNetworkTypeId() : string{ return EntityIds::SNOWBALL; }
|
||||||
|
|
||||||
protected function onHit(ProjectileHitEvent $event) : void{
|
protected function onHit(ProjectileHitEvent $event) : void{
|
||||||
$world = $this->getWorld();
|
$world = $this->getWorld();
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user