9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2025-12-19 14:59:32 +00:00
---------

Co-authored-by: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Co-authored-by: Bluemangoo <chenfy2006@qq.com>
This commit is contained in:
violetc
2024-05-20 23:03:56 +08:00
committed by GitHub
parent e7c14b80bc
commit f40d340092
174 changed files with 3532 additions and 3561 deletions

View File

@@ -10,85 +10,90 @@ jobs:
runs-on: ubuntu-latest
if: github.event.pull_request.merged || github.event_name == 'push' || github.event_name == 'workflow_dispatch'
steps:
- name: Get repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'zulu'
- name: Setup Git Config
run: |
git config --global user.email "ci@leavesmc.top"
git config --global user.name "Leaves CI"
- name: Apply Patches
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: applyPatches
- name: Create Paperclip Jar
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: createReobfPaperclipJar
- name: Publish API
continue-on-error: true
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: publish -PleavesUsername=${{ secrets.REPO_USERNAME }} -PleavesPassword=${{ secrets.REPO_PASSWORD }}
- name: Create Configuration
continue-on-error: true
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: createLeavesConfig
- name: Push Configuration
continue-on-error: true
run: |
mkdir --parents "$HOME/.ssh"
ssh-keyscan -H "github.com" > "$HOME/.ssh/known_hosts"
echo "${{ secrets.CONFIG_DEPLOY_KEY }}" > "$HOME/.ssh/deploy.key"
chmod 400 "$HOME/.ssh/deploy.key"
export GIT_SSH_COMMAND="ssh -i $HOME/.ssh/deploy.key"
git clone git@github.com:LeavesMC/Configuration.git configuration -b Leaves
cp run/leaves.yml configuration/leaves.yml -f
cd configuration
git add leaves.yml
git commit leaves.yml -m "$(date -u +"%Y-%m-%dT%H:%M:%SZ")
https://github.com/LeavesMC/Leaves/commit/$(cd .. && git rev-parse HEAD)"
git push origin HEAD:Leaves
- name: Get Release Info
run: sh scripts/GetReleaseInfo.sh
- name: Create Release
if: "!contains(github.event.commits[0].message, '[release-skip]')"
uses: ncipollo/release-action@v1.12.0
with:
artifacts: ${{ env.jar }}
bodyFile: ${{ env.info }}
tag: ${{ env.tag }}
name: ${{ env.name }}
prerelease: ${{ env.pre }}
token: ${{ secrets.GITHUB_TOKEN }}
makeLatest: ${{ env.make_latest }}
- name: Delete Draft Releases
uses: hugo19941994/delete-draft-releases@v1.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Github Releases To Discord
continue-on-error: true
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK }}
raw-data: ${{ env.discordmes }}
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: ${{ env.jar }}
path: ${{ env.jar }}
- name: Push to Api
continue-on-error: true
if: "!contains(github.event.commits[0].message, '[release-skip]')"
env:
secret: ${{ secrets.API_PUSH_TOKEN }}
secret_v2: ${{ secrets.API_V2_PUSH_TOKEN }}
tag: ${{ env.tag }}
run: sh scripts/PushToAPI.sh
- name: Get repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get JDK 17
uses: actions/setup-java@v4
with:
java-version: "21"
distribution: "zulu"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
add-job-summary: never
generate-job-summary: false
cache-read-only: false
- name: Setup Git Config
run: |
git config --global user.email "ci@leavesmc.org"
git config --global user.name "Leaves CI"
- name: Get Build Number
run: sh scripts/GetBuildNumber.sh
- name: Apply Patches
run: ./gradlew applyPatches
- name: Create Leavesclip Jar
run: ./gradlew createMojmapLeavesclipJar
env:
BUILD_NUMBER: ${{ env.BUILD_NUMBER }}
- name: Publish API
continue-on-error: true
run: ./gradlew publish
env:
LEAVES_USERNAME: ${{ secrets.NEW_REPO_USERNAME }}
LEAVES_PASSWORD: ${{ secrets.NEW_REPO_PASSWORD }}
- name: Create Configuration
continue-on-error: true
run: ./gradlew createLeavesConfig
- name: Push Configuration
continue-on-error: true
run: |
mkdir --parents "$HOME/.ssh"
ssh-keyscan -H "github.com" > "$HOME/.ssh/known_hosts"
echo "${{ secrets.CONFIG_DEPLOY_KEY }}" > "$HOME/.ssh/deploy.key"
chmod 400 "$HOME/.ssh/deploy.key"
export GIT_SSH_COMMAND="ssh -i $HOME/.ssh/deploy.key"
git clone git@github.com:LeavesMC/Configuration.git configuration -b Leaves
cp run/leaves.yml configuration/leaves.yml -f
cd configuration
git add leaves.yml
git commit leaves.yml -m "$(date -u +"%Y-%m-%dT%H:%M:%SZ")
https://github.com/LeavesMC/Leaves/commit/$(cd .. && git rev-parse HEAD)"
git push origin HEAD:Leaves
- name: Get Release Info
run: sh scripts/GetReleaseInfo.sh
- name: Create Release
if: "!contains(github.event.commits[0].message, '[release-skip]')"
uses: ncipollo/release-action@v1
with:
artifacts: ${{ env.jar }}
bodyFile: ${{ env.info }}
tag: ${{ env.tag }}
name: ${{ env.name }}
prerelease: ${{ env.pre }}
token: ${{ secrets.GITHUB_TOKEN }}
makeLatest: ${{ env.make_latest }}
- name: Delete Draft Releases
uses: hugo19941994/delete-draft-releases@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Github Releases To Discord
continue-on-error: true
uses: tsickert/discord-webhook@v6
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK }}
raw-data: ${{ env.discordmes }}
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.jar }}
path: ${{ env.jar }}
- name: Push to Api
continue-on-error: true
if: "!contains(github.event.commits[0].message, '[release-skip]')"
env:
secret: ${{ secrets.API_PUSH_TOKEN }}
secret_v2: ${{ secrets.API_V2_PUSH_TOKEN }}
tag: ${{ env.tag }}
run: sh scripts/PushToAPI.sh

View File

@@ -21,30 +21,32 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Get repository
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'zulu'
java-version: "21"
distribution: "zulu"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
add-job-summary: never
generate-job-summary: false
cache-read-only: false
- name: Setup Git Config
run: |
git config --global user.email "ci@leavesmc.top"
git config --global user.email "ci@leavesmc.org"
git config --global user.name "Leaves CI"
- name: Apply Patches
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: applyPatches
run: ./gradlew applyPatches
- name: Create Paperclip Jar
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: createReobfPaperclipJar
run: ./gradlew createReobfPaperclipJar
- name: Get Release Info
run: sh scripts/GetReleaseInfo.sh
- name: Archive Leaves
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.jar }}
path: ${{ env.jar }}

View File

@@ -26,11 +26,11 @@ Leaves-API:
```kotlin
maven {
name = 'leavesmc-repo'
url = 'https://repo.leavesmc.top/snapshots/'
url = 'https://repo.leavesmc.org/snapshots/'
}
dependencies {
compileOnly("top.leavesmc.leaves:leaves-api:1.20.4-R0.1-SNAPSHOT")
compileOnly("org.leavesmc.leaves:leaves-api:1.20.6-R0.1-SNAPSHOT")
}
```
@@ -40,15 +40,15 @@ Each time you want to update your dependency, you must re-build Leaves.
Leaves-Server:
```kotlin
dependencies {
compileOnly("top.leavesmc.leaves:leaves:1.20.4-R0.1-SNAPSHOT")
compileOnly("org.leavesmc.leaves:leaves:1.20.6-R0.1-SNAPSHOT")
}
```
## Building
You need JDK 17 and good Internet conditions
You need JDK 21 and good Internet conditions
Clone this repo, run `./gradlew applyPatches`, then run `./gradlew createReobfBundlerJar` in your terminal.
Clone this repo, run `./gradlew applyPatches`, then run `./gradlew createMojmapLeavesclipJar` in your terminal.
You can find the jars in the `build/libs` directory.

View File

@@ -26,11 +26,11 @@ Leaves-API:
```kotlin
maven {
name = 'leavesmc-repo'
url = 'https://repo.leavesmc.top/snapshots/'
url = 'https://repo.leavesmc.org/snapshots/'
}
dependencies {
compileOnly("top.leavesmc.leaves:leaves-api:1.20.4-R0.1-SNAPSHOT")
compileOnly("org.leavesmc.leaves:leaves-api:1.20.6-R0.1-SNAPSHOT")
}
```
@@ -39,15 +39,15 @@ dependencies {
Leaves-Server:
```kotlin
dependencies {
compileOnly("top.leavesmc.leaves:leaves:1.20.4-R0.1-SNAPSHOT")
compileOnly("org.leavesmc.leaves:leaves:1.20.6-R0.1-SNAPSHOT")
}
```
## 自行构建
你需要最低 JDK 17 和一个可以正常访问各种 git/maven 库的网络
你需要最低 JDK 21 和一个可以正常访问各种 git/maven 库的网络
首先克隆此储存库,然后在你的终端里依次执行 `./gradlew applyPatches` 和 `./gradlew createReobfBundlerJar`
首先克隆此储存库,然后在你的终端里依次执行 `./gradlew applyPatches` 和 `./gradlew createMojmapLeavesclipJar`
最后 你可以在 `build/libs` 文件夹里找到对应的jar文件

View File

@@ -4,35 +4,32 @@ import kotlin.io.path.*
plugins {
java
`maven-publish`
id("com.github.johnrengelman.shadow") version "8.1.1" apply false
id("io.papermc.paperweight.patcher") version "1.5.13"
id("io.papermc.paperweight.patcher") version "1.7.1"
}
repositories {
mavenCentral()
maven("https://repo.leavesmc.top/releases") {
content { onlyForConfigurations("paperclip") }
allprojects {
apply(plugin = "java")
apply(plugin = "maven-publish")
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
}
dependencies {
remapper("net.fabricmc:tiny-remapper:0.10.1:fat")
decompiler("net.minecraftforge:forgeflower:2.0.627.2")
paperclip("top.leavesmc:leavesclip:1.0.2")
}
subprojects {
apply(plugin = "java")
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
languageVersion.set(JavaLanguageVersion.of(21))
}
}
tasks.withType<JavaCompile> {
options.encoding = Charsets.UTF_8.name()
options.release.set(17)
options.release.set(21)
}
tasks.withType<Javadoc> {
options.encoding = Charsets.UTF_8.name()
@@ -54,6 +51,19 @@ subprojects {
}
}
repositories {
mavenCentral()
maven("https://repo.leavesmc.org/releases") {
content { onlyForConfigurations("paperclip") }
}
}
dependencies {
remapper("net.fabricmc:tiny-remapper:0.10.2:fat")
decompiler("org.vineflower:vineflower:1.10.1")
paperclip("org.leavesmc:leavesclip:2.0.0")
}
paperweight {
serverProject.set(project(":leaves-server"))
@@ -78,6 +88,20 @@ paperweight {
}
}
allprojects {
publishing {
repositories {
maven("https://repo.leavesmc.org/snapshots") {
name = "leaves"
credentials(PasswordCredentials::class) {
username = System.getenv("LEAVES_USERNAME")
password = System.getenv("LEAVES_PASSWORD")
}
}
}
}
}
if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
tasks.withType<io.papermc.paperweight.tasks.CollectATsFromPatches>().configureEach {
@@ -90,3 +114,23 @@ if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()
filterPatches = false
}
}
tasks.register("createMojmapLeavesclipJar") {
group = "paperweight"
dependsOn("createMojmapPaperclipJar")
doLast {
file("build/libs/leaves-paperclip-${project.version}-mojmap.jar").renameTo(
file("build/libs/leaves-leavesclip-${project.version}-mojmap.jar")
)
}
}
tasks.register("createReobfLeavesclipJar") {
group = "paperweight"
dependsOn("createReobfPaperclipJar")
doLast {
file("build/libs/leaves-paperclip-${project.version}-reobf.jar").renameTo(
file("build/libs/leaves-leavesclip-${project.version}-reobf.jar")
)
}
}

View File

@@ -1,9 +1,8 @@
group=top.leavesmc.leaves
version=1.20.4-R0.1-SNAPSHOT
group=org.leavesmc.leaves
version=1.20.6-R0.1-SNAPSHOT
mcVersion=1.20.4
packageVersion=1_20_R3
mcVersion=1.20.6
org.gradle.jvmargs=-Xmx2G
paperRef=f4c7d373e4a1aff23539fe099745bf29a28559b9
preVersion=false
updatingMinecraft=false
paperRef=f17519338bc589c045e0b32bfc37e048b23544d5
preVersion=true
updatingMinecraft=true

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Leaves Server Config
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 4ff1b38eb65f97344257204cf018f176f247ed36..cc119de8e5912eae124be1d6c94f73b77682de41 100644
index c8595ffcfcbdd79794d464415287d46acef72b72..99d754d3d06accbe13363f729b284e0eab67f2aa 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2234,6 +2234,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2256,6 +2256,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
throw new UnsupportedOperationException("Not supported yet.");
}
// Paper end

View File

@@ -4,19 +4,20 @@ Date: Wed, 27 Jul 2022 15:30:34 +0800
Subject: [PATCH] Add fakeplayer api
diff --git a/.gitignore b/.gitignore
index 97e78e27ee0eea2c8b24886eeb19164d552323fe..9764fa643039f215627c20a33ca70c9e36b2d599 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,4 @@
# vs code
/.vscode
/.factorypath
+
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 9a428153f34291bdc026a71f7e60e285b7794b0c..824982037eb064d536ac09c303d3bdd225355a6a 100644
index 71f1c361ebccbe83193c37ec3a90faa4085001c3..0bfaeca0b1e1fadfaeed486c94dac19447062575 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -59,6 +59,7 @@ import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import io.papermc.paper.util.JarManifests; // Paper
+import top.leavesmc.leaves.entity.BotManager;
/**
* Represents the Bukkit core, for version and Server singleton handling
@@ -2880,6 +2881,17 @@ public final class Bukkit {
@@ -2903,6 +2903,17 @@ public final class Bukkit {
}
// Paper end - Folia region threading API
@@ -26,7 +27,7 @@ index 9a428153f34291bdc026a71f7e60e285b7794b0c..824982037eb064d536ac09c303d3bdd2
+ *
+ * @return Bot Manager
+ */
+ public static @NotNull BotManager getBotManager() {
+ public static @NotNull org.leavesmc.leaves.entity.BotManager getBotManager() {
+ return server.getBotManager();
+ }
+ // Leaves end - Bot API
@@ -35,18 +36,18 @@ index 9a428153f34291bdc026a71f7e60e285b7794b0c..824982037eb064d536ac09c303d3bdd2
public static Server.Spigot spigot() {
return server.spigot();
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index cc119de8e5912eae124be1d6c94f73b77682de41..34196590f64f1c65c691b305b402b888b524c1d7 100644
index 99d754d3d06accbe13363f729b284e0eab67f2aa..5e60df867b3111c203c0fe249b09e8c6333d1255 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -59,6 +59,7 @@ import org.bukkit.util.CachedServerIcon;
@@ -61,6 +61,7 @@ import org.bukkit.util.CachedServerIcon;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import top.leavesmc.leaves.entity.BotManager;
+import org.leavesmc.leaves.entity.BotManager;
/**
* Represents a server implementation.
@@ -2526,4 +2527,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2550,4 +2551,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
boolean isOwnedByCurrentRegion(@NotNull Entity entity);
// Paper end - Folia region threading API
@@ -60,18 +61,18 @@ index cc119de8e5912eae124be1d6c94f73b77682de41..34196590f64f1c65c691b305b402b888
+ @NotNull BotManager getBotManager();
+ // Leaves end - Bot API
}
diff --git a/src/main/java/top/leavesmc/leaves/entity/Bot.java b/src/main/java/top/leavesmc/leaves/entity/Bot.java
diff --git a/src/main/java/org/leavesmc/leaves/entity/Bot.java b/src/main/java/org/leavesmc/leaves/entity/Bot.java
new file mode 100644
index 0000000000000000000000000000000000000000..02815077dcd6d5c1b155ef3ca5cd6e3a9c45c0b5
index 0000000000000000000000000000000000000000..922ca5b27bc0dd443d635646f37f879559cc0252
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/entity/Bot.java
+++ b/src/main/java/org/leavesmc/leaves/entity/Bot.java
@@ -0,0 +1,51 @@
+package top.leavesmc.leaves.entity;
+package org.leavesmc.leaves.entity;
+
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import top.leavesmc.leaves.entity.botaction.LeavesBotAction;
+import org.leavesmc.leaves.entity.botaction.LeavesBotAction;
+
+import java.util.UUID;
+
@@ -117,19 +118,19 @@ index 0000000000000000000000000000000000000000..02815077dcd6d5c1b155ef3ca5cd6e3a
+ */
+ public boolean setBotAction(@NotNull LeavesBotAction action, @NotNull Player player, @NotNull String[] args);
+}
diff --git a/src/main/java/top/leavesmc/leaves/entity/BotManager.java b/src/main/java/top/leavesmc/leaves/entity/BotManager.java
diff --git a/src/main/java/org/leavesmc/leaves/entity/BotManager.java b/src/main/java/org/leavesmc/leaves/entity/BotManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2258027b2ed4bfcf7feda2e9075b1a1a05a85b6
index 0000000000000000000000000000000000000000..7662b8bb1bb47f7a85705709548e00a3918d0502
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/entity/BotManager.java
+++ b/src/main/java/org/leavesmc/leaves/entity/BotManager.java
@@ -0,0 +1,107 @@
+package top.leavesmc.leaves.entity;
+package org.leavesmc.leaves.entity;
+
+import org.bukkit.Location;
+import org.bukkit.util.Consumer;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import top.leavesmc.leaves.entity.botaction.CustomBotAction;
+import org.leavesmc.leaves.entity.botaction.CustomBotAction;
+
+import java.util.Collection;
+import java.util.UUID;
@@ -230,18 +231,18 @@ index 0000000000000000000000000000000000000000..f2258027b2ed4bfcf7feda2e9075b1a1
+ */
+ public boolean unregisterCustomBotAction(String name);
+}
diff --git a/src/main/java/top/leavesmc/leaves/entity/botaction/CustomBotAction.java b/src/main/java/top/leavesmc/leaves/entity/botaction/CustomBotAction.java
diff --git a/src/main/java/org/leavesmc/leaves/entity/botaction/CustomBotAction.java b/src/main/java/org/leavesmc/leaves/entity/botaction/CustomBotAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..7abf4eef22e40468929e724ebc07a97b0b2a05f3
index 0000000000000000000000000000000000000000..0b1648013d5f03d064c0719c231981082ab563be
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/entity/botaction/CustomBotAction.java
+++ b/src/main/java/org/leavesmc/leaves/entity/botaction/CustomBotAction.java
@@ -0,0 +1,52 @@
+package top.leavesmc.leaves.entity.botaction;
+package org.leavesmc.leaves.entity.botaction;
+
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import top.leavesmc.leaves.entity.Bot;
+import org.leavesmc.leaves.entity.Bot;
+
+import java.util.List;
+
@@ -288,13 +289,13 @@ index 0000000000000000000000000000000000000000..7abf4eef22e40468929e724ebc07a97b
+ */
+ public int getNumber();
+}
diff --git a/src/main/java/top/leavesmc/leaves/entity/botaction/LeavesBotAction.java b/src/main/java/top/leavesmc/leaves/entity/botaction/LeavesBotAction.java
diff --git a/src/main/java/org/leavesmc/leaves/entity/botaction/LeavesBotAction.java b/src/main/java/org/leavesmc/leaves/entity/botaction/LeavesBotAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..e298722319ff0cfd52e531693ea3767e5f9a3d52
index 0000000000000000000000000000000000000000..b239acd298b299e338ae56aa6507570942ce44e2
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/entity/botaction/LeavesBotAction.java
+++ b/src/main/java/org/leavesmc/leaves/entity/botaction/LeavesBotAction.java
@@ -0,0 +1,32 @@
+package top.leavesmc.leaves.entity.botaction;
+package org.leavesmc.leaves.entity.botaction;
+
+/**
+ * A Leaves bot action enum
@@ -326,18 +327,18 @@ index 0000000000000000000000000000000000000000..e298722319ff0cfd52e531693ea3767e
+ return name;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/event/bot/BotActionEvent.java b/src/main/java/top/leavesmc/leaves/event/bot/BotActionEvent.java
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotActionEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotActionEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..b18587ad3b813b71f5f3cde2a90f204603bdb180
index 0000000000000000000000000000000000000000..91ea5540387b7d7e1be5b6368a2f02b3b784614a
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/event/bot/BotActionEvent.java
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotActionEvent.java
@@ -0,0 +1,49 @@
+package top.leavesmc.leaves.event.bot;
+package org.leavesmc.leaves.event.bot;
+
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.entity.Bot;
+import org.leavesmc.leaves.entity.Bot;
+
+public class BotActionEvent extends BotEvent implements Cancellable {
+ private static final HandlerList handlers = new HandlerList();
@@ -381,18 +382,18 @@ index 0000000000000000000000000000000000000000..b18587ad3b813b71f5f3cde2a90f2046
+ return handlers;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/event/bot/BotConfigModifyEvent.java b/src/main/java/top/leavesmc/leaves/event/bot/BotConfigModifyEvent.java
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..b395eba4734703cc99d04941e20e053b9527b1e1
index 0000000000000000000000000000000000000000..5e55759fd3d7891e8e1d5d6a306dc8144d366469
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/event/bot/BotConfigModifyEvent.java
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotConfigModifyEvent.java
@@ -0,0 +1,49 @@
+package top.leavesmc.leaves.event.bot;
+package org.leavesmc.leaves.event.bot;
+
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.entity.Bot;
+import org.leavesmc.leaves.entity.Bot;
+
+public class BotConfigModifyEvent extends BotEvent implements Cancellable {
+ private static final HandlerList handlers = new HandlerList();
@@ -436,13 +437,13 @@ index 0000000000000000000000000000000000000000..b395eba4734703cc99d04941e20e053b
+ return handlers;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/event/bot/BotCreateEvent.java b/src/main/java/top/leavesmc/leaves/event/bot/BotCreateEvent.java
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..7cf1eb4eb3d2fe9310f9272ec53208632b87b49b
index 0000000000000000000000000000000000000000..c093f68e5f1749c792255220f39bdbdffb78f0f9
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/event/bot/BotCreateEvent.java
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotCreateEvent.java
@@ -0,0 +1,106 @@
+package top.leavesmc.leaves.event.bot;
+package org.leavesmc.leaves.event.bot;
+
+import org.bukkit.Location;
+import org.bukkit.event.Cancellable;
@@ -548,17 +549,17 @@ index 0000000000000000000000000000000000000000..7cf1eb4eb3d2fe9310f9272ec5320863
+ return handlers;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/event/bot/BotEvent.java b/src/main/java/top/leavesmc/leaves/event/bot/BotEvent.java
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a4fe07ce965d4a97e0d8105a91310dac7d1343c
index 0000000000000000000000000000000000000000..ad358081f1e1da4075243d7ca0a01c1f7b00631b
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/event/bot/BotEvent.java
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotEvent.java
@@ -0,0 +1,31 @@
+package top.leavesmc.leaves.event.bot;
+package org.leavesmc.leaves.event.bot;
+
+import org.bukkit.event.Event;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.entity.Bot;
+import org.leavesmc.leaves.entity.Bot;
+
+/**
+ * Represents a fakeplayer related event
@@ -585,20 +586,20 @@ index 0000000000000000000000000000000000000000..4a4fe07ce965d4a97e0d8105a91310da
+ return bot;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/event/bot/BotInventoryOpenEvent.java b/src/main/java/top/leavesmc/leaves/event/bot/BotInventoryOpenEvent.java
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotInventoryOpenEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotInventoryOpenEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..e889f7e98ec9cb6a3b95d8ea865e25fffea662a1
index 0000000000000000000000000000000000000000..a369b468d4793b36dd0944a1368a70e07b9fc10f
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/event/bot/BotInventoryOpenEvent.java
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotInventoryOpenEvent.java
@@ -0,0 +1,46 @@
+package top.leavesmc.leaves.event.bot;
+package org.leavesmc.leaves.event.bot;
+
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import top.leavesmc.leaves.entity.Bot;
+import org.leavesmc.leaves.entity.Bot;
+
+public class BotInventoryOpenEvent extends BotEvent implements Cancellable {
+ private static final HandlerList handlers = new HandlerList();
@@ -637,17 +638,17 @@ index 0000000000000000000000000000000000000000..e889f7e98ec9cb6a3b95d8ea865e25ff
+ return handlers;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/event/bot/BotJoinEvent.java b/src/main/java/top/leavesmc/leaves/event/bot/BotJoinEvent.java
diff --git a/src/main/java/org/leavesmc/leaves/event/bot/BotJoinEvent.java b/src/main/java/org/leavesmc/leaves/event/bot/BotJoinEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..10afa5c7fd4ee8a4e72d64f8ca9bf8731ec2ad61
index 0000000000000000000000000000000000000000..7500652b01a4ed3c8d59ca003a644a9e024f6512
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/event/bot/BotJoinEvent.java
+++ b/src/main/java/org/leavesmc/leaves/event/bot/BotJoinEvent.java
@@ -0,0 +1,27 @@
+package top.leavesmc.leaves.event.bot;
+package org.leavesmc.leaves.event.bot;
+
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.entity.Bot;
+import org.leavesmc.leaves.entity.Bot;
+
+/**
+ * Called when a fakeplayer joins a server

View File

@@ -4,13 +4,13 @@ Date: Sun, 11 Dec 2022 18:43:36 +0800
Subject: [PATCH] Player operation limiter
diff --git a/src/main/java/top/leavesmc/leaves/event/player/PlayerOperationLimitEvent.java b/src/main/java/top/leavesmc/leaves/event/player/PlayerOperationLimitEvent.java
diff --git a/src/main/java/org/leavesmc/leaves/event/player/PlayerOperationLimitEvent.java b/src/main/java/org/leavesmc/leaves/event/player/PlayerOperationLimitEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c55d8e105aebb269b05f9df68daaf48352391cb
index 0000000000000000000000000000000000000000..1f5852eb6d53db5774db0ab4eba50bcb8733cfd6
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/event/player/PlayerOperationLimitEvent.java
+++ b/src/main/java/org/leavesmc/leaves/event/player/PlayerOperationLimitEvent.java
@@ -0,0 +1,56 @@
+package top.leavesmc.leaves.event.player;
+package org.leavesmc.leaves.event.player;
+
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Hide irrelevant compilation warnings
diff --git a/build.gradle.kts b/build.gradle.kts
index 04853c43b99951bf0d4c96ef73724625bdaf018f..e9e580d777534a56866413d6ca48f4aa269ec33f 100644
index fd39ed209b20c927054b8482c400beeeeab460a3..d83f2d45849411afd91e27721f73189ed2a8bca5 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -109,6 +109,15 @@ val generateApiVersioningFile by tasks.registering {
@@ -130,6 +130,15 @@ val generateApiVersioningFile by tasks.registering {
}
}
@@ -24,7 +24,7 @@ index 04853c43b99951bf0d4c96ef73724625bdaf018f..e9e580d777534a56866413d6ca48f4aa
tasks.jar {
from(generateApiVersioningFile.map { it.outputs.files.singleFile }) {
into("META-INF/maven/${project.group}/${project.name}")
@@ -166,6 +175,8 @@ tasks.withType<Javadoc> {
@@ -187,6 +196,8 @@ tasks.withType<Javadoc> {
into("build/docs/javadoc")
}
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] SIMD support
diff --git a/build.gradle.kts b/build.gradle.kts
index e9e580d777534a56866413d6ca48f4aa269ec33f..e0f2438944bda900f3a6391797e7842647b844be 100644
index d83f2d45849411afd91e27721f73189ed2a8bca5..a42ee9d752eac9b895d9e7c29994c9f630805311 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -115,6 +115,7 @@ tasks.withType<JavaCompile> {
@@ -136,6 +136,7 @@ tasks.withType<JavaCompile> {
compilerArgs.add("-Xlint:-module")
compilerArgs.add("-Xlint:-removal")
compilerArgs.add("-Xlint:-dep-ann")
@@ -16,7 +16,7 @@ index e9e580d777534a56866413d6ca48f4aa269ec33f..e0f2438944bda900f3a6391797e78426
}
// Leaves end - hide irrelevant compilation warnings
@@ -177,6 +178,7 @@ tasks.withType<Javadoc> {
@@ -198,6 +199,7 @@ tasks.withType<Javadoc> {
}
options.addStringOption("Xdoclint:none", "-quiet") // Leaves - hide irrelevant compilation warnings

View File

@@ -2090,7 +2090,7 @@ index 632c4961515f5052551f841cfa840e60bba7a257..00000000000000000000000000000000
- }
-}
diff --git a/src/main/java/org/bukkit/command/Command.java b/src/main/java/org/bukkit/command/Command.java
index b791358f90fe92bc2264d9a26492245763813af3..17fd039363e909492d31ddb0f6cf941e0ae9969d 100644
index c7cdc2ad8a2c43e8c0fcaa1761d3b81726c5ebcb..3ab75d571be4032e1bcfc5bb38168b81af63f0ad 100644
--- a/src/main/java/org/bukkit/command/Command.java
+++ b/src/main/java/org/bukkit/command/Command.java
@@ -33,7 +33,6 @@ public abstract class Command {
@@ -2102,7 +2102,7 @@ index b791358f90fe92bc2264d9a26492245763813af3..17fd039363e909492d31ddb0f6cf941e
protected Command(@NotNull String name) {
diff --git a/src/main/java/org/bukkit/command/FormattedCommandAlias.java b/src/main/java/org/bukkit/command/FormattedCommandAlias.java
index 9d4f553c04784cca63901a56a7aea62a5cae1d72..46cc7bb2dc761d2de13993ff6fb9286e30ab58c2 100644
index abe256e1e45ce28036da4aa1586715bc8a1a3414..b359306500e640f4b0761ae9aa996cf64e4fe63f 100644
--- a/src/main/java/org/bukkit/command/FormattedCommandAlias.java
+++ b/src/main/java/org/bukkit/command/FormattedCommandAlias.java
@@ -12,7 +12,6 @@ public class FormattedCommandAlias extends Command {
@@ -2114,10 +2114,10 @@ index 9d4f553c04784cca63901a56a7aea62a5cae1d72..46cc7bb2dc761d2de13993ff6fb9286e
}
diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java
index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e4e64756d10b2f2eeba2903fd12f6e0dff2ed638 100644
index c3a9cf65db73ed534bf20996c7f05b5eb0aaebe1..014f9c30440981d251e54b289682015baae1fe90 100644
--- a/src/main/java/org/bukkit/command/SimpleCommandMap.java
+++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java
@@ -34,7 +34,6 @@ public class SimpleCommandMap implements CommandMap {
@@ -38,7 +38,6 @@ public class SimpleCommandMap implements CommandMap {
register("bukkit", new VersionCommand("version"));
register("bukkit", new ReloadCommand("reload"));
//register("bukkit", new PluginsCommand("plugins")); // Paper
@@ -2125,7 +2125,7 @@ index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e4e64756d10b2f2eeba2903fd12f6e0d
}
public void setFallbackCommands() {
@@ -66,7 +65,6 @@ public class SimpleCommandMap implements CommandMap {
@@ -70,7 +69,6 @@ public class SimpleCommandMap implements CommandMap {
*/
@Override
public boolean register(@NotNull String label, @NotNull String fallbackPrefix, @NotNull Command command) {
@@ -2133,7 +2133,7 @@ index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e4e64756d10b2f2eeba2903fd12f6e0d
label = label.toLowerCase(java.util.Locale.ENGLISH).trim();
fallbackPrefix = fallbackPrefix.toLowerCase(java.util.Locale.ENGLISH).trim();
boolean registered = register(label, command, false, fallbackPrefix);
@@ -143,17 +141,9 @@ public class SimpleCommandMap implements CommandMap {
@@ -152,17 +150,9 @@ public class SimpleCommandMap implements CommandMap {
return false;
}
@@ -2152,10 +2152,10 @@ index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e4e64756d10b2f2eeba2903fd12f6e0d
server.getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerCommandException(ex, target, sender, args))); // Paper
//target.timings.stopTiming(); // Spigot // Paper
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index fc2dae69165776d08274e34a69962cc70445f411..47e654e1ca66fd9ee79aaae839d4f5e907a4e29a 100644
index 07a9c9e254188c251165ca84c8e961fccda01175..9eb02f8fb4d581349c4752ccb396dc4fdbd940c3 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -707,12 +707,7 @@ public final class SimplePluginManager implements PluginManager {
@@ -719,12 +719,7 @@ public final class SimplePluginManager implements PluginManager {
throw new IllegalPluginAccessException("Plugin attempted to register " + event + " while not enabled");
}
@@ -2169,7 +2169,7 @@ index fc2dae69165776d08274e34a69962cc70445f411..47e654e1ca66fd9ee79aaae839d4f5e9
}
@NotNull
@@ -942,8 +937,7 @@ public final class SimplePluginManager implements PluginManager {
@@ -954,8 +949,7 @@ public final class SimplePluginManager implements PluginManager {
@Override
public boolean useTimings() {
@@ -2179,7 +2179,7 @@ index fc2dae69165776d08274e34a69962cc70445f411..47e654e1ca66fd9ee79aaae839d4f5e9
}
/**
@@ -952,7 +946,6 @@ public final class SimplePluginManager implements PluginManager {
@@ -964,7 +958,6 @@ public final class SimplePluginManager implements PluginManager {
* @param use True if per event timing code should be used
*/
public void useTimings(boolean use) {

View File

@@ -1,26 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Sat, 22 Jul 2023 02:33:52 +0800
Subject: [PATCH] Leaves API publish
diff --git a/build.gradle.kts b/build.gradle.kts
index e0f2438944bda900f3a6391797e7842647b844be..bb020dc0ad0cbc1d342966dbf5fce9d11547f56e 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -212,3 +212,14 @@ tasks.check {
dependsOn(scanJarForOldGeneratedCode)
}
// Paper end
+
+// Leaves start - publish api
+publishing {
+ repositories {
+ maven("https://repo.leavesmc.top/snapshots") {
+ name = "leaves"
+ credentials(PasswordCredentials::class)
+ }
+ }
+}
+// Leaves end - publish api
\ No newline at end of file

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Force peaceful mode switch
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index e6f66d70d024cf4f0536a5bf8e51bf7b306335df..fd81bf0631e57cdcbec7c0cb95c595510ce0df3d 100644
index 97f97ea5c6aa513c439f86a9c82821e0f7d9cd1e..14d0e02673a37cd991c5c8cd34dd45b7cadde53a 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -4301,6 +4301,12 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@@ -4317,6 +4317,12 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
void setSendViewDistance(int viewDistance);
// Paper end - view distance api

View File

@@ -4,24 +4,25 @@ Date: Sat, 5 Aug 2023 09:10:59 +0800
Subject: [PATCH] Replay Mod API
diff --git a/.gitignore b/.gitignore
index 9764fa643039f215627c20a33ca70c9e36b2d599..97e78e27ee0eea2c8b24886eeb19164d552323fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,4 +38,3 @@
# vs code
/.vscode
/.factorypath
-
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 824982037eb064d536ac09c303d3bdd225355a6a..7e92a652d47042dec050e4be08b57e2121ccd0bb 100644
index 0bfaeca0b1e1fadfaeed486c94dac19447062575..3c2b252243c1fa0d3adcc9c860c24af73165de33 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -60,6 +60,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import io.papermc.paper.util.JarManifests; // Paper
import top.leavesmc.leaves.entity.BotManager;
+import top.leavesmc.leaves.entity.PhotographerManager;
/**
* Represents the Bukkit core, for version and Server singleton handling
@@ -2891,6 +2892,11 @@ public final class Bukkit {
@@ -2913,6 +2913,11 @@ public final class Bukkit {
return server.getBotManager();
}
// Leaves end - Bot API
+ // Leaves start - Photographer API
+ public static @NotNull PhotographerManager getPhotographerManager() {
+ public static @NotNull org.leavesmc.leaves.entity.PhotographerManager getPhotographerManager() {
+ return server.getPhotographerManager();
+ }
+ // Leaves end - Photographer API
@@ -29,18 +30,18 @@ index 824982037eb064d536ac09c303d3bdd225355a6a..7e92a652d47042dec050e4be08b57e21
@NotNull
public static Server.Spigot spigot() {
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 34196590f64f1c65c691b305b402b888b524c1d7..d465633aab75def37a2b4a9f2a034071970c1dfa 100644
index 5e60df867b3111c203c0fe249b09e8c6333d1255..4a03044938630e4a0e701bc481f15da5a3323115 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -60,6 +60,7 @@ import org.jetbrains.annotations.Contract;
@@ -62,6 +62,7 @@ import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import top.leavesmc.leaves.entity.BotManager;
+import top.leavesmc.leaves.entity.PhotographerManager;
import org.leavesmc.leaves.entity.BotManager;
+import org.leavesmc.leaves.entity.PhotographerManager;
/**
* Represents a server implementation.
@@ -2536,4 +2537,7 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2560,4 +2561,7 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/
@NotNull BotManager getBotManager();
// Leaves end - Bot API
@@ -48,13 +49,13 @@ index 34196590f64f1c65c691b305b402b888b524c1d7..d465633aab75def37a2b4a9f2a034071
+ @NotNull PhotographerManager getPhotographerManager();
+ // Leaves end - Photographer API
}
diff --git a/src/main/java/top/leavesmc/leaves/entity/Photographer.java b/src/main/java/top/leavesmc/leaves/entity/Photographer.java
diff --git a/src/main/java/org/leavesmc/leaves/entity/Photographer.java b/src/main/java/org/leavesmc/leaves/entity/Photographer.java
new file mode 100644
index 0000000000000000000000000000000000000000..bfa6fe2a0ca095170aa5e073251402cf83a53ba0
index 0000000000000000000000000000000000000000..cc4226c59aa9f5942bd90e270c5bcd8b354139dd
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/entity/Photographer.java
+++ b/src/main/java/org/leavesmc/leaves/entity/Photographer.java
@@ -0,0 +1,27 @@
+package top.leavesmc.leaves.entity;
+package org.leavesmc.leaves.entity;
+
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
@@ -81,20 +82,20 @@ index 0000000000000000000000000000000000000000..bfa6fe2a0ca095170aa5e073251402cf
+
+ public void setFollowPlayer(@Nullable Player player);
+}
diff --git a/src/main/java/top/leavesmc/leaves/entity/PhotographerManager.java b/src/main/java/top/leavesmc/leaves/entity/PhotographerManager.java
diff --git a/src/main/java/org/leavesmc/leaves/entity/PhotographerManager.java b/src/main/java/org/leavesmc/leaves/entity/PhotographerManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c2ef73e9668918d45d9e3ad250c7c20b1fb5dd1
index 0000000000000000000000000000000000000000..492414e9328b3a0cde2157068f00e60eb5e978c6
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/entity/PhotographerManager.java
+++ b/src/main/java/org/leavesmc/leaves/entity/PhotographerManager.java
@@ -0,0 +1,33 @@
+package top.leavesmc.leaves.entity;
+package org.leavesmc.leaves.entity;
+
+import org.bukkit.Location;
+import org.bukkit.util.Consumer;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import top.leavesmc.leaves.entity.botaction.CustomBotAction;
+import top.leavesmc.leaves.replay.BukkitRecorderOption;
+import org.leavesmc.leaves.entity.botaction.CustomBotAction;
+import org.leavesmc.leaves.replay.BukkitRecorderOption;
+
+import java.util.Collection;
+import java.util.UUID;
@@ -120,13 +121,13 @@ index 0000000000000000000000000000000000000000..4c2ef73e9668918d45d9e3ad250c7c20
+
+ public Collection<Photographer> getPhotographers();
+}
diff --git a/src/main/java/top/leavesmc/leaves/replay/BukkitRecorderOption.java b/src/main/java/top/leavesmc/leaves/replay/BukkitRecorderOption.java
diff --git a/src/main/java/org/leavesmc/leaves/replay/BukkitRecorderOption.java b/src/main/java/org/leavesmc/leaves/replay/BukkitRecorderOption.java
new file mode 100644
index 0000000000000000000000000000000000000000..3df4a6055b91c28e273d6fb2697b608778f40a9c
index 0000000000000000000000000000000000000000..320e8bc0516580d946fa43671bd71094eade0422
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/replay/BukkitRecorderOption.java
+++ b/src/main/java/org/leavesmc/leaves/replay/BukkitRecorderOption.java
@@ -0,0 +1,18 @@
+package top.leavesmc.leaves.replay;
+package org.leavesmc.leaves.replay;
+
+public class BukkitRecorderOption {
+

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Sat, 11 May 2024 00:00:18 +0800
Subject: [PATCH] Placeholder for Bytebuf-API
diff --git a/.gitignore b/.gitignore
index 97e78e27ee0eea2c8b24886eeb19164d552323fe..9764fa643039f215627c20a33ca70c9e36b2d599 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,4 @@
# vs code
/.vscode
/.factorypath
+

View File

@@ -5,29 +5,22 @@ Subject: [PATCH] Build changes
diff --git a/build.gradle.kts b/build.gradle.kts
index bcfe59b6efb628ee1e7f9d60667360d4d885fb6a..dc25ca9011a4fa0fcb642aa7371b0693c294dc9b 100644
index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..16b742b5131376ceca04570dd4c088caff62e677 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
val alsoShade: Configuration by configurations.creating
dependencies {
- implementation(project(":paper-api"))
- implementation(project(":paper-mojangapi"))
+ // Leaves start
+ implementation(project(":leaves-api"))
+ implementation("io.papermc.paper:paper-mojangapi:1.20.4-R0.1-SNAPSHOT") {
+ exclude("io.papermc.paper", "paper-api")
+ }
+ // Leaves end
+ implementation(project(":leaves-api")) // Leaves - build change
// Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0")
@@ -59,19 +63,29 @@ dependencies {
@@ -67,6 +67,15 @@ paperweight {
craftBukkitPackageVersion.set("v1_20_R4") // also needs to be updated in MappingEnvironment
}
val craftbukkitPackageVersion = "1_20_R3" // Paper
+
+// Leaves start - hide irrelevant compilation warnings
+tasks.withType<JavaCompile> {
+ val compilerArgs = options.compilerArgs
@@ -40,22 +33,27 @@ index bcfe59b6efb628ee1e7f9d60667360d4d885fb6a..dc25ca9011a4fa0fcb642aa7371b0693
tasks.jar {
archiveClassifier.set("dev")
manifest {
val git = Git(rootProject.layout.projectDirectory.path)
val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim()
- val implementationVersion = System.getenv("BUILD_NUMBER") ?: "\"$gitHash\""
+ val implementationVersion = /* System.getenv("BUILD_NUMBER") ?: */ "\"$gitHash\"" // Leaves we dont have CI
val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper
@@ -80,14 +89,14 @@ tasks.jar {
val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit",
- "Implementation-Version" to "git-Paper-$implementationVersion",
+ "Implementation-Version" to "git-Leaves-$implementationVersion",
- "Implementation-Title" to "Paper",
+ "Implementation-Title" to "Leaves", // Leaves
"Implementation-Version" to implementationVersion,
"Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit",
- "Specification-Title" to "Paper",
+ "Specification-Title" to "Leaves", // Leaves
"Specification-Version" to project.version,
@@ -150,7 +164,7 @@ fun TaskContainer.registerRunTask(
- "Specification-Vendor" to "Paper Team",
- "Brand-Id" to "papermc:paper",
- "Brand-Name" to "Paper",
+ "Specification-Vendor" to "Leaves Team", // Leaves
+ "Brand-Id" to "leavesmc:leaves", // Leaves
+ "Brand-Name" to "Leaves", // Leaves
"Build-Number" to (build ?: ""),
"Build-Time" to Instant.now().toString(),
"Git-Branch" to gitBranch, // Paper
@@ -144,7 +153,7 @@ fun TaskContainer.registerRunTask(
name: String,
block: JavaExec.() -> Unit
): TaskProvider<JavaExec> = register<JavaExec>(name) {
@@ -65,7 +63,7 @@ index bcfe59b6efb628ee1e7f9d60667360d4d885fb6a..dc25ca9011a4fa0fcb642aa7371b0693
standardInput = System.`in`
workingDir = rootProject.layout.projectDirectory
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
index 4b002e8b75d117b726b0de274a76d3596fce015b..9ce4d3d96d2d5fbde1f0af599209c6c55038fb58 100644
index 4b002e8b75d117b726b0de274a76d3596fce015b..03373e5a37a5f90d31434aab921ec8c6b6efef70 100644
--- a/src/main/java/com/destroystokyo/paper/Metrics.java
+++ b/src/main/java/com/destroystokyo/paper/Metrics.java
@@ -593,7 +593,8 @@ public class Metrics {
@@ -91,7 +89,7 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..9ce4d3d96d2d5fbde1f0af599209c6c5
+ return "unknown";
+ }));
+
+ if (top.leavesmc.leaves.LeavesConfig.bstatsPrivacyMode) {
+ if (org.leavesmc.leaves.LeavesConfig.bstatsPrivacyMode) {
+ return;
+ }
+
@@ -152,54 +150,75 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..9ce4d3d96d2d5fbde1f0af599209c6c5
}
}
}
diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java
index 790bad0494454ca12ee152e3de6da3da634d9b20..c060857cb0551fff8f5033553b887f3a6b8f935a 100644
--- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java
+++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java
@@ -30,7 +30,7 @@ public record ServerBuildInfoImpl(
private static final String ATTRIBUTE_GIT_BRANCH = "Git-Branch";
private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit";
- private static final String BRAND_PAPER_NAME = "Paper";
+ private static final String BRAND_PAPER_NAME = "Leaves"; // Leaves - Paper -> Leaves
private static final String BUILD_DEV = "DEV";
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index c8772c773f9933ed1d1debfe707af4373c458152..f9e5f9f309133ea5b540530dc7da96d085b89ac0 100644
index dbc86b8d4d2af6e5f7e678f2bb77fd39b85c04c5..9719199b7dc98e5f04706bd420af5f14d8b9724c 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1865,7 +1865,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1168,7 +1168,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
LOGGER.info("*************************************************************************************");
LOGGER.info("This is the first time you're starting this server.");
LOGGER.info("It's recommended you read our 'Getting Started' documentation for guidance.");
- LOGGER.info("View this and more helpful information here: https://docs.papermc.io/paper/next-steps");
+ LOGGER.info("View this and more helpful information here: https://docs.leavesmc.org/leaves/guides/next-steps"); // Leaves - change
LOGGER.info("*************************************************************************************");
}
// Paper end - Add onboarding message for initial server start
@@ -1923,7 +1923,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate
public String getServerModName() {
- return "Paper"; // Paper
+ return top.leavesmc.leaves.LeavesConfig.serverModName; // Leaves - Leaves > //Paper
- return io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); // Paper
+ return org.leavesmc.leaves.LeavesConfig.serverModName; // Leaves - Custom // Paper
}
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index 68d268b6fff126e8645b6deec3fb549ea2286b77..1363d76e5546d1bb57f06fceb57196da459f962e 100644
index 2eb9c584cc77237f1c82d880a51a3f8b51008d73..559649d0a134c29215f3783996fd80d81c149bec 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -218,10 +218,11 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -231,9 +231,10 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
org.spigotmc.WatchdogThread.doStart(org.spigotmc.SpigotConfig.timeoutTime, org.spigotmc.SpigotConfig.restartOnCrash); // Paper - start watchdog thread
thread.start(); // Paper - Enhance console tab completions for brigadier commands; start console thread after MinecraftServer.console & PaperConfig are initialized
io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command
- com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // Paper - init PaperBrigadierProvider
+ com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics // Leaves - down
+
this.setPvpAllowed(dedicatedserverproperties.pvp);
this.setFlightAllowed(dedicatedserverproperties.allowFlight);
this.setMotd(dedicatedserverproperties.motd);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index c490a29bcf7410bc54959ee71375605964379ed5..367975d5e0c9846e5ce6d9cbdc3a977c8ab26b97 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -266,7 +266,7 @@ import javax.annotation.Nullable; // Paper
import javax.annotation.Nonnull; // Paper
diff --git a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java
index 759062d219ff490a3cb19e710c4d18e3e08288e0..3952428c02fe87477f4139f4fa98381500b7e076 100644
--- a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java
+++ b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java
@@ -118,7 +118,7 @@ public class MinecraftServerGui extends JComponent {
public final class CraftServer implements Server {
- private final String serverName = "Paper"; // Paper
+ private final String serverName = "Leaves"; // Leaves // Paper
private final String serverVersion;
private final String bukkitVersion = Versioning.getBukkitVersion();
private final Logger logger = Logger.getLogger("Minecraft");
// Paper start - Add onboarding message for initial server start
private JComponent buildOnboardingPanel() {
- String onboardingLink = "https://docs.papermc.io/paper/next-steps";
+ String onboardingLink = "https://docs.leavesmc.org/leaves/guides/next-steps"; // Leaves - change
JPanel jPanel = new JPanel();
javax.swing.JLabel jLabel = new javax.swing.JLabel("If you need help setting up your server you can visit:");
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 8d626fadcd4743b6472a2954d2b1b2ec89669814..1068ed383232a71f6ada6677f4872267cc565325 100644
index e02102280ed1dc300191d19bbca8f00e17701753..9164d33b564970d83d11c6544db5697ff9eff32f 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -301,7 +301,7 @@ public class Main {
@@ -303,7 +303,7 @@ public class Main {
if (buildDate.before(deadline.getTime())) {
// Paper start - This is some stupid bullshit
System.err.println("*** Warning, you've not updated in a while! ***");
@@ -209,7 +228,7 @@ index 8d626fadcd4743b6472a2954d2b1b2ec89669814..1068ed383232a71f6ada6677f4872267
//Thread.sleep(TimeUnit.SECONDS.toMillis(20));
// Paper end
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
index 774556a62eb240da42e84db4502e2ed43495be17..ca166161ef919c559de9cc02bdf435cbfcc972df 100644
index 774556a62eb240da42e84db4502e2ed43495be17..fdef98a7796d84c7b0ee61241859e10cc514534c 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
@@ -11,7 +11,7 @@ public final class Versioning {
@@ -217,12 +236,12 @@ index 774556a62eb240da42e84db4502e2ed43495be17..ca166161ef919c559de9cc02bdf435cb
String result = "Unknown-Version";
- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties");
+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/top.leavesmc.leaves/leaves-api/pom.properties"); // Leaves
+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.leavesmc.leaves/leaves-api/pom.properties"); // Leaves
Properties properties = new Properties();
if (stream != null) {
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
index 9e638f72f180ff5ef63ec3dd6cf548c53f7bd4a5..9bd93cae47ed209b39fe90f9c36e55964e24967e 100644
index 6db566e3111ec08a99aa429624979cb83a85e272..824679785bbe0ac038c4d529b4cbe857e2e102ca 100644
--- a/src/main/java/org/spigotmc/WatchdogThread.java
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
@@ -155,14 +155,14 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Mon, 20 May 2024 17:15:18 +0800
Subject: [PATCH] Dev Fix
diff --git a/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java b/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java
index bc885d2cc95572ec68f1df62555fdba7998b1d93..0211311b3b63bcdea7ebf7bcb24629674c771402 100644
--- a/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java
+++ b/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java
@@ -34,7 +34,7 @@ public interface CustomPacketPayload {
private <T extends CustomPacketPayload> void writeCap(B value, CustomPacketPayload.Type<T> id, CustomPacketPayload payload) {
value.writeResourceLocation(id.id());
- StreamCodec<B, T> streamCodec = this.findCodec(id.id);
+ StreamCodec<B, T> streamCodec = (StreamCodec<B, T>) this.findCodec(id.id); // Leaves - dev fix
streamCodec.encode(value, (T)payload);
}

View File

@@ -746,7 +746,7 @@ index 6bc7c6f16a1649fc9e24e7cf90fca401e5bd4875..5b446e6ac151f99f64f0c442d0b40b5e
private static final ThreadLocal<List<ChunkProgressionTask>> CURRENT_TICKET_UPDATE_SCHEDULING = new ThreadLocal<>();
diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
index b66a7d4aab887309579154815a0d4abf9de506b0..e4d3f280b35d977f28233b1db1dc855cb252e827 100644
index 56b07a3306e5735816c8d89601b519cb0db6379a..e932998bb1d833d782e1f6c7f576f521e8ace071 100644
--- a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
+++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java
@@ -1779,19 +1779,17 @@ public final class NewChunkHolder {
@@ -780,8 +780,40 @@ index b66a7d4aab887309579154815a0d4abf9de506b0..e4d3f280b35d977f28233b1db1dc855c
}
}
diff --git a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java
index 10a113b057b0a4d27cce3bae975e1108aaa7b517..2076b4f00e008cc162458fff8dac1647f7487057 100644
--- a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java
+++ b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java
@@ -1,6 +1,5 @@
package io.papermc.paper.command.brigadier.bukkit;
-import co.aikar.timings.Timing;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
@@ -73,18 +72,11 @@ public class BukkitCommandNode extends LiteralCommandNode<CommandSourceStack> {
public int run(CommandContext<CommandSourceStack> context) throws CommandSyntaxException {
CommandSender sender = context.getSource().getSender();
- // Plugins do weird things to workaround normal registration
- if (this.command.timings == null) {
- this.command.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, this.command);
- }
-
String content = context.getRange().get(context.getInput());
String[] args = org.apache.commons.lang3.StringUtils.split(content, ' '); // fix adjacent spaces (from console/plugins) causing empty array elements
- try (Timing ignored = this.command.timings.startTiming()) {
- // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false)
- this.command.execute(sender, this.literal, Arrays.copyOfRange(args, 1, args.length));
- }
+ // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false)
+ this.command.execute(sender, this.literal, Arrays.copyOfRange(args, 1, args.length));
// return true as command was handled
return 1;
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
index 30fe1c0645a07d663b08c0f988a1ab3a750bf7c4..47408dbce3a627236694c0d0f956c7f87a898b86 100644
index 2874bc3001c4e7d9191e47ba512c5a68369c21f1..0cb47b5fee85230989293d430c02e53391e0ef67 100644
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
@@ -1,6 +1,5 @@
@@ -828,10 +860,10 @@ index 7ce9ebba8ce304d1f3f21d4f15ee5f3560d7700b..a1c9726d25479b5326fe2fa2b0f5a98d
}
return ret;
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginManagerImpl.java b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginManagerImpl.java
index dab211c458311869c61779305580a1c7da830f71..193a527c8ebd3b8772820883046de7e98ad4a76a 100644
index 097500a59336db1bbfffcd1aa4cff7a8586e46ec..35b00c139864dd7925d46a2d6a317d7e3aae9638 100644
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginManagerImpl.java
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginManagerImpl.java
@@ -227,7 +227,7 @@ public class PaperPluginManagerImpl implements PluginManager, DependencyContext
@@ -232,7 +232,7 @@ public class PaperPluginManagerImpl implements PluginManager, DependencyContext
@Override
public boolean useTimings() {
@@ -841,10 +873,10 @@ index dab211c458311869c61779305580a1c7da830f71..193a527c8ebd3b8772820883046de7e9
@Override
diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
index 83302c252f54481f239522e5c6861ccfe233070a..070231080052ef3d0da179a8ed8b754ed6f8dd11 100644
index 57e76b53e5e314c3e6b8856010f7a84188121582..d6daa27a8d7aca00b181e90d789f4249e8437d29 100644
--- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java
+++ b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
@@ -49,8 +49,7 @@ public class PacketUtils {
@@ -50,8 +50,7 @@ public class PacketUtils {
try { // Paper - detailed watchdog information
if (listener instanceof ServerCommonPacketListenerImpl serverCommonPacketListener && serverCommonPacketListener.processedDisconnect) return; // CraftBukkit - Don't handle sync packets for kicked players
if (listener.shouldHandleMessage(packet)) {
@@ -853,9 +885,9 @@ index 83302c252f54481f239522e5c6861ccfe233070a..070231080052ef3d0da179a8ed8b754e
+ try {
packet.handle(listener);
} catch (Exception exception) {
label25:
if (exception instanceof ReportedException) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7aaa6548f3 100644
index 9719199b7dc98e5f04706bd420af5f14d8b9724c..025e1a22d7344fc7de2baca5c29a6a6dacd2c88e 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -3,9 +3,6 @@ package net.minecraft.server;
@@ -868,7 +900,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -189,8 +186,6 @@ import org.bukkit.craftbukkit.Main;
@@ -190,8 +187,6 @@ import org.bukkit.craftbukkit.CraftRegistry;
import org.bukkit.event.server.ServerLoadEvent;
// CraftBukkit end
@@ -877,7 +909,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTask> implements ServerInfo, CommandSource, AutoCloseable {
private static MinecraftServer SERVER; // Paper
@@ -968,7 +963,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -975,7 +970,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
MinecraftServer.LOGGER.info("Stopping server");
Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing
@@ -885,7 +917,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
// CraftBukkit start
if (this.server != null) {
this.server.disablePlugins();
@@ -1406,34 +1400,29 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1455,34 +1449,29 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
return;
}
@@ -939,7 +971,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
}
}
// Paper end - execute chunk tasks mid tick
@@ -1508,15 +1497,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1557,15 +1546,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
public void tickServer(BooleanSupplier shouldKeepTicking) {
@@ -957,7 +989,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
// Paper end
new com.destroystokyo.paper.event.server.ServerTickStartEvent(this.tickCount+1).callEvent(); // Paper - Server Tick Events
@@ -1553,9 +1541,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1602,9 +1590,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Paper end - Incremental chunk and player saving
io.papermc.paper.util.CachedLists.reset(); // Paper
// Paper start - move executeAll() into full server tick timing
@@ -968,15 +1000,15 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
// Paper end
// Paper start - Server Tick Events
long endTime = System.nanoTime();
@@ -1580,7 +1566,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.logTickTime(l - i);
@@ -1627,7 +1613,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.logTickMethodTime(i);
this.profiler.pop();
org.spigotmc.WatchdogThread.tick(); // Spigot
- co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper
}
private int computeNextAutosaveInterval() {
@@ -1642,9 +1627,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
private void logTickMethodTime(long tickStartTime) {
@@ -1698,9 +1683,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.getPlayerList().getPlayers().forEach((entityplayer) -> {
entityplayer.connection.suspendFlushing();
});
@@ -986,7 +1018,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
// Paper start - Folia scheduler API
((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick();
getAllLevels().forEach(level -> {
@@ -1661,21 +1644,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1717,21 +1700,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Paper end - Folia scheduler API
io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.CALLBACK_MANAGER.handleQueue(this.tickCount); // Paper
this.profiler.push("commandFunctions");
@@ -1008,7 +1040,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
// Send time updates to everyone, it will get the right time from the world the player is in.
// Paper start - Perf: Optimize time updates
for (final ServerLevel level : this.getAllLevels()) {
@@ -1695,7 +1673,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1751,7 +1729,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
}
// Paper end - Perf: Optimize time updates
@@ -1016,7 +1048,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
this.isIteratingOverLevels = true; // Paper - Throw exception on world create while being ticked
Iterator iterator = this.getAllLevels().iterator(); // Paper - Throw exception on world create while being ticked; move down
@@ -1720,14 +1697,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1778,14 +1755,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.push("tick");
try {
@@ -1031,7 +1063,7 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Exception ticking world");
@@ -1742,24 +1717,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1800,24 +1775,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
this.profiler.popPush("connection");
@@ -1057,18 +1089,18 @@ index 65a342698c98eb91f5f9156885afd7cc56967114..f7f9fd5e591aad8bd6b3ed4ffcb2ca7a
this.profiler.popPush("send chunks");
iterator = this.playerList.getPlayers().iterator();
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index 1363d76e5546d1bb57f06fceb57196da459f962e..d0cf730f175c707b50577b7080bd81cf045ed980 100644
index 559649d0a134c29215f3783996fd80d81c149bec..340d1b6797d56e2ebdce2d8d7cae62780470e1b7 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -58,7 +58,6 @@ import org.apache.logging.log4j.Level;
@@ -63,7 +63,6 @@ import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.io.IoBuilder;
import org.bukkit.command.CommandSender;
-import co.aikar.timings.MinecraftTimings; // Paper
import org.bukkit.craftbukkit.util.TerminalCompletionHandler;
import org.bukkit.craftbukkit.util.TerminalConsoleWriterThread;
import org.bukkit.event.server.ServerCommandEvent;
import org.bukkit.craftbukkit.util.Waitable; // Paper
import org.bukkit.event.server.RemoteServerCommandEvent;
@@ -486,7 +485,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -506,7 +505,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
}
public void handleConsoleInputs() {
@@ -1076,7 +1108,7 @@ index 1363d76e5546d1bb57f06fceb57196da459f962e..d0cf730f175c707b50577b7080bd81cf
// Paper start - Perf: use proper queue
ConsoleInput servercommand;
while ((servercommand = this.serverCommandQueue.poll()) != null) {
@@ -503,7 +501,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -523,7 +521,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
// CraftBukkit end
}
@@ -1084,7 +1116,7 @@ index 1363d76e5546d1bb57f06fceb57196da459f962e..d0cf730f175c707b50577b7080bd81cf
}
@Override
@@ -777,21 +774,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -797,21 +794,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
}
// Paper start
command.set(event.getCommand());
@@ -1107,94 +1139,17 @@ index 1363d76e5546d1bb57f06fceb57196da459f962e..d0cf730f175c707b50577b7080bd81cf
// Paper start
if (waitableArray[0] != null) {
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 12109446fc76a39faee6cda042ca48b3fd3809f4..295edf4e84699fc555048b7e59aebee83e854096 100644
index 7fb9ba3dadb1eca4a1000ea8cf4d13fed2b7db1e..dc20b051d4f14ce4e0b5a0114e02d15716a7c3d6 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1,13 +1,10 @@
@@ -1,6 +1,5 @@
package net.minecraft.server.level;
-import co.aikar.timings.Timing; // Paper
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Iterables;
-import com.google.common.collect.ComparisonChain; // Paper
import com.google.common.collect.Lists;
import com.google.common.collect.Queues;
-import com.google.common.collect.Sets;
import com.google.gson.JsonElement;
import com.mojang.datafixers.DataFixer;
import com.mojang.datafixers.util.Either;
@@ -20,12 +17,6 @@ import it.unimi.dsi.fastutil.longs.Long2ByteMap;
import it.unimi.dsi.fastutil.longs.Long2ByteOpenHashMap;
import it.unimi.dsi.fastutil.longs.Long2LongMap;
import it.unimi.dsi.fastutil.longs.Long2LongOpenHashMap;
-import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap;
-import it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry;
-import it.unimi.dsi.fastutil.longs.LongIterator;
-import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
-import it.unimi.dsi.fastutil.longs.LongSet;
-import it.unimi.dsi.fastutil.objects.ObjectBidirectionalIterator;
import it.unimi.dsi.fastutil.objects.ObjectIterator;
import java.io.IOException;
import java.io.Writer;
@@ -34,7 +25,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -43,7 +33,6 @@ import java.util.Set;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
-import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BooleanSupplier;
@@ -63,15 +52,14 @@ import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundChunksBiomesPacket;
-import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket;
+import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket;
+import net.minecraft.network.protocol.game.DebugPackets;
+import io.papermc.paper.util.MCUtil;
import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.server.network.ServerPlayerConnection;
-import net.minecraft.util.CsvOutput;
import net.minecraft.util.Mth;
import net.minecraft.util.profiling.ProfilerFiller;
import net.minecraft.util.thread.BlockableEventLoop;
-import net.minecraft.util.thread.ProcessorHandle;
-import net.minecraft.util.thread.ProcessorMailbox;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.ai.village.poi.PoiManager;
@@ -82,7 +70,6 @@ import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.chunk.ChunkGeneratorStructureState;
import net.minecraft.world.level.chunk.ChunkStatus;
-import net.minecraft.world.level.chunk.ImposterProtoChunk;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.chunk.LightChunkGetter;
import net.minecraft.world.level.chunk.ProtoChunk;
@@ -95,12 +82,11 @@ import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.RandomState;
import net.minecraft.world.level.levelgen.blending.BlendingData;
-import net.minecraft.world.level.levelgen.structure.StructureStart;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
import net.minecraft.world.level.storage.DimensionDataStorage;
import net.minecraft.world.level.storage.LevelStorageSource;
import net.minecraft.world.phys.Vec3;
-import org.apache.commons.lang3.mutable.MutableBoolean;
+import org.apache.commons.lang3.mutable.MutableObject;
import org.slf4j.Logger;
// CraftBukkit start
@@ -540,15 +526,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -543,15 +542,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
protected void tick(BooleanSupplier shouldKeepTicking) {
ProfilerFiller gameprofilerfiller = this.level.getProfiler();
@@ -1210,7 +1165,7 @@ index 12109446fc76a39faee6cda042ca48b3fd3809f4..295edf4e84699fc555048b7e59aebee8
}
gameprofilerfiller.pop();
@@ -1141,24 +1123,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1157,24 +1152,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
// Paper start - optimised tracker
private final void processTrackQueue() {
@@ -1240,7 +1195,7 @@ index 12109446fc76a39faee6cda042ca48b3fd3809f4..295edf4e84699fc555048b7e59aebee8
}
}
// Paper end - optimised tracker
@@ -1173,7 +1145,6 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1189,7 +1174,6 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
List<ServerPlayer> list = Lists.newArrayList();
List<ServerPlayer> list1 = this.level.players();
ObjectIterator objectiterator = this.entityMap.values().iterator();
@@ -1248,7 +1203,7 @@ index 12109446fc76a39faee6cda042ca48b3fd3809f4..295edf4e84699fc555048b7e59aebee8
ChunkMap.TrackedEntity playerchunkmap_entitytracker;
@@ -1198,17 +1169,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1214,17 +1198,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
playerchunkmap_entitytracker.serverEntity.sendChanges();
}
}
@@ -1267,10 +1222,10 @@ index 12109446fc76a39faee6cda042ca48b3fd3809f4..295edf4e84699fc555048b7e59aebee8
}
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21281c45b9 100644
index b99f50604bafecbc68835974c9ed0caa91911a40..256ad83f10e6df5d32959d38eeabc126b9b7b190 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -278,10 +278,8 @@ public class ServerChunkCache extends ChunkSource {
@@ -274,10 +274,8 @@ public class ServerChunkCache extends ChunkSource {
if (!completablefuture.isDone()) { // Paper
io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system
com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x, z); // Paper - Add debug for sync chunk loads
@@ -1279,9 +1234,9 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21
io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.popChunkWait(); // Paper - rewrite chunk system
- this.level.timings.syncChunkLoad.stopTiming(); // Paper
} // Paper
ichunkaccess = (ChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> {
return ichunkaccess1;
@@ -430,17 +428,13 @@ public class ServerChunkCache extends ChunkSource {
ChunkResult<ChunkAccess> chunkresult = (ChunkResult) completablefuture.join();
ChunkAccess ichunkaccess1 = (ChunkAccess) chunkresult.orElse(null); // CraftBukkit - decompile error
@@ -425,17 +423,13 @@ public class ServerChunkCache extends ChunkSource {
public void save(boolean flush) {
this.runDistanceManagerUpdates();
@@ -1300,12 +1255,16 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21
}
// Paper end - Incremental chunk and player saving
@@ -477,23 +471,17 @@ public class ServerChunkCache extends ChunkSource {
@@ -472,26 +466,21 @@ public class ServerChunkCache extends ChunkSource {
@Override
public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) {
this.level.getProfiler().push("purge");
- this.level.timings.doChunkMap.startTiming(); // Spigot
this.distanceManager.purgeStaleTickets();
+ // this.level.timings.doChunkMap.startTiming(); // Spigot // Leaves - delete Timings
if (this.level.tickRateManager().runsNormally() || !tickChunks) {
this.distanceManager.purgeStaleTickets();
}
this.runDistanceManagerUpdates();
- this.level.timings.doChunkMap.stopTiming(); // Spigot
this.level.getProfiler().popPush("chunks");
@@ -1324,7 +1283,7 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21
this.level.getProfiler().pop();
this.clearCache();
}
@@ -509,13 +497,11 @@ public class ServerChunkCache extends ChunkSource {
@@ -507,13 +496,11 @@ public class ServerChunkCache extends ChunkSource {
gameprofilerfiller.push("pollingChunks");
gameprofilerfiller.push("filteringLoadedChunks");
// Paper - optimise chunk tick iteration
@@ -1332,13 +1291,13 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21
// Paper - optimise chunk tick iteration
if (this.level.getServer().tickRateManager().runsNormally()) {
if (this.level.tickRateManager().runsNormally()) {
gameprofilerfiller.popPush("naturalSpawnCount");
- this.level.timings.countNaturalMobs.startTiming(); // Paper - timings
int k = this.distanceManager.getNaturalSpawnChunkCount();
// Paper start - Optional per player mob spawns
int naturalSpawnChunkCount = k;
@@ -540,7 +526,6 @@ public class ServerChunkCache extends ChunkSource {
@@ -538,7 +525,6 @@ public class ServerChunkCache extends ChunkSource {
spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false);
}
// Paper end - Optional per player mob spawns
@@ -1346,7 +1305,7 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21
this.lastSpawnState = spawnercreature_d;
gameprofilerfiller.popPush("spawnAndTick");
@@ -649,19 +634,14 @@ public class ServerChunkCache extends ChunkSource {
@@ -647,19 +633,14 @@ public class ServerChunkCache extends ChunkSource {
}
}
// Paper end - optimise chunk tick iteration
@@ -1366,7 +1325,7 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21
// Paper start - optimise chunk tick iteration
if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) {
it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<ChunkHolder> copy = this.chunkMap.needsChangeBroadcasting.clone();
@@ -675,8 +655,6 @@ public class ServerChunkCache extends ChunkSource {
@@ -673,8 +654,6 @@ public class ServerChunkCache extends ChunkSource {
}
}
// Paper end - optimise chunk tick iteration
@@ -1376,7 +1335,7 @@ index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21
gameprofilerfiller.pop();
}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b53ff8660b 100644
index ca56a0b596976448da6bb2a0e82b3d5cd4133e12..92805a3311bc1f21df9512b14b209e1d51174ac5 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1,7 +1,6 @@
@@ -1387,7 +1346,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
import com.google.common.collect.Lists;
import com.mojang.datafixers.DataFixer;
import com.mojang.datafixers.util.Pair;
@@ -845,7 +844,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -851,7 +850,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
gameprofilerfiller.popPush("tickPending");
@@ -1395,7 +1354,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
if (!this.isDebug() && flag) {
j = this.getGameTime();
gameprofilerfiller.push("blockTicks");
@@ -854,24 +852,17 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -860,24 +858,17 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.fluidTicks.tick(j, paperConfig().environment.maxFluidTicks, this::tickFluid); // Paper - configurable max fluid ticks
gameprofilerfiller.pop();
}
@@ -1420,7 +1379,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
}
this.handlingTick = false;
@@ -884,7 +875,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -890,7 +881,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (flag1 || this.emptyTime++ < 300) {
gameprofilerfiller.push("entities");
@@ -1428,7 +1387,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
if (this.dragonFight != null && flag) {
gameprofilerfiller.push("dragonFight");
this.dragonFight.tick();
@@ -892,7 +882,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -898,7 +888,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
@@ -1436,7 +1395,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
this.entityTickList.forEach((entity) -> {
if (!entity.isRemoved()) {
if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed
@@ -919,8 +908,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -925,8 +914,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
}
});
@@ -1445,7 +1404,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
gameprofilerfiller.pop();
this.tickBlockEntities();
}
@@ -1033,7 +1020,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1039,7 +1026,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
} // Paper - Option to disable ice and snow
gameprofilerfiller.popPush("tickBlocks");
@@ -1453,7 +1412,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
if (randomTickSpeed > 0) {
// Paper start - optimize random block ticking
LevelChunkSection[] sections = chunk.getSections();
@@ -1067,7 +1053,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1073,7 +1059,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
// Paper end - optimise random block ticking
@@ -1461,7 +1420,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
gameprofilerfiller.pop();
}
@@ -1380,9 +1365,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1386,9 +1371,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
currentlyTickingEntity.lazySet(entity);
}
// Paper end - log detailed entity tick information
@@ -1471,7 +1430,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
/*if (!org.spigotmc.ActivationRange.checkIfActive(entity)) { // Paper - comment out - EAR 2, reimplement below
entity.tickCount++;
timer = entity.getType().inactiveTickTimer.startTiming(); try { // Paper - timings
@@ -1391,11 +1374,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1397,11 +1380,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
return;
}*/ // Paper - comment out EAR 2
// Spigot end
@@ -1483,7 +1442,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
entity.setOldPosAndRot();
ProfilerFiller gameprofilerfiller = this.getProfiler();
@@ -1405,12 +1384,10 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1411,12 +1390,10 @@ public class ServerLevel extends Level implements WorldGenLevel {
});
gameprofilerfiller.incrementCounter("tickNonPassenger");
if (isActive) { // Paper - EAR 2
@@ -1496,7 +1455,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
Iterator iterator = entity.getPassengers().iterator();
while (iterator.hasNext()) {
@@ -1433,8 +1410,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1439,8 +1416,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (passenger instanceof Player || this.entityTickList.contains(passenger)) {
// Paper - EAR 2
final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger);
@@ -1505,7 +1464,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
// Paper end
passenger.setOldPosAndRot();
++passenger.tickCount;
@@ -1463,8 +1438,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1469,8 +1444,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.tickPassenger(passenger, entity2);
}
@@ -1514,7 +1473,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
}
} else {
passenger.stopRiding();
@@ -1484,26 +1457,22 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1490,26 +1463,22 @@ public class ServerLevel extends Level implements WorldGenLevel {
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld()));
}
@@ -1541,19 +1500,19 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
+ ServerLevel worldserver1 = this;
- this.serverLevelData.setWorldBorder(worldserver1.getWorldBorder().createSettings());
- this.serverLevelData.setCustomBossEvents(this.server.getCustomBossEvents().save());
- this.serverLevelData.setCustomBossEvents(this.server.getCustomBossEvents().save(this.registryAccess()));
- this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData());
- }
- // CraftBukkit end
+ this.serverLevelData.setWorldBorder(worldserver1.getWorldBorder().createSettings());
+ this.serverLevelData.setCustomBossEvents(this.server.getCustomBossEvents().save());
+ this.serverLevelData.setCustomBossEvents(this.server.getCustomBossEvents().save(this.registryAccess()));
+ this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData());
}
+ // CraftBukkit end
}
// Paper end - Incremental chunk and player saving
@@ -1517,7 +1486,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1523,7 +1492,6 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (!savingDisabled) {
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit
@@ -1561,7 +1520,7 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
if (progressListener != null) {
progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel"));
}
@@ -1527,11 +1495,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1533,11 +1501,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
progressListener.progressStage(Component.translatable("menu.savingChunks"));
}
@@ -1573,42 +1532,8 @@ index 502bdc726b7890b00ee36871d905dea44e8719e3..ccc645f225bb0cf898dbc2ee7abb21b5
// Paper - rewrite chunk system - entity saving moved into ChunkHolder
} else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index fe2ef36ab5dc4b933abf24dbfd0e811c53239cf0..03eba1b13288dfaaeca9a3eef68a1e0d3d71ccb6 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2394,7 +2394,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
public void handleCommand(String s) { // Paper - private -> public
org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher
- co.aikar.timings.MinecraftTimings.playerCommandTimer.startTiming(); // Paper
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s);
@@ -2404,20 +2403,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.cserver.getPluginManager().callEvent(event);
if (event.isCancelled()) {
- co.aikar.timings.MinecraftTimings.playerCommandTimer.stopTiming(); // Paper
return;
}
try {
- if (this.cserver.dispatchCommand(event.getPlayer(), event.getMessage().substring(1))) {
- return;
- }
+ this.cserver.dispatchCommand(event.getPlayer(), event.getMessage().substring(1));
} catch (org.bukkit.command.CommandException ex) {
player.sendMessage(org.bukkit.ChatColor.RED + "An internal error occurred while attempting to perform this command");
java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- return;
- } finally {
- co.aikar.timings.MinecraftTimings.playerCommandTimer.stopTiming(); // Paper
}
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 1e5f709115007ff19901c0a6c3cf884d9e4d3a6c..aa7eb1f037875293b03588f5bc5d2df70237b45e 100644
index a2142930b4d4b05987c90496fb9d733d99040aa0..6957cbfbea51d6a3b57e1c5bfcebd52a25cde8d5 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1,6 +1,5 @@
@@ -1618,7 +1543,7 @@ index 1e5f709115007ff19901c0a6c3cf884d9e4d3a6c..aa7eb1f037875293b03588f5bc5d2df7
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -1236,7 +1235,6 @@ public abstract class PlayerList {
@@ -1235,7 +1234,6 @@ public abstract class PlayerList {
public void saveAll(int interval) {
io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main
@@ -1626,7 +1551,7 @@ index 1e5f709115007ff19901c0a6c3cf884d9e4d3a6c..aa7eb1f037875293b03588f5bc5d2df7
int numSaved = 0;
long now = MinecraftServer.currentTick;
for (int i = 0; i < this.players.size(); ++i) {
@@ -1247,7 +1245,6 @@ public abstract class PlayerList {
@@ -1246,7 +1244,6 @@ public abstract class PlayerList {
}
// Paper end - Incremental chunk and player saving
}
@@ -1635,13 +1560,13 @@ index 1e5f709115007ff19901c0a6c3cf884d9e4d3a6c..aa7eb1f037875293b03588f5bc5d2df7
}
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index 09e8445a3f8c6b3ebc852a75a9a25b41a51ba659..22d19f1ca47a79be2c41775c5564535b8adcfcec 100644
index a46bf73c608641bf1f00fd55242de71a0f2ee06e..9b15a2a966de203ada8894a9354ff8e0e737ef75 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -331,10 +331,6 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
this(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnInside, dimensions, maxTrackDistance, trackTickInterval, requiredFeatures, "custom");
@@ -343,10 +343,6 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
this(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnInside, dimensions, spawnBoxScale, maxTrackDistance, trackTickInterval, requiredFeatures, "custom");
}
public EntityType(EntityType.EntityFactory<T> factory, MobCategory spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet<Block> canSpawnInside, EntityDimensions dimensions, int maxTrackDistance, int trackTickInterval, FeatureFlagSet requiredFeatures, String id) {
public EntityType(EntityType.EntityFactory<T> factory, MobCategory spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet<Block> canSpawnInside, EntityDimensions dimensions, float spawnBoxScale, int maxTrackDistance, int trackTickInterval, FeatureFlagSet requiredFeatures, String id) {
- this.tickTimer = co.aikar.timings.MinecraftTimings.getEntityTimings(id, "tick");
- this.inactiveTickTimer = co.aikar.timings.MinecraftTimings.getEntityTimings(id, "inactiveTick");
- this.passengerTickTimer = co.aikar.timings.MinecraftTimings.getEntityTimings(id, "passengerTick");
@@ -1649,7 +1574,7 @@ index 09e8445a3f8c6b3ebc852a75a9a25b41a51ba659..22d19f1ca47a79be2c41775c5564535b
// Paper end
this.builtInRegistryHolder = BuiltInRegistries.ENTITY_TYPE.createIntrusiveHolder(this);
this.factory = factory;
@@ -691,12 +687,6 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
@@ -700,12 +696,6 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
return this.updateInterval;
}
@@ -1663,10 +1588,10 @@ index 09e8445a3f8c6b3ebc852a75a9a25b41a51ba659..22d19f1ca47a79be2c41775c5564535b
return this != EntityType.PLAYER && this != EntityType.LLAMA_SPIT && this != EntityType.WITHER && this != EntityType.BAT && this != EntityType.ITEM_FRAME && this != EntityType.GLOW_ITEM_FRAME && this != EntityType.LEASH_KNOT && this != EntityType.PAINTING && this != EntityType.END_CRYSTAL && this != EntityType.EVOKER_FANGS;
}
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index e9bb7feb591032904516d1b9374f486d8a7d066c..04771be6128491bc7b9e6a0a400dfd3253659cce 100644
index 517e10c3d8b1549cd30fd0e7cf2bcb35e88eb8ed..e8a472f7e90dfb39b16521f75521d60b532af5cc 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -143,7 +143,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
@@ -150,7 +150,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
// CraftBukkit end
@@ -1675,7 +1600,7 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..04771be6128491bc7b9e6a0a400dfd32
public abstract class LivingEntity extends Entity implements Attackable {
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java
index 03092417cd8ab5c6d266f3af9f20f47b34cfaba3..9d720df44cab753533bf1c2f7d07fc41cded1ed2 100644
index 9379dd4056018b52c93ed4888dcdc94579bd9691..ba951cc1aaa94b58ee7985f197d41cc8be747fc8 100644
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java
@@ -16,7 +16,6 @@ public abstract class Behavior<E extends LivingEntity> implements BehaviorContro
@@ -1719,7 +1644,7 @@ index 03092417cd8ab5c6d266f3af9f20f47b34cfaba3..9d720df44cab753533bf1c2f7d07fc41
protected void tick(ServerLevel world, E entity, long time) {
diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java
index 9e90cb2f51d1bacacb287e912d14ab9152523205..06fab5e6b38d7b5509cc175d3921f500dee6443c 100644
index 85b4b24361e785acf75571ff98f924c00ae80748..1f3e0392f88a7cb3fb5c0767cdd1b4bc4ffcae4e 100644
--- a/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java
+++ b/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java
@@ -28,7 +28,6 @@ public abstract class Sensor<E extends LivingEntity> {
@@ -1750,53 +1675,10 @@ index 9e90cb2f51d1bacacb287e912d14ab9152523205..06fab5e6b38d7b5509cc175d3921f500
}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index ca89d1593bf1b46c79a882db528cbca1359dc9d4..74b446d9d39642c315d2e62f11a63278bb95e266 100644
index b4ef3ad2c17168085372f1fe46809f02d9dfe74a..34654d0f7d5c159ceaf76b327a3f86bd4f82c175 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -12,7 +12,6 @@ import java.util.function.Supplier;
import javax.annotation.Nullable;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
-import net.minecraft.ReportedException;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Holder;
@@ -33,7 +32,6 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
-import net.minecraft.util.AbortableIterationConsumer;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.util.profiling.ProfilerFiller;
@@ -42,8 +40,6 @@ import net.minecraft.world.TickRateManager;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageSources;
import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.boss.EnderDragonPart;
-import net.minecraft.world.entity.boss.enderdragon.EnderDragon;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
@@ -89,17 +85,14 @@ import net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket;
import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDelayPacket;
import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDistancePacket;
import org.bukkit.Bukkit;
-import org.bukkit.Location;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.block.CapturedBlockState;
import org.bukkit.craftbukkit.block.CraftBlockState;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import org.bukkit.craftbukkit.util.CraftSpawnCategory;
-import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.entity.SpawnCategory;
import org.bukkit.event.block.BlockPhysicsEvent;
-import org.bukkit.event.world.GenericGameEvent;
// CraftBukkit end
public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -173,7 +166,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -170,7 +170,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
// Paper end - add paper world config
public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray
@@ -1804,15 +1686,15 @@ index ca89d1593bf1b46c79a882db528cbca1359dc9d4..74b446d9d39642c315d2e62f11a63278
public static BlockPos lastPhysicsProblem; // Spigot
private org.spigotmc.TickLimiter entityLimiter;
private org.spigotmc.TickLimiter tileLimiter;
@@ -298,7 +290,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -292,7 +291,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
public void onBorderSetDamageSafeZOne(WorldBorder border, double safeZoneRadius) {}
});
// CraftBukkit end
- this.timings = new co.aikar.timings.WorldTimingsHandler(this); // Paper - code below can generate new world and access timings
this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper - Option to keep spawn chunks loaded
this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime);
this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime);
@@ -1269,15 +1260,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : com.destroystokyo.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray
@@ -1260,15 +1258,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
ProfilerFiller gameprofilerfiller = this.getProfiler();
gameprofilerfiller.push("blockEntities");
@@ -1828,7 +1710,7 @@ index ca89d1593bf1b46c79a882db528cbca1359dc9d4..74b446d9d39642c315d2e62f11a63278
// Spigot start
// Iterator<TickingBlockEntity> iterator = this.blockEntityTickers.iterator();
boolean flag = this.tickRateManager().runsNormally();
@@ -1306,9 +1294,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -1297,9 +1292,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075
@@ -1839,10 +1721,10 @@ index ca89d1593bf1b46c79a882db528cbca1359dc9d4..74b446d9d39642c315d2e62f11a63278
this.spigotConfig.currentPrimedTnt = 0; // Spigot
}
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
index da7489986848316fed029b71d1bc4e1248c9c9a8..140c9e6c7bd5e2e52c586ab6954edbc790e6e02b 100644
index ed8032495af9ce9c23419224814b8d27e4a97c17..189a6bd4967aba72e12170e091dbb5b779e752a0 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -133,7 +133,6 @@ public final class NaturalSpawner {
@@ -128,7 +128,6 @@ public final class NaturalSpawner {
public static void spawnForChunk(ServerLevel world, LevelChunk chunk, NaturalSpawner.SpawnState info, boolean spawnAnimals, boolean spawnMonsters, boolean rareSpawn) {
world.getProfiler().push("spawner");
@@ -1850,7 +1732,7 @@ index da7489986848316fed029b71d1bc4e1248c9c9a8..140c9e6c7bd5e2e52c586ab6954edbc7
MobCategory[] aenumcreaturetype = NaturalSpawner.SPAWNING_CATEGORIES;
int i = aenumcreaturetype.length;
@@ -186,7 +185,6 @@ public final class NaturalSpawner {
@@ -181,7 +180,6 @@ public final class NaturalSpawner {
}
}
@@ -1859,7 +1741,7 @@ index da7489986848316fed029b71d1bc4e1248c9c9a8..140c9e6c7bd5e2e52c586ab6954edbc7
}
diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java
index 22036ed3ea0629bc12981a8d91a03e55cc2117d6..3212771ac19044ca37bf60e231eac5615a9c240e 100644
index cf8b8c8efd1c9c81eb5f02d75bd75875eb66771f..555d255a79c6136d0df3504218a0bc4681a5489f 100644
--- a/src/main/java/net/minecraft/world/level/block/Block.java
+++ b/src/main/java/net/minecraft/world/level/block/Block.java
@@ -103,13 +103,6 @@ public class Block extends BlockBehaviour implements ItemLike {
@@ -1877,10 +1759,10 @@ index 22036ed3ea0629bc12981a8d91a03e55cc2117d6..3212771ac19044ca37bf60e231eac561
@Nullable
private String descriptionId;
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
index 9ea74d37cd951e0dc76d20ed8234b5871035566c..fc55527c36c33f12760e1cf4cde7cfd3913b0fa8 100644
index 6349f2e0a5ba30d250f5ffe43771f325c0999a76..f6935dc39b878b2463a8c3febc1f0da458d947b4 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
@@ -21,14 +21,9 @@ import org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry;
@@ -33,14 +33,9 @@ import org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry;
import org.bukkit.inventory.InventoryHolder;
// CraftBukkit end
@@ -1896,7 +1778,7 @@ index 9ea74d37cd951e0dc76d20ed8234b5871035566c..fc55527c36c33f12760e1cf4cde7cfd3
private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry();
public CraftPersistentDataContainer persistentDataContainer;
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
index 465458e8a7dbaf9afb32709a71c7b2620d1e1fd2..8ea72a149d89ab05bf97ac0f36f50d94ff917184 100644
index 2a8609e33716949ff1877b6d10f64a9d7a7c81e9..96490c90697ad42565c465a5ed1d956fc1c73f73 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -785,7 +785,6 @@ public class LevelChunk extends ChunkAccess {
@@ -1915,7 +1797,7 @@ index 465458e8a7dbaf9afb32709a71c7b2620d1e1fd2..8ea72a149d89ab05bf97ac0f36f50d94
}
}
}
@@ -1163,7 +1161,6 @@ public class LevelChunk extends ChunkAccess {
@@ -1161,7 +1159,6 @@ public class LevelChunk extends ChunkAccess {
ProfilerFiller gameprofilerfiller = LevelChunk.this.level.getProfiler();
gameprofilerfiller.push(this::getType);
@@ -1923,7 +1805,7 @@ index 465458e8a7dbaf9afb32709a71c7b2620d1e1fd2..8ea72a149d89ab05bf97ac0f36f50d94
BlockState iblockdata = LevelChunk.this.getBlockState(blockposition);
if (this.blockEntity.getType().isValid(iblockdata)) {
@@ -1189,9 +1186,6 @@ public class LevelChunk extends ChunkAccess {
@@ -1187,9 +1184,6 @@ public class LevelChunk extends ChunkAccess {
LevelChunk.this.removeBlockEntity(this.getPos());
// Paper end - Prevent block entity and entity crashes
// Spigot start
@@ -1934,10 +1816,10 @@ index 465458e8a7dbaf9afb32709a71c7b2620d1e1fd2..8ea72a149d89ab05bf97ac0f36f50d94
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 1068ed383232a71f6ada6677f4872267cc565325..a30365e430fe492075398af90351e692b1ef671c 100644
index 9164d33b564970d83d11c6544db5697ff9eff32f..361763f59b33fdacbfe2523eb7a0fa0840fa7439 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -344,8 +344,8 @@ public class Main {
@@ -346,8 +346,8 @@ public class Main {
tryPreloadClass("org.jline.terminal.impl.MouseSupport");
tryPreloadClass("org.jline.terminal.impl.MouseSupport$1");
tryPreloadClass("org.jline.terminal.Terminal$MouseTracking");
@@ -1948,7 +1830,7 @@ index 1068ed383232a71f6ada6677f4872267cc565325..a30365e430fe492075398af90351e692
tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext");
tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext$11");
tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext$12");
@@ -358,7 +358,7 @@ public class Main {
@@ -360,7 +360,7 @@ public class Main {
tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$1");
tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$2");
tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$3");
@@ -2092,10 +1974,10 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..e9798517b9211c50a20ea5c69603aab3
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index 3c7a771c48cc2732cc038ca11bb93ec5f8c2d667..aa3a2fd9c8bea586ab7108ff0eef894f8b593b5e 100644
index 5a382907285a288f2a223189e690d3dbdf45594c..129aa57a01877c9339541f0e10933573bd438fe6 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -217,7 +217,6 @@ public final class CraftMagicNumbers implements UnsafeValues {
@@ -219,7 +219,6 @@ public final class CraftMagicNumbers implements UnsafeValues {
// Paper start
@Override
public void reportTimings() {

View File

@@ -31,10 +31,10 @@ index 46954db7ecd35ac4018fdf476df7c8020d7ce6c8..044c51ebb058fc36074fd178929e3279
public PlayerAreaMap() {
super();
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 45439b0cc4ea69e409fd41d4684403c0e0feab12..e44178458aee648ce088c0a10f05b9f9eed91820 100644
index 2bc85351e6e52f90da5fdb29d8d042a06132d742..1d8be1e7b71db074b7616d0a5e0c5075f09877ac 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -424,6 +424,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -426,6 +426,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
private UUID originWorld;
public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
public boolean fixedPose = false; // Paper - Expand Pose API
@@ -42,7 +42,7 @@ index 45439b0cc4ea69e409fd41d4684403c0e0feab12..e44178458aee648ce088c0a10f05b9f9
public void setOrigin(@javax.annotation.Nonnull Location location) {
this.origin = location.toVector();
@@ -2496,6 +2497,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -2555,6 +2556,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
nbttagcompound.putBoolean("Paper.FreezeLock", true);
}
// Paper end
@@ -50,7 +50,7 @@ index 45439b0cc4ea69e409fd41d4684403c0e0feab12..e44178458aee648ce088c0a10f05b9f9
return nbttagcompound;
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT");
@@ -2643,6 +2645,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -2702,6 +2704,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
freezeLocked = nbt.getBoolean("Paper.FreezeLock");
}
// Paper end
@@ -62,7 +62,7 @@ index 45439b0cc4ea69e409fd41d4684403c0e0feab12..e44178458aee648ce088c0a10f05b9f9
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT");
@@ -4936,4 +4943,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -4995,4 +5002,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
}
// Paper end - Expose entity id counter
@@ -73,13 +73,13 @@ index 45439b0cc4ea69e409fd41d4684403c0e0feab12..e44178458aee648ce088c0a10f05b9f9
+ }
+ // Leaves end - leaves ex data
}
diff --git a/src/main/java/top/leavesmc/leaves/LeavesLogger.java b/src/main/java/top/leavesmc/leaves/LeavesLogger.java
diff --git a/src/main/java/org/leavesmc/leaves/LeavesLogger.java b/src/main/java/org/leavesmc/leaves/LeavesLogger.java
new file mode 100644
index 0000000000000000000000000000000000000000..890b91a95719f18a75bc2c2176ef5cb9f2bf4274
index 0000000000000000000000000000000000000000..730174b8c26375510c919fd841dc9371446ae8f2
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/LeavesLogger.java
+++ b/src/main/java/org/leavesmc/leaves/LeavesLogger.java
@@ -0,0 +1,16 @@
+package top.leavesmc.leaves;
+package org.leavesmc.leaves;
+
+import org.bukkit.Bukkit;
+
@@ -95,16 +95,16 @@ index 0000000000000000000000000000000000000000..890b91a95719f18a75bc2c2176ef5cb9
+ setLevel(Level.ALL);
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/util/AsyncExecutor.java b/src/main/java/top/leavesmc/leaves/util/AsyncExecutor.java
diff --git a/src/main/java/org/leavesmc/leaves/util/AsyncExecutor.java b/src/main/java/org/leavesmc/leaves/util/AsyncExecutor.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c03f3f051eff7abaacfaa8adb992811f934b9c8
index 0000000000000000000000000000000000000000..067e351f6e96f2ac1a46d78dc952b2e845c1efef
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/AsyncExecutor.java
+++ b/src/main/java/org/leavesmc/leaves/util/AsyncExecutor.java
@@ -0,0 +1,76 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import com.google.common.collect.Queues;
+import top.leavesmc.leaves.LeavesLogger;
+import org.leavesmc.leaves.LeavesLogger;
+
+import java.util.Queue;
+import java.util.concurrent.locks.Condition;
@@ -177,13 +177,13 @@ index 0000000000000000000000000000000000000000..0c03f3f051eff7abaacfaa8adb992811
+ }
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/util/AsyncPlayerAreaMap.java b/src/main/java/top/leavesmc/leaves/util/AsyncPlayerAreaMap.java
diff --git a/src/main/java/org/leavesmc/leaves/util/AsyncPlayerAreaMap.java b/src/main/java/org/leavesmc/leaves/util/AsyncPlayerAreaMap.java
new file mode 100644
index 0000000000000000000000000000000000000000..4ccc1b3b29e9d62526b2d7c56ef06db77704bf80
index 0000000000000000000000000000000000000000..0a2d58901b25fd771701e45aab6239626681ed4f
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/AsyncPlayerAreaMap.java
+++ b/src/main/java/org/leavesmc/leaves/util/AsyncPlayerAreaMap.java
@@ -0,0 +1,32 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import com.destroystokyo.paper.util.misc.PlayerAreaMap;
+import com.destroystokyo.paper.util.misc.PooledLinkedHashSets;
@@ -215,13 +215,13 @@ index 0000000000000000000000000000000000000000..4ccc1b3b29e9d62526b2d7c56ef06db7
+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f));
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/util/IterableWrapper.java b/src/main/java/top/leavesmc/leaves/util/IterableWrapper.java
diff --git a/src/main/java/org/leavesmc/leaves/util/IterableWrapper.java b/src/main/java/org/leavesmc/leaves/util/IterableWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..0dc58b78c84a825ec7025534cd0fc7be9c4610ad
index 0000000000000000000000000000000000000000..a07feaf53905df87e45e8414b1dca02d4e8411d5
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/IterableWrapper.java
+++ b/src/main/java/org/leavesmc/leaves/util/IterableWrapper.java
@@ -0,0 +1,21 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import org.jetbrains.annotations.NotNull;
+
@@ -242,13 +242,13 @@ index 0000000000000000000000000000000000000000..0dc58b78c84a825ec7025534cd0fc7be
+ return iterator;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/util/Long2ObjectOpenHashMapWrapper.java b/src/main/java/top/leavesmc/leaves/util/Long2ObjectOpenHashMapWrapper.java
diff --git a/src/main/java/org/leavesmc/leaves/util/Long2ObjectOpenHashMapWrapper.java b/src/main/java/org/leavesmc/leaves/util/Long2ObjectOpenHashMapWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..b684d8f576acbc5de8d06b0ff779c257198bc32d
index 0000000000000000000000000000000000000000..440c4d903e145229bc54eb5b6f3578fdd8bcfb84
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/Long2ObjectOpenHashMapWrapper.java
+++ b/src/main/java/org/leavesmc/leaves/util/Long2ObjectOpenHashMapWrapper.java
@@ -0,0 +1,41 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
+import org.jetbrains.annotations.Nullable;

View File

@@ -1,134 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Tue, 26 Oct 2021 14:13:50 +0800
Subject: [PATCH] Update version fetcher repo
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..fa446ff1b7284b58ee88566cbbe39d81545121ea 100644
--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
@@ -38,7 +38,7 @@ public class PaperVersionFetcher implements VersionFetcher {
return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage;
}
- private static @Nullable String getMinecraftVersion() {
+ protected static @Nullable String getMinecraftVersion() { // Leaves - private -> protected
if (mcVer == null) {
java.util.regex.Matcher matcher = VER_PATTERN.matcher(org.bukkit.Bukkit.getBukkitVersion());
if (matcher.find()) {
@@ -106,7 +106,7 @@ public class PaperVersionFetcher implements VersionFetcher {
}
// Contributed by Techcable <Techcable@outlook.com> in GH-65
- private static int fetchDistanceFromGitHub(@Nonnull String repo, @Nonnull String branch, @Nonnull String hash) {
+ protected static int fetchDistanceFromGitHub(@Nonnull String repo, @Nonnull String branch, @Nonnull String hash) { // Leaves - private -> protected
try {
HttpURLConnection connection = (HttpURLConnection) new URL("https://api.github.com/repos/" + repo + "/compare/" + branch + "..." + hash).openConnection();
connection.connect();
@@ -133,7 +133,7 @@ public class PaperVersionFetcher implements VersionFetcher {
}
@Nullable
- private Component getHistory() {
+ protected Component getHistory() { // Leaves - private -> protected
final VersionHistoryManager.VersionData data = VersionHistoryManager.INSTANCE.getVersionData();
if (data == null) {
return null;
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index aa3a2fd9c8bea586ab7108ff0eef894f8b593b5e..b0115c38f6fd0edc13eb87c657ce541cdc8aa3af 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -501,7 +501,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
@Override
public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
- return new com.destroystokyo.paper.PaperVersionFetcher();
+ return new top.leavesmc.leaves.util.LeavesVersionFetcher(); // Leaves - Leaves version fetcher
}
@Override
diff --git a/src/main/java/top/leavesmc/leaves/util/LeavesVersionFetcher.java b/src/main/java/top/leavesmc/leaves/util/LeavesVersionFetcher.java
new file mode 100644
index 0000000000000000000000000000000000000000..18d104d4dc1da05affc67acbfc3c81c981d2a75b
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/LeavesVersionFetcher.java
@@ -0,0 +1,78 @@
+package top.leavesmc.leaves.util;
+
+import com.destroystokyo.paper.PaperVersionFetcher;
+import com.google.common.base.Charsets;
+import com.google.common.io.Resources;
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSyntaxException;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.TextComponent;
+import net.kyori.adventure.text.event.ClickEvent;
+import net.kyori.adventure.text.format.NamedTextColor;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.net.URL;
+import java.util.stream.StreamSupport;
+
+public class LeavesVersionFetcher extends PaperVersionFetcher {
+
+ private static final String DOWNLOAD_PAGE = "https://leavesmc.org/downloads/leaves";
+ private static final String GITHUB_BRANCH_NAME = "master";
+
+ @Nonnull
+ @Override
+ public Component getVersionMessage(@Nonnull String serverVersion) {
+ String[] parts = serverVersion.substring("git-Leaves-".length()).split("[-\\s]");
+ final Component updateMessage = getUpdateStatusMessage("LeavesMC/Leaves", GITHUB_BRANCH_NAME, parts[0]);
+ final Component history = getHistory();
+
+ return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage;
+ }
+
+ private static int fetchDistanceFromLeavesApiV2(String mcVersion, String hash) {
+ try {
+ try (BufferedReader reader = Resources.asCharSource(
+ new URL("https://api.leavesmc.org/v2/projects/leaves/versions/" + mcVersion + "/differ/" + hash),
+ Charsets.UTF_8
+ ).openBufferedStream()) {
+ return Integer.parseInt(reader.readLine());
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new NumberFormatException();
+ }
+ }
+
+ private static Component getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) {
+ int distance;
+
+ versionInfo = versionInfo.replace("\"", "");
+ try {
+ distance = fetchDistanceFromLeavesApiV2(getMinecraftVersion(), versionInfo);
+ } catch (NumberFormatException ignored) {
+ distance = fetchDistanceFromGitHub(repo, branch, versionInfo);
+ }
+
+ switch (distance) {
+ case -1:
+ return Component.text("Error obtaining version information", NamedTextColor.YELLOW);
+ case 0:
+ return Component.text("You are running the latest version", NamedTextColor.GREEN);
+ case -2:
+ return Component.text("Unknown version", NamedTextColor.YELLOW);
+ default:
+ return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW)
+ .append(Component.newline())
+ .append(Component.text("Download the new version at: ")
+ .append(Component.text(DOWNLOAD_PAGE, NamedTextColor.GOLD)
+ .hoverEvent(Component.text("Click to open", NamedTextColor.WHITE))
+ .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE))));
+
+ }
+ }
+}

View File

@@ -0,0 +1,173 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Tue, 26 Oct 2021 14:13:50 +0800
Subject: [PATCH] Update version fetcher repo
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..917ffaae401f3374d07d7fb7c024234a43ee54e4 100644
--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
@@ -107,7 +107,7 @@ public class PaperVersionFetcher implements VersionFetcher {
}
// Contributed by Techcable <Techcable@outlook.com> in GH-65
- private static int fetchDistanceFromGitHub(final String repo, final String branch, final String hash) {
+ protected static int fetchDistanceFromGitHub(final String repo, final String branch, final String hash) { // Leaves - private -> protected
try {
final HttpURLConnection connection = (HttpURLConnection) URI.create("https://api.github.com/repos/%s/compare/%s...%s".formatted(repo, branch, hash)).toURL().openConnection();
connection.connect();
@@ -130,7 +130,7 @@ public class PaperVersionFetcher implements VersionFetcher {
}
}
- private @Nullable Component getHistory() {
+ protected @Nullable Component getHistory() { // Leaves - private -> protected
final VersionHistoryManager.@Nullable VersionData data = VersionHistoryManager.INSTANCE.getVersionData();
if (data == null) {
return null;
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index 129aa57a01877c9339541f0e10933573bd438fe6..99c7711447ac70fe4219fc55c3ba9fbd45924a90 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -510,7 +510,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
@Override
public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
- return new com.destroystokyo.paper.PaperVersionFetcher();
+ return new org.leavesmc.leaves.util.LeavesVersionFetcher(); // Leaves - Leaves version fetcher
}
@Override
diff --git a/src/main/java/org/leavesmc/leaves/util/LeavesVersionFetcher.java b/src/main/java/org/leavesmc/leaves/util/LeavesVersionFetcher.java
new file mode 100644
index 0000000000000000000000000000000000000000..b102e2f5cf541b8ced87cf1ec7469ea90da4bb72
--- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/util/LeavesVersionFetcher.java
@@ -0,0 +1,126 @@
+package org.leavesmc.leaves.util;
+
+import com.destroystokyo.paper.PaperVersionFetcher;
+import com.google.common.base.Charsets;
+import com.google.common.io.Resources;
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSyntaxException;
+import com.mojang.logging.LogUtils;
+import io.papermc.paper.ServerBuildInfo;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.event.ClickEvent;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.checkerframework.checker.nullness.qual.Nullable;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Optional;
+import java.util.OptionalInt;
+import java.util.stream.StreamSupport;
+
+import static net.kyori.adventure.text.Component.text;
+import static net.kyori.adventure.text.format.TextColor.color;
+
+public class LeavesVersionFetcher extends PaperVersionFetcher {
+
+ private static final Logger LOGGER = LogUtils.getClassLogger();
+
+ private static final int DISTANCE_ERROR = -1;
+ private static final int DISTANCE_UNKNOWN = -2;
+ private static final String DOWNLOAD_PAGE = "https://leavesmc.org/downloads/leaves";
+
+ @NotNull
+ @Override
+ public Component getVersionMessage(@NotNull String serverVersion) {
+ final Component updateMessage;
+ final ServerBuildInfo build = ServerBuildInfo.buildInfo();
+ if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) {
+ updateMessage = text("You are running a development version without access to version information", color(0xFF5300));
+ } else {
+ updateMessage = getUpdateStatusMessage("LeavesMC/Leaves", build);
+ }
+ final @Nullable Component history = this.getHistory();
+
+ return history != null ? Component.textOfChildren(updateMessage, Component.newline(), history) : updateMessage;
+ }
+
+ private static Component getUpdateStatusMessage(@NotNull final String repo, @NotNull final ServerBuildInfo build) {
+ int distance = fetchDistanceFromLeavesApiV2Build(build);
+
+ if (distance == DISTANCE_ERROR) {
+ distance = fetchDistanceFromLeavesApiV2Hash(build);
+ }
+
+ if (distance == DISTANCE_ERROR) {
+ final Optional<String> gitBranch = build.gitBranch();
+ final Optional<String> gitCommit = build.gitCommit();
+ if (gitBranch.isPresent() && gitCommit.isPresent()) {
+ distance = fetchDistanceFromGitHub(repo, gitBranch.get(), gitCommit.get());
+ }
+ }
+
+ return switch (distance) {
+ case DISTANCE_ERROR -> Component.text("Error obtaining version information", NamedTextColor.YELLOW);
+ case 0 -> Component.text("You are running the latest version", NamedTextColor.GREEN);
+ case DISTANCE_UNKNOWN -> Component.text("Unknown version", NamedTextColor.YELLOW);
+ default -> Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW)
+ .append(Component.newline())
+ .append(Component.text("Download the new version at: ")
+ .append(Component.text(DOWNLOAD_PAGE, NamedTextColor.GOLD)
+ .hoverEvent(Component.text("Click to open", NamedTextColor.WHITE))
+ .clickEvent(ClickEvent.openUrl(DOWNLOAD_PAGE))));
+ };
+ }
+
+ private static int fetchDistanceFromLeavesApiV2Build(final ServerBuildInfo build) {
+ OptionalInt buildNumber = build.buildNumber();
+ if (buildNumber.isEmpty()) {
+ return DISTANCE_ERROR;
+ }
+
+ try {
+ try (final BufferedReader reader = Resources.asCharSource(
+ URI.create("https://api.leavesmc.org/v2/projects/leaves/versions/" + build.minecraftVersionId()).toURL(),
+ Charsets.UTF_8
+ ).openBufferedStream()) {
+ final JsonObject json = new Gson().fromJson(reader, JsonObject.class);
+ final JsonArray builds = json.getAsJsonArray("builds");
+ final int latest = StreamSupport.stream(builds.spliterator(), false)
+ .mapToInt(JsonElement::getAsInt)
+ .max()
+ .orElseThrow();
+ return latest - buildNumber.getAsInt();
+ } catch (final JsonSyntaxException ex) {
+ LOGGER.error("Error parsing json from Leaves's downloads API", ex);
+ return DISTANCE_ERROR;
+ }
+ } catch (final IOException e) {
+ LOGGER.error("Error while parsing version", e);
+ return DISTANCE_ERROR;
+ }
+ }
+
+ private static int fetchDistanceFromLeavesApiV2Hash(final ServerBuildInfo build) {
+ if (build.gitCommit().isEmpty()) {
+ return DISTANCE_ERROR;
+ }
+
+ try {
+ try (BufferedReader reader = Resources.asCharSource(
+ URI.create("https://api.leavesmc.org/v2/projects/leaves/versions/" + build.minecraftVersionId() + "/differ/" + build.gitCommit()).toURL(),
+ Charsets.UTF_8
+ ).openBufferedStream()) {
+ return Integer.parseInt(reader.readLine());
+ }
+ } catch (IOException e) {
+ LOGGER.error("Error while parsing version", e);
+ return DISTANCE_ERROR;
+ }
+ }
+}

View File

@@ -5,61 +5,63 @@ Subject: [PATCH] Leaves Server Config And Command
diff --git a/build.gradle.kts b/build.gradle.kts
index dc25ca9011a4fa0fcb642aa7371b0693c294dc9b..a2441f300345c3936bce69d6d3f21fdd6626136d 100644
index 16b742b5131376ceca04570dd4c088caff62e677..fe1f6f1a97ab35c44f596596d16765b8b81753a9 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -218,3 +218,11 @@ tasks.registerRunTask("runDev") {
classpath(sourceSets.main.map { it.runtimeClasspath })
@@ -212,6 +212,14 @@ tasks.registerRunTask("runDevServer") {
jvmArgs("-DPaper.pushPaperAssetsRoot=true")
}
+
+// Leaves start - create config file
+tasks.registerRunTask("createLeavesConfig") {
+ description = "Create a new leaves.yml"
+ mainClass = "top.leavesmc.leaves.config.GlobalConfigCreator"
+ mainClass = "org.leavesmc.leaves.config.GlobalConfigCreator"
+ classpath(sourceSets.main.map { it.runtimeClasspath })
+}
+// Leaves end - create config file
\ No newline at end of file
+
tasks.registerRunTask("runBundler") {
description = "Spin up a test server from the Mojang mapped bundler jar"
classpath(rootProject.tasks.named<io.papermc.paperweight.tasks.CreateBundlerJar>("createMojmapBundlerJar").flatMap { it.outputZip })
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 5db905f820a13c876fd9c9003610e1b3c42f0364..6538dfd5a0d62912ee67de8e414c4443538c32c2 100644
index 025e1a22d7344fc7de2baca5c29a6a6dacd2c88e..624c28d63aba34e9d4677c538b84bebbda7d706a 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1142,6 +1142,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1150,6 +1150,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
LOGGER.info("Done ({})! For help, type \"help\"", doneTime);
// Paper end
+ top.leavesmc.leaves.LeavesConfig.createWorldSections = false; // Leaves - dont let plugin create worlds fill our config
+ org.leavesmc.leaves.LeavesConfig.createWorldSections = false; // Leaves - dont let plugin create worlds fill our config
org.spigotmc.WatchdogThread.tick(); // Paper
org.spigotmc.WatchdogThread.hasStarted = true; // Paper
Arrays.fill( this.recentTps, 20 );
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index d0cf730f175c707b50577b7080bd81cf045ed980..60e5129b42c430ba6b9776bf63d0db608552b50f 100644
index 340d1b6797d56e2ebdce2d8d7cae62780470e1b7..437f714fc1b38f0040b57cef94a76faa88f1c495 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -220,6 +220,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -232,6 +232,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // Paper - init PaperBrigadierProvider
+ top.leavesmc.leaves.LeavesConfig.init((java.io.File) options.valueOf("leaves-settings")); // Leaves - Server Config
+ org.leavesmc.leaves.LeavesConfig.init((java.io.File) options.valueOf("leaves-settings")); // Leaves - Server Config
+ System.setProperty("spark.serverconfigs.extra", "leaves.yml"); // Leaves - spark config
+
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics // Leaves - down
this.setPvpAllowed(dedicatedserverproperties.pvp);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 367975d5e0c9846e5ce6d9cbdc3a977c8ab26b97..a50a52b53f66366b3c810bdc2cad22af47a01578 100644
index 2fa5507aa2153a05208077f9547c165a1099b5bb..b65d405c6f5884c739bebd7e79ba431a8b0056e4 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1081,6 +1081,7 @@ public final class CraftServer implements Server {
@@ -1061,6 +1061,7 @@ public final class CraftServer implements Server {
playerMetadata.removeAll(plugin);
}
// Paper end
+ top.leavesmc.leaves.LeavesConfig.init((File) console.options.valueOf("leaves-settings")); // Leaves - Server Config
+ org.leavesmc.leaves.LeavesConfig.init((File) console.options.valueOf("leaves-settings")); // Leaves - Server Config
this.reloadData();
org.spigotmc.SpigotConfig.registerCommands(); // Spigot
io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper
@@ -3027,6 +3028,14 @@ public final class CraftServer implements Server {
@@ -3033,6 +3034,14 @@ public final class CraftServer implements Server {
{
return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console);
}
@@ -68,17 +70,17 @@ index 367975d5e0c9846e5ce6d9cbdc3a977c8ab26b97..a50a52b53f66366b3c810bdc2cad22af
+ @Override
+ public YamlConfiguration getLeavesConfig()
+ {
+ return top.leavesmc.leaves.LeavesConfig.config;
+ return org.leavesmc.leaves.LeavesConfig.config;
+ }
+ /// Leaves end - add config to timings report
@Override
public void restart() {
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index a30365e430fe492075398af90351e692b1ef671c..416dbfe96d06769778cd45e9bd4e53b514eb2225 100644
index 361763f59b33fdacbfe2523eb7a0fa0840fa7439..c141a8fee41b3f5db190ee5dbe0d748656ef2a74 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -166,6 +166,14 @@ public class Main {
@@ -168,6 +168,14 @@ public class Main {
.ofType(File.class)
.defaultsTo(new File("paper.yml"))
.describedAs("Yml file");
@@ -93,13 +95,13 @@ index a30365e430fe492075398af90351e692b1ef671c..416dbfe96d06769778cd45e9bd4e53b5
acceptsAll(asList("add-plugin", "add-extra-plugin-jar"), "Specify paths to extra plugin jars to be loaded in addition to those in the plugins folder. This argument can be specified multiple times, once for each extra plugin jar path.")
.withRequiredArg()
diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java
diff --git a/src/main/java/org/leavesmc/leaves/LeavesConfig.java b/src/main/java/org/leavesmc/leaves/LeavesConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6b34fb0f5
index 0000000000000000000000000000000000000000..78d00c27d00561911d089660db0051fa4dd6f59a
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java
+++ b/src/main/java/org/leavesmc/leaves/LeavesConfig.java
@@ -0,0 +1,919 @@
+package top.leavesmc.leaves;
+package org.leavesmc.leaves;
+
+import com.destroystokyo.paper.util.SneakyThrow;
+import io.papermc.paper.configuration.GlobalConfiguration;
@@ -108,12 +110,12 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
+import org.bukkit.configuration.file.YamlConfiguration;
+import top.leavesmc.leaves.command.LeavesCommand;
+import top.leavesmc.leaves.config.ConfigVerify;
+import top.leavesmc.leaves.config.GlobalConfig;
+import top.leavesmc.leaves.config.GlobalConfigManager;
+import top.leavesmc.leaves.config.RemovedConfig;
+import top.leavesmc.leaves.util.MathUtils;
+import org.leavesmc.leaves.command.LeavesCommand;
+import org.leavesmc.leaves.config.ConfigVerify;
+import org.leavesmc.leaves.config.GlobalConfig;
+import org.leavesmc.leaves.config.GlobalConfigManager;
+import org.leavesmc.leaves.config.RemovedConfig;
+import org.leavesmc.leaves.util.MathUtils;
+
+import java.io.File;
+import java.io.IOException;
@@ -122,11 +124,11 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+import java.util.logging.Level;
+import java.util.Random;
+
+import top.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRule;
+import top.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRules;
+//import org.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRule; // Leaves - remove protocol temporarily
+//import org.leavesmc.leaves.protocol.CarpetServerProtocol.CarpetRules; // Leaves - remove protocol temporarily
+
+import top.leavesmc.leaves.protocol.bladeren.BladerenProtocol.LeavesFeatureSet;
+import top.leavesmc.leaves.protocol.bladeren.BladerenProtocol.LeavesFeature;
+//import org.leavesmc.leaves.protocol.bladeren.BladerenProtocol.LeavesFeatureSet; // Leaves - remove protocol temporarily
+//import org.leavesmc.leaves.protocol.bladeren.BladerenProtocol.LeavesFeature; // Leaves - remove protocol temporarily
+
+public final class LeavesConfig {
+
@@ -259,8 +261,8 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @Override
+ public String check(Boolean old, Boolean value) {
+ if (value) {
+ registerCommand("bot", new top.leavesmc.leaves.bot.BotCommand("bot"));
+ top.leavesmc.leaves.bot.agent.Actions.registerAll();
+ registerCommand("bot", new org.leavesmc.leaves.bot.BotCommand("bot"));
+ org.leavesmc.leaves.bot.agent.Actions.registerAll();
+ } else {
+ unregisterCommand("bot");
+ }
@@ -327,7 +329,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class VillagerInfiniteDiscountsVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public String check(Boolean old, Boolean value) {
+ top.leavesmc.leaves.util.VillagerInfiniteDiscountHelper.doVillagerInfiniteDiscount(value);
+ org.leavesmc.leaves.util.VillagerInfiniteDiscountHelper.doVillagerInfiniteDiscount(value);
+ return null;
+ }
+ }
@@ -354,7 +356,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class RNGFishingVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public String check(Boolean old, Boolean value) {
+ LeavesFeatureSet.register(LeavesFeature.of("rng_fishing", value));
+// LeavesFeatureSet.register(LeavesFeature.of("rng_fishing", value)); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -443,7 +445,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @Override
+ public String check(Boolean old, Boolean value) {
+ if (value) {
+ top.leavesmc.leaves.util.McTechnicalModeHelper.doMcTechnicalMode();
+ org.leavesmc.leaves.util.McTechnicalModeHelper.doMcTechnicalMode();
+ }
+ return null;
+ }
@@ -458,7 +460,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class UseVanillaRandomVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public String check(Boolean old, Boolean value) {
+ LeavesFeatureSet.register(LeavesFeature.of("use_vanilla_random", value));
+// LeavesFeatureSet.register(LeavesFeature.of("use_vanilla_random", value)); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -490,7 +492,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class CreativeNoClipVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public String check(Boolean old, Boolean value) {
+ CarpetRules.register(CarpetRule.of("carpet", "creativeNoClip", value));
+// CarpetRules.register(CarpetRule.of("carpet", "creativeNoClip", value)); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -510,7 +512,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class LavaRiptideVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public String check(Boolean old, Boolean value) {
+ LeavesFeatureSet.register(LeavesFeature.of("lava_riptide", value));
+// LeavesFeatureSet.register(LeavesFeature.of("lava_riptide", value)); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -525,7 +527,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @Override
+ public String check(Boolean old, Boolean value) {
+ if (value) {
+ registerCommand("blockupdate", new top.leavesmc.leaves.command.NoBlockUpdateCommand("blockupdate"));
+ registerCommand("blockupdate", new org.leavesmc.leaves.command.NoBlockUpdateCommand("blockupdate"));
+ } else {
+ unregisterCommand("blockupdate");
+ }
@@ -545,7 +547,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class AnvilNotExpensiveVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public String check(Boolean old, Boolean value) {
+ CarpetRules.register(CarpetRule.of("pca", "avoidAnvilTooExpensive", value));
+// CarpetRules.register(CarpetRule.of("pca", "avoidAnvilTooExpensive", value)); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -582,7 +584,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class RenewableCoralVerify extends ConfigVerify.EnumConfigVerify<RenewableCoralType> {
+ @Override
+ public String check(Enum<RenewableCoralType> old, Enum<RenewableCoralType> value) {
+ CarpetRules.register(CarpetRule.of("carpet", "renewableCoral", value));
+// CarpetRules.register(CarpetRule.of("carpet", "renewableCoral", value)); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -622,7 +624,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @GlobalConfig(name = "inventory-contains-iterators", category = {"performance", "remove"})
+ public static boolean removeInventoryContainsIterators = true;
+
+ @GlobalConfig(name = "get-nearby-players-streams", category = {"performance", "remove"})
+ @RemovedConfig(name = "get-nearby-players-streams", category = {"performance", "remove"})
+ public static boolean removeGetNearPlayerStreams = true;
+
+ @GlobalConfig(name = "range-check-streams-and-iterators", category = {"performance", "remove"})
@@ -645,7 +647,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @GlobalConfig(name = "enable-suffocation-optimization", category = "performance")
+ public static boolean enableSuffocationOptimization = true;
+
+ @GlobalConfig(name = "strip-raytracing-for-entity", category = "performance")
+ @RemovedConfig(name = "strip-raytracing-for-entity", category = "performance")
+ public static boolean entityStripRaytracing = true;
+
+ @GlobalConfig(name = "check-spooky-season-once-an-hour", category = "performance")
@@ -654,7 +656,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @GlobalConfig(name = "optimize-chunk-ticking", category = "performance", lock = true)
+ public static boolean optimizeChunkTicking = true;
+
+ @GlobalConfig(name = "skip-poi-find-in-vehicle", category = "performance")
+ @RemovedConfig(name = "skip-poi-find-in-vehicle", category = "performance")
+ public static boolean skipPOIFindingInVehicle = true;
+
+ @GlobalConfig(name = "entity-target-find-optimization", category = "performance")
@@ -714,18 +716,12 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @GlobalConfig(name = "optimize-sun-burn-tick", category = "performance")
+ public static boolean optimizeSunBurnTick = true;
+
+ @GlobalConfig(name = "use-optimized-collection", category = "performance")
+ public static boolean useOptimizedCollection = true;
+
+ @GlobalConfig(name = "optimized-CubePointRange", category = "performance")
+ public static boolean optimizedCubePointRange = true;
+
+ @GlobalConfig(name = "check-frozen-ticks-before-landing-block", category = "performance")
+ public static boolean checkFrozenTicksBeforeLandingBlock = true;
+
+ @GlobalConfig(name = "cache-ominous-banner-item", category = "performance")
+ public static boolean cacheOminousBannerItem = true;
+
+ @GlobalConfig(name = "skip-entity-move-if-movement-is-zero", category = "performance")
+ public static boolean skipEntityMoveIfMovementIsZero = true;
+
@@ -740,6 +736,12 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+
+ // Leaves start - performance - removed
+
+ @RemovedConfig(name = "cache-ominous-banner-item", category = "performance")
+ public static boolean cacheOminousBannerItem = true;
+
+ @RemovedConfig(name = "use-optimized-collection", category = "performance")
+ public static boolean useOptimizedCollection = true;
+
+ @RemovedConfig(name = "async-pathfinding", category = "performance")
+ public static boolean asyncPathfinding = false;
+
@@ -772,7 +774,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class MSPTSyncVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public String check(Boolean old, Boolean value) {
+ LeavesFeatureSet.register(LeavesFeature.of("mspt_sync", value));
+// LeavesFeatureSet.register(LeavesFeature.of("mspt_sync", value)); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -804,7 +806,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ @Override
+ public String check(Boolean old, Boolean value) {
+ if (value) {
+ top.leavesmc.leaves.protocol.syncmatica.SyncmaticaProtocol.init();
+// org.leavesmc.leaves.protocol.syncmatica.SyncmaticaProtocol.init(); // Leaves - remove protocol temporarily
+ }
+ return null;
+ }
@@ -879,7 +881,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ private static class AutoUpdateVerify extends ConfigVerify.BooleanConfigVerify {
+ @Override
+ public void runAfterLoader(Boolean value) {
+ top.leavesmc.leaves.util.LeavesUpdateHelper.init();
+ org.leavesmc.leaves.util.LeavesUpdateHelper.init();
+ if (value) {
+ LeavesLogger.LOGGER.warning("Auto-Update is not completely safe. Enabling it may cause data security problems!");
+ }
@@ -916,7 +918,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ public static class ExtraYggdrasilUrlsVerify extends ConfigVerify.ListConfigVerify {
+ @Override
+ public String check(List<?> old, List<?> value) {
+ top.leavesmc.leaves.profile.LeavesMinecraftSessionService.initExtraYggdrasilList();
+// org.leavesmc.leaves.profile.LeavesMinecraftSessionService.initExtraYggdrasilList(); // Leaves - remove protocol temporarily
+ return null;
+ }
+ }
@@ -960,15 +962,15 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+
+ // Leaves start - region
+
+ public static top.leavesmc.leaves.region.RegionFileFormat regionFormatName = top.leavesmc.leaves.region.RegionFileFormat.ANVIL;
+ public static org.leavesmc.leaves.region.RegionFileFormat regionFormatName = org.leavesmc.leaves.region.RegionFileFormat.ANVIL;
+ @GlobalConfig(name = "format", category = "region", lock = true, verify = RegionFormatVerify.class)
+ public static String regionFormat = "ANVIL";
+
+ private static class RegionFormatVerify extends ConfigVerify.StringConfigVerify {
+ @Override
+ public String check(String old, String value) {
+ top.leavesmc.leaves.region.RegionFileFormat format = top.leavesmc.leaves.region.RegionFileFormat.fromString(value);
+ if (format == top.leavesmc.leaves.region.RegionFileFormat.INVALID) {
+ org.leavesmc.leaves.region.RegionFileFormat format = org.leavesmc.leaves.region.RegionFileFormat.fromString(value);
+ if (format == org.leavesmc.leaves.region.RegionFileFormat.INVALID) {
+ return "Unknown region format " + value;
+ }
+ regionFormatName = format;
@@ -1006,7 +1008,7 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+ }
+ }
+
+ @GlobalConfig(name = "crash-on-broken-symlink", category = {"region", "linear"}, lock = true)
+ @RemovedConfig(name = "crash-on-broken-symlink", category = {"region", "linear"})
+ public static boolean linearCrashOnBrokenSymlink = true;
+
+ // Leaves end - region
@@ -1018,13 +1020,13 @@ index 0000000000000000000000000000000000000000..cb427686bf77366ddc9ad133b08f42b6
+
+ // Leaves end - region
+}
diff --git a/src/main/java/top/leavesmc/leaves/command/CommandArgument.java b/src/main/java/top/leavesmc/leaves/command/CommandArgument.java
diff --git a/src/main/java/org/leavesmc/leaves/command/CommandArgument.java b/src/main/java/org/leavesmc/leaves/command/CommandArgument.java
new file mode 100644
index 0000000000000000000000000000000000000000..eadc6d168fb13299348b0c275ae352ee2f1e1ea2
index 0000000000000000000000000000000000000000..381cd8b33137a5b7dc688306b56805f35c57012a
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/command/CommandArgument.java
+++ b/src/main/java/org/leavesmc/leaves/command/CommandArgument.java
@@ -0,0 +1,43 @@
+package top.leavesmc.leaves.command;
+package org.leavesmc.leaves.command;
+
+import org.jetbrains.annotations.NotNull;
+
@@ -1067,13 +1069,13 @@ index 0000000000000000000000000000000000000000..eadc6d168fb13299348b0c275ae352ee
+ return new CommandArgumentResult(new ArrayList<>(Arrays.asList(result)));
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/command/CommandArgumentResult.java b/src/main/java/top/leavesmc/leaves/command/CommandArgumentResult.java
diff --git a/src/main/java/org/leavesmc/leaves/command/CommandArgumentResult.java b/src/main/java/org/leavesmc/leaves/command/CommandArgumentResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..340eaca64c96180b895a075ce9e44402cd104eed
index 0000000000000000000000000000000000000000..e50ca0473ab4d40e2623ab15f8566276cc14f4e7
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/command/CommandArgumentResult.java
+++ b/src/main/java/org/leavesmc/leaves/command/CommandArgumentResult.java
@@ -0,0 +1,62 @@
+package top.leavesmc.leaves.command;
+package org.leavesmc.leaves.command;
+
+import net.minecraft.core.BlockPos;
+import org.bukkit.util.Vector;
@@ -1135,13 +1137,13 @@ index 0000000000000000000000000000000000000000..340eaca64c96180b895a075ce9e44402
+ }
+
+}
diff --git a/src/main/java/top/leavesmc/leaves/command/CommandArgumentType.java b/src/main/java/top/leavesmc/leaves/command/CommandArgumentType.java
diff --git a/src/main/java/org/leavesmc/leaves/command/CommandArgumentType.java b/src/main/java/org/leavesmc/leaves/command/CommandArgumentType.java
new file mode 100644
index 0000000000000000000000000000000000000000..edf12195c7224ca2fb5d3c2ac3fcf485d3049d07
index 0000000000000000000000000000000000000000..dccd32714b86d1fa3e0a9b10a23f765fc54a2c66
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/command/CommandArgumentType.java
+++ b/src/main/java/org/leavesmc/leaves/command/CommandArgumentType.java
@@ -0,0 +1,37 @@
+package top.leavesmc.leaves.command;
+package org.leavesmc.leaves.command;
+
+import org.jetbrains.annotations.NotNull;
+
@@ -1178,13 +1180,13 @@ index 0000000000000000000000000000000000000000..edf12195c7224ca2fb5d3c2ac3fcf485
+
+ public abstract E pasre(@NotNull String arg);
+}
diff --git a/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java b/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java
diff --git a/src/main/java/org/leavesmc/leaves/command/LeavesCommand.java b/src/main/java/org/leavesmc/leaves/command/LeavesCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b6fb546a672fa5b27047fec638e42b2b5dbf533
index 0000000000000000000000000000000000000000..b9e2bdb034dcd5119680ddea44a1eda11a0189b2
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java
+++ b/src/main/java/org/leavesmc/leaves/command/LeavesCommand.java
@@ -0,0 +1,118 @@
+package top.leavesmc.leaves.command;
+package org.leavesmc.leaves.command;
+
+import io.papermc.paper.command.CommandUtil;
+import it.unimi.dsi.fastutil.Pair;
@@ -1198,7 +1200,7 @@ index 0000000000000000000000000000000000000000..9b6fb546a672fa5b27047fec638e42b2
+import org.bukkit.plugin.PluginManager;
+import org.checkerframework.checker.nullness.qual.Nullable;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.command.subcommands.ConfigCommand;
+import org.leavesmc.leaves.command.subcommands.ConfigCommand;
+
+import java.util.ArrayList;
+import java.util.Arrays;
@@ -1302,13 +1304,13 @@ index 0000000000000000000000000000000000000000..9b6fb546a672fa5b27047fec638e42b2
+ return null;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/command/LeavesSubcommand.java b/src/main/java/top/leavesmc/leaves/command/LeavesSubcommand.java
diff --git a/src/main/java/org/leavesmc/leaves/command/LeavesSubcommand.java b/src/main/java/org/leavesmc/leaves/command/LeavesSubcommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ba1b573c8e49cc0838c25bc26687d14841a9e7f
index 0000000000000000000000000000000000000000..4b61fccc71d98a7b69bb7f88fb88ea0a55ca1ed2
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/command/LeavesSubcommand.java
+++ b/src/main/java/org/leavesmc/leaves/command/LeavesSubcommand.java
@@ -0,0 +1,18 @@
+package top.leavesmc.leaves.command;
+package org.leavesmc.leaves.command;
+
+import org.bukkit.command.CommandSender;
+
@@ -1326,21 +1328,21 @@ index 0000000000000000000000000000000000000000..7ba1b573c8e49cc0838c25bc26687d14
+ return true;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/command/subcommands/ConfigCommand.java b/src/main/java/top/leavesmc/leaves/command/subcommands/ConfigCommand.java
diff --git a/src/main/java/org/leavesmc/leaves/command/subcommands/ConfigCommand.java b/src/main/java/org/leavesmc/leaves/command/subcommands/ConfigCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..205e563ed4b3f59e294c2866952c73d22bd367b0
index 0000000000000000000000000000000000000000..4b937f9626e89f2de1ae990151ca241573380e46
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/command/subcommands/ConfigCommand.java
+++ b/src/main/java/org/leavesmc/leaves/command/subcommands/ConfigCommand.java
@@ -0,0 +1,86 @@
+package top.leavesmc.leaves.command.subcommands;
+package org.leavesmc.leaves.command.subcommands;
+
+import io.papermc.paper.command.CommandUtil;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.JoinConfiguration;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.command.CommandSender;
+import top.leavesmc.leaves.command.LeavesSubcommand;
+import top.leavesmc.leaves.config.GlobalConfigManager;
+import org.leavesmc.leaves.command.LeavesSubcommand;
+import org.leavesmc.leaves.config.GlobalConfigManager;
+
+import java.util.ArrayList;
+import java.util.Collections;
@@ -1418,26 +1420,26 @@ index 0000000000000000000000000000000000000000..205e563ed4b3f59e294c2866952c73d2
+ return Collections.emptyList();
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/config/ConfigConvert.java b/src/main/java/top/leavesmc/leaves/config/ConfigConvert.java
diff --git a/src/main/java/org/leavesmc/leaves/config/ConfigConvert.java b/src/main/java/org/leavesmc/leaves/config/ConfigConvert.java
new file mode 100644
index 0000000000000000000000000000000000000000..7053897b5fe7774cb4a28462ef88f6eebd35f171
index 0000000000000000000000000000000000000000..3ddeff82e31178c9c1bb1737c9a28a81e70f71e5
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/config/ConfigConvert.java
+++ b/src/main/java/org/leavesmc/leaves/config/ConfigConvert.java
@@ -0,0 +1,7 @@
+package top.leavesmc.leaves.config;
+package org.leavesmc.leaves.config;
+
+public interface ConfigConvert<E> {
+
+ E convert(String value);
+
+}
diff --git a/src/main/java/top/leavesmc/leaves/config/ConfigVerify.java b/src/main/java/top/leavesmc/leaves/config/ConfigVerify.java
diff --git a/src/main/java/org/leavesmc/leaves/config/ConfigVerify.java b/src/main/java/org/leavesmc/leaves/config/ConfigVerify.java
new file mode 100644
index 0000000000000000000000000000000000000000..b345b7da3f861bcf205e2b2cbd462f69da5fa7b6
index 0000000000000000000000000000000000000000..08ffa951d8fd835f075c45021f56cec19f03e7fc
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/config/ConfigVerify.java
+++ b/src/main/java/org/leavesmc/leaves/config/ConfigVerify.java
@@ -0,0 +1,90 @@
+package top.leavesmc.leaves.config;
+package org.leavesmc.leaves.config;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
@@ -1527,13 +1529,13 @@ index 0000000000000000000000000000000000000000..b345b7da3f861bcf205e2b2cbd462f69
+ }
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/config/GlobalConfig.java b/src/main/java/top/leavesmc/leaves/config/GlobalConfig.java
diff --git a/src/main/java/org/leavesmc/leaves/config/GlobalConfig.java b/src/main/java/org/leavesmc/leaves/config/GlobalConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6b946e5dfb5e3a2c169f88e8fb54718b0ca84ea
index 0000000000000000000000000000000000000000..1f18e2a32b937c71ddf68546c10a298b9baf8e1a
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/config/GlobalConfig.java
+++ b/src/main/java/org/leavesmc/leaves/config/GlobalConfig.java
@@ -0,0 +1,19 @@
+package top.leavesmc.leaves.config;
+package org.leavesmc.leaves.config;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
@@ -1552,16 +1554,16 @@ index 0000000000000000000000000000000000000000..f6b946e5dfb5e3a2c169f88e8fb54718
+
+ Class<? extends ConfigVerify<?>> verify() default ConfigVerify.BooleanConfigVerify.class;
+}
diff --git a/src/main/java/top/leavesmc/leaves/config/GlobalConfigCreator.java b/src/main/java/top/leavesmc/leaves/config/GlobalConfigCreator.java
diff --git a/src/main/java/org/leavesmc/leaves/config/GlobalConfigCreator.java b/src/main/java/org/leavesmc/leaves/config/GlobalConfigCreator.java
new file mode 100644
index 0000000000000000000000000000000000000000..8186cbdd5ce98131670be16ae1757b16d6d7012d
index 0000000000000000000000000000000000000000..67d4365d25714c3732274e5ab21981a31e0299a6
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/config/GlobalConfigCreator.java
+++ b/src/main/java/org/leavesmc/leaves/config/GlobalConfigCreator.java
@@ -0,0 +1,56 @@
+package top.leavesmc.leaves.config;
+package org.leavesmc.leaves.config;
+
+import org.bukkit.configuration.file.YamlConfiguration;
+import top.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.LeavesConfig;
+
+import java.io.File;
+import java.io.IOException;
@@ -1614,17 +1616,17 @@ index 0000000000000000000000000000000000000000..8186cbdd5ce98131670be16ae1757b16
+ }
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/config/GlobalConfigManager.java b/src/main/java/top/leavesmc/leaves/config/GlobalConfigManager.java
diff --git a/src/main/java/org/leavesmc/leaves/config/GlobalConfigManager.java b/src/main/java/org/leavesmc/leaves/config/GlobalConfigManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb5fd1396f6df55b2b065a36c308456f016f343d
index 0000000000000000000000000000000000000000..828bbd8b048df8e48ef007d2c1eefe1458b4b2c3
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/config/GlobalConfigManager.java
+++ b/src/main/java/org/leavesmc/leaves/config/GlobalConfigManager.java
@@ -0,0 +1,188 @@
+package top.leavesmc.leaves.config;
+package org.leavesmc.leaves.config;
+
+import org.bukkit.Bukkit;
+import top.leavesmc.leaves.LeavesConfig;
+import top.leavesmc.leaves.LeavesLogger;
+import org.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.LeavesLogger;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
@@ -1808,13 +1810,13 @@ index 0000000000000000000000000000000000000000..fb5fd1396f6df55b2b065a36c308456f
+ }
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/config/RemovedConfig.java b/src/main/java/top/leavesmc/leaves/config/RemovedConfig.java
diff --git a/src/main/java/org/leavesmc/leaves/config/RemovedConfig.java b/src/main/java/org/leavesmc/leaves/config/RemovedConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d6371d7f249495c738f1a11288d3abe3e61135c
index 0000000000000000000000000000000000000000..90137a284acaf9036334ee2fe6ab34025acb4f4d
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/config/RemovedConfig.java
+++ b/src/main/java/org/leavesmc/leaves/config/RemovedConfig.java
@@ -0,0 +1,19 @@
+package top.leavesmc.leaves.config;
+package org.leavesmc.leaves.config;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;

View File

@@ -4,105 +4,161 @@ Date: Tue, 26 Sep 2023 19:00:41 +0800
Subject: [PATCH] Leaves Protocol Core
diff --git a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
index af86f752c33a2990405fea058b7c41c437ba9d46..bada9fae1e7178162429e1f5a1608b9c4a680a6c 100644
--- a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java
@@ -20,7 +20,12 @@ public record ServerboundCustomPayloadPacket(CustomPacketPayload payload) implem
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+
diff --git a/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java b/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java
index 0211311b3b63bcdea7ebf7bcb24629674c771402..c05a72f4928ee2cec28a61ed06a9079d52634900 100644
--- a/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java
+++ b/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java
@@ -40,13 +40,23 @@ public interface CustomPacketPayload {
private static CustomPacketPayload readPayload(ResourceLocation id, FriendlyByteBuf buf) {
FriendlyByteBuf.Reader<? extends CustomPacketPayload> packetdataserializer_a = (FriendlyByteBuf.Reader) ServerboundCustomPayloadPacket.KNOWN_TYPES.get(id);
-
+ // Leaves start - protocol
+ CustomPacketPayload leavesPayload = top.leavesmc.leaves.protocol.core.LeavesProtocolManager.getPayload(id, buf);
+ if (leavesPayload != null) {
+ return leavesPayload;
+ }
+ // Leaves end - protocol
return (CustomPacketPayload) (packetdataserializer_a != null ? (CustomPacketPayload) packetdataserializer_a.apply(buf) : readUnknownPayload(id, buf));
@Override
public void encode(B friendlyByteBuf, CustomPacketPayload customPacketPayload) {
+ // Leaves start - protocol core
+ if (customPacketPayload instanceof org.leavesmc.leaves.protocol.core.LeavesCustomPayload<?> leavesCustomPayload) {
+ friendlyByteBuf.writeResourceLocation(leavesCustomPayload.id());
+ leavesCustomPayload.write(friendlyByteBuf);
+ return;
+ }
+ // Leaves end - protocol core
this.writeCap(friendlyByteBuf, customPacketPayload.type(), customPacketPayload);
}
@Override
public CustomPacketPayload decode(B friendlyByteBuf) {
ResourceLocation resourceLocation = friendlyByteBuf.readResourceLocation();
- return (CustomPacketPayload)this.findCodec(resourceLocation).decode(friendlyByteBuf);
+ // Leaves start - protocol core
+ var leavesCustomPayload = org.leavesmc.leaves.protocol.core.LeavesProtocolManager.decode(resourceLocation, friendlyByteBuf);
+ return java.util.Objects.requireNonNullElseGet(leavesCustomPayload, () -> (CustomPacketPayload) this.findCodec(resourceLocation).decode(friendlyByteBuf));
+ // Leaves end - protocol core
}
};
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9f3a57c0bb687fc867cede617fd95b2f001060e5..21a6a955dde5c13aeb466792b4bca786c2fec722 100644
index 624c28d63aba34e9d4677c538b84bebbda7d706a..4a9b4e9c0db3cf86134b857ee1318fa4463c80a1 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1727,6 +1727,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1785,6 +1785,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.popPush("server gui refresh");
+ top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleTick(); // Leaves - protocol
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleTick(); // Leaves - protocol
+
for (int i = 0; i < this.tickables.size(); ++i) {
((Runnable) this.tickables.get(i)).run();
}
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index 0306771b8f90dcdd77f151c19c6c2d75c41f8feb..8aa1337b420e1c9fbf51f951f14a63d89f61d3f4 100644
index 308aef9c4933b2bcdd622a34b68efab4a220fe4d..82bf29bb3096797801f768c2b631d8b6cae8f761 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -116,6 +116,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -148,6 +148,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@Override
public void handleCustomPayload(ServerboundCustomPayloadPacket packet) {
+ top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePayload(player, packet.payload()); // Leaves - protocol
+ // Leaves start - protocol
+ if (packet.payload() instanceof org.leavesmc.leaves.protocol.core.LeavesCustomPayload<?> leavesPayload) {
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePayload(player, leavesPayload);
+ }
+ // Leaves end - protocol
// Paper start - Brand support
if (packet.payload() instanceof net.minecraft.network.protocol.common.custom.BrandPayload brandPayload) {
this.player.clientBrandName = brandPayload.brand();
@@ -133,6 +134,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -165,6 +170,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
String channels = payload.toString(com.google.common.base.Charsets.UTF_8);
for (String channel : channels.split("\0")) {
this.getCraftPlayer().addChannel(channel);
+ top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleMinecraftRegister(channel, player); // Leaves - protocol
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleMinecraftRegister(channel, player); // Leaves - protocol
}
} catch (Exception ex) {
ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t register custom payload", ex);
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index aa7eb1f037875293b03588f5bc5d2df70237b45e..62d89e49dfcbb00651df7f89be482b9cbc173b0a 100644
index 6957cbfbea51d6a3b57e1c5bfcebd52a25cde8d5..11d73647d2d94c8131c5e3eeef490fb3472fe0a4 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -347,6 +347,8 @@ public abstract class PlayerList {
@@ -349,6 +349,8 @@ public abstract class PlayerList {
return;
}
+ top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player); // Leaves - protocol
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player); // Leaves - protocol
+
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure
@@ -597,6 +599,7 @@ public abstract class PlayerList {
@@ -595,6 +597,7 @@ public abstract class PlayerList {
return this.remove(entityplayer, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(entityplayer.getDisplayName())));
}
public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
+ top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerLeave(entityplayer); // Leaves - protocol
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerLeave(entityplayer); // Leaves - protocol
// Paper end - Fix kick event leave message not being sent
ServerLevel worldserver = entityplayer.serverLevel();
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index a50a52b53f66366b3c810bdc2cad22af47a01578..79874b67f7edb9afd41633f5bc4bacee5cb0046b 100644
index b65d405c6f5884c739bebd7e79ba431a8b0056e4..3fbf31ef07489ffb7d0c0f5317fa967db740494d 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -465,6 +465,7 @@ public final class CraftServer implements Server {
MapPalette.setMapColorCache(new CraftMapColorCache(this.logger));
@@ -468,6 +468,7 @@ public final class CraftServer implements Server {
}
this.potionBrewer = new io.papermc.paper.potion.PaperPotionBrewer(console); // Paper - custom potion mixes
datapackManager = new io.papermc.paper.datapack.PaperDatapackManager(console.getPackRepository()); // Paper
+ top.leavesmc.leaves.protocol.core.LeavesProtocolManager.init(); // Leaves - protocol
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.init(); // Leaves - protocol
}
public boolean getCommandBlockOverride(String command) {
@@ -1087,6 +1088,7 @@ public final class CraftServer implements Server {
@@ -1067,6 +1068,7 @@ public final class CraftServer implements Server {
io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
+ top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleServerReload(); // Leaves - protocol
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleServerReload(); // Leaves - protocol
int pollCount = 0;
diff --git a/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocol.java
diff --git a/src/main/java/org/leavesmc/leaves/protocol/core/LeavesCustomPayload.java b/src/main/java/org/leavesmc/leaves/protocol/core/LeavesCustomPayload.java
new file mode 100644
index 0000000000000000000000000000000000000000..f884f54f5a1f0665c290e014f088aae857cecef8
index 0000000000000000000000000000000000000000..243a8d77d67b9634d6442b60e481d18831367a74
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocol.java
+++ b/src/main/java/org/leavesmc/leaves/protocol/core/LeavesCustomPayload.java
@@ -0,0 +1,26 @@
+package org.leavesmc.leaves.protocol.core;
+
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+import net.minecraft.resources.ResourceLocation;
+import org.jetbrains.annotations.NotNull;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+public interface LeavesCustomPayload<T extends LeavesCustomPayload<T>> extends CustomPacketPayload {
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @interface New {
+ }
+
+ void write(FriendlyByteBuf buf);
+
+ ResourceLocation id();
+
+ @Override
+ @NotNull
+ default Type<T> type() {
+ return new CustomPacketPayload.Type<>(id());
+ }
+}
diff --git a/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocol.java b/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocol.java
new file mode 100644
index 0000000000000000000000000000000000000000..986d2a6641ff8017dddf3e5f2655adfc2866c119
--- /dev/null
+++ b/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocol.java
@@ -0,0 +1,12 @@
+package top.leavesmc.leaves.protocol.core;
+package org.leavesmc.leaves.protocol.core;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
@@ -114,22 +170,21 @@ index 0000000000000000000000000000000000000000..f884f54f5a1f0665c290e014f088aae8
+public @interface LeavesProtocol {
+ String[] namespace();
+}
diff --git a/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java
diff --git a/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocolManager.java b/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocolManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac379d3331
index 0000000000000000000000000000000000000000..eb9e9d3a0dbb17eb68940685d4a6dea5b33a61f1
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/core/LeavesProtocolManager.java
@@ -0,0 +1,359 @@
+package top.leavesmc.leaves.protocol.core;
+++ b/src/main/java/org/leavesmc/leaves/protocol/core/LeavesProtocolManager.java
@@ -0,0 +1,365 @@
+package org.leavesmc.leaves.protocol.core;
+
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.level.ServerPlayer;
+import org.apache.commons.lang.ArrayUtils;
+import org.bukkit.event.player.PlayerKickEvent;
+import org.jetbrains.annotations.NotNull;
+import org.leavesmc.leaves.LeavesLogger;
+
+import java.io.File;
+import java.io.IOException;
@@ -156,7 +211,9 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+
+public class LeavesProtocolManager {
+
+ private static final Map<LeavesProtocol, Map<ProtocolHandler.PayloadReceiver, Constructor<? extends CustomPacketPayload>>> KNOWN_TYPES = new HashMap<>();
+ private static final LeavesLogger LOGGER = LeavesLogger.LOGGER;
+
+ private static final Map<LeavesProtocol, Map<ProtocolHandler.PayloadReceiver, Constructor<? extends LeavesCustomPayload<?>>>> KNOWN_TYPES = new HashMap<>();
+ private static final Map<LeavesProtocol, Map<ProtocolHandler.PayloadReceiver, Method>> KNOW_RECEIVERS = new HashMap<>();
+
+ private static final List<Method> TICKERS = new ArrayList<>();
@@ -166,7 +223,7 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ private static final Map<LeavesProtocol, Map<ProtocolHandler.MinecraftRegister, Method>> MINECRAFT_REGISTER = new HashMap<>();
+
+ public static void init() {
+ for (Class<?> clazz : getClasses("top.leavesmc.leaves.protocol")) {
+ for (Class<?> clazz : getClasses("org.leavesmc.leaves.protocol")) {
+ final LeavesProtocol protocol = clazz.getAnnotation(LeavesProtocol.class);
+ if (protocol != null) {
+ Set<Method> methods;
@@ -176,12 +233,12 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ methods = new HashSet<>(publicMethods.length + privateMethods.length, 1.0f);
+ Collections.addAll(methods, publicMethods);
+ Collections.addAll(methods, privateMethods);
+ } catch (NoClassDefFoundError e) {
+ e.printStackTrace();
+ } catch (NoClassDefFoundError error) {
+ LOGGER.severe("Failed to load class " + clazz.getName() + " due to missing dependencies, " + error.getMessage());
+ return;
+ }
+
+ Map<ProtocolHandler.PayloadReceiver, Constructor<? extends CustomPacketPayload>> map = KNOWN_TYPES.getOrDefault(protocol, new HashMap<>());
+ Map<ProtocolHandler.PayloadReceiver, Constructor<? extends LeavesCustomPayload<?>>> map = KNOWN_TYPES.getOrDefault(protocol, new HashMap<>());
+ for (final Method method : methods) {
+ if (method.isBridge() || method.isSynthetic() || !Modifier.isStatic(method.getModifiers())) {
+ continue;
@@ -193,8 +250,8 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ if (init != null) {
+ try {
+ method.invoke(null);
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | IllegalAccessException exception) {
+ LOGGER.severe("Failed to invoke init method " + method.getName() + " in " + clazz.getName() + ", " + exception.getMessage());
+ }
+ continue;
+ }
@@ -202,9 +259,16 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ final ProtocolHandler.PayloadReceiver receiver = method.getAnnotation(ProtocolHandler.PayloadReceiver.class);
+ if (receiver != null) {
+ try {
+ map.put(receiver, receiver.payload().getConstructor(ResourceLocation.class, FriendlyByteBuf.class));
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ Constructor<? extends LeavesCustomPayload<?>> constructor = receiver.payload().getConstructor(ResourceLocation.class, FriendlyByteBuf.class);
+ constructor.setAccessible(true);
+
+ if (constructor.getAnnotation(LeavesCustomPayload.New.class) == null) {
+ LOGGER.warning("Failed to find new annotation for " + receiver.payload().getName());
+ }
+
+ map.put(receiver, constructor);
+ } catch (NoSuchMethodException exception) {
+ LOGGER.severe("Failed to find constructor for " + receiver.payload().getName() + ", " + exception.getMessage());
+ continue;
+ }
+
@@ -254,19 +318,19 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ }
+ }
+
+ public static CustomPacketPayload getPayload(ResourceLocation id, FriendlyByteBuf buf) {
+ public static LeavesCustomPayload<?> decode(ResourceLocation id, FriendlyByteBuf buf) {
+ for (LeavesProtocol protocol : KNOWN_TYPES.keySet()) {
+ if (!ArrayUtils.contains(protocol.namespace(), id.getNamespace())) {
+ continue;
+ }
+
+ Map<ProtocolHandler.PayloadReceiver, Constructor<? extends CustomPacketPayload>> map = KNOWN_TYPES.get(protocol);
+ Map<ProtocolHandler.PayloadReceiver, Constructor<? extends LeavesCustomPayload<?>>> map = KNOWN_TYPES.get(protocol);
+ for (ProtocolHandler.PayloadReceiver receiver : map.keySet()) {
+ if (receiver.ignoreId() || ArrayUtils.contains(receiver.payloadId(), id.getPath())) {
+ try {
+ return map.get(receiver).newInstance(id, buf);
+ } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | InstantiationException | IllegalAccessException exception) {
+ LOGGER.warning("Failed to create payload for " + id + " in " + ArrayUtils.toString(protocol.namespace()) + ", " + exception.getMessage());
+ buf.readBytes(buf.readableBytes());
+ return new ErrorPayload(id, protocol.namespace(), receiver.payloadId());
+ }
@@ -276,29 +340,25 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ return null;
+ }
+
+ public static void handlePayload(ServerPlayer player, CustomPacketPayload payload) {
+ if (payload instanceof ServerboundCustomPayloadPacket.UnknownPayload) {
+ return;
+ }
+
+ public static void handlePayload(ServerPlayer player, LeavesCustomPayload<?> payload) {
+ if (payload instanceof ErrorPayload errorPayload) {
+ player.connection.disconnect("Payload " + Arrays.toString(errorPayload.packetID) + " from " + Arrays.toString(errorPayload.protocolID) + " error", PlayerKickEvent.Cause.INVALID_PAYLOAD);
+ return;
+ }
+
+ for (LeavesProtocol protocol : KNOW_RECEIVERS.keySet()) {
+ if (!ArrayUtils.contains(protocol.namespace(), payload.id().getNamespace())) {
+ if (!ArrayUtils.contains(protocol.namespace(), payload.type().id().getNamespace())) {
+ continue;
+ }
+
+ Map<ProtocolHandler.PayloadReceiver, Method> map = KNOW_RECEIVERS.get(protocol);
+ for (ProtocolHandler.PayloadReceiver receiver : map.keySet()) {
+ if (payload.getClass() == receiver.payload()) {
+ if (receiver.ignoreId() || ArrayUtils.contains(receiver.payloadId(), payload.id().getPath())) {
+ if (receiver.ignoreId() || ArrayUtils.contains(receiver.payloadId(), payload.type().id().getPath())) {
+ try {
+ map.get(receiver).invoke(null, player, payload);
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | IllegalAccessException exception) {
+ LOGGER.warning("Failed to handle payload " + payload.type().id() + " in " + ArrayUtils.toString(protocol.namespace()) + ", " + exception.getMessage());
+ }
+ }
+ }
@@ -312,8 +372,8 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ for (Method method : TICKERS) {
+ method.invoke(null);
+ }
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | IllegalAccessException exception) {
+ LOGGER.warning("Failed to tick, " + exception.getMessage());
+ }
+ }
+ }
@@ -324,8 +384,8 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ for (Method method : PLAYER_JOIN) {
+ method.invoke(null, player);
+ }
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | IllegalAccessException exception) {
+ LOGGER.warning("Failed to handle player join, " + exception.getMessage());
+ }
+ }
+ }
@@ -336,8 +396,8 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ for (Method method : PLAYER_LEAVE) {
+ method.invoke(null, player);
+ }
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | IllegalAccessException exception) {
+ LOGGER.warning("Failed to handle player leave, " + exception.getMessage());
+ }
+ }
+ }
@@ -348,8 +408,8 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ for (Method method : RELOAD_SERVER) {
+ method.invoke(null);
+ }
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | IllegalAccessException exception) {
+ LOGGER.warning("Failed to handle server reload, " + exception.getMessage());
+ }
+ }
+ }
@@ -367,8 +427,8 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ ArrayUtils.contains(register.channelIds(), channel[1])) {
+ try {
+ map.get(register).invoke(null, player);
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException | IllegalAccessException exception) {
+ LOGGER.warning("Failed to handle minecraft register, " + exception.getMessage());
+ }
+ }
+ }
@@ -393,13 +453,13 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ jar = ((JarURLConnection) url.openConnection()).getJarFile();
+ Enumeration<JarEntry> entries = jar.entries();
+ findClassesInPackageByJar(pack, entries, packageDirName, classes);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (IOException exception) {
+ LOGGER.warning("Failed to load jar file, " + exception.getMessage());
+ }
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (IOException exception) {
+ LOGGER.warning("Failed to load classes, " + exception.getMessage());
+ }
+ return classes;
+ }
@@ -418,8 +478,8 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ String className = file.getName().substring(0, file.getName().length() - 6);
+ try {
+ classes.add(Class.forName(packageName + '.' + className));
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException exception) {
+ LOGGER.warning("Failed to load class " + className + ", " + exception.getMessage());
+ }
+ }
+ }
@@ -442,22 +502,23 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ String className = name.substring(packageName.length() + 1, name.length() - 6);
+ try {
+ classes.add(Class.forName(packageName + '.' + className));
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException exception) {
+ LOGGER.warning("Failed to load class " + className + ", " + exception.getMessage());
+ }
+ }
+ }
+ }
+ }
+
+ public record ErrorPayload(ResourceLocation id, String[] protocolID, String[] packetID) implements CustomPacketPayload {
+ public record ErrorPayload(ResourceLocation id, String[] protocolID, String[] packetID) implements LeavesCustomPayload<ErrorPayload> {
+ @Override
+ public void write(@NotNull FriendlyByteBuf buf) {
+ }
+ }
+
+ public record EmptyPayload(ResourceLocation id) implements CustomPacketPayload {
+ public record EmptyPayload(ResourceLocation id) implements LeavesCustomPayload<EmptyPayload> {
+
+ @LeavesCustomPayload.New
+ public EmptyPayload(ResourceLocation location, FriendlyByteBuf buf) {
+ this(location);
+ }
@@ -467,8 +528,9 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ }
+ }
+
+ public record LeavesPayload(FriendlyByteBuf data, ResourceLocation id) implements CustomPacketPayload {
+ public record LeavesPayload(FriendlyByteBuf data, ResourceLocation id) implements LeavesCustomPayload<LeavesPayload> {
+
+ @LeavesCustomPayload.New
+ public LeavesPayload(ResourceLocation location, FriendlyByteBuf buf) {
+ this(new FriendlyByteBuf(buf.readBytes(buf.readableBytes())), location);
+ }
@@ -479,15 +541,13 @@ index 0000000000000000000000000000000000000000..be939521c6c4f9ca1f960611473d68ac
+ }
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/protocol/core/ProtocolHandler.java b/src/main/java/top/leavesmc/leaves/protocol/core/ProtocolHandler.java
diff --git a/src/main/java/org/leavesmc/leaves/protocol/core/ProtocolHandler.java b/src/main/java/org/leavesmc/leaves/protocol/core/ProtocolHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..92ad6e9b1c0d9640b80c1ebe739c613d989eec21
index 0000000000000000000000000000000000000000..f9dc0a60ca4287e5ec91dd3fc1ae315e2826da34
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/core/ProtocolHandler.java
@@ -0,0 +1,63 @@
+package top.leavesmc.leaves.protocol.core;
+
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+++ b/src/main/java/org/leavesmc/leaves/protocol/core/ProtocolHandler.java
@@ -0,0 +1,61 @@
+package org.leavesmc.leaves.protocol.core;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
@@ -506,7 +566,7 @@ index 0000000000000000000000000000000000000000..92ad6e9b1c0d9640b80c1ebe739c613d
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface PayloadReceiver {
+
+ Class<? extends CustomPacketPayload> payload();
+ Class<? extends LeavesCustomPayload<?>> payload();
+
+ String[] payloadId();
+
@@ -548,13 +608,13 @@ index 0000000000000000000000000000000000000000..92ad6e9b1c0d9640b80c1ebe739c613d
+ boolean ignoreId() default false;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/protocol/core/ProtocolUtils.java b/src/main/java/top/leavesmc/leaves/protocol/core/ProtocolUtils.java
diff --git a/src/main/java/org/leavesmc/leaves/protocol/core/ProtocolUtils.java b/src/main/java/org/leavesmc/leaves/protocol/core/ProtocolUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..5282c5ad3d26d06ab685ddaaf6fd9a4d49559717
index 0000000000000000000000000000000000000000..562f3d515679965571597945e8682712e1e1f0b9
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/core/ProtocolUtils.java
@@ -0,0 +1,36 @@
+package top.leavesmc.leaves.protocol.core;
+++ b/src/main/java/org/leavesmc/leaves/protocol/core/ProtocolUtils.java
@@ -0,0 +1,37 @@
+package org.leavesmc.leaves.protocol.core;
+
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
@@ -571,8 +631,9 @@ index 0000000000000000000000000000000000000000..5282c5ad3d26d06ab685ddaaf6fd9a4d
+ player.connection.send(new ClientboundCustomPayloadPacket(new LeavesProtocolManager.EmptyPayload(id)));
+ }
+
+ public static void sendPayloadPacket(ServerPlayer player, ResourceLocation id, Consumer<FriendlyByteBuf> consumer) {
+ player.connection.send(new ClientboundCustomPayloadPacket(new CustomPacketPayload() {
+ @SuppressWarnings("all")
+ public static void sendPayloadPacket(@NotNull ServerPlayer player, ResourceLocation id, Consumer<FriendlyByteBuf> consumer) {
+ player.connection.send(new ClientboundCustomPayloadPacket(new LeavesCustomPayload() {
+ @Override
+ public void write(@NotNull FriendlyByteBuf buf) {
+ consumer.accept(buf);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Fix gravity block duper
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index dcd8ab90212237764cc64a71321d739bd857a34a..87b0eead81c06afa276b74bf1c7fce573027702f 100644
index 1d8be1e7b71db074b7616d0a5e0c5075f09877ac..96ad6c4ae0a9f3745e4a6503e6010d9278d8eb54 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -441,6 +441,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -443,6 +443,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.originWorld;
}
// Paper end - Entity origin API
@@ -16,7 +16,7 @@ index dcd8ab90212237764cc64a71321d739bd857a34a..87b0eead81c06afa276b74bf1c7fce57
// Paper start - make end portalling safe
public BlockPos portalBlock;
public ServerLevel portalWorld;
@@ -471,6 +472,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -473,6 +474,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.teleportTo(worldserver, null);
}
// Paper end - make end portalling safe
@@ -24,7 +24,7 @@ index dcd8ab90212237764cc64a71321d739bd857a34a..87b0eead81c06afa276b74bf1c7fce57
// Paper start - optimise entity tracking
final org.spigotmc.TrackingRange.TrackingRangeType trackingRangeType = org.spigotmc.TrackingRange.getTrackingRangeType(this);
@@ -3199,7 +3201,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -3260,7 +3262,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
this.processPortalCooldown();
@@ -34,7 +34,7 @@ index dcd8ab90212237764cc64a71321d739bd857a34a..87b0eead81c06afa276b74bf1c7fce57
}
diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
index 4ba24bced9a2de4616a0418857d3738e0e322ea0..6482c2456d9dc9b4983f691f388b7ec045d2cab6 100644
index 7272d70c672b54dcf595beafd7a2ed33c96e35cb..d8d355b4ee4869fa9a5d7b4dcd81a3375dd976ba 100644
--- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
@@ -61,15 +61,19 @@ public class EndPortalBlock extends BaseEntityBlock {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Fix trading with the void
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index ccc645f225bb0cf898dbc2ee7abb21b53ff8660b..a15e1d95da33bf543df96e9b97b79d84583332bd 100644
index 92805a3311bc1f21df9512b14b209e1d51174ac5..c93d0fbb921309a63c21ba7775fdf44aaa7985c4 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2800,11 +2800,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -2751,11 +2751,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
// Spigot end
// Spigot Start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Make snowball and egg can knockback player
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java
index 5e82549ea2e80b3968b793b7b4b685c4891e9a91..14c14d12b7ae34a6631828e8dcc531b62b9aa1ed 100644
index 2b4d206c0d31ba38d7b2af654bd420e85145d441..21b1244a51aa96e769bb568ff7e682e4a583269d 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java
@@ -3,6 +3,7 @@ package net.minecraft.world.entity.projectile;
@@ -22,7 +22,7 @@ index 5e82549ea2e80b3968b793b7b4b685c4891e9a91..14c14d12b7ae34a6631828e8dcc531b6
entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float) i);
+
+ // Leaves start - make snowball can knockback player
+ if (top.leavesmc.leaves.LeavesConfig.snowballAndEggCanKnockback && entity instanceof ServerPlayer) {
+ if (org.leavesmc.leaves.LeavesConfig.snowballAndEggCanKnockback && entity instanceof ServerPlayer) {
+ entity.hurt(this.damageSources().thrown(this, this.getOwner()), 0.0000001F);
+ ((ServerPlayer) entity).knockback(0.4000000059604645D, this.getX() - entity.getX(), this.getZ() - entity.getZ(), this, org.bukkit.event.entity.EntityKnockbackEvent.KnockbackCause.DAMAGE);
+ }
@@ -31,7 +31,7 @@ index 5e82549ea2e80b3968b793b7b4b685c4891e9a91..14c14d12b7ae34a6631828e8dcc531b6
@Override
diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java
index 82bb8004635865f5202578d5a6f520048e7269d5..f6524889953ad540f5e6a66ff748f4d8582e1c1b 100644
index 82bb8004635865f5202578d5a6f520048e7269d5..2b8d8330e7edfd23344c31b064c12348206dec48 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java
@@ -46,7 +46,14 @@ public class ThrownEgg extends ThrowableItemProjectile {
@@ -41,7 +41,7 @@ index 82bb8004635865f5202578d5a6f520048e7269d5..f6524889953ad540f5e6a66ff748f4d8
+ Entity entity = entityHitResult.getEntity(); // Leaves - make egg can knockback player
entityHitResult.getEntity().hurt(this.damageSources().thrown(this, this.getOwner()), 0.0F);
+ // Leaves start - make egg can knockback player
+ if (top.leavesmc.leaves.LeavesConfig.snowballAndEggCanKnockback && entity instanceof ServerPlayer) {
+ if (org.leavesmc.leaves.LeavesConfig.snowballAndEggCanKnockback && entity instanceof ServerPlayer) {
+ entity.hurt(this.damageSources().thrown(this, this.getOwner()), 0.0000001F);
+ ((ServerPlayer) entity).knockback(0.4000000059604645D, this.getX() - entity.getX(), this.getZ() - entity.getZ(), this, org.bukkit.event.entity.EntityKnockbackEvent.KnockbackCause.DAMAGE);
+ }

View File

@@ -5,15 +5,15 @@ Subject: [PATCH] Make shears in dispenser can unlimited use
diff --git a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
index ec43e8294d7e7112478a2fc1475f0852690a4882..840524c55d52b5ecaf0b1decfdc871c1fd8e0f42 100644
index a024c697a65bbab27408da1d6a75e531d9719b47..d572549fa76e08e233b810e1b82f79b8174009b9 100644
--- a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
+++ b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
@@ -63,7 +63,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior {
@@ -64,7 +64,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior {
BlockPos blockposition = pointer.pos().relative((Direction) pointer.state().getValue(DispenserBlock.FACING));
this.setSuccess(ShearsDispenseItemBehavior.tryShearBeehive(worldserver, blockposition) || ShearsDispenseItemBehavior.tryShearLivingEntity(worldserver, blockposition, bukkitBlock, craftItem)); // CraftBukkit
- if (this.isSuccess() && stack.hurt(1, worldserver.getRandom(), (ServerPlayer) null)) {
+ if (this.isSuccess() && stack.hurt(1, worldserver.getRandom(), (ServerPlayer) null) && !top.leavesmc.leaves.LeavesConfig.shearsInDispenserCanZeroAmount) { // Leaves - Make shears in dispenser can unlimited use
stack.setCount(0);
}
}
- if (this.isSuccess()) {
+ if (this.isSuccess() && !org.leavesmc.leaves.LeavesConfig.shearsInDispenserCanZeroAmount) { // Leaves - Make shears in dispenser can unlimited use
stack.hurtAndBreak(1, worldserver.getRandom(), (ServerPlayer) null, () -> {
stack.setCount(0);
});

View File

@@ -5,25 +5,23 @@ Subject: [PATCH] Redstone Shears Wrench
diff --git a/src/main/java/net/minecraft/world/item/ShearsItem.java b/src/main/java/net/minecraft/world/item/ShearsItem.java
index 7ce81a910ceaa979499b7be269ac8a49e75d3a1c..c55459bb9a03432afd3ea15c8e38a5faeaedeaa1 100644
index cb809796372a4658aa617404f9fddffff9b45cb7..4e931906c152f269793b92d682e890b2a50172d3 100644
--- a/src/main/java/net/minecraft/world/item/ShearsItem.java
+++ b/src/main/java/net/minecraft/world/item/ShearsItem.java
@@ -1,7 +1,9 @@
package net.minecraft.world.item;
+import net.minecraft.Util;
@@ -3,6 +3,7 @@ package net.minecraft.world.item;
import java.util.List;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.core.BlockPos;
+import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
@@ -12,10 +14,21 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
@@ -15,9 +16,21 @@ import net.minecraft.world.item.component.Tool;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
+import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.Util;
+import net.minecraft.world.level.block.ComparatorBlock;
+import net.minecraft.world.level.block.DispenserBlock;
import net.minecraft.world.level.block.GrowingPlantHeadBlock;
@@ -40,13 +38,13 @@ index 7ce81a910ceaa979499b7be269ac8a49e75d3a1c..c55459bb9a03432afd3ea15c8e38a5fa
public class ShearsItem extends Item {
public ShearsItem(Item.Properties settings) {
@@ -79,6 +92,60 @@ public class ShearsItem extends Item {
@@ -77,6 +90,60 @@ public class ShearsItem extends Item {
return InteractionResult.sidedSuccess(level.isClientSide);
}
+ // Leaves start - shears wrench
+ Block block = blockState.getBlock();
+ if (top.leavesmc.leaves.LeavesConfig.redstoneShearsWrench && block instanceof ObserverBlock || block instanceof DispenserBlock ||
+ if (org.leavesmc.leaves.LeavesConfig.redstoneShearsWrench && block instanceof ObserverBlock || block instanceof DispenserBlock ||
+ block instanceof PistonBaseBlock || block instanceof HopperBlock || block instanceof RepeaterBlock || block instanceof ComparatorBlock) {
+ StateDefinition<Block, BlockState> blockstatelist = block.getStateDefinition();
+ Property<?> iblockstate = blockstatelist.getProperty("facing");

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add isShrink to EntityResurrectEvent
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index ac3d31b0ed54fd07f07a0768017cc34f7ae9709f..5a453688f9f9f48e5952b00382bbca0632995022 100644
index e8a472f7e90dfb39b16521f75521d60b532af5cc..d106491e5ca187cf62758cbd33bab575ccbc3bec 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1622,12 +1622,12 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -1648,12 +1648,12 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null;
@@ -23,7 +23,7 @@ index ac3d31b0ed54fd07f07a0768017cc34f7ae9709f..5a453688f9f9f48e5952b00382bbca06
itemstack1.shrink(1);
}
if (itemstack != null && this instanceof ServerPlayer) {
@@ -4565,3 +4565,4 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -4562,3 +4562,4 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Budding Amethyst can push by piston
diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java
index 3212771ac19044ca37bf60e231eac5615a9c240e..ee6cb4042421a74095473360126f6d083513934b 100644
index 555d255a79c6136d0df3504218a0bc4681a5489f..e27f2317e4e2f13b6ef12be727046497a750fd3a 100644
--- a/src/main/java/net/minecraft/world/level/block/Block.java
+++ b/src/main/java/net/minecraft/world/level/block/Block.java
@@ -603,6 +603,12 @@ public class Block extends BlockBehaviour implements ItemLike {
@@ -591,6 +591,12 @@ public class Block extends BlockBehaviour implements ItemLike {
}
// Spigot end
@@ -22,7 +22,7 @@ index 3212771ac19044ca37bf60e231eac5615a9c240e..ee6cb4042421a74095473360126f6d08
private final BlockState first;
diff --git a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java
index 7f58c9f5935cd14ea1096de14633f653eb486d7e..b83efe46ecb3ebf2b3d0c4499eec29055663fd3f 100644
index 8920855b07a31715327b8102c7faafc9f916825d..32d926a1b952b8069c5bf48c88e3c108b08b4ab1 100644
--- a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java
@@ -60,4 +60,11 @@ public class BuddingAmethystBlock extends AmethystBlock {
@@ -33,15 +33,15 @@ index 7f58c9f5935cd14ea1096de14633f653eb486d7e..b83efe46ecb3ebf2b3d0c4499eec2905
+ // Leaves start - budding amethyst can push by piston
+ @Override
+ public net.minecraft.world.level.material.PushReaction getResetPushReaction() {
+ return top.leavesmc.leaves.LeavesConfig.buddingAmethystCanPushByPiston ? net.minecraft.world.level.material.PushReaction.PUSH_ONLY : null;
+ return org.leavesmc.leaves.LeavesConfig.buddingAmethystCanPushByPiston ? net.minecraft.world.level.material.PushReaction.PUSH_ONLY : null;
+ }
+ // Leaves end - budding amethyst can push by piston
}
diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
index 2892e586146cbc560f0bcf4b9af6d0575cb0a82e..ebba87e53105ee68a6f030476a2def609e668fb3 100644
index 2034ca2edd3aff61d94416266e75402babd3e741..d7ae3a3a63a3eb3a95534c303ba87303cb96744d 100644
--- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
+++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
@@ -1157,7 +1157,7 @@ public abstract class BlockBehaviour implements FeatureElement {
@@ -1088,7 +1088,7 @@ public abstract class BlockBehaviour implements FeatureElement {
}
public PushReaction getPistonPushReaction() {

View File

@@ -1,30 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Sat, 25 Jun 2022 18:04:35 +0800
Subject: [PATCH] Spectator dont get Advancement
diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java
index 2694f899241ad8ce06d3bcba78550af5626561ce..f941e7add46e690e21d39111bed520df9156f154 100644
--- a/src/main/java/net/minecraft/server/PlayerAdvancements.java
+++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java
@@ -45,6 +45,7 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.players.PlayerList;
import net.minecraft.util.datafix.DataFixTypes;
import net.minecraft.world.level.GameRules;
+import net.minecraft.world.level.GameType;
import org.slf4j.Logger;
public class PlayerAdvancements {
@@ -226,6 +227,11 @@ public class PlayerAdvancements {
return false;
}
// Leaves end - bot can't get advancement
+ // Leaves start - spectator don't get advancement
+ if (top.leavesmc.leaves.LeavesConfig.spectatorDontGetAdvancement && player.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) {
+ return false;
+ }
+ // Leaves end - spectator don't get advancement
boolean flag = false;
AdvancementProgress advancementprogress = this.getOrStartProgress(advancement);
boolean flag1 = advancementprogress.isDone();

View File

@@ -0,0 +1,22 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Sat, 25 Jun 2022 18:04:35 +0800
Subject: [PATCH] Spectator dont get Advancement
diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java
index 8d2b26b2ec48727b12ddb1bede53aecb71f46feb..60ad7e71a3d4b9dc7bab2f961865eac76c0f68c1 100644
--- a/src/main/java/net/minecraft/server/PlayerAdvancements.java
+++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java
@@ -221,6 +221,11 @@ public class PlayerAdvancements {
}
public boolean award(AdvancementHolder advancement, String criterionName) {
+ // Leaves start - spectator don't get advancement
+ if (org.leavesmc.leaves.LeavesConfig.spectatorDontGetAdvancement && player.gameMode.getGameModeForPlayer() == net.minecraft.world.level.GameType.SPECTATOR) {
+ return false;
+ }
+ // Leaves end - spectator don't get advancement
// Leaves start - bot can't get advancement
if (player instanceof org.leavesmc.leaves.bot.ServerBot) {
return false;

View File

@@ -5,15 +5,15 @@ Subject: [PATCH] Stick can change ArmorStand arm status
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
index eadcebd7845ee716e33c0ac0544502da1a6c5941..575ef3806fc89b7492f5d6b6500e37c775dfaad8 100644
index a02ca704e98ef42f32c3c50b111ee3537f60bf7b..32fd9c3d79bb9e9e75b03750696425089e503dcb 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
@@ -387,6 +387,12 @@ public class ArmorStand extends LivingEntity {
@@ -393,6 +393,12 @@ public class ArmorStand extends LivingEntity {
return InteractionResult.SUCCESS;
}
} else {
+ // Leaves start - stick can change ArmorStand arm status
+ if (top.leavesmc.leaves.LeavesConfig.stickChangeArmorStandArmStatus && itemstack.is(Items.STICK) && player.isShiftKeyDown()) {
+ if (org.leavesmc.leaves.LeavesConfig.stickChangeArmorStandArmStatus && itemstack.is(Items.STICK) && player.isShiftKeyDown()) {
+ setShowArms(!isShowArms());
+ }
+ // Leaves end - stick can change ArmorStand arm status

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Fix tripwire update
diff --git a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
index efd8d77a441fd334ea4c09c5e31c6d946c1ae0b7..d9b3877257b31ca1b5acc4a47fbf5b993de69ae0 100644
index 76aca266d3f3222502ff4c196228f08fcd88c5f8..8614fad5b3df7a6030384b108b1689bf6b9f1209 100644
--- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
@@ -201,8 +201,9 @@ public class TripWireHookBlock extends Block {
@@ -202,8 +202,9 @@ public class TripWireHookBlock extends Block {
BlockState iblockdata4 = aiblockdata[l];
if (iblockdata4 != null) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] No chat sign
diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
index 1d78e8beacbc93ef2cd6beb418edca843f8a5429..6177f91146d2bc9dc1a066a24f84581cec0f53cd 100644
index e83f9517b31c5171b8dc75ab63a5bfe654221c84..19d973a0582c487617fafadd3df4857f8a1819a4 100644
--- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
+++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
@@ -317,7 +317,7 @@ public final class ChatProcessor {
@@ -13,12 +13,12 @@ index 1d78e8beacbc93ef2cd6beb418edca843f8a5429..6177f91146d2bc9dc1a066a24f84581c
private void sendToServer(final ChatType.Bound chatType, final @Nullable Function<Audience, net.minecraft.network.chat.Component> msgFunction) {
final PlayerChatMessage toConsoleMessage = msgFunction == null ? ChatProcessor.this.message : ChatProcessor.this.message.withUnsignedContent(msgFunction.apply(ChatProcessor.this.server.console));
- ChatProcessor.this.server.logChatMessage(toConsoleMessage.decoratedContent(), chatType, ChatProcessor.this.server.getPlayerList().verifyChatTrusted(toConsoleMessage) ? null : "Not Secure");
+ ChatProcessor.this.server.logChatMessage(toConsoleMessage.decoratedContent(), chatType, ChatProcessor.this.server.getPlayerList().verifyChatTrusted(toConsoleMessage) || top.leavesmc.leaves.LeavesConfig.noChatSign ? null : "Not Secure"); // Leaves - No Not Secure
+ ChatProcessor.this.server.logChatMessage(toConsoleMessage.decoratedContent(), chatType, ChatProcessor.this.server.getPlayerList().verifyChatTrusted(toConsoleMessage) || org.leavesmc.leaves.LeavesConfig.noChatSign ? null : "Not Secure"); // Leaves - No Not Secure
}
}
diff --git a/src/main/java/net/minecraft/commands/arguments/ArgumentSignatures.java b/src/main/java/net/minecraft/commands/arguments/ArgumentSignatures.java
index 4abd7babc3aa7268975386e7c2319f7961b0c3aa..07076b5212cf580390c212d00c76b50397195a02 100644
index 479e6e2aa88a22ef7f8fccb06add6806f5b71d9d..e6a6d09a64414ae6932e9bac338ce36043bd4b26 100644
--- a/src/main/java/net/minecraft/commands/arguments/ArgumentSignatures.java
+++ b/src/main/java/net/minecraft/commands/arguments/ArgumentSignatures.java
@@ -13,10 +13,17 @@ public record ArgumentSignatures(List<ArgumentSignatures.Entry> entries) {
@@ -33,68 +33,73 @@ index 4abd7babc3aa7268975386e7c2319f7961b0c3aa..07076b5212cf580390c212d00c76b503
+ private static List<ArgumentSignatures.Entry> readSign(FriendlyByteBuf buf) {
+ var entries = buf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 8), Entry::new);
+ return top.leavesmc.leaves.LeavesConfig.noChatSign ? List.of() : entries;
+ return org.leavesmc.leaves.LeavesConfig.noChatSign ? List.of() : entries;
+ }
+ // Leaves end - no chat sign
+
@Nullable
public MessageSignature get(String argumentName) {
for (ArgumentSignatures.Entry entry : this.entries) {
public void write(FriendlyByteBuf buf) {
buf.writeCollection(this.entries, (buf2, entry) -> entry.write(buf2));
}
diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
index b863249ff7e13cf4939c8961601f0564c62fd661..92df5611cdf4b3a8a82ed7194eba1d398a8cc9bd 100644
index aafeb9c61ddba6a8671f0238eda47b227619f1af..84a57cf6454db6b84aabc78017b64cc57c3a2070 100644
--- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java
+++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
@@ -143,6 +143,16 @@ public class FriendlyByteBuf extends ByteBuf {
@@ -129,6 +129,16 @@ public class FriendlyByteBuf extends ByteBuf {
// Paper end - Adventure; add max length parameter
DataResult<JsonElement> dataresult = codec.encodeStart(JsonOps.INSTANCE, value);
+ // Leaves start - no chat sign
+ if (codec == net.minecraft.network.protocol.status.ServerStatus.CODEC) {
+ JsonElement element = Util.getOrThrow(dataresult, string -> new EncoderException("Failed to encode: " + string + " " + value));
+ element.getAsJsonObject().addProperty("preventsChatReports", top.leavesmc.leaves.LeavesConfig.noChatSign);
+ JsonElement element = dataresult.getOrThrow(string -> new EncoderException("Failed to encode: " + string + " " + value));
+ element.getAsJsonObject().addProperty("preventsChatReports", org.leavesmc.leaves.LeavesConfig.noChatSign);
+
+ this.writeUtf(GSON.toJson(element));
+ return;
+ return;
+ }
+ // Leaves end - no chat sign
+
this.writeUtf(FriendlyByteBuf.GSON.toJson((JsonElement) Util.getOrThrow(dataresult, (s) -> {
return new EncoderException("Failed to encode: " + s + " " + value);
this.writeUtf(FriendlyByteBuf.GSON.toJson((JsonElement) dataresult.getOrThrow((s) -> {
return new EncoderException("Failed to encode: " + s + " " + String.valueOf(value));
})), maxLength); // Paper - Adventure; add max length parameter
diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java
index 831178218ddfaa1828c00d0662b251d11bb29ff5..865eda0ea24e86b053ea69714b55130af94e1c50 100644
index 07df3299f1d1aa5506e1f6f146347d53e0278d9c..fb441424c03d547cdf4dcfcde5e60d8e4d6a4f59 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java
@@ -9,10 +9,18 @@ import net.minecraft.network.protocol.Packet;
@@ -15,8 +15,9 @@ public record ServerboundChatPacket(String message, Instant timeStamp, long salt
ServerboundChatPacket::write, ServerboundChatPacket::new
);
public record ServerboundChatPacket(String message, Instant timeStamp, long salt, @Nullable MessageSignature signature, LastSeenMessages.Update lastSeenMessages)
implements Packet<ServerGamePacketListener> {
+ // Leaves start - no chat sign
public ServerboundChatPacket(FriendlyByteBuf buf) {
private ServerboundChatPacket(FriendlyByteBuf buf) {
- this(buf.readUtf(256), buf.readInstant(), buf.readLong(), buf.readNullable(MessageSignature::read), new LastSeenMessages.Update(buf));
+ this(buf.readUtf(256), buf.readInstant(), buf.readLong(), buf.readNullable(ServerboundChatPacket::readSign), new LastSeenMessages.Update(buf));
}
private void write(FriendlyByteBuf buf) {
@@ -27,6 +28,13 @@ public record ServerboundChatPacket(String message, Instant timeStamp, long salt
this.lastSeenMessages.write(buf);
}
+ private static MessageSignature readSign(FriendlyByteBuf buf) {
+ byte[] bs = new byte[256];
+ buf.readBytes(bs);
+ return top.leavesmc.leaves.LeavesConfig.noChatSign ? null : new MessageSignature(bs);
+ return org.leavesmc.leaves.LeavesConfig.noChatSign ? null : new MessageSignature(bs);
+ }
+ // Leaves end - no chat sign
+
@Override
public void write(FriendlyByteBuf buf) {
buf.writeUtf(this.message, 256);
public PacketType<ServerboundChatPacket> type() {
return GamePacketTypes.SERVERBOUND_CHAT;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java
index 9d6db4a378036559efab91c8b7dcf2a6b0c2cce6..2c349dc502ce275a8215766933f4855f1c7bd726 100644
index 5705cb920084b775cce4b361683b32c6b6e003ed..cbff868303d751d09b68f431c78bb13b4734f48f 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java
@@ -16,6 +16,11 @@ public record ServerboundChatSessionUpdatePacket(RemoteChatSession.Data chatSess
@@ -26,6 +26,11 @@ public record ServerboundChatSessionUpdatePacket(RemoteChatSession.Data chatSess
@Override
public void handle(ServerGamePacketListener listener) {
+ // Leaves start - no chat report
+ if (top.leavesmc.leaves.LeavesConfig.noChatSign) {
+ if (org.leavesmc.leaves.LeavesConfig.noChatSign) {
+ return;
+ }
+ // Leaves end - no chat report
@@ -102,44 +107,41 @@ index 9d6db4a378036559efab91c8b7dcf2a6b0c2cce6..2c349dc502ce275a8215766933f4855f
}
}
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index 60e5129b42c430ba6b9776bf63d0db608552b50f..6725bbf2d966ae900e9b5efa619875c386bb9526 100644
index 437f714fc1b38f0040b57cef94a76faa88f1c495..f240a9d90ec469a99d3d8b82cfa3fcb5d0e78057 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -643,7 +643,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -663,7 +663,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
// Paper start - Add setting for proxy online mode status
return dedicatedserverproperties.enforceSecureProfile
&& io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode()
- && this.services.canValidateProfileKeys();
+ && this.services.canValidateProfileKeys() && !top.leavesmc.leaves.LeavesConfig.noChatSign; // Leaves - no chat sign
+ && this.services.canValidateProfileKeys() && !org.leavesmc.leaves.LeavesConfig.noChatSign; // Leaves - no chat sign
// Paper end - Add setting for proxy online mode status
}
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index 8aa1337b420e1c9fbf51f951f14a63d89f61d3f4..19db81d87d1e0eb9716ceaf88dc407db10e48f5f 100644
index 82bf29bb3096797801f768c2b631d8b6cae8f761..c02f073e6fa16a05927154462af694731c24347b 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -239,10 +239,27 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -295,10 +295,24 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
}
public void send(Packet<?> packet) {
+ // Leaves start - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket
+ if (top.leavesmc.leaves.LeavesConfig.noChatSign) {
+ if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat) {
+ packet = new net.minecraft.network.protocol.game.ClientboundSystemChatPacket(chat.chatType().resolve(this.player.level().registryAccess())
+ .get().decorate(chat.unsignedContent() != null ? chat.unsignedContent()
+ : Component.literal(chat.body().content())), false);
+ // Leaves start - rebuild ClientboundPlayerChatPacket
+ if (org.leavesmc.leaves.LeavesConfig.noChatSign) {
+ if (this instanceof ServerGamePacketListenerImpl && packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat) {
+ packet = new net.minecraft.network.protocol.game.ClientboundSystemChatPacket(chat.chatType().decorate(chat.unsignedContent() != null ? chat.unsignedContent() : Component.literal(chat.body().content())), false);
+ }
+ }
+ // Leaves end - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket
+ // Leaves end - rebuild ClientboundPlayerChatPacket
this.send(packet, (PacketSendListener) null);
}
public void send(Packet<?> packet, @Nullable PacketSendListener callbacks) {
+ // Leaves start - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket
+ if (top.leavesmc.leaves.LeavesConfig.noChatSign) {
+ if (org.leavesmc.leaves.LeavesConfig.noChatSign) {
+ if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket chat && callbacks != null) {
+ this.send(chat);
+ return;
+ callbacks = null;
+ }
+ }
+ // Leaves end - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket
@@ -147,15 +149,15 @@ index 8aa1337b420e1c9fbf51f951f14a63d89f61d3f4..19db81d87d1e0eb9716ceaf88dc407db
if (packet == null || this.processedDisconnect) { // Spigot
return;
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 44b354431a9c21166211e6d1de1ce573b9f7253c..c1a50cedca731c08f793ba3eba4210bc26824e16 100644
index ef719bf410912b24d57de422d1fa3fb2bcef5105..00809b615f65b2f4985856673430d8ba68525765 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1489,7 +1489,7 @@ public abstract class PlayerList {
@@ -1488,7 +1488,7 @@ public abstract class PlayerList {
}
public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public
- return message.hasSignature() && !message.hasExpiredServer(Instant.now());
+ return top.leavesmc.leaves.LeavesConfig.noChatSign || (message.hasSignature() && !message.hasExpiredServer(Instant.now())); // Leaves - No Not Secure
+ return org.leavesmc.leaves.LeavesConfig.noChatSign || (message.hasSignature() && !message.hasExpiredServer(Instant.now())); // Leaves - No Not Secure
}
// CraftBukkit start

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Dont send useless entity packets
This patch is Powered by Purpur(https://github.com/PurpurMC/Purpur)
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
index 529ab44baaf573b97cf7e89560c548642733188f..b2183c298b0c68daee41238735621ff002338a68 100644
index f16a69775332a08ed0e87d27acd0fc959359694c..770c51528e5a31e2738fbce5d63d2ea3f11186f8 100644
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
@@ -197,6 +197,7 @@ public class ServerEntity {
@@ -204,6 +204,7 @@ public class ServerEntity {
flag4 = true;
flag5 = true;
}
@@ -17,19 +17,19 @@ index 529ab44baaf573b97cf7e89560c548642733188f..b2183c298b0c68daee41238735621ff0
} else {
this.wasOnGround = this.entity.onGround();
this.teleportDelay = 0;
@@ -204,6 +205,11 @@ public class ServerEntity {
@@ -211,6 +212,11 @@ public class ServerEntity {
flag4 = true;
flag5 = true;
}
+ // Leaves start - dont send useless entity packets
+ if (top.leavesmc.leaves.LeavesConfig.dontSendUselessEntityPackets && isUselessPacket(packet1)) {
+ if (org.leavesmc.leaves.LeavesConfig.dontSendUselessEntityPackets && isUselessPacket(packet1)) {
+ packet1 = null;
+ }
+ // Leaves end - dont send useless entity packets
}
if ((this.trackDelta || this.entity.hasImpulse || this.entity instanceof LivingEntity && ((LivingEntity) this.entity).isFallFlying()) && this.tickCount > 0) {
@@ -276,6 +282,21 @@ public class ServerEntity {
@@ -291,6 +297,21 @@ public class ServerEntity {
});
}

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Optimize entity coordinate key
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
index e028353e0261310afc42ca0454b723d9f1ffc131..f97258893cb774294e7b43c2d31c9e59ff8d157b 100644
index 1d6b3fe2ce240af4ede61588795456b046eee6c9..21847dfde06ded5944699ca30a4ec9c2d3511555 100644
--- a/src/main/java/io/papermc/paper/util/MCUtil.java
+++ b/src/main/java/io/papermc/paper/util/MCUtil.java
@@ -215,7 +215,13 @@ public final class MCUtil {
@@ -15,7 +15,7 @@ index e028353e0261310afc42ca0454b723d9f1ffc131..f97258893cb774294e7b43c2d31c9e59
public static long getCoordinateKey(final Entity entity) {
- return ((long)(MCUtil.fastFloor(entity.getZ()) >> 4) << 32) | ((MCUtil.fastFloor(entity.getX()) >> 4) & 0xFFFFFFFFL);
+ // Leaves start - eliminate double -> long cast in hotpath
+ if (top.leavesmc.leaves.LeavesConfig.optimizeEntityCoordinateKey) {
+ if (org.leavesmc.leaves.LeavesConfig.optimizeEntityCoordinateKey) {
+ return ((long)(entity.blockPosition.getZ() >> 4) << 32) | ((entity.blockPosition.getX() >> 4) & 0xFFFFFFFFL);
+ } else {
+ return ((long)(MCUtil.fastFloor(entity.getZ()) >> 4) << 32) | ((MCUtil.fastFloor(entity.getX()) >> 4) & 0xFFFFFFFFL);
@@ -25,10 +25,10 @@ index e028353e0261310afc42ca0454b723d9f1ffc131..f97258893cb774294e7b43c2d31c9e59
public static long getCoordinateKey(final ChunkPos pair) {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 0a8ad5a68e161e6991edafe31ceeeecc10ea8dab..68a8aca051df609747b25ef89e5217932edbec51 100644
index 082b484df1bd3d6a87413e3ab9a07a8f5401c65d..e87a60ca43fe080209620e11833099e7ea9164b5 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -309,7 +309,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -312,7 +312,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public double yo;
public double zo;
private Vec3 position;

View File

@@ -6,19 +6,19 @@ Subject: [PATCH] Optimize suffocation
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 5a453688f9f9f48e5952b00382bbca0632995022..e598a29f7285d961262ff2a86142e004f34520ef 100644
index d106491e5ca187cf62758cbd33bab575ccbc3bec..9755d85c090d336364f041d32f11ea7c5041945e 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -413,7 +413,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -426,7 +426,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
boolean flag = this instanceof net.minecraft.world.entity.player.Player;
if (!this.level().isClientSide) {
- if (this.isInWall()) {
+ if ((!top.leavesmc.leaves.LeavesConfig.enableSuffocationOptimization || this instanceof WitherBoss || (tickCount % 10 == 0 && couldPossiblyBeHurt(1.0F))) && this.isInWall()) { // Leaves - optimize suffocation
+ if ((!org.leavesmc.leaves.LeavesConfig.enableSuffocationOptimization || this instanceof WitherBoss || (tickCount % 10 == 0 && couldPossiblyBeHurt(1.0F))) && this.isInWall()) { // Leaves - optimize suffocation
this.hurt(this.damageSources().inWall(), 1.0F);
} else if (flag && !this.level().getWorldBorder().isWithinBounds(this.getBoundingBox())) {
double d0 = this.level().getWorldBorder().getDistanceToBorder(this) + this.level().getWorldBorder().getDamageSafeZone();
@@ -1417,6 +1417,15 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -1430,6 +1430,15 @@ public abstract class LivingEntity extends Entity implements Attackable {
return this.getHealth() <= 0.0F;
}

View File

@@ -6,10 +6,18 @@ Subject: [PATCH] Only check for spooky season once an hour
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
index 44fa2d4f90389f5526746bd94a2450c03340bd0b..3f51df1325f8cec5bd979cc4896a091c4157667d 100644
index dc27ddf5131e7398a5390a5187261d4c7fb6ccaa..8237f252cf60cb0ed85f6eb61e2bdb5f8e3cefef 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -241,13 +241,30 @@ public class Bat extends AmbientCreature {
@@ -215,6 +215,7 @@ public class Bat extends AmbientCreature {
super.readAdditionalSaveData(nbt);
this.entityData.set(Bat.DATA_ID_FLAGS, nbt.getByte("BatFlags"));
}
+ // Leaves end - only check for spooky season once an hour
@Override
public void addAdditionalSaveData(CompoundTag nbt) {
@@ -239,12 +240,28 @@ public class Bat extends AmbientCreature {
}
}
@@ -21,7 +29,7 @@ index 44fa2d4f90389f5526746bd94a2450c03340bd0b..3f51df1325f8cec5bd979cc4896a091c
- LocalDate localdate = LocalDate.now();
- int i = localdate.get(ChronoField.DAY_OF_MONTH);
- int j = localdate.get(ChronoField.MONTH_OF_YEAR);
+ if (top.leavesmc.leaves.LeavesConfig.checkSpookySeasonOnceAnHour) {
+ if (org.leavesmc.leaves.LeavesConfig.checkSpookySeasonOnceAnHour) {
+ if (net.minecraft.server.MinecraftServer.currentTick - lastSpookyCheck > ONE_HOUR) {
+ LocalDate localdate = LocalDate.now();
+ int i = localdate.get(ChronoField.DAY_OF_MONTH);
@@ -40,7 +48,5 @@ index 44fa2d4f90389f5526746bd94a2450c03340bd0b..3f51df1325f8cec5bd979cc4896a091c
+ return j == 10 && i >= 20 || j == 11 && i <= 3;
+ }
}
+ // Leaves end - only check for spooky season once an hour
@Override
protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) {
private void setupAnimationStates() {

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Move ThreadUnsafeRandom Initialization
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index cda7db7a3544ae36fbd692884a5fd92ac670bdcd..bfbb509e09dd5099b9930f3d07383d59620d0364 100644
index c93d0fbb921309a63c21ba7775fdf44aaa7985c4..84472442e0e68c22c4ebeaaf980aee1e8a234d81 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -965,7 +965,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -971,7 +971,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
// Paper start - optimise random block ticking
private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos();
@@ -19,10 +19,10 @@ index cda7db7a3544ae36fbd692884a5fd92ac670bdcd..bfbb509e09dd5099b9930f3d07383d59
public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 998f37b01ae67807757a96eb512a695ed5e94700..377c517d63ba367b51c6eba86eac0544a9a6b2bd 100644
index 34654d0f7d5c159ceaf76b327a3f86bd4f82c175..d4854e404b111b0cb936539b4ce95890b22a6f9d 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -208,6 +208,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -212,6 +212,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
public abstract ResourceKey<LevelStem> getTypeKey();

View File

@@ -6,15 +6,15 @@ Subject: [PATCH] Optimize random calls in chunk ticking
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index 2a19a45e9c7ac4646ce89c566b5fec21281c45b9..a3db45d411772d71ba46632633e935f2251bcfda 100644
index 256ad83f10e6df5d32959d38eeabc126b9b7b190..db41ee04b5dd3e162830342e4b1f2b457ffb7fed 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -495,6 +495,11 @@ public class ServerChunkCache extends ChunkSource {
@@ -494,6 +494,11 @@ public class ServerChunkCache extends ChunkSource {
ProfilerFiller gameprofilerfiller = this.level.getProfiler();
gameprofilerfiller.push("pollingChunks");
+ // Leaves start - reset ice & snow tick random
+ if (top.leavesmc.leaves.LeavesConfig.optimizeChunkTicking) {
+ if (org.leavesmc.leaves.LeavesConfig.optimizeChunkTicking) {
+ this.level.resetIceAndSnowTick();
+ }
+ // Leaves end - reset ice & snow tick random
@@ -22,10 +22,10 @@ index 2a19a45e9c7ac4646ce89c566b5fec21281c45b9..a3db45d411772d71ba46632633e935f2
// Paper - optimise chunk tick iteration
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index c9e578cd3d941fa343cc957805df882b51e0761f..bb5833265661bfdef0808745c65ec04cc9240519 100644
index 84472442e0e68c22c4ebeaaf980aee1e8a234d81..38fcba055839fc1b5522e8a88bdaa63d6f24780d 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -968,6 +968,13 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -974,6 +974,13 @@ public class ServerLevel extends Level implements WorldGenLevel {
// private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); // Leaves - moved to super
// Paper end
@@ -39,20 +39,20 @@ index c9e578cd3d941fa343cc957805df882b51e0761f..bb5833265661bfdef0808745c65ec04c
public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
ChunkPos chunkcoordintpair = chunk.getPos();
boolean flag = this.isRaining();
@@ -978,7 +985,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -984,7 +991,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
gameprofilerfiller.push("thunder");
final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change
- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder
+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && (top.leavesmc.leaves.LeavesConfig.optimizeChunkTicking ? chunk.shouldDoLightning(this.random) : this.random.nextInt(this.spigotConfig.thunderChance) == 0)) { // Spigot // Paper - Option to disable thunder // Leaves - replace random with shouldDoLightning
+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && (org.leavesmc.leaves.LeavesConfig.optimizeChunkTicking ? chunk.shouldDoLightning(this.random) : this.random.nextInt(this.spigotConfig.thunderChance) == 0)) { // Spigot // Paper - Option to disable thunder // Leaves - replace random with shouldDoLightning
blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper
if (this.isRainingAt(blockposition)) {
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
index 44b9aaa534a4683b2924a2aa61a92218f9c846b3..ae746ebde8ba2aded37bc1c9b3c4acdfd5f9def0 100644
index 96490c90697ad42565c465a5ed1d956fc1c73f73..8b4f58dae2dba4c661dbd3de0ef65cdbf3bb861e 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -86,6 +86,18 @@ public class LevelChunk extends ChunkAccess {
@@ -88,6 +88,18 @@ public class LevelChunk extends ChunkAccess {
private final LevelChunkTicks<Fluid> fluidTicks;
public volatile FullChunkStatus chunkStatus = FullChunkStatus.INACCESSIBLE; // Paper - rewrite chunk system
@@ -71,13 +71,13 @@ index 44b9aaa534a4683b2924a2aa61a92218f9c846b3..ae746ebde8ba2aded37bc1c9b3c4acdf
public LevelChunk(Level world, ChunkPos pos) {
this(world, pos, UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, (LevelChunkSection[]) null, (LevelChunk.PostLoadProcessor) null, (BlendingData) null);
}
@@ -109,6 +121,12 @@ public class LevelChunk extends ChunkAccess {
@@ -111,6 +123,12 @@ public class LevelChunk extends ChunkAccess {
this.postLoad = entityLoader;
this.blockTicks = blockTickScheduler;
this.fluidTicks = fluidTickScheduler;
+
+ // Leaves start - initialize lightning tick
+ if (top.leavesmc.leaves.LeavesConfig.optimizeChunkTicking) {
+ if (org.leavesmc.leaves.LeavesConfig.optimizeChunkTicking) {
+ this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1;
+ }
+ // Leaves end - initialize lightning tick

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Early return optimization for target finding
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
index d2f0c3b26d4beedb49d86e0242d843590d469d02..a7f78a2c611fc79fd3a1d221be1ec54992d463c1 100644
index d2f0c3b26d4beedb49d86e0242d843590d469d02..0f06374f81f8cc727955c661626dac33d7f7b210 100644
--- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
+++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
@@ -76,9 +76,17 @@ public class TargetingConditions {
@@ -15,7 +15,7 @@ index d2f0c3b26d4beedb49d86e0242d843590d469d02..a7f78a2c611fc79fd3a1d221be1ec549
if (this.range > 0.0) {
+ // Leaves start - check range before getting visibility
+ double f = baseEntity.distanceToSqr(targetEntity.getX(), targetEntity.getY(), targetEntity.getZ());
+ if (top.leavesmc.leaves.LeavesConfig.entityTargetFindingOptimization) {
+ if (org.leavesmc.leaves.LeavesConfig.entityTargetFindingOptimization) {
+ double followRangeRaw = this.useFollowRange ? this.getFollowRange(baseEntity) : this.range;
+ if (f > followRangeRaw * followRangeRaw) { // the actual follow range will always be this value or smaller, so if the distance is larger then it never will return true after getting invis
+ return false;

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Use thread unsafe random for mob spawning
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
index 140c9e6c7bd5e2e52c586ab6954edbc790e6e02b..93fbf20c6e5ded31570415c30b837f5dc0dd5d42 100644
index 189a6bd4967aba72e12170e091dbb5b779e752a0..9c72271382fa0b6be5f38b45577fb1ae81ce80a3 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -425,12 +425,21 @@ public final class NaturalSpawner {
@@ -408,12 +408,21 @@ public final class NaturalSpawner {
private static BlockPos getRandomPosWithin(Level world, LevelChunk chunk) {
ChunkPos chunkcoordintpair = chunk.getPos();
@@ -20,7 +20,7 @@ index 140c9e6c7bd5e2e52c586ab6954edbc790e6e02b..93fbf20c6e5ded31570415c30b837f5d
-
- return new BlockPos(i, l, j);
+ // Leaves start - use thread unsafe random
+ if (top.leavesmc.leaves.LeavesConfig.useMoreThreadUnsafeRandom) {
+ if (org.leavesmc.leaves.LeavesConfig.useMoreThreadUnsafeRandom) {
+ int i = chunkcoordintpair.getMinBlockX() + world.getThreadUnsafeRandom().nextInt(16);
+ int j = chunkcoordintpair.getMinBlockZ() + world.getThreadUnsafeRandom().nextInt(16);
+ int k = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, j) + 1;

View File

@@ -6,15 +6,15 @@ Subject: [PATCH] Config to disable method profiler
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 76a9548becd0a1aeb8889f1e4060a2ac0f546682..e7ce8db1391f96ee648f72b0c8680a24569de334 100644
index d8ac4b133c52c46494518a93884f715108dc8f17..35a67136f5e22c5f9b65841fb7c10309e0b0e1c2 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -2427,6 +2427,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2533,6 +2533,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
public ProfilerFiller getProfiler() {
+ // Leaves start - disable method profiler
+ if (top.leavesmc.leaves.LeavesConfig.disableMethodProfiler) {
+ if (org.leavesmc.leaves.LeavesConfig.disableMethodProfiler) {
+ return net.minecraft.util.profiling.InactiveProfiler.INSTANCE;
+ }
+ // Leaves end - disable method profiler
@@ -22,15 +22,15 @@ index 76a9548becd0a1aeb8889f1e4060a2ac0f546682..e7ce8db1391f96ee648f72b0c8680a24
}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 377c517d63ba367b51c6eba86eac0544a9a6b2bd..34b6e04c2bfb3a44980906e786c260e066ad4020 100644
index d4854e404b111b0cb936539b4ce95890b22a6f9d..68d065ff98141176e0c4ed43ea4d7a3531fa62da 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1791,6 +1791,11 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -1790,6 +1790,11 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
public ProfilerFiller getProfiler() {
+ // Leaves start - disable method profiler
+ if (top.leavesmc.leaves.LeavesConfig.disableMethodProfiler) {
+ if (org.leavesmc.leaves.LeavesConfig.disableMethodProfiler) {
+ return net.minecraft.util.profiling.InactiveProfiler.INSTANCE;
+ }
+ // Leaves end - disable method profiler

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Throttle goal selector during inactive ticking
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 2439f8d48daca7329049436414f06a36b4b79029..9fa6b43768ad5608db9232d464a455eca453b7fd 100644
index e89f9c3e887601d8461eb967ae0bf582b672f631..22a5e441cd62447e4ac95a8b048bd10942743367 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -222,11 +222,13 @@ public abstract class Mob extends LivingEntity implements Targeting {
@@ -237,11 +237,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
return this.lookControl;
}
@@ -19,7 +19,7 @@ index 2439f8d48daca7329049436414f06a36b4b79029..9fa6b43768ad5608db9232d464a455ec
public void inactiveTick() {
super.inactiveTick();
- if (this.goalSelector.inactiveTick()) {
+ boolean isThrottled = top.leavesmc.leaves.LeavesConfig.throttleInactiveGoalSelectorTick && inactiveTickDisableCounter++ % 20 != 0; // Leaves - throttle inactive goal selector ticking
+ boolean isThrottled = org.leavesmc.leaves.LeavesConfig.throttleInactiveGoalSelectorTick && inactiveTickDisableCounter++ % 20 != 0; // Leaves - throttle inactive goal selector ticking
+ if (this.goalSelector.inactiveTick() && !isThrottled) { // Leaves - throttle inactive goal selector ticking
this.goalSelector.tick();
}

View File

@@ -6,14 +6,14 @@ Subject: [PATCH] Reduce entity allocations
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
index b99a080ab27e24d8131fda931ca70d6d271bb01c..a2a1de65dfd420185ed0e52e28c7000fde3dd959 100644
index 9ef8f014af332da129bfcd3370da983ec035ecc6..1e5f018ea357c3431d5aabbe435ce7d922f5c3bf 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
@@ -23,9 +23,11 @@ public class AttributeMap {
private final Map<Attribute, AttributeInstance> attributes = Maps.newHashMap();
private final Set<AttributeInstance> dirtyAttributes = Sets.newHashSet();
@@ -22,9 +22,11 @@ public class AttributeMap {
private final Map<Holder<Attribute>, AttributeInstance> attributes = new Object2ObjectOpenHashMap<>();
private final Set<AttributeInstance> dirtyAttributes = new ObjectOpenHashSet<>();
private final AttributeSupplier supplier;
+ private final java.util.function.Function<Attribute, AttributeInstance> createInstance; // Leaves - reduce entity allocations
+ private final java.util.function.Function<Holder<Attribute>, AttributeInstance> createInstance; // Leaves - reduce entity allocations
public AttributeMap(AttributeSupplier defaultAttributes) {
this.supplier = defaultAttributes;
@@ -21,13 +21,13 @@ index b99a080ab27e24d8131fda931ca70d6d271bb01c..a2a1de65dfd420185ed0e52e28c7000f
}
private void onAttributeModified(AttributeInstance instance) {
@@ -44,7 +46,13 @@ public class AttributeMap {
@@ -43,7 +45,13 @@ public class AttributeMap {
@Nullable
public AttributeInstance getInstance(Attribute attribute) {
public AttributeInstance getInstance(Holder<Attribute> attribute) {
- return this.attributes.computeIfAbsent(attribute, attributex -> this.supplier.createInstance(this::onAttributeModified, attributex));
+ // Leaves start - cache lambda, as for some reason java allocates it anyways
+ if (top.leavesmc.leaves.LeavesConfig.reduceEntityAllocations) {
+ if (org.leavesmc.leaves.LeavesConfig.reduceEntityAllocations) {
+ return this.attributes.computeIfAbsent(attribute, this.createInstance);
+ } else {
+ return this.attributes.computeIfAbsent(attribute, attributex -> this.supplier.createInstance(this::onAttributeModified, attributex));
@@ -35,4 +35,4 @@ index b99a080ab27e24d8131fda931ca70d6d271bb01c..a2a1de65dfd420185ed0e52e28c7000f
+ // Leaves end - cache lambda, as for some reason java allocates it anyways
}
@Nullable
public boolean hasAttribute(Holder<Attribute> attribute) {

View File

@@ -6,16 +6,16 @@ Subject: [PATCH] Remove lambda from ticking guard
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index bb5833265661bfdef0808745c65ec04cc9240519..be185196d2d4ce1f1dd90da8a46b014127e591a0 100644
index 38fcba055839fc1b5522e8a88bdaa63d6f24780d..63652c3011c48c461c1b5be1889847b2f065e34c 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -902,7 +902,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -908,7 +908,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
gameprofilerfiller.push("tick");
- this.guardEntityTick(this::tickNonPassenger, entity);
+ // Leaves start - copied from this.guardEntityTick
+ if (top.leavesmc.leaves.LeavesConfig.removeTickGuardLambda) {
+ if (org.leavesmc.leaves.LeavesConfig.removeTickGuardLambda) {
+ try {
+ this.tickNonPassenger(entity); // Leaves - changed
+ MinecraftServer.getServer().executeMidTickTasks(); // Tuinity - execute chunk tasks mid tick

View File

@@ -6,22 +6,42 @@ Subject: [PATCH] Remove iterators from inventory contains
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/player/Inventory.java b/src/main/java/net/minecraft/world/entity/player/Inventory.java
index 309acf7bd07e38043aa81e0e686edba1136bd04c..d2f6027056af9d2816542f4e3d9e278d9ec2c9b4 100644
index ca7fbe4f8c1e1d2fb90095aa35be4dda3029c23e..3c8f35f92ed7e9518d676087f82d1e4da963b779 100644
--- a/src/main/java/net/minecraft/world/entity/player/Inventory.java
+++ b/src/main/java/net/minecraft/world/entity/player/Inventory.java
@@ -687,21 +687,35 @@ public class Inventory implements Container, Nameable {
@@ -1,9 +1,11 @@
package net.minecraft.world.entity.player;
import com.google.common.collect.ImmutableList;
+
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;
+
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
import net.minecraft.ReportedException;
@@ -24,6 +26,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.state.BlockState;
// CraftBukkit start
import java.util.ArrayList;
+
import org.bukkit.Location;
import org.bukkit.craftbukkit.entity.CraftHumanEntity;
import org.bukkit.entity.HumanEntity;
@@ -643,17 +646,31 @@ public class Inventory implements Container, Nameable {
}
public boolean contains(ItemStack stack) {
- Iterator iterator = this.compartments.iterator();
+ // Leaves start - don't allocate iterators
+ if (top.leavesmc.leaves.LeavesConfig.removeInventoryContainsIterators) {
+ if (org.leavesmc.leaves.LeavesConfig.removeInventoryContainsIterators) {
+ for (int i = 0; i < this.compartments.size(); i++) {
+ List<ItemStack> list = this.compartments.get(i);
+ for (int j = 0; j < list.size(); j++) {
+ ItemStack itemstack1 = list.get(j);
+
+ if (!itemstack1.isEmpty() && ItemStack.isSameItemSameTags(itemstack1, stack)) {
+ if (!itemstack1.isEmpty() && ItemStack.isSameItemSameComponents(itemstack1, stack)) {
+ return true;
+ }
+ }
@@ -41,14 +61,18 @@ index 309acf7bd07e38043aa81e0e686edba1136bd04c..d2f6027056af9d2816542f4e3d9e278d
+ while (iterator1.hasNext()) {
+ ItemStack itemstack1 = (ItemStack) iterator1.next();
- if (!itemstack1.isEmpty() && ItemStack.isSameItemSameTags(itemstack1, stack)) {
- if (!itemstack1.isEmpty() && ItemStack.isSameItemSameComponents(itemstack1, stack)) {
- return true;
+ if (!itemstack1.isEmpty() && ItemStack.isSameItemSameTags(itemstack1, stack)) {
+ if (!itemstack1.isEmpty() && ItemStack.isSameItemSameComponents(itemstack1, stack)) {
+ return true;
+ }
}
}
}
@@ -695,7 +712,7 @@ public class Inventory implements Container, Nameable {
}
}
}
-
+ // Leaves end - don't allocate iterators
return false;

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Remove streams and iterators from range check
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 85be9376fe30f18fe4fea437955f1a60c5c3f05a..c32002aca09ec20aadfe71c2626672e75255a31a 100644
index d1a42800e069fa89d3f3fb4dcb9948d1ac3ea577..da65f980f2145ea03341911ce75f7e61b358c9d7 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1423,19 +1423,45 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1451,19 +1451,45 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
return ChunkMap.this.level.getServer().getScaledTrackingDistance(initialDistance);
}
@@ -37,7 +37,7 @@ index 85be9376fe30f18fe4fea437955f1a60c5c3f05a..c32002aca09ec20aadfe71c2626672e7
int i = this.range;
- Iterator iterator = this.entity.getIndirectPassengers().iterator();
+ // Leaves start - remove iterators and streams
+ if (top.leavesmc.leaves.LeavesConfig.removeRangeCheckStreams) {
+ if (org.leavesmc.leaves.LeavesConfig.removeRangeCheckStreams) {
+ i = getHighestRange(this.entity, i);
+ } else {
+ Iterator iterator = this.entity.getIndirectPassengers().iterator();

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Cache climbing check for activation
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index d5c676c629be25c4400c60a22125715827e9cf81..15c8e9214b7df1cf1e9252a17b7acfc080e547a3 100644
index 9755d85c090d336364f041d32f11ea7c5041945e..8e5bfb7579b528d68b270665c02588bfa39643a3 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2032,6 +2032,22 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -2058,6 +2058,22 @@ public abstract class LivingEntity extends Entity implements Attackable {
return this.lastClimbablePos;
}
@@ -18,7 +18,7 @@ index d5c676c629be25c4400c60a22125715827e9cf81..15c8e9214b7df1cf1e9252a17b7acfc0
+ private BlockPos lastClimbingPosition = null;
+
+ public boolean onClimableCached() {
+ if (!top.leavesmc.leaves.LeavesConfig.cacheClimbCheck) {
+ if (!org.leavesmc.leaves.LeavesConfig.cacheClimbCheck) {
+ return this.onClimbable();
+ }
+ if (!this.blockPosition().equals(this.lastClimbingPosition)) {

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Use aging cache for biome temperatures
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/level/biome/Biome.java b/src/main/java/net/minecraft/world/level/biome/Biome.java
index 64076a452a315090d299a7a58a43fd3b5c1b4e0a..0071e220624d636aec5f1477b8338c4d6b4f8918 100644
index 15f82c9a1ce1fef2e951d1b3c7a65e64b82061ea..0e318fd031ddb2ec95fe9479f7ad6b28171d1797 100644
--- a/src/main/java/net/minecraft/world/level/biome/Biome.java
+++ b/src/main/java/net/minecraft/world/level/biome/Biome.java
@@ -63,7 +63,17 @@ public final class Biome {
@@ -16,7 +16,7 @@ index 64076a452a315090d299a7a58a43fd3b5c1b4e0a..0071e220624d636aec5f1477b8338c4d
- private final ThreadLocal<Long2FloatLinkedOpenHashMap> temperatureCache = ThreadLocal.withInitial(() -> Util.make(() -> {
+ // Leaves start - use our cache
+ private final ThreadLocal<Long2FloatLinkedOpenHashMap> temperatureCache;
+ private final ThreadLocal<top.leavesmc.leaves.structs.Long2FloatAgingCache> temperatureAgingCache;
+ private final ThreadLocal<org.leavesmc.leaves.structs.Long2FloatAgingCache> temperatureAgingCache;
+
+ Biome(Biome.ClimateSettings weather, BiomeSpecialEffects effects, BiomeGenerationSettings generationSettings, MobSpawnSettings spawnSettings) {
+ this.climateSettings = weather;
@@ -40,7 +40,7 @@ index 64076a452a315090d299a7a58a43fd3b5c1b4e0a..0071e220624d636aec5f1477b8338c4d
- this.specialEffects = effects;
+ temperatureAgingCache = ThreadLocal.withInitial(() -> {
+ return Util.make(() -> {
+ return new top.leavesmc.leaves.structs.Long2FloatAgingCache(TEMPERATURE_CACHE_SIZE);
+ return new org.leavesmc.leaves.structs.Long2FloatAgingCache(TEMPERATURE_CACHE_SIZE);
+ });
+ });
}
@@ -57,8 +57,8 @@ index 64076a452a315090d299a7a58a43fd3b5c1b4e0a..0071e220624d636aec5f1477b8338c4d
- if (!Float.isNaN(f)) {
- return f;
+ // Leaves start - use our cache
+ if (top.leavesmc.leaves.LeavesConfig.biomeTemperaturesUseAgingCache) {
+ top.leavesmc.leaves.structs.Long2FloatAgingCache cache = this.temperatureAgingCache.get();
+ if (org.leavesmc.leaves.LeavesConfig.biomeTemperaturesUseAgingCache) {
+ org.leavesmc.leaves.structs.Long2FloatAgingCache cache = this.temperatureAgingCache.get();
+ float f = cache.getValue(l);
+ if (!Float.isNaN(f)) {
+ return f;
@@ -91,13 +91,13 @@ index 64076a452a315090d299a7a58a43fd3b5c1b4e0a..0071e220624d636aec5f1477b8338c4d
}
public boolean shouldFreeze(LevelReader world, BlockPos blockPos) {
diff --git a/src/main/java/top/leavesmc/leaves/structs/Long2FloatAgingCache.java b/src/main/java/top/leavesmc/leaves/structs/Long2FloatAgingCache.java
diff --git a/src/main/java/org/leavesmc/leaves/structs/Long2FloatAgingCache.java b/src/main/java/org/leavesmc/leaves/structs/Long2FloatAgingCache.java
new file mode 100644
index 0000000000000000000000000000000000000000..26f9d4d9099739d6ddc159184a20e2ae9abde5cd
index 0000000000000000000000000000000000000000..cd8b1bbfe553c28b75ea92d344364650756e9fdd
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/structs/Long2FloatAgingCache.java
+++ b/src/main/java/org/leavesmc/leaves/structs/Long2FloatAgingCache.java
@@ -0,0 +1,121 @@
+package top.leavesmc.leaves.structs;
+package org.leavesmc.leaves.structs;
+
+import it.unimi.dsi.fastutil.HashCommon;
+

View File

@@ -6,15 +6,15 @@ Subject: [PATCH] Reduce entity fluid lookups if no fluids
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 68a8aca051df609747b25ef89e5217932edbec51..f491c1d402499e68191d4cdc9c8ef2e7caae9c7b 100644
index e87a60ca43fe080209620e11833099e7ea9164b5..bf8e3d510631e418eb6d2e641b51a1220bee2d7d 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -4430,16 +4430,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -4487,16 +4487,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> tag, double speed) {
- if (this.touchingUnloadedChunk()) {
+ if (!top.leavesmc.leaves.LeavesConfig.reduceEntityFluidLookup && this.touchingUnloadedChunk()) { // Leaves - cost of a lookup here is the same cost as below, so skip
+ if (!org.leavesmc.leaves.LeavesConfig.reduceEntityFluidLookup && this.touchingUnloadedChunk()) { // Leaves - cost of a lookup here is the same cost as below, so skip
return false;
} else {
AABB axisalignedbb = this.getBoundingBox().deflate(0.001D);
@@ -35,7 +35,7 @@ index 68a8aca051df609747b25ef89e5217932edbec51..f491c1d402499e68191d4cdc9c8ef2e7
double d1 = 0.0D;
boolean flag = this.isPushedByFluid();
boolean flag1 = false;
@@ -4447,38 +4449,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -4504,38 +4506,123 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
int k1 = 0;
BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
@@ -45,7 +45,7 @@ index 68a8aca051df609747b25ef89e5217932edbec51..f491c1d402499e68191d4cdc9c8ef2e7
- blockposition_mutableblockposition.set(l1, i2, j2);
- FluidState fluid = this.level().getFluidState(blockposition_mutableblockposition);
+ // Leaves start - based off CollisionUtil.getCollisionsForBlocksOrWorldBorder
+ if (top.leavesmc.leaves.LeavesConfig.reduceEntityFluidLookup) {
+ if (org.leavesmc.leaves.LeavesConfig.reduceEntityFluidLookup) {
+ final int minSection = io.papermc.paper.util.WorldUtil.getMinSection(this.level);
+ final int maxSection = io.papermc.paper.util.WorldUtil.getMaxSection(this.level);
+ final int minBlock = minSection << 4;
@@ -181,7 +181,7 @@ index 68a8aca051df609747b25ef89e5217932edbec51..f491c1d402499e68191d4cdc9c8ef2e7
if (vec3d.length() > 0.0D) {
if (k1 > 0) {
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
index 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..e4701dd6e023331c9138549cdeece5c0a270877d 100644
index a2a5aef769ee8bb638a5a9f3da9812fa4a85dda5..73b0bd67b5d3506383df3be065375c9370cff570 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
@@ -25,6 +25,7 @@ public class LevelChunkSection {

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Reduce chunk loading & lookups
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index f33c03e81b7ff643741f56eea055e6af260de618..9ea374d9baf1612898b67f329e6b5c798ad43b3e 100644
index 260202fab3ac300552c557b44dcf251f083c6a78..215176eb7152c11c4934c8576ac8c9fa9b2d0833 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -333,11 +333,28 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -318,11 +318,28 @@ public class EnderMan extends Monster implements NeutralMob {
private boolean teleport(double x, double y, double z) {
BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(x, y, z);
@@ -17,7 +17,7 @@ index f33c03e81b7ff643741f56eea055e6af260de618..9ea374d9baf1612898b67f329e6b5c79
- blockposition_mutableblockposition.move(Direction.DOWN);
+ // Leaves start - single chunk lookup
+ BlockState iblockdata;
+ if (top.leavesmc.leaves.LeavesConfig.reduceChuckLoadAndLookup) {
+ if (org.leavesmc.leaves.LeavesConfig.reduceChuckLoadAndLookup) {
+ net.minecraft.world.level.chunk.LevelChunk chunk = this.level().getChunkIfLoaded(blockposition_mutableblockposition);
+ if (chunk == null) {
+ return false;

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Tue, 7 May 2024 23:46:15 +0800
Subject: [PATCH] Placeholder of PCA-sync-protocol
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Tue, 7 May 2024 23:49:41 +0800
Subject: [PATCH] Placeholder of BBOR-Protocol
diff --git a/.gitignore b/.gitignore
index 1ad93453221244f880855b510e888e759275b640..3811c0d849a3eb028ed1a6b7a2d4747f7f570448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,4 +46,3 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
-

View File

@@ -6,24 +6,24 @@ Subject: [PATCH] InstantBlockUpdater Reintroduced
This patch is Powered by Carpet-TIS-Addition(https://github.com/plusls/Carpet-TIS-Addition)
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 34b6e04c2bfb3a44980906e786c260e066ad4020..6071b5463073cb250579ee66d2312b61cef34605 100644
index 68d065ff98141176e0c4ed43ea4d7a3531fa62da..c04e07fa16d701d814a2df82758d4339e3b4e5f1 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -68,6 +68,7 @@ import net.minecraft.world.level.lighting.LevelLightEngine;
@@ -73,6 +73,7 @@ import net.minecraft.world.level.lighting.LevelLightEngine;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.level.redstone.CollectingNeighborUpdater;
+import net.minecraft.world.level.redstone.InstantNeighborUpdater;
import net.minecraft.world.level.redstone.NeighborUpdater;
import net.minecraft.world.level.saveddata.maps.MapId;
import net.minecraft.world.level.saveddata.maps.MapItemSavedData;
import net.minecraft.world.level.storage.LevelData;
@@ -253,7 +254,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -254,7 +255,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
this.thread = Thread.currentThread();
this.biomeManager = new BiomeManager(this, i);
this.isDebug = flag1;
- this.neighborUpdater = new CollectingNeighborUpdater(this, j);
+ // Leaves start - instantBlockUpdaterReintroduced
+ if (top.leavesmc.leaves.LeavesConfig.instantBlockUpdaterReintroduced) {
+ if (org.leavesmc.leaves.LeavesConfig.instantBlockUpdaterReintroduced) {
+ this.neighborUpdater = new InstantNeighborUpdater(this);
+ } else {
+ this.neighborUpdater = new CollectingNeighborUpdater(this, j);

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Random flatten triangular distribution
This patch is Powered by Carpet-TIS-Addition(https://github.com/plusls/Carpet-TIS-Addition)
diff --git a/src/main/java/net/minecraft/util/RandomSource.java b/src/main/java/net/minecraft/util/RandomSource.java
index 9c6f5b55b1f1376fa75e216cd366ee47c79fafc4..35d90a4f3ec07844a444dbbc99b81f417ded2dd5 100644
index 9c6f5b55b1f1376fa75e216cd366ee47c79fafc4..50dc6530e6191f2a00025d4610e335041bc858a4 100644
--- a/src/main/java/net/minecraft/util/RandomSource.java
+++ b/src/main/java/net/minecraft/util/RandomSource.java
@@ -53,7 +53,14 @@ public interface RandomSource {
@@ -15,7 +15,7 @@ index 9c6f5b55b1f1376fa75e216cd366ee47c79fafc4..35d90a4f3ec07844a444dbbc99b81f41
default double triangle(double mode, double deviation) {
- return mode + deviation * (this.nextDouble() - this.nextDouble());
+ // Leaves start - flattenTriangularDistribution
+ if (top.leavesmc.leaves.LeavesConfig.flattenTriangularDistribution) {
+ if (org.leavesmc.leaves.LeavesConfig.flattenTriangularDistribution) {
+ this.nextDouble();
+ return mode + deviation * (-1 + this.nextDouble() * 2);
+ } else {

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Tue, 7 May 2024 23:52:04 +0800
Subject: [PATCH] Placeholder of Jade-Protocol
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+

View File

@@ -8,11 +8,20 @@ carpet-extra(https://github.com/gnembon/carpet-extra)
MasaGadget(https://github.com/plusls/MasaGadget)
litematica(https://github.com/maruohon/litematica)
diff --git a/.gitignore b/.gitignore
index 1ad93453221244f880855b510e888e759275b640..3811c0d849a3eb028ed1a6b7a2d4747f7f570448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,4 +46,3 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
-
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index 8d2c0accadaf0c5d28e7db6e62a05f6c619cf02f..d5e7cc59314b2f16d7665bc0ad8cea576f1f1235 100644
index 96fb69ec6db2e7c8c728435f0c537b076259b2fb..7632d5ac83c84e943654477b3f36e6605e28c9a7 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -157,7 +157,7 @@ public class BlockItem extends Item {
@@ -162,7 +162,7 @@ public class BlockItem extends Item {
@Nullable
protected BlockState getPlacementState(BlockPlaceContext context) {
@@ -44,10 +53,10 @@ index f8f909ebdad5e96379e8bd8c610164ef0697368e..0b761f3ae15ad4a3b8152f497a604032
if (iblockdata2 != null && this.canPlace(world, iblockdata2, blockposition)) {
iblockdata1 = iblockdata2;
diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java
index ee6cb4042421a74095473360126f6d083513934b..feab3cc5724a1fc44374a30c75dca9e3a3721adc 100644
index e27f2317e4e2f13b6ef12be727046497a750fd3a..41f1a7bf2fb87b6d28d2ca392dfee5d5032d2151 100644
--- a/src/main/java/net/minecraft/world/level/block/Block.java
+++ b/src/main/java/net/minecraft/world/level/block/Block.java
@@ -420,6 +420,33 @@ public class Block extends BlockBehaviour implements ItemLike {
@@ -412,6 +412,33 @@ public class Block extends BlockBehaviour implements ItemLike {
public void stepOn(Level world, BlockPos pos, BlockState state, Entity entity) {}
@@ -55,22 +64,22 @@ index ee6cb4042421a74095473360126f6d083513934b..feab3cc5724a1fc44374a30c75dca9e3
+ @Nullable
+ public BlockState getRealStateForPlacement(BlockPlaceContext ctx) {
+ BlockState vanillaState = getStateForPlacement(ctx);
+ switch (top.leavesmc.leaves.LeavesConfig.alternativeBlockPlacement) {
+ switch (org.leavesmc.leaves.LeavesConfig.alternativeBlockPlacement) {
+ case "CARPET" -> {
+ BlockState tryState = top.leavesmc.leaves.protocol.CarpetAlternativeBlockPlacement.alternativeBlockPlacement(this, ctx);
+ BlockState tryState = org.leavesmc.leaves.protocol.CarpetAlternativeBlockPlacement.alternativeBlockPlacement(this, ctx);
+ if (tryState != null) {
+ return tryState;
+ }
+ }
+ case "CARPET_FIX" -> {
+ BlockState tryState = top.leavesmc.leaves.protocol.CarpetAlternativeBlockPlacement.alternativeBlockPlacementFix(this, ctx);
+ BlockState tryState = org.leavesmc.leaves.protocol.CarpetAlternativeBlockPlacement.alternativeBlockPlacementFix(this, ctx);
+ if (tryState != null) {
+ return tryState;
+ }
+ }
+ case "LITEMATICA" -> {
+ if (vanillaState != null) {
+ return top.leavesmc.leaves.protocol.LitematicaEasyPlaceProtocol.applyPlacementProtocol(vanillaState, ctx);
+ return org.leavesmc.leaves.protocol.LitematicaEasyPlaceProtocol.applyPlacementProtocol(vanillaState, ctx);
+ }
+ }
+ }
@@ -81,13 +90,13 @@ index ee6cb4042421a74095473360126f6d083513934b..feab3cc5724a1fc44374a30c75dca9e3
@Nullable
public BlockState getStateForPlacement(BlockPlaceContext ctx) {
return this.defaultBlockState();
diff --git a/src/main/java/top/leavesmc/leaves/protocol/CarpetAlternativeBlockPlacement.java b/src/main/java/top/leavesmc/leaves/protocol/CarpetAlternativeBlockPlacement.java
diff --git a/src/main/java/org/leavesmc/leaves/protocol/CarpetAlternativeBlockPlacement.java b/src/main/java/org/leavesmc/leaves/protocol/CarpetAlternativeBlockPlacement.java
new file mode 100644
index 0000000000000000000000000000000000000000..dff01bc7495620fecb23d658c4dbd17f96a5819a
index 0000000000000000000000000000000000000000..100356d5b0f62b62e1bcb02ca515225179fc0cc6
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/CarpetAlternativeBlockPlacement.java
+++ b/src/main/java/org/leavesmc/leaves/protocol/CarpetAlternativeBlockPlacement.java
@@ -0,0 +1,161 @@
+package top.leavesmc.leaves.protocol;
+package org.leavesmc.leaves.protocol;
+
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.Direction;
@@ -248,13 +257,13 @@ index 0000000000000000000000000000000000000000..dff01bc7495620fecb23d658c4dbd17f
+ return null;
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/protocol/LitematicaEasyPlaceProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/LitematicaEasyPlaceProtocol.java
diff --git a/src/main/java/org/leavesmc/leaves/protocol/LitematicaEasyPlaceProtocol.java b/src/main/java/org/leavesmc/leaves/protocol/LitematicaEasyPlaceProtocol.java
new file mode 100644
index 0000000000000000000000000000000000000000..8463318fcad637c409679707b2adf0648ba5a173
index 0000000000000000000000000000000000000000..7a49e2591e1eabf9d9444d530f631f038a7a47aa
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/LitematicaEasyPlaceProtocol.java
+++ b/src/main/java/org/leavesmc/leaves/protocol/LitematicaEasyPlaceProtocol.java
@@ -0,0 +1,214 @@
+package top.leavesmc.leaves.protocol;
+package org.leavesmc.leaves.protocol;
+
+import com.google.common.collect.ImmutableSet;
+import net.minecraft.core.BlockPos;
@@ -270,8 +279,8 @@ index 0000000000000000000000000000000000000000..8463318fcad637c409679707b2adf064
+import net.minecraft.world.level.block.state.properties.Property;
+import net.minecraft.world.level.block.state.properties.SlabType;
+import net.minecraft.world.phys.Vec3;
+import top.leavesmc.leaves.LeavesLogger;
+import top.leavesmc.leaves.util.MathUtils;
+import org.leavesmc.leaves.LeavesLogger;
+import org.leavesmc.leaves.util.MathUtils;
+
+import javax.annotation.Nullable;
+import java.util.ArrayList;
@@ -468,10 +477,10 @@ index 0000000000000000000000000000000000000000..8463318fcad637c409679707b2adf064
+ }
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/util/MathUtils.java b/src/main/java/top/leavesmc/leaves/util/MathUtils.java
index 349cd0c0d2d9dc2c9c745ef3469e548a798931ba..0f57d18ee124da23d42abe8cee55a50f4d244615 100644
--- a/src/main/java/top/leavesmc/leaves/util/MathUtils.java
+++ b/src/main/java/top/leavesmc/leaves/util/MathUtils.java
diff --git a/src/main/java/org/leavesmc/leaves/util/MathUtils.java b/src/main/java/org/leavesmc/leaves/util/MathUtils.java
index 6c42b029d98ed293645f06dde6838761f87f20bb..cd66a5f1b544640de1277cef870a60b53e1a128b 100644
--- a/src/main/java/org/leavesmc/leaves/util/MathUtils.java
+++ b/src/main/java/org/leavesmc/leaves/util/MathUtils.java
@@ -75,4 +75,29 @@ public class MathUtils {
return vector;

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Player operation limiter
This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition)
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 6767665e55ca1ec9cf2707918c349fd3ea5ada8a..6c15eb1a368aa41c44521054b95a8a46776d76a4 100644
index b1a32440f92f54ea86356391ecaa14c676f79eed..1c9c28436645737e8691d5e4dd9a757ab668e458 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -282,6 +282,10 @@ public class ServerPlayer extends Player {
@@ -299,6 +299,10 @@ public class ServerPlayer extends Player {
public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
public @Nullable String clientBrandName = null; // Paper - Brand support
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event
@@ -20,7 +20,7 @@ index 6767665e55ca1ec9cf2707918c349fd3ea5ada8a..6c15eb1a368aa41c44521054b95a8a46
// Paper start - replace player chunk loader
private final java.util.concurrent.atomic.AtomicReference<io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances> viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
@@ -723,6 +727,7 @@ public class ServerPlayer extends Player {
@@ -773,6 +777,7 @@ public class ServerPlayer extends Player {
this.joining = false;
}
// CraftBukkit end
@@ -28,7 +28,7 @@ index 6767665e55ca1ec9cf2707918c349fd3ea5ada8a..6c15eb1a368aa41c44521054b95a8a46
this.gameMode.tick();
this.wardenSpawnTracker.tick();
--this.spawnInvulnerableTime;
@@ -2768,5 +2773,32 @@ public class ServerPlayer extends Player {
@@ -2876,5 +2881,32 @@ public class ServerPlayer extends Player {
public CraftPlayer getBukkitEntity() {
return (CraftPlayer) super.getBukkitEntity();
}
@@ -62,23 +62,23 @@ index 6767665e55ca1ec9cf2707918c349fd3ea5ada8a..6c15eb1a368aa41c44521054b95a8a46
// CraftBukkit end
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
index a7b217ddbcbf92513bd38101fdfca2075505e267..e4436d3f479246eff4b0ad06d6d24fc12b4e0c90 100644
index 5cedce1f432f6b809b25269242a16477682c824f..3c729ffe8366e6550cfa03da2d986030fbbff02e 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -44,6 +44,7 @@ import org.bukkit.event.Event;
@@ -43,6 +43,7 @@ import org.bukkit.event.Event;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerInteractEvent;
+import top.leavesmc.leaves.event.player.PlayerOperationLimitEvent;
+import org.leavesmc.leaves.event.player.PlayerOperationLimitEvent;
// CraftBukkit end
public class ServerPlayerGameMode {
@@ -331,6 +332,19 @@ public class ServerPlayerGameMode {
@@ -334,6 +335,19 @@ public class ServerPlayerGameMode {
}
public void destroyAndAck(BlockPos pos, int sequence, String reason) {
+ // Leaves start - player operation limiter
+ if (top.leavesmc.leaves.LeavesConfig.playerOperationLimiter) {
+ if (org.leavesmc.leaves.LeavesConfig.playerOperationLimiter) {
+ if (reason.equals("insta mine")) {
+ player.addInstaBreakCountPerTick();
+ if (!player.allowOperation()) {
@@ -94,28 +94,27 @@ index a7b217ddbcbf92513bd38101fdfca2075505e267..e4436d3f479246eff4b0ad06d6d24fc1
this.debugLogging(pos, true, sequence, reason);
} else {
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index d5e7cc59314b2f16d7665bc0ad8cea576f1f1235..e1ffc1b52641e9cf91f524a83b8c8ee047932d1a 100644
index 7632d5ac83c84e943654477b3f36e6605e28c9a7..c21a65d9637739f1040dd27b096101a7a7adc0df 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -32,9 +32,12 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.Property;
@@ -32,8 +32,11 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.phys.shapes.CollisionContext;
+import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.block.CraftBlock;
+import org.bukkit.craftbukkit.block.CraftBlockState;
+import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import org.bukkit.event.block.BlockCanBuildEvent;
+import top.leavesmc.leaves.event.player.PlayerOperationLimitEvent;
+import org.leavesmc.leaves.event.player.PlayerOperationLimitEvent;
// CraftBukkit end
public class BlockItem extends Item {
@@ -83,6 +86,20 @@ public class BlockItem extends Item {
@@ -80,6 +83,20 @@ public class BlockItem extends Item {
final org.bukkit.block.BlockState oldBlockstate = blockstate != null ? blockstate : org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(blockactioncontext1.getLevel(), blockactioncontext1.getClickedPos()); // Paper - Reset placed block on exception
// CraftBukkit end
+ // Leaves start - player operation limiter
+ if (top.leavesmc.leaves.LeavesConfig.playerOperationLimiter && !context.getLevel().isClientSide()) {
+ if (org.leavesmc.leaves.LeavesConfig.playerOperationLimiter && !context.getLevel().isClientSide()) {
+ ServerPlayer player = (ServerPlayer) context.getPlayer();
+ if (player != null && iblockdata != null) {
+ player.addPlaceBlockCountPerTick();

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Renewable Elytra
This patch is Powered by Carpet-TIS-Addition(https://github.com/plusls/Carpet-TIS-Addition)
diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
index 187037c43ebb5b245ffa4b50163d443490668744..29d735390dbe0c7169b576c469f3a3957a6bfb45 100644
index 68f8945292753535a3b73acb9f48c1594f0789a4..da5df2271a8192bf4c86772bd84107e55f3040aa 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -36,6 +36,8 @@ import net.minecraft.world.entity.ai.goal.Goal;
@@ -35,6 +35,8 @@ import net.minecraft.world.entity.ai.goal.Goal;
import net.minecraft.world.entity.ai.targeting.TargetingConditions;
import net.minecraft.world.entity.animal.Cat;
import net.minecraft.world.entity.player.Player;
@@ -18,16 +18,16 @@ index 187037c43ebb5b245ffa4b50163d443490668744..29d735390dbe0c7169b576c469f3a395
import net.minecraft.world.level.Level;
import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.level.levelgen.Heightmap;
@@ -255,6 +257,20 @@ public class Phantom extends FlyingMob implements Enemy {
return -0.125F;
@@ -233,6 +235,20 @@ public class Phantom extends FlyingMob implements Enemy {
return entitysize.scale(1.0F + 0.15F * (float) i);
}
+ // Leaves start - renewable elytra
+ @Override
+ protected void dropFromLootTable(DamageSource source, boolean causedByPlayer) {
+ super.dropFromLootTable(source, causedByPlayer);
+ if (top.leavesmc.leaves.LeavesConfig.renewableElytra > 0.0D) {
+ if (source.getEntity() instanceof Shulker && this.random.nextDouble() < top.leavesmc.leaves.LeavesConfig.renewableElytra) {
+ if (org.leavesmc.leaves.LeavesConfig.renewableElytra > 0.0D) {
+ if (source.getEntity() instanceof Shulker && this.random.nextDouble() < org.leavesmc.leaves.LeavesConfig.renewableElytra) {
+ ItemStack item = new ItemStack(Items.ELYTRA);
+ item.setDamageValue(432);
+ this.spawnAtLocation(item);
@@ -37,5 +37,5 @@ index 187037c43ebb5b245ffa4b50163d443490668744..29d735390dbe0c7169b576c469f3a395
+ // Leaves end - renewable elytra
+
// Paper start
@Nullable
java.util.UUID spawningEntity;

View File

@@ -6,12 +6,12 @@ Subject: [PATCH] Stackable ShulkerBoxes
This patch is Powered by fabric-carpet(https://github.com/gnembon/fabric-carpet) and plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition)
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index 29ce703a79f7893ac990ad80e0f1c1cf63546e6c..569b7f66b505f9cbfb45322ecab057534f4a6330 100644
index 8fd3845c4965843be9c37498760d93f1ebdff541..d3fa592892fc72c8fc8f23e8e477eb88902bba16 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -14,10 +14,12 @@ import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
@@ -22,10 +22,12 @@ import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MoverType;
import net.minecraft.world.entity.SlotAccess;
import net.minecraft.world.entity.TraceableEntity;
+import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
@@ -21,8 +21,8 @@ index 29ce703a79f7893ac990ad80e0f1c1cf63546e6c..569b7f66b505f9cbfb45322ecab05753
+import net.minecraft.world.level.block.ShulkerBoxBlock;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.phys.Vec3;
import net.minecraft.core.BlockPos;
@@ -33,6 +35,7 @@ import net.minecraft.sounds.SoundSource;
// CraftBukkit start
@@ -35,6 +37,7 @@ import net.minecraft.sounds.SoundSource;
import net.minecraft.stats.Stats;
import org.bukkit.craftbukkit.event.CraftEventFactory;
import org.bukkit.entity.Player;
@@ -30,42 +30,42 @@ index 29ce703a79f7893ac990ad80e0f1c1cf63546e6c..569b7f66b505f9cbfb45322ecab05753
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.EntityRemoveEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
@@ -74,6 +77,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
@@ -78,6 +81,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
this.setDeltaMovement(this.random.nextDouble() * 0.2D - 0.1D, 0.2D, this.random.nextDouble() * 0.2D - 0.1D);
this.setItem(stack);
// Paper end - Don't use level random in entity constructors
+ // Leaves start - stackable shulker boxes
+ if (top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize > 1) {
+ if (org.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize > 1) {
+ if (stack.getItem() instanceof BlockItem bi && bi.getBlock() instanceof ShulkerBoxBlock) {
+ top.leavesmc.leaves.util.ShulkerBoxUtils.cleanUpShulkerBoxTag(stack);
+ org.leavesmc.leaves.util.ShulkerBoxUtils.cleanUpShulkerBoxTag(stack);
+ }
+ }
+ // Leaves end - stackable shulker boxes
}
public ItemEntity(Level world, double x, double y, double z, ItemStack stack, double velocityX, double velocityY, double velocityZ) {
@@ -308,10 +318,49 @@ public class ItemEntity extends Entity implements TraceableEntity {
@@ -314,10 +324,49 @@ public class ItemEntity extends Entity implements TraceableEntity {
private boolean isMergable() {
ItemStack itemstack = this.getItem();
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack); // Paper - Alternative item-despawn-rate // Leaves - stackable shulker boxes
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack); // Paper - Alternative item-despawn-rate // Leaves - stackable shulker boxes
}
+ // Leaves end - stackable shulker boxes
+ private boolean tryStackShulkerBoxes(ItemEntity other) {
+ ItemStack selfStack = this.getItem();
+ if (top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize == 1 || !(selfStack.getItem() instanceof BlockItem bi) || !(bi.getBlock() instanceof ShulkerBoxBlock)) {
+ if (org.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize == 1 || !(selfStack.getItem() instanceof BlockItem bi) || !(bi.getBlock() instanceof ShulkerBoxBlock)) {
+ return false;
+ }
+
+ ItemStack otherStack = other.getItem();
+ if (selfStack.getItem() == otherStack.getItem()
+ && !top.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxHasItems(selfStack)
+ && !top.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxHasItems(otherStack)
+ && Objects.equals(selfStack.getTag(), otherStack.getTag()) // empty block entity tags are cleaned up when spawning
+ && selfStack.getCount() != top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize) {
+ int amount = Math.min(otherStack.getCount(), top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize - selfStack.getCount());
+ && !org.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxHasItems(selfStack)
+ && !org.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxHasItems(otherStack)
+ && Objects.equals(selfStack.getComponents(), otherStack.getComponents()) // empty block entity tags are cleaned up when spawning
+ && selfStack.getCount() != org.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize) {
+ int amount = Math.min(otherStack.getCount(), org.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize - selfStack.getCount());
+
+ selfStack.grow(amount);
+ this.setItem(selfStack);
@@ -96,43 +96,40 @@ index 29ce703a79f7893ac990ad80e0f1c1cf63546e6c..569b7f66b505f9cbfb45322ecab05753
ItemStack itemstack1 = other.getItem();
diff --git a/src/main/java/net/minecraft/world/entity/player/Inventory.java b/src/main/java/net/minecraft/world/entity/player/Inventory.java
index cc93e118605484c71ce069f208e7bb4d3a3211b0..c2a6a472ebb9ef1053f69bf5b9bd7b910fbc579f 100644
index 3c8f35f92ed7e9518d676087f82d1e4da963b779..9037c6c8f0947e72e02552557f3c47625927681e 100644
--- a/src/main/java/net/minecraft/world/entity/player/Inventory.java
+++ b/src/main/java/net/minecraft/world/entity/player/Inventory.java
@@ -114,7 +114,7 @@ public class Inventory implements Container, Nameable {
}
private boolean hasRemainingSpaceForItem(ItemStack existingStack, ItemStack stack) {
- return !existingStack.isEmpty() && existingStack.isStackable() && existingStack.getCount() < existingStack.getMaxStackSize() && existingStack.getCount() < this.getMaxStackSize() && ItemStack.isSameItemSameTags(existingStack, stack); // Paper - check if itemstack is stackable first
+ return !existingStack.isEmpty() && top.leavesmc.leaves.util.ShulkerBoxUtils.isStackable(existingStack) && existingStack.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(existingStack) && existingStack.getCount() < this.getMaxStackSize() && ItemStack.isSameItemSameTags(existingStack, stack); // Paper - check if itemstack is stackable first // Leaves - stackable shulker boxes
- return !existingStack.isEmpty() && existingStack.isStackable() && existingStack.getCount() < this.getMaxStackSize(existingStack) && ItemStack.isSameItemSameComponents(existingStack, stack); // Paper - check if itemstack is stackable first
+ return !existingStack.isEmpty() && org.leavesmc.leaves.util.ShulkerBoxUtils.isStackable(existingStack) && existingStack.getCount() < org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(existingStack) && ItemStack.isSameItemSameComponents(existingStack, stack); // Paper - check if itemstack is stackable first
}
// CraftBukkit start - Watch method above! :D
@@ -289,9 +289,11 @@ public class Inventory implements Container, Nameable {
int k = j;
- if (j > itemstack1.getMaxStackSize() - itemstack1.getCount()) {
- k = itemstack1.getMaxStackSize() - itemstack1.getCount();
+ // Leaves start - stackable shulker boxes
+ if (j > top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1) - itemstack1.getCount()) {
+ k = top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1) - itemstack1.getCount();
@@ -282,7 +282,9 @@ public class Inventory implements Container, Nameable {
this.setItem(slot, itemstack1);
}
+ // Leaves start - stackable shulker boxes
if (k > this.getMaxStackSize() - itemstack1.getCount()) {
k = this.getMaxStackSize() - itemstack1.getCount();
@@ -409,7 +411,7 @@ public class Inventory implements Container, Nameable {
- int k = this.getMaxStackSize(itemstack1) - itemstack1.getCount();
+ // Leaves start - stackable shulker boxes
+ int k = org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1) - itemstack1.getCount();
+ // Leaves end - stackable shulker boxes
int l = Math.min(j, k);
if (l == 0) {
@@ -397,7 +399,7 @@ public class Inventory implements Container, Nameable {
}
if (i != -1) {
- int j = stack.getMaxStackSize() - this.getItem(i).getCount();
+ int j = top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack) - this.getItem(i).getCount(); // Leaves - stackable shulker boxes
+ int j = org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack) - this.getItem(i).getCount(); // Leaves - stackable shulker boxes
if (this.add(i, stack.split(j)) && notifiesClient && this.player instanceof ServerPlayer) {
((ServerPlayer) this.player).connection.send(new ClientboundContainerSetSlotPacket(-2, 0, i, this.getItem(i)));
diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
index 7cef5c518207752f7e1bfdd5bbec55fe9fafca6b..925cc4d99d1388bc32cebb5238a322102b6f68e5 100644
index 961a7193fda00fa62acea9c39fda1c93f7fbe412..c66eb0f17299e8be4403ecf2483b83471d533525 100644
--- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
@@ -456,7 +456,7 @@ public abstract class AbstractContainerMenu {
@@ -140,16 +137,16 @@ index 7cef5c518207752f7e1bfdd5bbec55fe9fafca6b..925cc4d99d1388bc32cebb5238a32210
if (slot1 != null && AbstractContainerMenu.canItemQuickReplace(slot1, itemstack2, true) && slot1.mayPlace(itemstack2) && (this.quickcraftType == 2 || itemstack2.getCount() >= this.quickcraftSlots.size()) && this.canDragTo(slot1)) {
int j1 = slot1.hasItem() ? slot1.getItem().getCount() : 0;
- int k1 = Math.min(itemstack1.getMaxStackSize(), slot1.getMaxStackSize(itemstack1));
+ int k1 = Math.min(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1), slot1.getMaxStackSize(itemstack1)); // Leaves - stackable shulker boxes int l1 = Math.min(AbstractContainerMenu.getQuickCraftPlaceCount(this.quickcraftSlots, this.quickcraftType, itemstack1) + j1, k1);
+ int k1 = Math.min(org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1), slot1.getMaxStackSize(itemstack1)); // Leaves - stackable shulker boxes int l1 = Math.min(AbstractContainerMenu.getQuickCraftPlaceCount(this.quickcraftSlots, this.quickcraftType, itemstack1) + j1, k1);
int l1 = Math.min(AbstractContainerMenu.getQuickCraftPlaceCount(this.quickcraftSlots, this.quickcraftType, itemstack1) + j1, k1);
l -= l1 - j1;
@@ -575,7 +575,7 @@ public abstract class AbstractContainerMenu {
slot.setByPlayer(itemstack3);
}
} else if (ItemStack.isSameItemSameTags(itemstack, itemstack3)) {
} else if (ItemStack.isSameItemSameComponents(itemstack, itemstack3)) {
- Optional<ItemStack> optional1 = slot.tryRemove(itemstack.getCount(), itemstack3.getMaxStackSize() - itemstack3.getCount(), player);
+ Optional<ItemStack> optional1 = slot.tryRemove(itemstack.getCount(), top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack3) - itemstack3.getCount(), player);
+ Optional<ItemStack> optional1 = slot.tryRemove(itemstack.getCount(), org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack3) - itemstack3.getCount(), player);
optional1.ifPresent((itemstack4) -> {
itemstack3.grow(itemstack4.getCount());
@@ -158,7 +155,7 @@ index 7cef5c518207752f7e1bfdd5bbec55fe9fafca6b..925cc4d99d1388bc32cebb5238a32210
if (slot2.hasItem()) {
itemstack1 = slot2.getItem();
- this.setCarried(itemstack1.copyWithCount(itemstack1.getMaxStackSize()));
+ this.setCarried(itemstack1.copyWithCount(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1))); // Leaves - stackable shulker boxes
+ this.setCarried(itemstack1.copyWithCount(org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1))); // Leaves - stackable shulker boxes
}
} else if (actionType == ClickType.THROW && this.getCarried().isEmpty() && slotIndex >= 0) {
slot2 = (Slot) this.slots.get(slotIndex);
@@ -167,51 +164,37 @@ index 7cef5c518207752f7e1bfdd5bbec55fe9fafca6b..925cc4d99d1388bc32cebb5238a32210
for (i2 = 0; i2 < 2; ++i2) {
- for (int k2 = l; k2 >= 0 && k2 < this.slots.size() && itemstack1.getCount() < itemstack1.getMaxStackSize(); k2 += j2) {
+ for (int k2 = l; k2 >= 0 && k2 < this.slots.size() && itemstack1.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1); k2 += j2) { // Leaves - stackable shulker boxes
+ for (int k2 = l; k2 >= 0 && k2 < this.slots.size() && itemstack1.getCount() < org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1); k2 += j2) { // Leaves - stackable shulker boxes
Slot slot3 = (Slot) this.slots.get(k2);
if (slot3.hasItem() && AbstractContainerMenu.canItemQuickReplace(slot3, itemstack1, true) && slot3.mayPickup(player) && this.canTakeItemForPickAll(itemstack1, slot3)) {
ItemStack itemstack5 = slot3.getItem();
- if (i2 != 0 || itemstack5.getCount() != itemstack5.getMaxStackSize()) {
+ if (i2 != 0 || itemstack5.getCount() != top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack5)) {
+ if (i2 != 0 || itemstack5.getCount() != org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack5)) {
ItemStack itemstack6 = slot3.safeTake(itemstack5.getCount(), itemstack1.getMaxStackSize() - itemstack1.getCount(), player);
itemstack1.grow(itemstack6.getCount());
@@ -805,7 +805,7 @@ public abstract class AbstractContainerMenu {
Slot slot;
ItemStack itemstack1;
int l;
- if (stack.isStackable()) {
+ if (top.leavesmc.leaves.util.ShulkerBoxUtils.isStackable(stack)) { // Leaves - stackable shulker boxes
+ if (org.leavesmc.leaves.util.ShulkerBoxUtils.isStackable(stack)) { // Leaves - stackable shulker boxes
while (!stack.isEmpty()) {
if (fromLast) {
if (k < startIndex) {
@@ -825,16 +825,18 @@ public abstract class AbstractContainerMenu {
if (!itemstack1.isEmpty() && ItemStack.isSameItemSameTags(stack, itemstack1)) {
int l = itemstack1.getCount() + stack.getCount();
@@ -824,7 +824,7 @@ public abstract class AbstractContainerMenu {
// Paper end - Add PlayerTradeEvent and PlayerPurchaseEvent
if (!itemstack1.isEmpty() && ItemStack.isSameItemSameComponents(stack, itemstack1)) {
l = itemstack1.getCount() + stack.getCount();
- int i1 = slot.getMaxStackSize(itemstack1);
+ int i1 = org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1); // Leaves - stackable shulker boxes
- if (l <= stack.getMaxStackSize()) {
+ if (l <= top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)) { // Leaves - stackable shulker boxes
if (l <= i1) {
stack.setCount(0);
itemstack1.setCount(l);
if (!isCheck) { // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent
slot.setChanged();
} // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent
flag1 = true;
- } else if (itemstack1.getCount() < stack.getMaxStackSize()) {
- stack.shrink(stack.getMaxStackSize() - itemstack1.getCount());
- itemstack1.setCount(stack.getMaxStackSize());
+ // Leaves start - stackable shulker boxes
+ } else if (itemstack1.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)) {
+ stack.shrink(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack) - itemstack1.getCount());
+ itemstack1.setCount(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack));
+ // Leaves end - stackable shulker boxes
if (!isCheck) { // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent
slot.setChanged();
} // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent
diff --git a/src/main/java/net/minecraft/world/inventory/Slot.java b/src/main/java/net/minecraft/world/inventory/Slot.java
index 1b1d4c46827aa397183ca3dfec46c785e5531b71..3c34532b9a7118fef6b37e545a19cbf193201352 100644
index c39c773112fb8b534b926f2f2b47fe6fbb69fcb2..ae9338b8a5598e7a257b469adae72858fed95c39 100644
--- a/src/main/java/net/minecraft/world/inventory/Slot.java
+++ b/src/main/java/net/minecraft/world/inventory/Slot.java
@@ -76,7 +76,7 @@ public class Slot {
@@ -219,30 +202,43 @@ index 1b1d4c46827aa397183ca3dfec46c785e5531b71..3c34532b9a7118fef6b37e545a19cbf1
public int getMaxStackSize(ItemStack stack) {
- return Math.min(this.getMaxStackSize(), stack.getMaxStackSize());
+ return Math.min(this.getMaxStackSize(), top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)); // Leaves - stackable shulker boxes
+ return Math.min(this.getMaxStackSize(), org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)); // Leaves - stackable shulker boxes
}
@Nullable
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index 893efb2c4a07c33d41e934279dd914a9dbd4ef79..364e8ed48512dd499bf393947fd7a954c22acc0e 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -228,7 +228,7 @@ public final class ItemStack implements DataComponentHolder {
@Deprecated
@Nullable
private Item item;
- private PatchedDataComponentMap components;
+ public PatchedDataComponentMap components; // Leaves - stackable shulker boxes
@Nullable
private Entity entityRepresentation;
diff --git a/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java b/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java
index 04ae1fe0f4bc902d2f97ed809c8e1038342d7bb7..a51781ad09da5f13180aea2413b883c095f5299d 100644
index 20f2b575c8131621edea0e75fbf38a9fe20a36c4..812856b02cab1c437550ba9c706da318cf420338 100644
--- a/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java
@@ -57,9 +57,27 @@ public abstract class AbstractCauldronBlock extends Block {
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
ItemStack itemStack = player.getItemInHand(hand);
CauldronInteraction cauldronInteraction = this.interactions.map().get(itemStack.getItem());
- return cauldronInteraction.interact(state, world, pos, player, hand, itemStack);
+ return wrapInteractor(cauldronInteraction, state, world, pos, player, hand, itemStack); // Leaves - stackable shulker boxes
@@ -58,9 +58,27 @@ public abstract class AbstractCauldronBlock extends Block {
ItemStack stack, BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit
) {
CauldronInteraction cauldronInteraction = this.interactions.map().get(stack.getItem());
- return cauldronInteraction.interact(state, world, pos, player, hand, stack);
+ return wrapInteractor(cauldronInteraction, state, world, pos, player, hand, stack);
}
+ // Leaves start - stackable shulker boxes
+ private InteractionResult wrapInteractor(CauldronInteraction cauldronBehavior, BlockState blockState, Level world, BlockPos blockPos, Player playerEntity, InteractionHand hand, ItemStack itemStack) {
+ private ItemInteractionResult wrapInteractor(CauldronInteraction cauldronBehavior, BlockState blockState, Level world, BlockPos blockPos, Player playerEntity, InteractionHand hand, ItemStack itemStack) {
+ int count = -1;
+ if (top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize > 1 && itemStack.getItem() instanceof net.minecraft.world.item.BlockItem bi &&
+ if (org.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize > 1 && itemStack.getItem() instanceof net.minecraft.world.item.BlockItem bi &&
+ bi.getBlock() instanceof ShulkerBoxBlock) {
+ count = itemStack.getCount();
+ }
+ InteractionResult result = cauldronBehavior.interact(blockState, world, blockPos, playerEntity, hand, itemStack);
+ ItemInteractionResult result = cauldronBehavior.interact(blockState, world, blockPos, playerEntity, hand, itemStack);
+ if (count > 0 && result.consumesAction()) {
+ ItemStack current = playerEntity.getItemInHand(hand);
+ if (current.getItem() instanceof net.minecraft.world.item.BlockItem bi && bi.getBlock() instanceof ShulkerBoxBlock) {
@@ -254,13 +250,13 @@ index 04ae1fe0f4bc902d2f97ed809c8e1038342d7bb7..a51781ad09da5f13180aea2413b883c0
+ // Leaves end - stackable shulker boxes
+
@Override
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
protected VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
return SHAPE;
diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index cffc280655851e18439c9dfcb01ff69aab61e025..21a64f3a704fb362ed3aade559d55c0804ae5023 100644
index 8310d132006043e93c612890514c4c7f3eb1c74d..592b330f187fb5eca51d60911bbebbaeaf46ef87 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -734,9 +734,9 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
@@ -728,9 +728,9 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
if (itemstack1.isEmpty()) {
// Spigot start - SPIGOT-6693, InventorySubcontainer#setItem
ItemStack leftover = ItemStack.EMPTY; // Paper - Make hoppers respect inventory max stack size
@@ -272,21 +268,27 @@ index cffc280655851e18439c9dfcb01ff69aab61e025..21a64f3a704fb362ed3aade559d55c08
}
// Spigot end
ignoreTileUpdates = true; // Paper - Perf: Optimize Hoppers
diff --git a/src/main/java/top/leavesmc/leaves/util/ShulkerBoxUtils.java b/src/main/java/top/leavesmc/leaves/util/ShulkerBoxUtils.java
diff --git a/src/main/java/org/leavesmc/leaves/util/ShulkerBoxUtils.java b/src/main/java/org/leavesmc/leaves/util/ShulkerBoxUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..82b4337965663ec8eccbc8c77892e3c49bff87cf
index 0000000000000000000000000000000000000000..401e4384007ffd8ef21b9a3dc6c07d34d257843a
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/ShulkerBoxUtils.java
@@ -0,0 +1,71 @@
+package top.leavesmc.leaves.util;
+++ b/src/main/java/org/leavesmc/leaves/util/ShulkerBoxUtils.java
@@ -0,0 +1,78 @@
+package org.leavesmc.leaves.util;
+
+import net.minecraft.core.component.DataComponentMap;
+import net.minecraft.core.component.DataComponentPatch;
+import net.minecraft.core.component.PatchedDataComponentMap;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.world.inventory.Slot;
+import net.minecraft.world.item.BlockItem;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.component.CustomData;
+import net.minecraft.world.level.block.ShulkerBoxBlock;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.LeavesConfig;
+
+import static net.minecraft.core.component.DataComponents.BLOCK_ENTITY_DATA;
+
+// Powered by fabric-carpet/src/main/java/carpet/helpers/InventoryHelper.java
+public class ShulkerBoxUtils {
@@ -307,40 +309,41 @@ index 0000000000000000000000000000000000000000..82b4337965663ec8eccbc8c77892e3c4
+
+ public static boolean cleanUpShulkerBoxTag(@NotNull ItemStack stack) {
+ boolean changed = false;
+ CompoundTag tag = stack.getTag();
+ DataComponentMap components = stack.getComponents();
+
+ if (tag == null || !tag.contains("BlockEntityTag", TAG_COMPOUND)) return false;
+ if (!components.has(BLOCK_ENTITY_DATA)) return false;
+
+ CompoundTag bet = tag.getCompound("BlockEntityTag");
+ CompoundTag bet = components.get(BLOCK_ENTITY_DATA).copyTag();
+ if (bet.contains("Items", TAG_LIST) && bet.getList("Items", TAG_COMPOUND).isEmpty()) {
+ bet.remove("Items");
+ stack.applyComponents(DataComponentPatch.builder().set(BLOCK_ENTITY_DATA, CustomData.of(bet)).build());
+ changed = true;
+ }
+
+ if (bet.isEmpty() || (bet.size() == 1 && bet.getString("id").equals("minecraft:shulker_box"))) {
+ tag.remove("BlockEntityTag");
+ stack.applyComponents(DataComponentPatch.builder().remove(BLOCK_ENTITY_DATA).build());
+ changed = true;
+ }
+ if (tag.isEmpty()) {
+ stack.setTag(null);
+ if (components.isEmpty()) {
+ stack.components = (PatchedDataComponentMap.fromPatch(DataComponentMap.EMPTY, DataComponentPatch.EMPTY));
+ changed = true;
+ }
+ return changed;
+ }
+
+ public static boolean shulkerBoxHasItems(@NotNull ItemStack stack) {
+ CompoundTag tag = stack.getTag();
+ DataComponentMap components = stack.getComponents();
+
+ if (tag == null || !tag.contains("BlockEntityTag", TAG_COMPOUND)) return false;
+ if (!components.has(BLOCK_ENTITY_DATA)) return false;
+
+ CompoundTag bet = tag.getCompound("BlockEntityTag");
+ CompoundTag bet = components.get(BLOCK_ENTITY_DATA).copyTag();
+ return bet.contains("Items", TAG_LIST) && !bet.getList("Items", TAG_COMPOUND).isEmpty();
+ }
+
+ public static int getItemStackMaxCount(ItemStack stack) {
+ if (LeavesConfig.shulkerBoxStackSize > 1 && stack.getItem() instanceof BlockItem bi &&
+ bi.getBlock() instanceof ShulkerBoxBlock && !top.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxHasItems(stack)) {
+ return top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize;
+ bi.getBlock() instanceof ShulkerBoxBlock && !org.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxHasItems(stack)) {
+ return org.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize;
+ }
+ return stack.getMaxStackSize();
+ }

View File

@@ -7,7 +7,7 @@ This patch is Powered by Pufferfish
(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
index 6d8ff6c06af5545634f255ed17dc1e489ece2548..82cad323e4fba9aea082047d3eb6c4351681d9af 100644
index c2943d892b067b3f1fb3b93301a092e912d71f08..d5352883ee51dfc646352ae7e2b76af7efd0441e 100644
--- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
+++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
@@ -53,6 +53,11 @@ public abstract class FlowingFluid extends Fluid {
@@ -15,8 +15,8 @@ index 6d8ff6c06af5545634f255ed17dc1e489ece2548..82cad323e4fba9aea082047d3eb6c435
return object2bytelinkedopenhashmap;
});
+ // Leaves start - use our own cache
+ private static final ThreadLocal<top.leavesmc.leaves.structs.FluidDirectionCache<Block.BlockStatePairKey>> localFluidDirectionCache = ThreadLocal.withInitial(() -> {
+ return new top.leavesmc.leaves.structs.FluidDirectionCache<>(2048);
+ private static final ThreadLocal<org.leavesmc.leaves.structs.FluidDirectionCache<Block.BlockStatePairKey>> localFluidDirectionCache = ThreadLocal.withInitial(() -> {
+ return new org.leavesmc.leaves.structs.FluidDirectionCache<>(2048);
+ });
+ // Leaves end - use our own cache
private final Map<FluidState, VoxelShape> shapes = Maps.newIdentityHashMap();
@@ -34,7 +34,7 @@ index 6d8ff6c06af5545634f255ed17dc1e489ece2548..82cad323e4fba9aea082047d3eb6c435
- object2bytelinkedopenhashmap = null;
- }
+ // Leaves start - cache
+ if (!top.leavesmc.leaves.LeavesConfig.improveFluidDirectionCaching) {
+ if (!org.leavesmc.leaves.LeavesConfig.improveFluidDirectionCaching) {
+ Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap;
+
+ if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) {
@@ -78,7 +78,7 @@ index 6d8ff6c06af5545634f255ed17dc1e489ece2548..82cad323e4fba9aea082047d3eb6c435
} else {
- block_a = null;
- }
+ top.leavesmc.leaves.structs.FluidDirectionCache<Block.BlockStatePairKey> cache = null;
+ org.leavesmc.leaves.structs.FluidDirectionCache<Block.BlockStatePairKey> cache = null;
+ if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) {
+ cache = localFluidDirectionCache.get();
+ }
@@ -117,13 +117,13 @@ index 6d8ff6c06af5545634f255ed17dc1e489ece2548..82cad323e4fba9aea082047d3eb6c435
}
public abstract Fluid getFlowing();
diff --git a/src/main/java/top/leavesmc/leaves/structs/FluidDirectionCache.java b/src/main/java/top/leavesmc/leaves/structs/FluidDirectionCache.java
diff --git a/src/main/java/org/leavesmc/leaves/structs/FluidDirectionCache.java b/src/main/java/org/leavesmc/leaves/structs/FluidDirectionCache.java
new file mode 100644
index 0000000000000000000000000000000000000000..30dc532e75bc4dd7ddb086ffb24118cf4b7b5d2f
index 0000000000000000000000000000000000000000..e07a7c68d6d552767a77ffc507e6023b77daeac5
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/structs/FluidDirectionCache.java
+++ b/src/main/java/org/leavesmc/leaves/structs/FluidDirectionCache.java
@@ -0,0 +1,138 @@
+package top.leavesmc.leaves.structs;
+package org.leavesmc.leaves.structs;
+
+import it.unimi.dsi.fastutil.HashCommon;
+

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] MC Technical Survival Mode
Will automatically overwrite some configuration after startup
diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
index 6177f91146d2bc9dc1a066a24f84581cec0f53cd..04eab3a1f3cb5332293a95f1b3023ed55ab42237 100644
index 19d973a0582c487617fafadd3df4857f8a1819a4..9cf1ab96f4f249f542b6698301237a989d4b6ff8 100644
--- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
+++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
@@ -331,14 +331,14 @@ public final class ChatProcessor {
@@ -14,7 +14,7 @@ index 6177f91146d2bc9dc1a066a24f84581cec0f53cd..04eab3a1f3cb5332293a95f1b3023ed5
static String legacyDisplayName(final CraftPlayer player) {
- if (((org.bukkit.craftbukkit.CraftWorld) player.getWorld()).getHandle().paperConfig().scoreboards.useVanillaWorldScoreboardNameColoring) {
+ if (((org.bukkit.craftbukkit.CraftWorld) player.getWorld()).getHandle().paperConfig().scoreboards.useVanillaWorldScoreboardNameColoring || top.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Leaves - mc technical mode
+ if (((org.bukkit.craftbukkit.CraftWorld) player.getWorld()).getHandle().paperConfig().scoreboards.useVanillaWorldScoreboardNameColoring || org.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Leaves - mc technical mode
return legacySection().serialize(player.teamDisplayName()) + ChatFormatting.RESET;
}
return player.getDisplayName();
@@ -22,12 +22,12 @@ index 6177f91146d2bc9dc1a066a24f84581cec0f53cd..04eab3a1f3cb5332293a95f1b3023ed5
static Component displayName(final CraftPlayer player) {
- if (((CraftWorld) player.getWorld()).getHandle().paperConfig().scoreboards.useVanillaWorldScoreboardNameColoring) {
+ if (((CraftWorld) player.getWorld()).getHandle().paperConfig().scoreboards.useVanillaWorldScoreboardNameColoring || top.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Leaves - mc technical mode
+ if (((CraftWorld) player.getWorld()).getHandle().paperConfig().scoreboards.useVanillaWorldScoreboardNameColoring || org.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Leaves - mc technical mode
return player.teamDisplayName();
}
return player.displayName();
diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java
index 5b446e6ac151f99f64f0c442d0b40b5e251bc4c4..c2eb3e8b019dbc0543a2308d7e88e324aa265cfe 100644
index 5b446e6ac151f99f64f0c442d0b40b5e251bc4c4..b133b977bc7d452b5032809f84f8ac2ff96ae5bb 100644
--- a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java
+++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java
@@ -608,7 +608,7 @@ public final class ChunkHolderManager {
@@ -35,50 +35,50 @@ index 5b446e6ac151f99f64f0c442d0b40b5e251bc4c4..c2eb3e8b019dbc0543a2308d7e88e324
// these days, the patch is mostly useful to keep chunks ticking when players teleport
// so that their pets can teleport with them as well.
- final long delayTimeout = this.world.paperConfig().chunks.delayChunkUnloadsBy.ticks();
+ final long delayTimeout = top.leavesmc.leaves.LeavesConfig.mcTechnicalMode ? 0 : this.world.paperConfig().chunks.delayChunkUnloadsBy.ticks(); // Leaves - mc technical survival mode
+ final long delayTimeout = org.leavesmc.leaves.LeavesConfig.mcTechnicalMode ? 0 : this.world.paperConfig().chunks.delayChunkUnloadsBy.ticks(); // Leaves - mc technical survival mode
final TicketType<ChunkPos> toAdd;
final long timeout;
if (type == RegionizedPlayerChunkLoader.REGION_PLAYER_TICKET && delayTimeout > 0) {
diff --git a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java
index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..c24148d8486420434922864df6f1ffa0b9929612 100644
index 83a726bcf8b7dce73a361b0d79dbd63a0afc7a12..12cf1f7ba7d6c14b8b31d939b6f281bd2135656a 100644
--- a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java
+++ b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java
@@ -317,6 +317,7 @@ public class PaperConfigurations extends Configurations<GlobalConfiguration, Wor
@@ -316,6 +316,7 @@ public class PaperConfigurations extends Configurations<GlobalConfiguration, Wor
for (ServerLevel level : server.getAllLevels()) {
this.createWorldConfig(createWorldContextMap(level), reloader(this.worldConfigClass, level.paperConfig()));
}
+ top.leavesmc.leaves.util.McTechnicalModeHelper.doMcTechnicalModeIf(); // Leaves - mc technical survival mode
+ org.leavesmc.leaves.util.McTechnicalModeHelper.doMcTechnicalModeIf(); // Leaves - mc technical survival mode
} catch (Exception ex) {
throw new RuntimeException("Could not reload paper configuration files", ex);
}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 47864d5c04496ab18a3ad82781df5a06e8b9ea9b..9488fbbf0442d38c18632f0ed50c23fd27078f71 100644
index 63652c3011c48c461c1b5be1889847b2f065e34c..0f3a92155fa0b4ed9d7fbc87202fd04dc01a0890 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2739,7 +2739,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -2695,7 +2695,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
public void onTickingEnd(Entity entity) {
ServerLevel.this.entityTickList.remove(entity);
// Paper start - Reset pearls when they stop being ticked
- if (paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && entity instanceof net.minecraft.world.entity.projectile.ThrownEnderpearl pearl) {
+ if (!top.leavesmc.leaves.LeavesConfig.mcTechnicalMode && paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && entity instanceof net.minecraft.world.entity.projectile.ThrownEnderpearl pearl) { // Leaves - mc technical mode
+ if (!org.leavesmc.leaves.LeavesConfig.mcTechnicalMode && paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && entity instanceof net.minecraft.world.entity.projectile.ThrownEnderpearl pearl) { // Leaves - mc technical mode
pearl.cachedOwner = null;
pearl.ownerUUID = null;
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 362eb965a12f14c4381c98bf7b7ec172c581642a..362ec0d4de4f77511651b28d47b8bdac626f935b 100644
index 1c9c28436645737e8691d5e4dd9a757ab668e458..2945dc0d1ad1c50fded0d61e9dd582bbe20bbecd 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1533,7 +1533,7 @@ public class ServerPlayer extends Player {
@@ -1610,7 +1610,7 @@ public class ServerPlayer extends Player {
@Override
public boolean isInvulnerableTo(DamageSource damageSource) {
- return super.isInvulnerableTo(damageSource) || this.isChangingDimension() || !this.level().paperConfig().collisions.allowPlayerCrammingDamage && damageSource == damageSources().cramming(); // Paper - disable player cramming
+ return super.isInvulnerableTo(damageSource) || this.isChangingDimension() || !top.leavesmc.leaves.LeavesConfig.mcTechnicalMode && !this.level().paperConfig().collisions.allowPlayerCrammingDamage && damageSource == damageSources().cramming(); // Paper - disable player cramming // Leaves - mc technical survival mode
+ return super.isInvulnerableTo(damageSource) || this.isChangingDimension() || !org.leavesmc.leaves.LeavesConfig.mcTechnicalMode && !this.level().paperConfig().collisions.allowPlayerCrammingDamage && damageSource == damageSources().cramming(); // Paper - disable player cramming // Leaves - mc technical survival mode
}
@Override
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
index 036640d49a5e891e9a0f767abe33f1f51d6d4cde..c635ea132c6a5e0f05165a6626d0d9f36fbb0c48 100644
index d8e440e14b72dc48ae97244f1bed2c06abd997ab..c207bb1aa756a68dfbd397aa7ed40e9647fc8fec 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
@@ -68,7 +68,7 @@ public class EndCrystal extends Entity {
@@ -86,81 +86,81 @@ index 036640d49a5e891e9a0f767abe33f1f51d6d4cde..c635ea132c6a5e0f05165a6626d0d9f3
}
// Paper start - Fix invulnerable end crystals
- if (this.level().paperConfig().unsupportedSettings.fixInvulnerableEndCrystalExploit && this.generatedByDragonFight && this.isInvulnerable()) {
+ if (!top.leavesmc.leaves.LeavesConfig.mcTechnicalMode && this.level().paperConfig().unsupportedSettings.fixInvulnerableEndCrystalExploit && this.generatedByDragonFight && this.isInvulnerable()) { // Leaves - mc technical survival mode
+ if (!org.leavesmc.leaves.LeavesConfig.mcTechnicalMode && this.level().paperConfig().unsupportedSettings.fixInvulnerableEndCrystalExploit && this.generatedByDragonFight && this.isInvulnerable()) { // Leaves - mc technical survival mode
if (!java.util.Objects.equals(((ServerLevel) this.level()).uuid, this.getOriginWorld())
|| ((ServerLevel) this.level()).getDragonFight() == null
|| ((ServerLevel) this.level()).getDragonFight().respawnStage == null
diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
index e712bd07ea2946167782473a536e0c72fab4bccd..89681445d9d66a7fdbab50c39fd598fb45cd7441 100644
index f1f352ec0e51f5db59254841a06c176c5a876fc9..eb9529b4bf20f828fd7e8abf6895baf0c7900dcc 100644
--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
@@ -72,7 +72,7 @@ public class PrimedTnt extends Entity implements TraceableEntity {
@@ -75,7 +75,7 @@ public class PrimedTnt extends Entity implements TraceableEntity {
@Override
public void tick() {
- if (this.level().spigotConfig.maxTntTicksPerTick > 0 && ++this.level().spigotConfig.currentPrimedTnt > this.level().spigotConfig.maxTntTicksPerTick) { return; } // Spigot
+ if (this.level().spigotConfig.maxTntTicksPerTick > 0 && ++this.level().spigotConfig.currentPrimedTnt > (top.leavesmc.leaves.LeavesConfig.mcTechnicalMode ? 2000 : this.level().spigotConfig.maxTntTicksPerTick)) { return; } // Spigot // Leaves - mc technical survival mode
if (!this.isNoGravity()) {
this.setDeltaMovement(this.getDeltaMovement().add(0.0D, -0.04D, 0.0D));
}
+ if (this.level().spigotConfig.maxTntTicksPerTick > 0 && ++this.level().spigotConfig.currentPrimedTnt > (org.leavesmc.leaves.LeavesConfig.mcTechnicalMode ? 2000 : this.level().spigotConfig.maxTntTicksPerTick)) { return; } // Spigot // Leaves - mc technical survival mode
this.applyGravity();
this.move(MoverType.SELF, this.getDeltaMovement());
// Paper start - Configurable TNT height nerf
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
index 156809090f1f83ad68e7e2477a3cfddac5757a8e..7f191b04f7c84f3188b96c108616424bf54170cb 100644
index 74c596264d4da551437bd2a23e1c70022cfc73fc..71d2f2a98ede3ba2992ae3745d78b33c9d999650 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
@@ -119,7 +119,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
@@ -120,7 +120,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
if (nbt.hasUUID("Owner")) {
this.ownerUUID = nbt.getUUID("Owner");
this.cachedOwner = null;
- if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit) { this.ownerUUID = null; } // Paper - Reset pearls when they stop being ticked; Don't store shooter name for pearls to block enderpearl travel exploit
+ if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && !top.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { this.ownerUUID = null; } // Paper - Reset pearls when they stop being ticked; Don't store shooter name for pearls to block enderpearl travel exploit // Leaves - mc technical mode
+ if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && !org.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { this.ownerUUID = null; } // Paper - Reset pearls when they stop being ticked; Don't store shooter name for pearls to block enderpearl travel exploit // Leaves - mc technical mode
}
this.leftOwner = nbt.getBoolean("LeftOwner");
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
index 93fbf20c6e5ded31570415c30b837f5dc0dd5d42..667a480b7c546bb130bbd32a8ae7ce85d37a6b0a 100644
index 9c72271382fa0b6be5f38b45577fb1ae81ce80a3..a9fda9cb7e8266c21aba70d5b1890b30900a5b00 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -95,7 +95,7 @@ public final class NaturalSpawner {
@@ -90,7 +90,7 @@ public final class NaturalSpawner {
if (enumcreaturetype != MobCategory.MISC) {
// Paper start - Only count natural spawns
- if (!entity.level().paperConfig().entities.spawning.countAllMobsForSpawning &&
+ if (!top.leavesmc.leaves.LeavesConfig.mcTechnicalMode && !entity.level().paperConfig().entities.spawning.countAllMobsForSpawning && // Leaves - mc technical survival mode
+ if (!org.leavesmc.leaves.LeavesConfig.mcTechnicalMode && !entity.level().paperConfig().entities.spawning.countAllMobsForSpawning && // Leaves - mc technical survival mode
!(entity.spawnReason == org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL ||
entity.spawnReason == org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CHUNK_GEN)) {
continue;
diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index 21a64f3a704fb362ed3aade559d55c0804ae5023..006e990d57c7ad1081f63402ef85a3ba856fe329 100644
index 592b330f187fb5eca51d60911bbebbaeaf46ef87..b08b7ffbcfbc6a12d74cadf878fd069f7a1345cb 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -292,7 +292,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
@@ -280,7 +280,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
origItemStack.setCount(originalItemCount);
}
}
- if (foundItem && level.paperConfig().hopper.cooldownWhenFull) { // Inventory was full - cooldown
+ if (foundItem && level.paperConfig().hopper.cooldownWhenFull && !top.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Inventory was full - cooldown // Leaves
+ if (foundItem && level.paperConfig().hopper.cooldownWhenFull && !org.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Inventory was full - cooldown // Leaves
hopper.setCooldown(level.spigotConfig.hopperTransfer);
}
return false;
@@ -333,7 +333,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
@@ -321,7 +321,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
}
origItemStack.setCount(originalItemCount);
- if (level.paperConfig().hopper.cooldownWhenFull) {
+ if (level.paperConfig().hopper.cooldownWhenFull && !top.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Leaves
+ if (level.paperConfig().hopper.cooldownWhenFull && !org.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { // Leaves
cooldownHopper(hopper);
}
diff --git a/src/main/java/top/leavesmc/leaves/util/McTechnicalModeHelper.java b/src/main/java/top/leavesmc/leaves/util/McTechnicalModeHelper.java
diff --git a/src/main/java/org/leavesmc/leaves/util/McTechnicalModeHelper.java b/src/main/java/org/leavesmc/leaves/util/McTechnicalModeHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..4822a3806c55126e219364c3f76d0159a6f6453e
index 0000000000000000000000000000000000000000..76452b5a2c97160da6b4605d9c094dbc5c62861b
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/McTechnicalModeHelper.java
+++ b/src/main/java/org/leavesmc/leaves/util/McTechnicalModeHelper.java
@@ -0,0 +1,27 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import io.papermc.paper.configuration.GlobalConfiguration;
+import top.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.LeavesConfig;
+
+import java.util.Map;
+
@@ -179,7 +179,7 @@ index 0000000000000000000000000000000000000000..4822a3806c55126e219364c3f76d0159
+ GlobalConfiguration.get().packetLimiter.allPackets = new GlobalConfiguration.PacketLimiter.PacketLimit(GlobalConfiguration.get().packetLimiter.allPackets.interval(),
+ 5000.0, GlobalConfiguration.get().packetLimiter.allPackets.action());
+ GlobalConfiguration.get().packetLimiter.overrides = Map.of();
+ GlobalConfiguration.get().unsupportedSettings.allowGrindstoneOverstacking = true;
+ // GlobalConfiguration.get().unsupportedSettings.allowGrindstoneOverstacking = true;
+ GlobalConfiguration.get().itemValidation.resolveSelectorsInBooks = true;
+ GlobalConfiguration.get().scoreboards.saveEmptyScoreboardTeams = true;
+ }

View File

@@ -6,23 +6,23 @@ Subject: [PATCH] Return nether portal fix
This patch is powered by NetherPortalFix(https://github.com/TwelveIterationMods/NetherPortalFix)
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 362ec0d4de4f77511651b28d47b8bdac626f935b..6e084edb04d5bbcd5b25ccd820b3950ea89408d4 100644
index 2945dc0d1ad1c50fded0d61e9dd582bbe20bbecd..bab6ae23c77cb9dc575625720ac31ae67a28d5d9 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -187,6 +187,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.inventory.MainHand;
import top.leavesmc.leaves.bot.ServerBot;
+import top.leavesmc.leaves.util.ReturnPortalManager;
// CraftBukkit end
public class ServerPlayer extends Player {
@@ -1293,6 +1294,24 @@ public class ServerPlayer extends Player {
@@ -19,6 +19,7 @@ import java.util.UUID;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import net.minecraft.BlockUtil;
+import org.leavesmc.leaves.util.ReturnPortalManager;
import net.minecraft.ChatFormatting;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
@@ -1370,6 +1371,24 @@ public class ServerPlayer extends Player {
PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver1.getWorld());
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
// CraftBukkit end
+ // Leaves start - nether portal fix
+ if (top.leavesmc.leaves.LeavesConfig.netherPortalFix) {
+ if (org.leavesmc.leaves.LeavesConfig.netherPortalFix) {
+ final ResourceKey<Level> fromDim = worldserver1.dimension();
+ final ResourceKey<Level> toDim = level().dimension();
+ final ResourceKey<Level> OVERWORLD = Level.OVERWORLD;
@@ -42,12 +42,12 @@ index 362ec0d4de4f77511651b28d47b8bdac626f935b..6e084edb04d5bbcd5b25ccd820b3950e
}
// Paper start - Reset shield blocking on dimension change
if (this.isBlocking()) {
@@ -1345,6 +1364,30 @@ public class ServerPlayer extends Player {
@@ -1422,6 +1441,30 @@ public class ServerPlayer extends Player {
protected Optional<BlockUtil.FoundRectangle> getExitPortal(ServerLevel worldserver, BlockPos blockposition, boolean flag, WorldBorder worldborder, int searchRadius, boolean canCreatePortal, int createRadius) { // CraftBukkit
Optional<BlockUtil.FoundRectangle> optional = super.getExitPortal(worldserver, blockposition, flag, worldborder, searchRadius, canCreatePortal, createRadius); // CraftBukkit
+ // Leaves start - nether portal fix
+ if (top.leavesmc.leaves.LeavesConfig.netherPortalFix) {
+ if (org.leavesmc.leaves.LeavesConfig.netherPortalFix) {
+ BlockPos fromPos = blockPosition();
+ final ResourceKey<Level> fromDim = level().dimension();
+ final ResourceKey<Level> toDim = level().dimension();
@@ -74,23 +74,23 @@ index 362ec0d4de4f77511651b28d47b8bdac626f935b..6e084edb04d5bbcd5b25ccd820b3950e
return optional;
} else {
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 82751434c31fe8825f32921f498fd0156da15454..03c278836208a65b77030b629f2b7678ded29b03 100644
index 00809b615f65b2f4985856673430d8ba68525765..a65aede101004f23f76ce08781ab0a94d4c9113e 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -122,6 +122,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent;
// CraftBukkit end
import top.leavesmc.leaves.bot.ServerBot;
+import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix
public abstract class PlayerList {
@@ -1004,6 +1005,24 @@ public abstract class PlayerList {
@@ -26,6 +26,7 @@ import java.util.function.Predicate;
import javax.annotation.Nullable;
import net.minecraft.ChatFormatting;
import net.minecraft.FileUtil;
+import org.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.BlockPos;
import net.minecraft.core.LayeredRegistryAccess;
@@ -1003,6 +1004,24 @@ public abstract class PlayerList {
if (fromWorld != location.getWorld()) {
PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(entityplayer.getBukkitEntity(), fromWorld);
this.server.server.getPluginManager().callEvent(event);
+ // Leaves start - nether portal fix
+ if (top.leavesmc.leaves.LeavesConfig.netherPortalFix) {
+ if (org.leavesmc.leaves.LeavesConfig.netherPortalFix) {
+ final ResourceKey<Level> fromDim = entityplayer.level().dimension();
+ final ResourceKey<Level> toDim = entityplayer1.level().dimension();
+ final ResourceKey<Level> OVERWORLD = Level.OVERWORLD;
@@ -111,10 +111,10 @@ index 82751434c31fe8825f32921f498fd0156da15454..03c278836208a65b77030b629f2b7678
// Save player file again if they were disconnected
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 15c8e9214b7df1cf1e9252a17b7acfc080e547a3..ffa9ada2e803bc77f8cae4be81ac4b5c2eee0b7f 100644
index 8e5bfb7579b528d68b270665c02588bfa39643a3..3ad2f5234925e7f454d2b2bcb507493cdc3e454a 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -241,7 +241,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -251,7 +251,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
protected ItemStack useItem;
public int useItemRemaining;
protected int fallFlyTicks;
@@ -123,13 +123,13 @@ index 15c8e9214b7df1cf1e9252a17b7acfc080e547a3..ffa9ada2e803bc77f8cae4be81ac4b5c
private Optional<BlockPos> lastClimbablePos;
@Nullable
private DamageSource lastDamageSource;
diff --git a/src/main/java/top/leavesmc/leaves/util/ReturnPortalManager.java b/src/main/java/top/leavesmc/leaves/util/ReturnPortalManager.java
diff --git a/src/main/java/org/leavesmc/leaves/util/ReturnPortalManager.java b/src/main/java/org/leavesmc/leaves/util/ReturnPortalManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..24f887cbe608eea3beb7dc69cabdca7f32a66a9d
index 0000000000000000000000000000000000000000..d7066d268e7a3b4b2c1b1ef28491078997989d4c
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/ReturnPortalManager.java
+++ b/src/main/java/org/leavesmc/leaves/util/ReturnPortalManager.java
@@ -0,0 +1,105 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import net.minecraft.BlockUtil;
+import net.minecraft.core.BlockPos;

View File

@@ -4,13 +4,22 @@ Date: Wed, 25 Jan 2023 11:03:53 +0800
Subject: [PATCH] Appleskin Protocol
diff --git a/src/main/java/top/leavesmc/leaves/protocol/AppleSkinProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/AppleSkinProtocol.java
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+
diff --git a/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java b/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java
new file mode 100644
index 0000000000000000000000000000000000000000..6fd6a1c9ef54c95e452e08a69f9ddb1d6600e651
index 0000000000000000000000000000000000000000..6662ecf8a9342db2e0ded507d7420319388f9974
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/AppleSkinProtocol.java
+++ b/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java
@@ -0,0 +1,106 @@
+package top.leavesmc.leaves.protocol;
+package org.leavesmc.leaves.protocol;
+
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.MinecraftServer;
@@ -18,10 +27,10 @@ index 0000000000000000000000000000000000000000..6fd6a1c9ef54c95e452e08a69f9ddb1d
+import net.minecraft.world.food.FoodData;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.LeavesConfig;
+import top.leavesmc.leaves.protocol.core.LeavesProtocol;
+import top.leavesmc.leaves.protocol.core.ProtocolHandler;
+import top.leavesmc.leaves.protocol.core.ProtocolUtils;
+import org.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.protocol.core.LeavesProtocol;
+import org.leavesmc.leaves.protocol.core.ProtocolHandler;
+import org.leavesmc.leaves.protocol.core.ProtocolUtils;
+
+import java.util.HashMap;
+import java.util.HashSet;

View File

@@ -4,33 +4,42 @@ Date: Fri, 27 Jan 2023 09:42:57 +0800
Subject: [PATCH] Xaero Map Protocol
diff --git a/.gitignore b/.gitignore
index 1ad93453221244f880855b510e888e759275b640..3811c0d849a3eb028ed1a6b7a2d4747f7f570448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,4 +46,3 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
-
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 03c278836208a65b77030b629f2b7678ded29b03..6e5a7edfbc8781def735d0b2250888288560fbc4 100644
index a65aede101004f23f76ce08781ab0a94d4c9113e..c9e904ab960739c5b64f44ef92e3a02159149e66 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1323,6 +1323,7 @@ public abstract class PlayerList {
@@ -1322,6 +1322,7 @@ public abstract class PlayerList {
player.connection.send(new ClientboundInitializeBorderPacket(worldborder));
player.connection.send(new ClientboundSetTimePacket(world.getGameTime(), world.getDayTime(), world.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)));
player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(world.getSharedSpawnPos(), world.getSharedSpawnAngle()));
+ top.leavesmc.leaves.protocol.XaeroMapProtocol.onSendWorldInfo(player); // Leaves - xaero map protocol
+ org.leavesmc.leaves.protocol.XaeroMapProtocol.onSendWorldInfo(player); // Leaves - xaero map protocol
if (world.isRaining()) {
// CraftBukkit start - handle player weather
// entityplayer.connection.send(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.START_RAINING, 0.0F));
diff --git a/src/main/java/top/leavesmc/leaves/protocol/XaeroMapProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/XaeroMapProtocol.java
diff --git a/src/main/java/org/leavesmc/leaves/protocol/XaeroMapProtocol.java b/src/main/java/org/leavesmc/leaves/protocol/XaeroMapProtocol.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0317bcaee60e8680812119bf94e1032d7816023
index 0000000000000000000000000000000000000000..14e66b8eb6f2d768e03439df7f4dedc9ba8624dd
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/protocol/XaeroMapProtocol.java
+++ b/src/main/java/org/leavesmc/leaves/protocol/XaeroMapProtocol.java
@@ -0,0 +1,42 @@
+package top.leavesmc.leaves.protocol;
+package org.leavesmc.leaves.protocol;
+
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.level.ServerPlayer;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.LeavesConfig;
+import top.leavesmc.leaves.protocol.core.LeavesProtocol;
+import top.leavesmc.leaves.protocol.core.ProtocolUtils;
+import org.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.protocol.core.LeavesProtocol;
+import org.leavesmc.leaves.protocol.core.ProtocolUtils;
+
+@LeavesProtocol(namespace = {"xaerominimap", "xaeroworldmap"})
+public class XaeroMapProtocol {

View File

@@ -4,6 +4,15 @@ Date: Thu, 2 Feb 2023 16:01:18 +0800
Subject: [PATCH] Leaves Extra Yggdrasil Service
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+
diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperAuthenticationService.java b/src/main/java/com/destroystokyo/paper/profile/PaperAuthenticationService.java
index 48e774677edf17d4a99ae9ed23d1b371dab41abb..21409ff86db65c00d92bff9eae8bdeb3a872a361 100644
--- a/src/main/java/com/destroystokyo/paper/profile/PaperAuthenticationService.java
@@ -31,20 +40,20 @@ index bfc1e27c37689c1fbb927404a7176780a439a057..bc8ab50ef1390a2c51110a89dc43db58
private final String baseUrl;
private final URL joinUrl;
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
index bc391d27399d8c22e78735ca39aa8ab45efb6413..89e1e1ee0fce2cc6b3a305dfca937ab777edbb5e 100644
index 5443013060b62e3bfcc51cddca96d1c0bc59fe72..66c2b5caa08ab1659a9412c4b21404e90d8360f1 100644
--- a/src/main/java/net/minecraft/server/Main.java
+++ b/src/main/java/net/minecraft/server/Main.java
@@ -187,7 +187,7 @@ public class Main {
@@ -190,7 +190,7 @@ public class Main {
file = new File(bukkitConfiguration.getString("settings.world-container", "."));
}
// Paper end - fix SPIGOT-5824
- Services services = Services.create(new com.destroystokyo.paper.profile.PaperAuthenticationService(Proxy.NO_PROXY), file, userCacheFile, optionset); // Paper - pass OptionSet to load paper config files; override authentication service; fix world-container
+ Services services = Services.create(new top.leavesmc.leaves.profile.LeavesAuthenticationService(Proxy.NO_PROXY), file, userCacheFile, optionset); // Paper - pass OptionSet to load paper config files; override authentication service; fix world-container // Leaves - extra-yggdrasil-service
+ Services services = Services.create(new org.leavesmc.leaves.profile.LeavesAuthenticationService(Proxy.NO_PROXY), file, userCacheFile, optionset); // Paper - pass OptionSet to load paper config files; override authentication service; fix world-container // Leaves - extra-yggdrasil-service
// CraftBukkit start
String s = (String) Optional.ofNullable((String) optionset.valueOf("world")).orElse(dedicatedserversettings.getProperties().levelName);
LevelStorageSource convertable = LevelStorageSource.createDefault(file.toPath());
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 690ae3e77d753af8351eb17bb5c35fbd2657f258..d615062782fa13e5df1d029b15967fd7f258c998 100644
index 35a67136f5e22c5f9b65841fb7c10309e0b0e1c2..81e557588bf91bdd4654833ec967f2a727823d27 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -259,7 +259,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -55,14 +64,14 @@ index 690ae3e77d753af8351eb17bb5c35fbd2657f258..d615062782fa13e5df1d029b15967fd7
+ public final Services services; // Leaves - protected -> public
private long lastServerStatus;
public final Thread serverThread;
private long nextTickTimeNanos;
diff --git a/src/main/java/top/leavesmc/leaves/profile/LeavesAuthenticationService.java b/src/main/java/top/leavesmc/leaves/profile/LeavesAuthenticationService.java
private long lastTickNanos;
diff --git a/src/main/java/org/leavesmc/leaves/profile/LeavesAuthenticationService.java b/src/main/java/org/leavesmc/leaves/profile/LeavesAuthenticationService.java
new file mode 100644
index 0000000000000000000000000000000000000000..3da207a13fce243bf880c8a4f7054cf20997991d
index 0000000000000000000000000000000000000000..6f14a66d78709fae9fecbefc80e3489b68e8d0c7
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/profile/LeavesAuthenticationService.java
+++ b/src/main/java/org/leavesmc/leaves/profile/LeavesAuthenticationService.java
@@ -0,0 +1,18 @@
+package top.leavesmc.leaves.profile;
+package org.leavesmc.leaves.profile;
+
+import com.destroystokyo.paper.profile.PaperAuthenticationService;
+import com.mojang.authlib.minecraft.MinecraftSessionService;
@@ -80,13 +89,13 @@ index 0000000000000000000000000000000000000000..3da207a13fce243bf880c8a4f7054cf2
+ return new LeavesMinecraftSessionService(this.getServicesKeySet(), this.getProxy(), this.environment);
+ }
+}
diff --git a/src/main/java/top/leavesmc/leaves/profile/LeavesMinecraftSessionService.java b/src/main/java/top/leavesmc/leaves/profile/LeavesMinecraftSessionService.java
diff --git a/src/main/java/org/leavesmc/leaves/profile/LeavesMinecraftSessionService.java b/src/main/java/org/leavesmc/leaves/profile/LeavesMinecraftSessionService.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bfa0d0c12ac2a44968cd39b6d9f406defb23c07
index 0000000000000000000000000000000000000000..c99092acd7aecb7f4c4c5cd1327991d9d468c5c5
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/profile/LeavesMinecraftSessionService.java
+++ b/src/main/java/org/leavesmc/leaves/profile/LeavesMinecraftSessionService.java
@@ -0,0 +1,102 @@
+package top.leavesmc.leaves.profile;
+package org.leavesmc.leaves.profile;
+
+import com.destroystokyo.paper.profile.PaperMinecraftSessionService;
+import com.mojang.authlib.Environment;
@@ -102,8 +111,8 @@ index 0000000000000000000000000000000000000000..9bfa0d0c12ac2a44968cd39b6d9f406d
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.level.ServerPlayer;
+import org.jetbrains.annotations.Nullable;
+import top.leavesmc.leaves.LeavesConfig;
+import top.leavesmc.leaves.bot.ServerBot;
+import org.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.bot.ServerBot;
+
+import java.net.InetAddress;
+import java.net.Proxy;

View File

@@ -5,55 +5,55 @@ Subject: [PATCH] Use vanilla random config
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index f491c1d402499e68191d4cdc9c8ef2e7caae9c7b..017efdee91fe6326c8e0270c294276b24b42604a 100644
index bf8e3d510631e418eb6d2e641b51a1220bee2d7d..d6b5514dfe94b48a81ddd62b57a5d72b0510a61f 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -578,7 +578,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -580,7 +580,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.bb = Entity.INITIAL_AABB;
this.stuckSpeedMultiplier = Vec3.ZERO;
this.nextStep = 1.0F;
- this.random = SHARED_RANDOM; // Paper - Share random for entities to make them more random
+ this.random = top.leavesmc.leaves.LeavesConfig.useVanillaRandom ? RandomSource.create() : SHARED_RANDOM; // Paper - Share random for entities to make them more random // Leaves - vanilla plz
+ this.random = org.leavesmc.leaves.LeavesConfig.useVanillaRandom ? RandomSource.create() : SHARED_RANDOM; // Paper - Share random for entities to make them more random // Leaves - vanilla plz
this.remainingFireTicks = -this.getFireImmuneTicks();
this.fluidHeight = new Object2DoubleArrayMap(2);
this.fluidOnEyes = new HashSet();
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
index f9521a6e115f0c975a7885b024c99eae300b63bf..358b4efefbf9de576194040ca5da9b877afa3e1b 100644
index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..3c9560b63e77059ea32ccf7844817d2d22881162 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -1036,7 +1036,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -1018,7 +1018,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
BeeGoToHiveGoal() {
super();
- this.travellingTicks = Bee.this.random.nextInt(10); // CraftBukkit - SPIGOT-7495: Give Bees another chance and let them use their own random, avoid concurrency issues
+ this.travellingTicks = top.leavesmc.leaves.LeavesConfig.useVanillaRandom ? Bee.this.level().random.nextInt(10) : Bee.this.random.nextInt(10); // CraftBukkit - SPIGOT-7495: Give Bees another chance and let them use their own random, avoid concurrency issues // Leaves - why no vanilla
+ this.travellingTicks = org.leavesmc.leaves.LeavesConfig.useVanillaRandom ? Bee.this.level().random.nextInt(10) : Bee.this.random.nextInt(10); // CraftBukkit - SPIGOT-7495: Give Bees another chance and let them use their own random, avoid concurrency issues // Leaves - why no vanilla
this.blacklistedTargets = Lists.newArrayList();
this.setFlags(EnumSet.of(Goal.Flag.MOVE));
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
index 4f32597c7af34d599f6658fe4962d41624e60419..23efed794def54b0563ed5ab1a43773f3bb7378b 100644
index 43b4ea96c5c4a6234e5b83d41db9b85c1fe27b8f..7e5294d856a757e55fe873d92d1de00a6a7b570e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
@@ -44,7 +44,7 @@ public class Squid extends WaterAnimal {
@@ -42,7 +42,7 @@ public class Squid extends WaterAnimal {
public Squid(EntityType<? extends Squid> type, Level world) {
super(type, world);
- //this.random.setSeed((long)this.getId()); // Paper - Share random for entities to make them more random
+ if (top.leavesmc.leaves.LeavesConfig.useVanillaRandom) this.random.setSeed(this.getId()); // Paper - Share random for entities to make them more random // Leaves - vanilla plz
+ if (org.leavesmc.leaves.LeavesConfig.useVanillaRandom) this.random.setSeed(this.getId()); // Paper - Share random for entities to make them more random // Leaves - vanilla plz
this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
}
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index b5b522c1307a58453aa293aaa808dd9ec86901fc..45dc79f877bbb4a5384c21a32dc009270b8dc021 100644
index d3fa592892fc72c8fc8f23e8e477eb88902bba16..1bb762349c868e6a68b46366710dbbee60466eaf 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -74,7 +74,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
@@ -78,7 +78,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
// Paper start - Don't use level random in entity constructors (to make them thread-safe)
this(EntityType.ITEM, world);
this.setPos(x, y, z);
- this.setDeltaMovement(this.random.nextDouble() * 0.2D - 0.1D, 0.2D, this.random.nextDouble() * 0.2D - 0.1D);
+ // Leaves start - vanilla yes, paper no
+ if (top.leavesmc.leaves.LeavesConfig.useVanillaRandom) {
+ if (org.leavesmc.leaves.LeavesConfig.useVanillaRandom) {
+ this.setDeltaMovement(world.random.nextDouble() * 0.2D - 0.1D, 0.2D, world.random.nextDouble() * 0.2D - 0.1D);
+ } else {
+ this.setDeltaMovement(this.random.nextDouble() * 0.2D - 0.1D, 0.2D, this.random.nextDouble() * 0.2D - 0.1D);
@@ -63,15 +63,15 @@ index b5b522c1307a58453aa293aaa808dd9ec86901fc..45dc79f877bbb4a5384c21a32dc00927
// Paper end - Don't use level random in entity constructors
// Leaves start - stackable shulker boxes
diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
index 89681445d9d66a7fdbab50c39fd598fb45cd7441..6c6c953b2ea5b461ec8ed9a8adf0d28c78ea21d9 100644
index eb9529b4bf20f828fd7e8abf6895baf0c7900dcc..248a94f366d9fb30112c65d151b19879c684b803 100644
--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
@@ -44,7 +44,7 @@ public class PrimedTnt extends Entity implements TraceableEntity {
@@ -42,7 +42,7 @@ public class PrimedTnt extends Entity implements TraceableEntity {
public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) {
this(EntityType.TNT, world);
this.setPos(x, y, z);
- double d3 = this.random.nextDouble() * 6.2831854820251465D; // Paper - Don't use level random in entity constructors
+ double d3 = (top.leavesmc.leaves.LeavesConfig.useVanillaRandom ? world.random.nextDouble() : this.random.nextDouble()) * 6.2831854820251465D; // Paper - Don't use level random in entity constructors // Leaves - why?
+ double d3 = (org.leavesmc.leaves.LeavesConfig.useVanillaRandom ? world.random.nextDouble() : this.random.nextDouble()) * 6.2831854820251465D; // Paper - Don't use level random in entity constructors // Leaves - why?
this.setDeltaMovement(-Math.sin(d3) * 0.02D, 0.20000000298023224D, -Math.cos(d3) * 0.02D);
this.setFuse(80);

View File

@@ -5,25 +5,25 @@ Subject: [PATCH] Fix update suppression crash
diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
index 070231080052ef3d0da179a8ed8b754ed6f8dd11..84530927aa4517709ba3f38d27755bb5d2eaac34 100644
index d6daa27a8d7aca00b181e90d789f4249e8437d29..61b0e26a34bf94b10ce0ac78a662d5e97ad4cc9a 100644
--- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java
+++ b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
@@ -51,6 +51,10 @@ public class PacketUtils {
@@ -52,6 +52,10 @@ public class PacketUtils {
if (listener.shouldHandleMessage(packet)) {
try {
packet.handle(listener);
+ // Leaves start - update suppression crash fix
+ } catch (top.leavesmc.leaves.util.UpdateSuppressionException exception) {
+ top.leavesmc.leaves.LeavesLogger.LOGGER.info(exception.getMessage());
+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) {
+ org.leavesmc.leaves.LeavesLogger.LOGGER.info(exception.getMessage());
+ // Leaves start - update suppression crash fix
} catch (Exception exception) {
label25:
{
if (exception instanceof ReportedException) {
ReportedException reportedexception = (ReportedException) exception;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 4091c7b992d885fa14e03df7fa8c5edc0c25f76d..c5c9a9a6f42da7b71103fd754661534dbc9fc13e 100644
index 81e557588bf91bdd4654833ec967f2a727823d27..c2b2af0a2a4480aa09c0f1a43967ab41cb0e80b1 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1701,7 +1701,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1759,7 +1759,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.push("tick");
try {
@@ -31,28 +31,28 @@ index 4091c7b992d885fa14e03df7fa8c5edc0c25f76d..c5c9a9a6f42da7b71103fd754661534d
+ // Leaves start
+ try {
+ worldserver.tick(shouldKeepTicking);
+ } catch (top.leavesmc.leaves.util.UpdateSuppressionException e) {
+ top.leavesmc.leaves.LeavesLogger.LOGGER.info(e.getMessage());
+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException e) {
+ org.leavesmc.leaves.LeavesLogger.LOGGER.info(e.getMessage());
+ }
+ // Leaves end
// Paper start
for (final io.papermc.paper.chunk.SingleThreadChunkRegionManager regionManager : worldserver.getChunkSource().chunkMap.regionManagers) {
regionManager.recalculateRegions();
diff --git a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
index 62ded304c08678750ae8c56c7de876ac5f39940b..fb7cffcf77a89202cb87b347bea518cc89987afd 100644
index 68431244432a4342041e63218cf7d1eb4eb7ebc0..aeb0577abcc0790edaece34939a6756424610dbc 100644
--- a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
@@ -254,7 +254,17 @@ public class ShulkerBoxBlock extends BaseEntityBlock {
@@ -231,7 +231,17 @@ public class ShulkerBoxBlock extends BaseEntityBlock {
@Override
public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) {
protected int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) {
- return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(world.getBlockEntity(pos));
+ // Leaves start - fix update suppression crash
+ if (top.leavesmc.leaves.LeavesConfig.updateSuppressionCrashFix) {
+ if (org.leavesmc.leaves.LeavesConfig.updateSuppressionCrashFix) {
+ try {
+ return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(world.getBlockEntity(pos));
+ } catch (ClassCastException ex) {
+ throw new top.leavesmc.leaves.util.UpdateSuppressionException(null, pos);
+ throw new org.leavesmc.leaves.util.UpdateSuppressionException(null, pos);
+ }
+ } else {
+ return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(world.getBlockEntity(pos));
@@ -62,34 +62,34 @@ index 62ded304c08678750ae8c56c7de876ac5f39940b..fb7cffcf77a89202cb87b347bea518cc
@Override
diff --git a/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
index 19faa8f5f891c1ffbed0af8391dee8202433c447..2ef9510ee382dfcc25a213684c0acdbc352811df 100644
index e679b40b9628b0eb7152978ef641f9c918c4c8b2..02fa557a129cd85abae0e57be5edc6241943a488 100644
--- a/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
+++ b/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
@@ -66,9 +66,17 @@ public interface NeighborUpdater {
state.neighborChanged(world, pos, sourceBlock, sourcePos, notify);
state.handleNeighborChanged(world, pos, sourceBlock, sourcePos, notify);
// Spigot Start
} catch (StackOverflowError ex) {
+ // Leaves start - fix update suppression crash
+ if (top.leavesmc.leaves.LeavesConfig.updateSuppressionCrashFix) {
+ throw new top.leavesmc.leaves.util.UpdateSuppressionException(pos, sourcePos);
+ if (org.leavesmc.leaves.LeavesConfig.updateSuppressionCrashFix) {
+ throw new org.leavesmc.leaves.util.UpdateSuppressionException(pos, sourcePos);
+ }
world.lastPhysicsProblem = new BlockPos(pos);
// Spigot End
} catch (Throwable throwable) {
+ if (top.leavesmc.leaves.LeavesConfig.updateSuppressionCrashFix) {
+ throw new top.leavesmc.leaves.util.UpdateSuppressionException(pos, sourcePos);
+ if (org.leavesmc.leaves.LeavesConfig.updateSuppressionCrashFix) {
+ throw new org.leavesmc.leaves.util.UpdateSuppressionException(pos, sourcePos);
+ }
+ // Leaves end - fix update suppression crash
CrashReport crashreport = CrashReport.forThrowable(throwable, "Exception while updating neighbours");
CrashReportCategory crashreportsystemdetails = crashreport.addCategory("Block being updated");
diff --git a/src/main/java/top/leavesmc/leaves/util/UpdateSuppressionException.java b/src/main/java/top/leavesmc/leaves/util/UpdateSuppressionException.java
diff --git a/src/main/java/org/leavesmc/leaves/util/UpdateSuppressionException.java b/src/main/java/org/leavesmc/leaves/util/UpdateSuppressionException.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9a9f3e28bebdaa5038ebf81ac53447182c2bc10
index 0000000000000000000000000000000000000000..77fd58a309b5d3c45f963c4bd1f47d7fc212898e
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/UpdateSuppressionException.java
+++ b/src/main/java/org/leavesmc/leaves/util/UpdateSuppressionException.java
@@ -0,0 +1,33 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import net.minecraft.core.BlockPos;
+

View File

@@ -1,58 +1,68 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Wed, 22 Mar 2023 17:18:23 +0800
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Wed, 8 May 2024 22:19:25 +0800
Subject: [PATCH] Bedrock break list
diff --git a/.gitignore b/.gitignore
index 1ad93453221244f880855b510e888e759275b640..3811c0d849a3eb028ed1a6b7a2d4747f7f570448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,4 +46,3 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
-
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 35433d438e7bcec89363f94ef3903b02b5d02987..1684ea38e395af6236e88ebaeb008526de9f1b4e 100644
index c2b2af0a2a4480aa09c0f1a43967ab41cb0e80b1..21b659382656f01d7576cd0481c831166f7f3229 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1737,6 +1737,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.popPush("server gui refresh");
@@ -1796,6 +1796,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleTick(); // Leaves - protocol
+ top.leavesmc.leaves.util.BreakBedrockList.endTick(); // Leaves - break bedrock list
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleTick(); // Leaves - protocol
+ org.leavesmc.leaves.util.BreakBedrockList.endTick(); // Leaves - break bedrock list
+
for (int i = 0; i < this.tickables.size(); ++i) {
((Runnable) this.tickables.get(i)).run();
}
diff --git a/src/main/java/net/minecraft/server/ServerScoreboard.java b/src/main/java/net/minecraft/server/ServerScoreboard.java
index 76d67d01388ecc1af6b43212e018edc678e84d72..5e8d281760e509dd353b052c29f058ed1f1075aa 100644
index f180001493146ef0d54079a8b2b47ad7decc24ca..fa63d9d13505794742721ca5fa673ff25acde463 100644
--- a/src/main/java/net/minecraft/server/ServerScoreboard.java
+++ b/src/main/java/net/minecraft/server/ServerScoreboard.java
@@ -144,6 +144,7 @@ public class ServerScoreboard extends Scoreboard {
@@ -146,6 +146,7 @@ public class ServerScoreboard extends Scoreboard {
@Override
public void onObjectiveAdded(Objective objective) {
super.onObjectiveAdded(objective);
+ top.leavesmc.leaves.util.BreakBedrockList.onScoreboardAdd(objective); // Leaves - break bedrock list
+ org.leavesmc.leaves.util.BreakBedrockList.onScoreboardAdd(objective); // Leaves - break bedrock list
this.setDirty();
}
@@ -160,6 +161,7 @@ public class ServerScoreboard extends Scoreboard {
@@ -162,6 +163,7 @@ public class ServerScoreboard extends Scoreboard {
@Override
public void onObjectiveRemoved(Objective objective) {
super.onObjectiveRemoved(objective);
+ top.leavesmc.leaves.util.BreakBedrockList.onScoreboardRemove(objective); // Leaves - break bedrock list
+ org.leavesmc.leaves.util.BreakBedrockList.onScoreboardRemove(objective); // Leaves - break bedrock list
if (this.trackedObjectives.contains(objective)) {
this.stopTrackingObjective(objective);
}
diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java
index be74adc86f0ca467f3b59e7b57fd47a8f381d86e..2f2d33d03b3547ffd7ad28d08d1284cd5ece7843 100644
index e0c62227b279a5fe0f3868fbf9ce8c78c515a09c..933d7a7fcf2520fc81d465bc346e461e1ab9b74e 100644
--- a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java
@@ -105,6 +105,11 @@ public class PistonBaseBlock extends DirectionalBlock {
@@ -106,6 +106,11 @@ public class PistonBaseBlock extends DirectionalBlock {
@Override
public void setPlacedBy(Level world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
if (!world.isClientSide) {
+ // Leaves start - break bedrock list
+ if (placer instanceof Player player) {
+ top.leavesmc.leaves.util.BreakBedrockList.onPlayerPlacePiston(world, player, pos);
+ org.leavesmc.leaves.util.BreakBedrockList.onPlayerPlacePiston(world, player, pos);
+ }
+ // Leaves end - break bedrock list
this.checkIfExtend(world, pos, state);
}
@@ -290,13 +295,24 @@ public class PistonBaseBlock extends DirectionalBlock {
@@ -291,13 +296,24 @@ public class PistonBaseBlock extends DirectionalBlock {
}
}
// Paper end - Fix sticky pistons and BlockPistonRetractEvent
@@ -60,7 +70,7 @@ index be74adc86f0ca467f3b59e7b57fd47a8f381d86e..2f2d33d03b3547ffd7ad28d08d1284cd
+ // Leaves start - break bedrock list
+ BlockPos pos1 = pos.relative(enumdirection);
+ if (world.getBlockState(pos1).getBlock() == Blocks.BEDROCK) {
+ top.leavesmc.leaves.util.BreakBedrockList.onPistonBreakBedrock(world, pos1);
+ org.leavesmc.leaves.util.BreakBedrockList.onPistonBreakBedrock(world, pos1);
+ }
+ world.removeBlock(pos1, false);
+ // Leaves end - break bedrock list
@@ -72,19 +82,19 @@ index be74adc86f0ca467f3b59e7b57fd47a8f381d86e..2f2d33d03b3547ffd7ad28d08d1284cd
if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowPermanentBlockBreakExploits || world.getBlockState(headPos) == Blocks.PISTON_HEAD.defaultBlockState().setValue(FACING, enumdirection)) { // double check to make sure we're not a headless piston.
+ // Leaves start - break bedrock list
+ if (world.getBlockState(headPos).getBlock() == Blocks.BEDROCK) {
+ top.leavesmc.leaves.util.BreakBedrockList.onPistonBreakBedrock(world, headPos);
+ org.leavesmc.leaves.util.BreakBedrockList.onPistonBreakBedrock(world, headPos);
+ }
+ // Leaves end - break bedrock list
world.removeBlock(headPos, false);
} else {
((ServerLevel) world).getChunkSource().blockChanged(headPos); // ... fix client desync
diff --git a/src/main/java/top/leavesmc/leaves/util/BreakBedrockList.java b/src/main/java/top/leavesmc/leaves/util/BreakBedrockList.java
diff --git a/src/main/java/org/leavesmc/leaves/util/BreakBedrockList.java b/src/main/java/org/leavesmc/leaves/util/BreakBedrockList.java
new file mode 100644
index 0000000000000000000000000000000000000000..c92607e9f735a029bbb24a7792eeda1c51b1d8a3
index 0000000000000000000000000000000000000000..1c5992f1480a25dbd5967218be2a3a2185d0279e
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/BreakBedrockList.java
+++ b/src/main/java/org/leavesmc/leaves/util/BreakBedrockList.java
@@ -0,0 +1,114 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.Direction;
@@ -96,7 +106,7 @@ index 0000000000000000000000000000000000000000..c92607e9f735a029bbb24a7792eeda1c
+import net.minecraft.world.scores.ScoreHolder;
+import net.minecraft.world.scores.criteria.ObjectiveCriteria;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.LeavesConfig;
+
+import java.util.ArrayList;
+import java.util.HashMap;

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Fix trapdoor feature
diff --git a/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java b/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
index 1027e5e8da4323714a3e7fed8d39264b8b9e50e7..c0c28e905b2cf8db1aff105dd2055702df670ff9 100644
index 2b5fdcb12dcd8730df24113b9a6d295f000dd9f6..527a77b96a06098aaa4adac5ed46b45851bba00b 100644
--- a/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
@@ -153,6 +153,8 @@ public class TrapDoorBlock extends HorizontalDirectionalBlock implements SimpleW

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Wed, 8 May 2024 22:26:38 +0800
Subject: [PATCH] Placeholder for Syncmatica-Protocol
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+

View File

@@ -5,15 +5,15 @@ Subject: [PATCH] Disable distance check for UseItemOnPacket
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 1ff216875a540452b0ce3e5c462a5738c35a3f98..8f2bb7df5c0925b2ef700aebfcbdc539a4dddfe1 100644
index b9b3277c8ed94e0cd30b20b9c00a33eaad48e5ac..21a3e948ee82605bb970e8503be57b0e66373f77 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1932,7 +1932,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
Vec3 vec3d2 = vec3d.subtract(vec3d1);
@@ -1920,7 +1920,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
Vec3 vec3d1 = vec3d.subtract(Vec3.atCenterOf(blockposition));
double d0 = 1.0000001D;
- if (Math.abs(vec3d2.x()) < 1.0000001D && Math.abs(vec3d2.y()) < 1.0000001D && Math.abs(vec3d2.z()) < 1.0000001D) {
+ if (top.leavesmc.leaves.LeavesConfig.disableDistanceCheckForUseItem || (Math.abs(vec3d2.x()) < 1.0000001D && Math.abs(vec3d2.y()) < 1.0000001D && Math.abs(vec3d2.z()) < 1.0000001D)) { // Leaves - disable check
- if (Math.abs(vec3d1.x()) < 1.0000001D && Math.abs(vec3d1.y()) < 1.0000001D && Math.abs(vec3d1.z()) < 1.0000001D) {
+ if (org.leavesmc.leaves.LeavesConfig.disableDistanceCheckForUseItem || (Math.abs(vec3d1.x()) < 1.0000001D && Math.abs(vec3d1.y()) < 1.0000001D && Math.abs(vec3d1.z()) < 1.0000001D)) {
Direction enumdirection = movingobjectpositionblock.getDirection();
this.player.resetLastActionTime();

View File

@@ -5,16 +5,24 @@ Subject: [PATCH] No feather falling trample
diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
index 6e4c852c93f2418ea69e485ed3a10cbe3a6e3bd2..4630cb593cd493c5105c53e70d099f3aa1dd212f 100644
index d59e33e7326489c6d55d316d0130f22235f4c63c..79ef9b8bd2905d4ca3562971823a9bf48e60a038 100644
--- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
@@ -111,6 +111,13 @@ public class FarmBlock extends Block {
@@ -14,6 +14,7 @@ import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level;
@@ -112,6 +113,13 @@ public class FarmBlock extends Block {
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
super.fallOn(world, state, pos, entity, fallDistance); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage.
if (!world.isClientSide && world.random.nextFloat() < fallDistance - 0.5F && entity instanceof LivingEntity && (entity instanceof Player || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) {
+ // Leaves start - noFeatherFallingTrample
+ if (top.leavesmc.leaves.LeavesConfig.noFeatherFallingTrample) {
+ if (net.minecraft.world.item.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.FALL_PROTECTION, (LivingEntity) entity) > 0) {
+ if (org.leavesmc.leaves.LeavesConfig.noFeatherFallingTrample) {
+ if (net.minecraft.world.item.enchantment.EnchantmentHelper.getEnchantmentLevel(Enchantments.FEATHER_FALLING, (LivingEntity) entity) > 0) {
+ return;
+ }
+ }

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Shared villager discounts
diff --git a/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java b/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java
index c7f012674361a323c1efeca4660cd3f46d308ee1..8c35461b80cba062b8711375a2ff82225ce933a6 100644
index c7f012674361a323c1efeca4660cd3f46d308ee1..cea09319941f39dbb958ea7ee78c52c7f34fad9e 100644
--- a/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java
+++ b/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java
@@ -115,6 +115,16 @@ public class GossipContainer {
@@ -13,7 +13,7 @@ index c7f012674361a323c1efeca4660cd3f46d308ee1..8c35461b80cba062b8711375a2ff8222
public int getReputation(UUID target, Predicate<GossipType> gossipTypeFilter) {
GossipContainer.EntityGossips entityGossips = this.gossips.get(target);
+ // Leaves start - sharedVillagerDiscounts
+ if (top.leavesmc.leaves.LeavesConfig.sharedVillagerDiscounts && gossipTypeFilter.test(GossipType.MAJOR_POSITIVE)) {
+ if (org.leavesmc.leaves.LeavesConfig.sharedVillagerDiscounts && gossipTypeFilter.test(GossipType.MAJOR_POSITIVE)) {
+ int otherRep = 0;
+ if (entityGossips != null) {
+ otherRep = entityGossips.weightedValue(v -> gossipTypeFilter.test(v) && !v.equals(GossipType.MAJOR_POSITIVE));

View File

@@ -1,19 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Sun, 10 Dec 2023 13:13:14 +0800
Subject: [PATCH] Disable check out-of-order command
diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
index 0af9ed92824ccf30814eceb6a2c2e5c12661c991..b007bacf311edd71ef7773e43e8aa2ddd4871bd4 100644
--- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
+++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
@@ -37,7 +37,7 @@ public class SignedMessageChain {
throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.chain_broken"), false); // Paper - diff on change (if disconnects, need a new kick event cause)
} else if (playerPublicKey.data().hasExpired()) {
throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey"), false, org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY); // Paper - kick event causes
- } else if (body.timeStamp().isBefore(this.lastTimeStamp)) {
+ } else if (body.timeStamp().isBefore(this.lastTimeStamp) && !top.leavesmc.leaves.LeavesConfig.disableCheckOutOfOrderCommand) { // Leaves - disable check to support Velocity
throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.out_of_order_chat"), true, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes
} else {
this.lastTimeStamp = body.timeStamp();

View File

@@ -5,24 +5,24 @@ Subject: [PATCH] Redstone wire dont connect if on trapdoor
diff --git a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java
index b5a71fd4e2f55bf036c2c697da5d50cc90fc657c..6afe31169948d644f9af68b8eb31a89c53304826 100644
index c131734cad123a35456d18f8a161f77a4ac9ac99..067aaa8cea1534f8b87159ad161917e81a258dac 100644
--- a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java
@@ -174,7 +174,7 @@ public class RedStoneWireBlock extends Block {
@@ -173,7 +173,7 @@ public class RedStoneWireBlock extends Block {
@Override
public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) {
protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) {
if (direction == Direction.DOWN) {
- return !this.canSurviveOn(world, neighborPos, neighborState) ? Blocks.AIR.defaultBlockState() : state;
+ return top.leavesmc.leaves.LeavesConfig.redstoneDontCantOnTrapDoor ? state : !this.canSurviveOn(world, neighborPos, neighborState) ? Blocks.AIR.defaultBlockState() : state; // Leaves - behavior to 1.19
+ return org.leavesmc.leaves.LeavesConfig.redstoneDontCantOnTrapDoor ? state : !this.canSurviveOn(world, neighborPos, neighborState) ? Blocks.AIR.defaultBlockState() : state; // Leaves - behavior to 1.19
} else if (direction == Direction.UP) {
return this.getConnectionState(world, state, pos);
} else {
@@ -233,7 +233,7 @@ public class RedStoneWireBlock extends Block {
@@ -232,7 +232,7 @@ public class RedStoneWireBlock extends Block {
BlockState iblockdata = world.getBlockState(blockposition1);
if (flag) {
- boolean flag1 = iblockdata.getBlock() instanceof TrapDoorBlock || this.canSurviveOn(world, blockposition1, iblockdata);
+ boolean flag1 = (!top.leavesmc.leaves.LeavesConfig.redstoneDontCantOnTrapDoor && iblockdata.getBlock() instanceof TrapDoorBlock) || this.canSurviveOn(world, blockposition1, iblockdata); // Leaves - behavior to 1.19
+ boolean flag1 = (!org.leavesmc.leaves.LeavesConfig.redstoneDontCantOnTrapDoor && iblockdata.getBlock() instanceof TrapDoorBlock) || this.canSurviveOn(world, blockposition1, iblockdata); // Leaves - behavior to 1.19
if (flag1 && RedStoneWireBlock.shouldConnectTo(world.getBlockState(blockposition1.above()))) {
if (iblockdata.isFaceSturdy(world, blockposition1, direction.getOpposite())) {

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Sun, 10 Dec 2023 13:13:14 +0800
Subject: [PATCH] Disable check out-of-order command
diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
index 300929a406905f5ff1ede664d5b99fb0938d4d2e..82d7c376a0a71075f7a013518e284bfe3789f329 100644
--- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
+++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
@@ -45,7 +45,7 @@ public class SignedMessageChain {
SignedMessageLink signedMessageLink = SignedMessageChain.this.nextLink;
if (signedMessageLink == null) {
throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.CHAIN_BROKEN);
- } else if (body.timeStamp().isBefore(SignedMessageChain.this.lastTimeStamp)) {
+ } else if (!org.leavesmc.leaves.LeavesConfig.disableCheckOutOfOrderCommand && body.timeStamp().isBefore(SignedMessageChain.this.lastTimeStamp)) { // Leaves - disable check to support Velocity
this.setChainBroken();
throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.OUT_OF_ORDER_CHAT, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes
} else {

View File

@@ -5,15 +5,15 @@ Subject: [PATCH] Despawn enderman with block
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 9ea374d9baf1612898b67f329e6b5c798ad43b3e..5afa37d2026833c1ded968f957c522436dfe43fd 100644
index 215176eb7152c11c4934c8576ac8c9fa9b2d0833..675a504ac428aaa130dc607bb8e759e156523f33 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -486,7 +486,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -469,7 +469,7 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean requiresCustomPersistence() {
- return super.requiresCustomPersistence() || this.getCarriedBlock() != null;
+ return super.requiresCustomPersistence() || (!top.leavesmc.leaves.LeavesConfig.despawnEndermanWithBlock && this.getCarriedBlock() != null); // Leaves - despawn enderman with block
+ return super.requiresCustomPersistence() || (!org.leavesmc.leaves.LeavesConfig.despawnEndermanWithBlock && this.getCarriedBlock() != null); // Leaves - despawn enderman with block
}
private static class EndermanFreezeWhenLookedAt extends Goal {

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Wed, 8 May 2024 22:27:22 +0800
Subject: [PATCH] Placeholder for Leaves-carpet-support
diff --git a/.gitignore b/.gitignore
index 1ad93453221244f880855b510e888e759275b640..3811c0d849a3eb028ed1a6b7a2d4747f7f570448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,4 +46,3 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
-

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Creative fly no clip
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 567704f61034363e48ef2a5b5566ebdc91682297..8f37983e57321da2a59e047be4a0119118a85a6e 100644
index 093d1388ff90ad59110a37536b6639f939549068..ba6886d0185eda0c7c6d37640c20636cc163ccf4 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -238,8 +238,8 @@ public abstract class Player extends LivingEntity {
@@ -250,8 +250,8 @@ public abstract class Player extends LivingEntity {
@Override
public void tick() {
@@ -19,7 +19,7 @@ index 567704f61034363e48ef2a5b5566ebdc91682297..8f37983e57321da2a59e047be4a01191
this.setOnGround(false);
}
@@ -418,7 +418,7 @@ public abstract class Player extends LivingEntity {
@@ -430,7 +430,7 @@ public abstract class Player extends LivingEntity {
Pose entitypose1;
@@ -28,7 +28,7 @@ index 567704f61034363e48ef2a5b5566ebdc91682297..8f37983e57321da2a59e047be4a01191
if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.CROUCHING)) {
entitypose1 = Pose.CROUCHING;
} else {
@@ -578,7 +578,7 @@ public abstract class Player extends LivingEntity {
@@ -577,7 +577,7 @@ public abstract class Player extends LivingEntity {
}
this.bob += (f - this.bob) * 0.4F;
@@ -37,13 +37,13 @@ index 567704f61034363e48ef2a5b5566ebdc91682297..8f37983e57321da2a59e047be4a01191
AABB axisalignedbb;
if (this.isPassenger() && !this.getVehicle().isRemoved()) {
@@ -2076,6 +2076,21 @@ public abstract class Player extends LivingEntity {
@@ -2099,6 +2099,21 @@ public abstract class Player extends LivingEntity {
@Override
public abstract boolean isSpectator();
+ // Leaves start - creative no clip
+ public boolean isCreativeFlyOrSpectator() {
+ return isSpectator() || (top.leavesmc.leaves.LeavesConfig.creativeNoClip && isCreative() && getAbilities().flying);
+ return isSpectator() || (org.leavesmc.leaves.LeavesConfig.creativeNoClip && isCreative() && getAbilities().flying);
+ }
+
+ public boolean canSpectatingPlace(Level world, BlockState state, BlockPos pos, net.minecraft.world.phys.shapes.CollisionContext context) {
@@ -60,15 +60,15 @@ index 567704f61034363e48ef2a5b5566ebdc91682297..8f37983e57321da2a59e047be4a01191
public boolean canBeHitByProjectile() {
return !this.isSpectator() && super.canBeHitByProjectile();
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index e1ffc1b52641e9cf91f524a83b8c8ee047932d1a..2c799cd93fbba079f53dd37535126a6c0e0261b7 100644
index c21a65d9637739f1040dd27b096101a7a7adc0df..6dec706a2cadedfad0dff5e7784fe9bec65aad6c 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -228,7 +228,7 @@ public class BlockItem extends Item {
@@ -205,7 +205,7 @@ public class BlockItem extends Item {
CollisionContext voxelshapecollision = entityhuman == null ? CollisionContext.empty() : CollisionContext.of(entityhuman);
// CraftBukkit start - store default return
Level world = context.getLevel(); // Paper - Cancel hit for vanished players
- boolean defaultReturn = (!this.mustSurvive() || state.canSurvive(context.getLevel(), context.getClickedPos())) && world.checkEntityCollision(state, entityhuman, voxelshapecollision, context.getClickedPos(), true); // Paper - Cancel hit for vanished players
+ boolean defaultReturn = (!this.mustSurvive() || state.canSurvive(context.getLevel(), context.getClickedPos())) && (top.leavesmc.leaves.LeavesConfig.creativeNoClip && context.getPlayer() != null ? context.getPlayer().canSpectatingPlace(world, state, context.getClickedPos(), voxelshapecollision) : world.checkEntityCollision(state, entityhuman, voxelshapecollision, context.getClickedPos(), true)); // Paper - Cancel hit for vanished players // Leaves - creative no clip
+ boolean defaultReturn = (!this.mustSurvive() || state.canSurvive(context.getLevel(), context.getClickedPos())) && (org.leavesmc.leaves.LeavesConfig.creativeNoClip && context.getPlayer() != null ? context.getPlayer().canSpectatingPlace(world, state, context.getClickedPos(), voxelshapecollision) : world.checkEntityCollision(state, entityhuman, voxelshapecollision, context.getClickedPos(), true)); // Paper - Cancel hit for vanished players // Leaves - creative no clip
org.bukkit.entity.Player player = (context.getPlayer() instanceof ServerPlayer) ? (org.bukkit.entity.Player) context.getPlayer().getBukkitEntity() : null;
BlockCanBuildEvent event = new BlockCanBuildEvent(CraftBlock.at(context.getLevel(), context.getClickedPos()), player, CraftBlockData.fromData(state), defaultReturn, org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(context.getHand())); // Paper - Expose hand in BlockCanBuildEvent
@@ -86,10 +86,10 @@ index 0b761f3ae15ad4a3b8152f497a60403212109534..fdb2bb8a5e6c5d69692804adb086a2d4
BlockCanBuildEvent event = new BlockCanBuildEvent(CraftBlock.at(world, blockposition), player, CraftBlockData.fromData(iblockdata1), defaultReturn, org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(context.getHand())); // Paper - Expose hand in BlockCanBuildEvent
diff --git a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
index 5c311270a39f6b4996c8b58822d24556c67adc41..cb40179236952edcc1678a58a5886b1916349314 100644
index 0d68db20f5fbe5e834f12c1e8fd429099a44e4b6..193673d2b70035dac69422aaae185315a901effc 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
@@ -162,7 +162,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl
@@ -163,7 +163,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl
while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next();
@@ -99,10 +99,10 @@ index 5c311270a39f6b4996c8b58822d24556c67adc41..cb40179236952edcc1678a58a5886b19
}
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java
index 098fde8200a11f91f934ddab6b1486dac4014dfe..88c9097368f7a842e1d31c460330aa3d267676ef 100644
index 93bd70c1dc2ba8b893a6087730071c81fb1132f4..4af071ff2d0a29ad9315e1076436f70f848c89b8 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java
@@ -18,6 +18,7 @@ import net.minecraft.util.Mth;
@@ -19,6 +19,7 @@ import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntitySelector;
@@ -110,7 +110,7 @@ index 098fde8200a11f91f934ddab6b1486dac4014dfe..88c9097368f7a842e1d31c460330aa3d
import net.minecraft.world.entity.projectile.ThrownEnderpearl;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.ChunkPos;
@@ -121,7 +122,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity {
@@ -117,7 +118,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity {
}
public static boolean canEntityTeleport(Entity entity) {
@@ -120,10 +120,10 @@ index 098fde8200a11f91f934ddab6b1486dac4014dfe..88c9097368f7a842e1d31c460330aa3d
public boolean isSpawning() {
diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java b/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
index 9f45dda6ff45ac1ffb7ac99575b7d09bdc61c56a..1fde81b6f68f43cd8d9c6123fff1262ccbaa6038 100644
index b35f476e26a020cf75e53a5eb488717d996a6935..73651a8ae9341807ec96300914d49329fb8a4e90 100644
--- a/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
@@ -146,7 +146,7 @@ public class PistonMovingBlockEntity extends BlockEntity {
@@ -147,7 +147,7 @@ public class PistonMovingBlockEntity extends BlockEntity {
h = (double)direction.getStepZ();
}
@@ -132,7 +132,7 @@ index 9f45dda6ff45ac1ffb7ac99575b7d09bdc61c56a..1fde81b6f68f43cd8d9c6123fff1262c
// Paper - EAR items stuck in in slime pushed by a piston
entity.activatedTick = Math.max(entity.activatedTick, net.minecraft.server.MinecraftServer.currentTick + 10);
entity.activatedImmunityTick = Math.max(entity.activatedImmunityTick, net.minecraft.server.MinecraftServer.currentTick + 10);
@@ -182,6 +182,7 @@ public class PistonMovingBlockEntity extends BlockEntity {
@@ -183,6 +183,7 @@ public class PistonMovingBlockEntity extends BlockEntity {
}
private static void moveEntityByPiston(Direction direction, Entity entity, double distance, Direction movementDirection) {

View File

@@ -18,7 +18,7 @@ index ee99519ebd46b1db3e76e7eb86e5cc121c867dc4..63f6f1328c4e39cc1f35480166ae5e22
for (int j = 0; j < this.height; j++) {
for (int k = 0; k < this.depth; k++) {
diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
index d4f903c402765c6e8e1db99e148613748f530726..939f1d6958c93819e188946c2173c2668f6d90a1 100644
index 18a1b4325cac81b040596071dab99ef9bf6f3142..cc08fbadde12ad9f2193811f75628d4bd8d59a0f 100644
--- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
+++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
@@ -45,6 +45,7 @@ import net.minecraft.world.entity.boss.enderdragon.phases.EnderDragonPhase;
@@ -40,7 +40,7 @@ index d4f903c402765c6e8e1db99e148613748f530726..939f1d6958c93819e188946c2173c266
+
@Nullable
public BlockPattern.BlockPatternMatch findExitPortal() {
+ if (top.leavesmc.leaves.LeavesConfig.optimizedDragonRespawn) {
+ if (org.leavesmc.leaves.LeavesConfig.optimizedDragonRespawn) {
+ int i, j;
+ for (i = cachePortalChunkIteratorX; i <= 8; ++i) {
+ for (j = cachePortalChunkIteratorZ; j <= 8; ++j) {
@@ -76,7 +76,7 @@ index d4f903c402765c6e8e1db99e148613748f530726..939f1d6958c93819e188946c2173c266
+ for (j = i; j >= 0; --j) {
+ BlockPattern.BlockPatternMatch result2 = null;
+ if (notFirstSearch) {
+ result2 = top.leavesmc.leaves.util.BlockPatternHelper.partialSearchAround(this.exitPortalPattern, this.level, new BlockPos(EndPodiumFeature.getLocation(BlockPos.ZERO).getY(), j, EndPodiumFeature.getLocation(BlockPos.ZERO).getZ()));
+ result2 = org.leavesmc.leaves.util.BlockPatternHelper.partialSearchAround(this.exitPortalPattern, this.level, new BlockPos(EndPodiumFeature.getLocation(BlockPos.ZERO).getY(), j, EndPodiumFeature.getLocation(BlockPos.ZERO).getZ()));
+ } else {
+ result2 = this.exitPortalPattern.find(this.level, new BlockPos(EndPodiumFeature.getLocation(BlockPos.ZERO).getX(), j, EndPodiumFeature.getLocation(BlockPos.ZERO).getZ()));
+ }
@@ -109,13 +109,13 @@ index d4f903c402765c6e8e1db99e148613748f530726..939f1d6958c93819e188946c2173c266
if (this.dragonKilled && this.respawnStage == null) {
for (BlockPattern.BlockPatternMatch shapedetector_shapedetectorcollection = this.findExitPortal(); shapedetector_shapedetectorcollection != null; shapedetector_shapedetectorcollection = this.findExitPortal()) {
for (int i = 0; i < this.exitPortalPattern.getWidth(); ++i) {
diff --git a/src/main/java/top/leavesmc/leaves/util/BlockPatternHelper.java b/src/main/java/top/leavesmc/leaves/util/BlockPatternHelper.java
diff --git a/src/main/java/org/leavesmc/leaves/util/BlockPatternHelper.java b/src/main/java/org/leavesmc/leaves/util/BlockPatternHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..cbe424356db5237c261320f0ad5ef5bcf2c70ed4
index 0000000000000000000000000000000000000000..567cd33afbd17d61ac1847692f5cb762270a3c40
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/BlockPatternHelper.java
+++ b/src/main/java/org/leavesmc/leaves/util/BlockPatternHelper.java
@@ -0,0 +1,28 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import com.google.common.cache.LoadingCache;
+import net.minecraft.core.BlockPos;

View File

@@ -5,14 +5,14 @@ Subject: [PATCH] Enchantment mending compatibility infinity
diff --git a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java
index 04c39359585d909dedbdfd78f6cbdc06b926607a..aef23527fe185df4929dffb96d8e705910bcabe0 100644
index 81cc05c929d612898609965d82454b89cd18f9f5..96bfa0098a903aca604308877c53336e6269b059 100644
--- a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java
+++ b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java
@@ -19,6 +19,6 @@ public class ArrowInfiniteEnchantment extends Enchantment {
@@ -7,6 +7,6 @@ public class ArrowInfiniteEnchantment extends Enchantment {
@Override
public boolean checkCompatibility(Enchantment other) {
- return !(other instanceof MendingEnchantment) && super.checkCompatibility(other);
+ return (top.leavesmc.leaves.LeavesConfig.mendingCompatibilityInfinity || !(other instanceof MendingEnchantment)) && super.checkCompatibility(other); // Leaves - mendingCompatibilityInfinity
+ return (org.leavesmc.leaves.LeavesConfig.mendingCompatibilityInfinity || !(other instanceof MendingEnchantment)) && super.checkCompatibility(other); // Leaves - mendingCompatibilityInfinity
}
}

View File

@@ -5,11 +5,24 @@ Subject: [PATCH] Shave snow layers
diff --git a/src/main/java/net/minecraft/world/item/ShovelItem.java b/src/main/java/net/minecraft/world/item/ShovelItem.java
index 9aba0211f37501bbd19b583d22fa83eae32390d9..8e496f0256091a2ad82537c76b1ce7125dc5a0da 100644
index 24f6a158e4759aac3be8da4cf5e0d40bd295355b..8c15f74cc5f3c4dfc499e6bdab75f10f66ea36b1 100644
--- a/src/main/java/net/minecraft/world/item/ShovelItem.java
+++ b/src/main/java/net/minecraft/world/item/ShovelItem.java
@@ -11,10 +11,12 @@ import net.minecraft.tags.BlockTags;
@@ -2,20 +2,25 @@ package net.minecraft.world.item;
import com.google.common.collect.Maps;
import com.google.common.collect.ImmutableMap.Builder;
+
import java.util.Map;
+
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.InteractionResult;
+import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.context.UseOnContext;
+import net.minecraft.world.item.enchantment.EnchantmentHelper;
@@ -21,21 +34,23 @@ index 9aba0211f37501bbd19b583d22fa83eae32390d9..8e496f0256091a2ad82537c76b1ce712
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.gameevent.GameEvent;
@@ -43,6 +45,22 @@ public class ShovelItem extends DiggerItem {
@@ -44,6 +49,24 @@ public class ShovelItem extends DiggerItem {
return InteractionResult.PASS;
} else {
Player player = context.getPlayer();
+ // Leaves start - shaveSnowLayers
+ if (top.leavesmc.leaves.LeavesConfig.shaveSnowLayers && blockState.is(Blocks.SNOW)) {
+ if (org.leavesmc.leaves.LeavesConfig.shaveSnowLayers && blockState.is(Blocks.SNOW)) {
+ int layers = blockState.getValue(SnowLayerBlock.LAYERS);
+ level.setBlock(blockPos, layers > 1 ? blockState.setValue(SnowLayerBlock.LAYERS, layers - 1) : Blocks.AIR.defaultBlockState(), 11);
+ Block.popResource(level, blockPos, new ItemStack(EnchantmentHelper.hasSilkTouch(context.getItemInHand()) ? Items.SNOW : Items.SNOWBALL));
+ level.playSound(player, blockPos, SoundEvents.SNOW_BREAK, SoundSource.BLOCKS, 1.0F, 1.0F);
+
+ if(player != null) {
+ context.getItemInHand().hurtAndBreak(1, player, (p) -> {
+ p.broadcastBreakEvent(context.getHand());
+ });
+ if (player != null) {
+ context.getItemInHand().hurtAndBreak(1, player.getRandom(), player, () ->
+ player.broadcastBreakEvent(switch (context.getHand()) {
+ case MAIN_HAND -> EquipmentSlot.MAINHAND;
+ case OFF_HAND -> EquipmentSlot.OFFHAND;
+ }));
+ }
+
+ return InteractionResult.SUCCESS;
@@ -44,3 +59,19 @@ index 9aba0211f37501bbd19b583d22fa83eae32390d9..8e496f0256091a2ad82537c76b1ce712
BlockState blockState2 = FLATTENABLES.get(blockState.getBlock());
BlockState blockState3 = null;
Runnable afterAction = null; // Paper
@@ -52,11 +75,11 @@ public class ShovelItem extends DiggerItem {
blockState3 = blockState2;
} else if (blockState.getBlock() instanceof CampfireBlock && blockState.getValue(CampfireBlock.LIT)) {
afterAction = () -> { // Paper
- if (!level.isClientSide()) {
- level.levelEvent(null, 1009, blockPos, 0);
- }
+ if (!level.isClientSide()) {
+ level.levelEvent(null, 1009, blockPos, 0);
+ }
- CampfireBlock.dowse(context.getPlayer(), level, blockPos, blockState);
+ CampfireBlock.dowse(context.getPlayer(), level, blockPos, blockState);
}; // Paper
blockState3 = blockState.setValue(CampfireBlock.LIT, Boolean.valueOf(false));
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Spawn ignore lc
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
index 667a480b7c546bb130bbd32a8ae7ce85d37a6b0a..3e10668ca548472238bb4bb0a80a89f169a71496 100644
index a9fda9cb7e8266c21aba70d5b1890b30900a5b00..083a8a7dd99e447904dbac161dd3a1de663d6011 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -40,6 +40,7 @@ import net.minecraft.world.level.block.state.BlockState;
@@ -38,6 +38,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.chunk.LevelChunk;
@@ -16,12 +16,12 @@ index 667a480b7c546bb130bbd32a8ae7ce85d37a6b0a..3e10668ca548472238bb4bb0a80a89f1
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
import net.minecraft.world.level.levelgen.structure.Structure;
@@ -204,6 +205,19 @@ public final class NaturalSpawner {
@@ -199,6 +200,19 @@ public final class NaturalSpawner {
}
public static int spawnCategoryForChunk(MobCategory group, ServerLevel world, LevelChunk chunk, NaturalSpawner.SpawnPredicate checker, NaturalSpawner.AfterSpawnCallback runner, int maxSpawns, Consumer<Entity> trackEntity) {
// Paper end - Optional per player mob spawns
+ // Leaves start - ignore lc
+ if (top.leavesmc.leaves.LeavesConfig.ignoreLC) {
+ if (org.leavesmc.leaves.LeavesConfig.ignoreLC) {
+ int spawnN = 0;
+ for (int i = chunk.getMinBuildHeight(); i < chunk.getMaxBuildHeight(); i += 16) {
+ LevelChunkSection section = chunk.getSections()[chunk.getSectionIndex(i)];
@@ -36,7 +36,7 @@ index 667a480b7c546bb130bbd32a8ae7ce85d37a6b0a..3e10668ca548472238bb4bb0a80a89f1
BlockPos blockposition = NaturalSpawner.getRandomPosWithin(world, chunk);
if (blockposition.getY() >= world.getMinBuildHeight() + 1) {
@@ -212,6 +226,16 @@ public final class NaturalSpawner {
@@ -207,6 +221,16 @@ public final class NaturalSpawner {
return 0; // Paper - Optional per player mob spawns
}

View File

@@ -4,11 +4,20 @@ Date: Sun, 2 Jul 2023 09:25:00 +0800
Subject: [PATCH] Elytra aeronautics no chunk load
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 8d3df7a26a5fa217648754cf6c52651d423d4511..234897e942df0023307418566211a549a32124e9 100644
index da65f980f2145ea03341911ce75f7e61b358c9d7..7dcdc9b40c594234d87bef3e75a68ddaa58506a3 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -150,7 +150,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -166,7 +166,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
}
// Paper end - use distance map to optimise tracker
@@ -17,7 +26,7 @@ index 8d3df7a26a5fa217648754cf6c52651d423d4511..234897e942df0023307418566211a549
int chunkX = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getX());
int chunkZ = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getZ());
// Note: players need to be explicitly added to distance maps before they can be updated
@@ -166,7 +166,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -182,7 +182,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
// Paper end - use distance map to optimise entity tracker
}
@@ -26,17 +35,17 @@ index 8d3df7a26a5fa217648754cf6c52651d423d4511..234897e942df0023307418566211a549
int chunkX = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getX());
int chunkZ = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getZ());
// Note: players need to be explicitly added to distance maps before they can be updated
@@ -963,7 +963,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -994,7 +994,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
}
private boolean skipPlayer(ServerPlayer player) {
- return player.isSpectator() && !this.level.getGameRules().getBoolean(GameRules.RULE_SPECTATORSGENERATECHUNKS);
+ return (player.isSpectator() && !this.level.getGameRules().getBoolean(GameRules.RULE_SPECTATORSGENERATECHUNKS))
+ || (top.leavesmc.leaves.LeavesConfig.elytraAeronauticsNoChunk && player.elytraAeronauticsNoChunk); // Leaves - Elytra aeronautics
+ || (org.leavesmc.leaves.LeavesConfig.elytraAeronauticsNoChunk && player.elytraAeronauticsNoChunk); // Leaves - Elytra aeronautics
}
void updatePlayerStatus(ServerPlayer player, boolean added) {
@@ -1000,6 +1001,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1031,6 +1032,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
}
public void move(ServerPlayer player) {
@@ -45,10 +54,10 @@ index 8d3df7a26a5fa217648754cf6c52651d423d4511..234897e942df0023307418566211a549
SectionPos sectionposition = player.getLastSectionPos();
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index d72326ff333adf3300a6159b1cc644d3381cede6..703d2bf9f486a4effba2c265c117b8a24a8bb65f 100644
index 21a3e948ee82605bb970e8503be57b0e66373f77..1005e1c4c86f707c3e55ef3c5325dd76bf885ef0 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -545,7 +545,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -556,7 +556,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
speed *= 2f; // TODO: Get the speed of the vehicle instead of the player
// Paper start - Prevent moving into unloaded chunks
@@ -58,25 +67,25 @@ index d72326ff333adf3300a6159b1cc644d3381cede6..703d2bf9f486a4effba2c265c117b8a2
!worldserver.areChunksLoadedForMove(entity.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(entity.position())))
)) {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 017efdee91fe6326c8e0270c294276b24b42604a..2d3fe02aab536876db949dce184395f731c5d31c 100644
index d6b5514dfe94b48a81ddd62b57a5d72b0510a61f..1a17258f338f8a4c575e30e4783a8f13ed9380ef 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -1115,7 +1115,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -1157,7 +1157,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return;
}
}
-
+ // Leaves start - elytra aeronautics
+ if (top.leavesmc.leaves.LeavesConfig.elytraAeronauticsNoChunk && this instanceof Player player) {
+ if (org.leavesmc.leaves.LeavesConfig.elytraAeronauticsNoChunk && this instanceof Player player) {
+ if (movementType == MoverType.PLAYER && player.isFallFlying()) {
+ top.leavesmc.leaves.util.ElytraAeronauticsHelper.flightBehaviour(player, movement);
+ org.leavesmc.leaves.util.ElytraAeronauticsHelper.flightBehaviour(player, movement);
+ }
+ }
+ // Leaves end - elytra aeronautics
this.level().getProfiler().push("move");
if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) {
movement = movement.multiply(this.stuckSpeedMultiplier);
@@ -2050,6 +2056,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -2105,6 +2111,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.yo = y;
this.zo = d4;
this.setPos(d3, y, d4);
@@ -85,11 +94,11 @@ index 017efdee91fe6326c8e0270c294276b24b42604a..2d3fe02aab536876db949dce184395f7
}
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 8f37983e57321da2a59e047be4a0119118a85a6e..73bef9f6b24dd8a87f82a8a0817be03420267d17 100644
index ba6886d0185eda0c7c6d37640c20636cc163ccf4..17eef5f974a2d61a99224877cc0f79c4fea7c565 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -183,6 +183,8 @@ public abstract class Player extends LivingEntity {
public float hurtDir; // Paper - protected -> public
@@ -195,6 +195,8 @@ public abstract class Player extends LivingEntity {
public boolean ignoreFallDamageFromCurrentImpulse;
public boolean affectsSpawning = true; // Paper - Affects Spawning API
public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage
+ // Paper end
@@ -97,13 +106,13 @@ index 8f37983e57321da2a59e047be4a0119118a85a6e..73bef9f6b24dd8a87f82a8a0817be034
// CraftBukkit start
public boolean fauxSleeping;
diff --git a/src/main/java/top/leavesmc/leaves/util/ElytraAeronauticsHelper.java b/src/main/java/top/leavesmc/leaves/util/ElytraAeronauticsHelper.java
diff --git a/src/main/java/org/leavesmc/leaves/util/ElytraAeronauticsHelper.java b/src/main/java/org/leavesmc/leaves/util/ElytraAeronauticsHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc25e2f960a2936e656541c0fe13745e62451179
index 0000000000000000000000000000000000000000..3b0e805b3ac9dc40280f9daa1302b1b358bd8083
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/util/ElytraAeronauticsHelper.java
+++ b/src/main/java/org/leavesmc/leaves/util/ElytraAeronauticsHelper.java
@@ -0,0 +1,39 @@
+package top.leavesmc.leaves.util;
+package org.leavesmc.leaves.util;
+
+import net.minecraft.core.SectionPos;
+import net.minecraft.network.chat.Component;
@@ -111,7 +120,7 @@ index 0000000000000000000000000000000000000000..fc25e2f960a2936e656541c0fe13745e
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.phys.Vec3;
+import top.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.LeavesConfig;
+
+public class ElytraAeronauticsHelper {
+

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Cache ignite odds
diff --git a/src/main/java/net/minecraft/world/level/block/FireBlock.java b/src/main/java/net/minecraft/world/level/block/FireBlock.java
index 7f05e58358024d303eab9ab4fbc1bb299760ad1e..8670ffb3aec9980622ae7f59b407689790c075ae 100644
index 4d467ecf0dd8006b9fa4fb8fb5aadc0622a1e512..2a60644479cdc31cd08beff154864b6c39538649 100644
--- a/src/main/java/net/minecraft/world/level/block/FireBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FireBlock.java
@@ -220,6 +220,7 @@ public class FireBlock extends BaseFireBlock {
@@ -21,7 +21,7 @@ index 7f05e58358024d303eab9ab4fbc1bb299760ad1e..8670ffb3aec9980622ae7f59b4076897
blockposition_mutableblockposition.setWithOffset(pos, l, j1, i1);
- int l1 = this.getIgniteOdds(world, blockposition_mutableblockposition);
+ int l1 = this.getIgniteOdds(world, blockposition_mutableblockposition, top.leavesmc.leaves.LeavesConfig.cacheIgniteOdds ? blockPositionIgniteCache : null); // Leaves - cache ignite odds
+ int l1 = this.getIgniteOdds(world, blockposition_mutableblockposition, org.leavesmc.leaves.LeavesConfig.cacheIgniteOdds ? blockPositionIgniteCache : null); // Leaves - cache ignite odds
if (l1 > 0) {
int i2 = (l1 + 40 + world.getDifficulty().getId() * 7) / (i + 30);

View File

@@ -5,24 +5,24 @@ Subject: [PATCH] Lava riptide
diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java
index a792c7b7a6179aa88fc473b27ef0ca13bd91a395..95318fe882bc65d1483c7547b41e6f660c0c0012 100644
index 47de500fddb0716d142f8f5876a82a95afaa06fa..b01e85c9665fef476acdde74f08beaba168561db 100644
--- a/src/main/java/net/minecraft/world/item/TridentItem.java
+++ b/src/main/java/net/minecraft/world/item/TridentItem.java
@@ -66,7 +66,7 @@ public class TridentItem extends Item implements Vanishable {
@@ -70,7 +70,7 @@ public class TridentItem extends Item implements ProjectileItem {
if (j >= 10) {
int k = EnchantmentHelper.getRiptide(stack);
- if (k <= 0 || entityhuman.isInWaterOrRain()) {
+ if (k <= 0 || entityhuman.isInWaterOrRain() || (top.leavesmc.leaves.LeavesConfig.lavaRiptide && entityhuman.isInLava())) { // Leaves - lava riptide
+ if (k <= 0 || entityhuman.isInWaterOrRain() || (org.leavesmc.leaves.LeavesConfig.lavaRiptide && entityhuman.isInLava())) { // Leaves - lava riptide
if (!world.isClientSide) {
// CraftBukkit - moved down
/*
@@ -160,7 +160,7 @@ public class TridentItem extends Item implements Vanishable {
// itemstack.hurtAndBreak(1, entityhuman, EntityLiving.getSlotForHand(entityliving.getUsedItemHand())); // CraftBukkit - moved down
if (k == 0) {
@@ -155,7 +155,7 @@ public class TridentItem extends Item implements ProjectileItem {
if (itemstack.getDamageValue() >= itemstack.getMaxDamage() - 1) {
return InteractionResultHolder.fail(itemstack);
- } else if (EnchantmentHelper.getRiptide(itemstack) > 0 && !user.isInWaterOrRain()) {
+ } else if (EnchantmentHelper.getRiptide(itemstack) > 0 && !user.isInWaterOrRain() && !(top.leavesmc.leaves.LeavesConfig.lavaRiptide && user.isInLava())) { // Leaves - lava riptide
+ } else if (EnchantmentHelper.getRiptide(itemstack) > 0 && !user.isInWaterOrRain() && !(org.leavesmc.leaves.LeavesConfig.lavaRiptide && user.isInLava())) { // Leaves - lava riptide
return InteractionResultHolder.fail(itemstack);
} else {
user.startUsingItem(hand);

View File

@@ -5,32 +5,32 @@ Subject: [PATCH] No block update command
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 9488fbbf0442d38c18632f0ed50c23fd27078f71..9e95045f10904744f7cbf6e4203f8cbe762a9afc 100644
index 0f3a92155fa0b4ed9d7fbc87202fd04dc01a0890..3bb53128f6919712f0a88ec11c1bce25bf5b8b84 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2517,6 +2517,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -2464,6 +2464,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@Override
public void blockUpdated(BlockPos pos, Block block) {
+ if (top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
+ if (org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
if (!this.isDebug()) {
// CraftBukkit start
if (this.populating) {
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index 1ad126d992d95062a3db08374db7a927f23a0cac..418a7c9217e6e06bff6866deffff3e7822d35a14 100644
index 364e8ed48512dd499bf393947fd7a954c22acc0e..cb5effe8be9f43ef6b3fa48c25600cdcd69ddc9e 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -483,7 +483,7 @@ public final class ItemStack {
@@ -504,7 +504,7 @@ public final class ItemStack implements DataComponentHolder {
net.minecraft.world.level.block.state.BlockState block = world.getBlockState(newblockposition);
if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically
- block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, context); // Paper - pass context
+ if (!top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, context); // Paper - pass context // Leaves - no block update
- block.onPlace(world, newblockposition, oldBlock, true, context); // Paper - pass context
+ if (!org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) block.onPlace(world, newblockposition, oldBlock, true, context); // Paper - pass context // Leaves - no block update
}
world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
index 6c611afce3ca26e5b08f3341563a986d2a21142f..46230b09fc176665ba1d29ab3233c3b956a07710 100644
index 8b4f58dae2dba4c661dbd3de0ef65cdbf3bb861e..2b8bbb6bdb636457796029120960a7e6f98d46e7 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -481,7 +481,7 @@ public class LevelChunk extends ChunkAccess {
@@ -38,66 +38,66 @@ index 6c611afce3ca26e5b08f3341563a986d2a21142f..46230b09fc176665ba1d29ab3233c3b9
// CraftBukkit - Don't place while processing the BlockPlaceEvent, unless it's a BlockContainer. Prevents blocks such as TNT from activating when cancelled.
if (!this.level.isClientSide && doPlace && (!this.level.captureBlockStates || block instanceof net.minecraft.world.level.block.BaseEntityBlock)) {
- iblockdata.onPlace(this.level, blockposition, iblockdata1, flag);
+ if (!top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) iblockdata.onPlace(this.level, blockposition, iblockdata1, flag); // Leaves - no block update
+ if (!org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) iblockdata.onPlace(this.level, blockposition, iblockdata1, flag); // Leaves - no block update
}
if (iblockdata.hasBlockEntity()) {
diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
index 82cad323e4fba9aea082047d3eb6c4351681d9af..8a9b471b3cfff45a6c78d8fffa0efb3304152acb 100644
index d5352883ee51dfc646352ae7e2b76af7efd0441e..57f952323639c1ce409032b8023a7911b4fee9b2 100644
--- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
+++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
@@ -520,6 +520,7 @@ public abstract class FlowingFluid extends Fluid {
@@ -518,6 +518,7 @@ public abstract class FlowingFluid extends Fluid {
@Override
public void tick(Level world, BlockPos pos, FluidState state) {
+ if (top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
+ if (org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
if (!state.isSource()) {
FluidState fluid1 = this.getNewLiquid(world, pos, world.getBlockState(pos));
int i = this.getSpreadDelay(world, pos, state, fluid1);
diff --git a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
index 106af2b2c7ff72c7549975aef75cdcff8d9a7d97..5807f624d72f5f83ec28491236153710d29c4e9a 100644
index 106af2b2c7ff72c7549975aef75cdcff8d9a7d97..ef9f2552367dfa8b708f18d66a4526fea8c24807 100644
--- a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
+++ b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
@@ -48,6 +48,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
}
private void addAndRun(BlockPos pos, CollectingNeighborUpdater.NeighborUpdates entry) {
+ if (top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
+ if (org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
boolean bl = this.count > 0;
boolean bl2 = this.maxChainedNeighborUpdates >= 0 && this.count >= this.maxChainedNeighborUpdates;
this.count++;
diff --git a/src/main/java/net/minecraft/world/level/redstone/InstantNeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/InstantNeighborUpdater.java
index 2708251ebc1995e71fb0e5dca9e158a3005f8a8a..e28351b379677fec356b6efec2d882ee20e7bd48 100644
index 2708251ebc1995e71fb0e5dca9e158a3005f8a8a..2c39d07e5612b3d435fb782d7861448c470950b4 100644
--- a/src/main/java/net/minecraft/world/level/redstone/InstantNeighborUpdater.java
+++ b/src/main/java/net/minecraft/world/level/redstone/InstantNeighborUpdater.java
@@ -15,17 +15,20 @@ public class InstantNeighborUpdater implements NeighborUpdater {
@Override
public void shapeUpdate(Direction direction, BlockState neighborState, BlockPos pos, BlockPos neighborPos, int flags, int maxUpdateDepth) {
+ if (top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
+ if (org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
NeighborUpdater.executeShapeUpdate(this.level, direction, neighborState, pos, neighborPos, flags, maxUpdateDepth - 1);
}
@Override
public void neighborChanged(BlockPos pos, Block sourceBlock, BlockPos sourcePos) {
+ if (top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
+ if (org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
BlockState blockState = this.level.getBlockState(pos);
this.neighborChanged(blockState, pos, sourceBlock, sourcePos, false);
}
@Override
public void neighborChanged(BlockState state, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) {
+ if (top.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
+ if (org.leavesmc.leaves.command.NoBlockUpdateCommand.isNoBlockUpdate()) return; // Leaves - no block update
NeighborUpdater.executeUpdate(this.level, state, pos, sourceBlock, sourcePos, notify);
}
}
diff --git a/src/main/java/top/leavesmc/leaves/command/NoBlockUpdateCommand.java b/src/main/java/top/leavesmc/leaves/command/NoBlockUpdateCommand.java
diff --git a/src/main/java/org/leavesmc/leaves/command/NoBlockUpdateCommand.java b/src/main/java/org/leavesmc/leaves/command/NoBlockUpdateCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..819d5a5383dc6978f53645b727722fa924b7a505
index 0000000000000000000000000000000000000000..f60f3409aeb72f8f0195e667ccb139a7f81729b6
--- /dev/null
+++ b/src/main/java/top/leavesmc/leaves/command/NoBlockUpdateCommand.java
+++ b/src/main/java/org/leavesmc/leaves/command/NoBlockUpdateCommand.java
@@ -0,0 +1,52 @@
+package top.leavesmc.leaves.command;
+package org.leavesmc.leaves.command;
+
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.JoinConfiguration;
@@ -109,7 +109,7 @@ index 0000000000000000000000000000000000000000..819d5a5383dc6978f53645b727722fa9
+import org.bukkit.permissions.PermissionDefault;
+import org.bukkit.plugin.PluginManager;
+import org.jetbrains.annotations.NotNull;
+import top.leavesmc.leaves.LeavesConfig;
+import org.leavesmc.leaves.LeavesConfig;
+
+import java.util.List;
+

View File

@@ -1,19 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Sun, 9 Jul 2023 16:51:47 +0800
Subject: [PATCH] Raider die skip self raid check
diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java
index 93bbf7556f9599e9dd90761085a57d78bd521867..e6af29b4934a3d2344ad97c4bbc23523e458ea6a 100644
--- a/src/main/java/net/minecraft/world/entity/raid/Raider.java
+++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java
@@ -137,7 +137,7 @@ public abstract class Raider extends PatrollingMonster {
raid.removeFromRaid(this, false);
}
- if (this.isPatrolLeader() && raid == null && ((ServerLevel) this.level()).getRaidAt(this.blockPosition()) == null) {
+ if (this.isPatrolLeader() && (top.leavesmc.leaves.LeavesConfig.skipSelfRaidCheck || raid == null) && ((ServerLevel) this.level()).getRaidAt(this.blockPosition()) == null) { // Leaves - skip self raid check
ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD);
Player entityhuman = null;

View File

@@ -1,36 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Mon, 17 Jul 2023 11:41:50 +0800
Subject: [PATCH] Container open passthrough
diff --git a/src/main/java/net/minecraft/world/level/block/SignBlock.java b/src/main/java/net/minecraft/world/level/block/SignBlock.java
index 27a1e8ffc43efe4e086e7fd88ee4d80c23f98674..aafe4fd8b406f6b880ab37d39958e57550d5b6a1 100644
--- a/src/main/java/net/minecraft/world/level/block/SignBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SignBlock.java
@@ -117,6 +117,25 @@ public abstract class SignBlock extends BaseEntityBlock implements SimpleWaterlo
return InteractionResult.SUCCESS;
} else if (flag2) {
return InteractionResult.SUCCESS;
+ // Leaves start - signContainerPassthrough
+ } else if (top.leavesmc.leaves.LeavesConfig.containerPassthrough) {
+ if (item == net.minecraft.world.item.Items.AIR && player.isShiftKeyDown()) {
+ if (!this.otherPlayerIsEditingSign(player, tileentitysign) && player.mayBuild() && this.hasEditableText(player, tileentitysign, flag1)) {
+ this.openTextEdit(player, tileentitysign, flag1);
+ return InteractionResult.SUCCESS;
+ }
+ }
+
+ BlockPos pos1 = pos.relative(hit.getDirection().getOpposite());
+ if (this instanceof WallSignBlock || this instanceof WallHangingSignBlock) {
+ pos1 = pos.relative(state.getValue(HorizontalDirectionalBlock.FACING).getOpposite());
+ }
+ if (world.getBlockEntity(pos1) instanceof net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity) {
+ BlockState state1 = world.getBlockState(pos1);
+ return state1.use(world, player, hand, hit.withPosition(pos1));
+ }
+ return InteractionResult.PASS;
+ // Leaves end - signContainerPassthrough
} else if (!this.otherPlayerIsEditingSign(player, tileentitysign) && player.mayBuild() && this.hasEditableText(player, tileentitysign, flag1)) {
this.openTextEdit(player, tileentitysign, flag1, io.papermc.paper.event.player.PlayerOpenSignEvent.Cause.INTERACT); // Paper - Add PlayerOpenSignEvent
return this.getInteractionResult(flag);

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Sun, 9 Jul 2023 16:51:47 +0800
Subject: [PATCH] Raider die skip self raid check
diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java
index 98e558338b5d9fb03869d2cc21b3e90eb45b95f6..d9e3c0ff607cc55dbe0df4519279889bcb30e1b2 100644
--- a/src/main/java/net/minecraft/world/entity/raid/Raider.java
+++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java
@@ -128,7 +128,7 @@ public abstract class Raider extends PatrollingMonster {
Raid raid = this.getCurrentRaid();
if (raid != null) {
- if (this.isPatrolLeader()) {
+ if (!org.leavesmc.leaves.LeavesConfig.skipSelfRaidCheck && this.isPatrolLeader()) { // Leaves - skip self raid check
raid.removeLeader(this.getWave());
}

View File

@@ -0,0 +1,55 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Mon, 17 Jul 2023 11:41:50 +0800
Subject: [PATCH] Container open passthrough
diff --git a/src/main/java/net/minecraft/world/level/block/SignBlock.java b/src/main/java/net/minecraft/world/level/block/SignBlock.java
index f7bae8060d993176799ff3ff4653d760a137faba..01dcc910e9151fb28828f99afa0adc21f5a700d7 100644
--- a/src/main/java/net/minecraft/world/level/block/SignBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SignBlock.java
@@ -113,6 +113,18 @@ public abstract class SignBlock extends BaseEntityBlock implements SimpleWaterlo
} else {
return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
}
+ // Leaves start - signContainerPassthrough
+ } else if (org.leavesmc.leaves.LeavesConfig.containerPassthrough) {
+ BlockPos pos1 = pos.relative(hit.getDirection().getOpposite());
+ if (this instanceof WallSignBlock || this instanceof WallHangingSignBlock) {
+ pos1 = pos.relative(state.getValue(HorizontalDirectionalBlock.FACING).getOpposite());
+ }
+ if (world.getBlockEntity(pos1) instanceof net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity) {
+ BlockState state1 = world.getBlockState(pos1);
+ return state1.useItemOn(stack, world, player, hand, hit.withPosition(pos1));
+ }
+ return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
+ // Leaves end - signContainerPassthrough
} else {
return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
}
@@ -141,6 +153,25 @@ public abstract class SignBlock extends BaseEntityBlock implements SimpleWaterlo
return InteractionResult.SUCCESS;
} else if (flag1) {
return InteractionResult.SUCCESS;
+ // Leaves start - signContainerPassthrough
+ } else if (org.leavesmc.leaves.LeavesConfig.containerPassthrough) {
+ if (player.isShiftKeyDown()) {
+ if (!this.otherPlayerIsEditingSign(player, tileentitysign) && player.mayBuild() && this.hasEditableText(player, tileentitysign, flag1)) {
+ this.openTextEdit(player, tileentitysign, flag1);
+ return InteractionResult.SUCCESS;
+ }
+ }
+
+ BlockPos pos1 = pos.relative(hit.getDirection().getOpposite());
+ if (this instanceof WallSignBlock || this instanceof WallHangingSignBlock) {
+ pos1 = pos.relative(state.getValue(HorizontalDirectionalBlock.FACING).getOpposite());
+ }
+ if (world.getBlockEntity(pos1) instanceof net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity) {
+ BlockState state1 = world.getBlockState(pos1);
+ return state1.useWithoutItem(world, player, hit.withPosition(pos1));
+ }
+ return InteractionResult.PASS;
+ // Leaves end - signContainerPassthrough
} else if (!this.otherPlayerIsEditingSign(player, tileentitysign) && player.mayBuild() && this.hasEditableText(player, tileentitysign, flag)) {
this.openTextEdit(player, tileentitysign, flag, io.papermc.paper.event.player.PlayerOpenSignEvent.Cause.INTERACT); // Paper - Add PlayerOpenSignEvent
return InteractionResult.SUCCESS;

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Wed, 8 May 2024 22:28:35 +0800
Subject: [PATCH] Placeholder for Bladeren-Protocol
diff --git a/.gitignore b/.gitignore
index 1ad93453221244f880855b510e888e759275b640..3811c0d849a3eb028ed1a6b7a2d4747f7f570448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,4 +46,3 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
-

View File

@@ -0,0 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MC_XiaoHei <xiaohei.xor7studio@foxmail.com>
Date: Wed, 8 May 2024 22:28:54 +0800
Subject: [PATCH] Placeholder for Bladeren-mspt-sync-protocol
diff --git a/.gitignore b/.gitignore
index 3811c0d849a3eb028ed1a6b7a2d4747f7f570448..1ad93453221244f880855b510e888e759275b640 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@ dependency-reduced-pom.xml
# vs code
/.vscode
/.factorypath
+

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] SIMD support
diff --git a/build.gradle.kts b/build.gradle.kts
index a2441f300345c3936bce69d6d3f21fdd6626136d..77d6f5eeeb9918a70e0003e97671778303c33ce9 100644
index fe1f6f1a97ab35c44f596596d16765b8b81753a9..28baa9a192a6fd83563b57a411e9bc905ba6b7e1 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -70,6 +70,7 @@ tasks.withType<JavaCompile> {
@@ -73,6 +73,7 @@ tasks.withType<JavaCompile> {
compilerArgs.add("-Xlint:-module")
compilerArgs.add("-Xlint:-removal")
compilerArgs.add("-Xlint:-dep-ann")
@@ -16,7 +16,7 @@ index a2441f300345c3936bce69d6d3f21fdd6626136d..77d6f5eeeb9918a70e0003e976717783
}
// Leaves end - hide irrelevant compilation warnings
@@ -189,6 +190,8 @@ fun TaskContainer.registerRunTask(
@@ -182,6 +183,8 @@ fun TaskContainer.registerRunTask(
minHeapSize = "${memoryGb}G"
maxHeapSize = "${memoryGb}G"

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Dont respond ping before start fully
This patch is Powered by Gale(https://github.com/GaleMC/Gale)
diff --git a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
index e5006e7672ba79ed4bcf2c4173c5a9ed4c68395b..06093105d58db26ae4b7dac80bce659995eeaf0f 100644
index 6f1c9fa89e718cbc01a8d72de34154f49c5f46db..093d0cea2fa37c96086afdb026bf988a7ea3c9ed 100644
--- a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
@@ -153,6 +153,12 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListene
@@ -15,7 +15,7 @@ index e5006e7672ba79ed4bcf2c4173c5a9ed4c68395b..06093105d58db26ae4b7dac80bce6599
*/
+ // Leaves start - dont respond it before start full
+ var status = MinecraftServer.getServer().getStatus();
+ if (top.leavesmc.leaves.LeavesConfig.dontRespondPingBeforeStart && (status == null || status.version() == null || status.version().isEmpty())) {
+ if (org.leavesmc.leaves.LeavesConfig.dontRespondPingBeforeStart && (status == null || status.version() == null || status.version().isEmpty())) {
+ return;
+ }
+ // Leaves end - dont respond it before start full

Some files were not shown because too many files have changed in this diff Show More