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

Co-authored-by: MC-XiaoHei <xor7xiaohei@gmail.com>
Co-authored-by: violetc <58360096+s-yh-china@users.noreply.github.com>
Co-authored-by: Fortern <blueten.ki@gmail.com>
Co-authored-by: Helvetica Volubi <88063803+Suisuroru@users.noreply.github.com>
This commit is contained in:
Lumine1909
2025-07-21 06:08:20 -07:00
committed by violetc
parent b5793e809b
commit c5ecbe85d2
318 changed files with 6998 additions and 2715 deletions

View File

@@ -23,7 +23,6 @@ jobs:
uses: gradle/actions/setup-gradle@v4 uses: gradle/actions/setup-gradle@v4
with: with:
add-job-summary: never add-job-summary: never
generate-job-summary: false
cache-read-only: false cache-read-only: false
- name: Setup Git Config - name: Setup Git Config
run: | run: |

View File

@@ -21,7 +21,6 @@ jobs:
uses: gradle/actions/setup-gradle@v4 uses: gradle/actions/setup-gradle@v4
with: with:
add-job-summary: never add-job-summary: never
generate-job-summary: false
cache-read-only: false cache-read-only: false
- name: Setup Git Config - name: Setup Git Config
run: | run: |
@@ -34,7 +33,7 @@ jobs:
- name: Move Jar - name: Move Jar
run: | run: |
prop() { prop() {
grep "${1}" gradle.properties | cut -d'=' -f2 | sed 's/\r//' awk -F= -v key="$1" '$1 == key { val = $2; sub(/[[:space:]]*#.*$/, "", val); gsub(/^[[:space:]]+|[[:space:]]+$/, "", val); print val }' gradle.properties
} }
jarName="leaves-$(prop mcVersion).jar" jarName="leaves-$(prop mcVersion).jar"

View File

@@ -30,7 +30,7 @@ maven {
} }
dependencies { dependencies {
compileOnly("org.leavesmc.leaves:leaves-api:1.21.5-R0.1-SNAPSHOT") compileOnly("org.leavesmc.leaves:leaves-api:1.21.8-R0.1-SNAPSHOT")
} }
``` ```
@@ -40,7 +40,7 @@ Each time you want to update your dependency, you must re-build Leaves.
Leaves-Server: Leaves-Server:
```kotlin ```kotlin
dependencies { dependencies {
compileOnly("org.leavesmc.leaves:leaves:1.21.5-R0.1-SNAPSHOT") compileOnly("org.leavesmc.leaves:leaves:1.21.8-R0.1-SNAPSHOT")
} }
``` ```

View File

@@ -30,7 +30,7 @@ maven {
} }
dependencies { dependencies {
compileOnly("org.leavesmc.leaves:leaves-api:1.21.5-R0.1-SNAPSHOT") compileOnly("org.leavesmc.leaves:leaves-api:1.21.8-R0.1-SNAPSHOT")
} }
``` ```
@@ -39,7 +39,7 @@ dependencies {
Leaves-Server: Leaves-Server:
```kotlin ```kotlin
dependencies { dependencies {
compileOnly("org.leavesmc.leaves:leaves:1.21.5-R0.1-SNAPSHOT") compileOnly("org.leavesmc.leaves:leaves:1.21.8-R0.1-SNAPSHOT")
} }
``` ```

View File

@@ -18,7 +18,6 @@ subprojects {
} }
repositories { repositories {
mavenLocal()
mavenCentral() mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/") maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.leavesmc.org/releases") { maven("https://repo.leavesmc.org/releases") {
@@ -251,6 +250,7 @@ tasks.register("applyNextPatch") {
if (failedIndex >= 0) { if (failedIndex >= 0) {
val directory = project.projectDir.resolve(patchDir[failedIndex]) val directory = project.projectDir.resolve(patchDir[failedIndex])
executeCommand(listOf("git", "add", "."), directory)
val gitCommand = if (hasGitChanges(directory)) { val gitCommand = if (hasGitChanges(directory)) {
listOf("git", "am", "--continue") listOf("git", "am", "--continue")

View File

@@ -1,7 +1,10 @@
group=org.leavesmc.leaves group=org.leavesmc.leaves
version=1.21.5-R0.1-SNAPSHOT version=1.21.8-R0.1-SNAPSHOT
mcVersion=1.21.5 mcVersion=1.21.8
paperRef=2ba1675c7506cadd8a540ea452e5dafb79ae8947 paperRef=c8a8c0ef8910c809913a00e2d9bdffaec51ff1f4
preVersion=true preVersion=true
org.gradle.caching=true org.gradle.caching=true
org.gradle.parallel=true org.gradle.parallel=true
paper.runDisableWatchdog=true

Binary file not shown.

View File

@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

9
gradlew vendored
View File

@@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@@ -115,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;; NONSTOP* ) nonstop=true ;;
esac esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
@@ -206,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command: # Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped. # and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line. # treated as '${Hostname}' itself on the command line.
@@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \ set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \ "-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \ -classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@" "$@"
# Stop when "xargs" is not available. # Stop when "xargs" is not available.

4
gradlew.bat vendored
View File

@@ -70,11 +70,11 @@ goto fail
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell

View File

@@ -54,7 +54,7 @@
into("META-INF/maven/${project.group}/${project.name}") into("META-INF/maven/${project.group}/${project.name}")
@@ -166,7 +_,7 @@ @@ -166,7 +_,7 @@
tasks.withType<Javadoc> { tasks.withType<Javadoc>().configureEach {
val options = options as StandardJavadocDocletOptions val options = options as StandardJavadocDocletOptions
- options.overview = "src/main/javadoc/overview.html" - options.overview = "src/main/javadoc/overview.html"
+ options.overview = "../paper-api/src/main/javadoc/overview.html" // Leaves - build change + options.overview = "../paper-api/src/main/javadoc/overview.html" // Leaves - build change

View File

@@ -2904,18 +2904,18 @@ index 59fada9b1eb78238d280c6bbb711f52facba52c6..eb4d78c6111a530d015a0b91d14c40ad
return i >= j && i <= k; return i >= j && i <= k;
} }
diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java
index 4acda947b7d69ab4133b4cc94e76d945e4d148d5..d356f1895e8f3fae14bbbe1f60e589af3856b9ec 100644 index ad1330d87223dfcf3c9da40aa5ece8c21141f0d6..f561ac4ebd8d40266ae9f066e79045bb93113a53 100644
--- a/src/main/java/org/bukkit/command/SimpleCommandMap.java --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java
+++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java
@@ -32,7 +32,6 @@ public class SimpleCommandMap implements CommandMap { @@ -34,7 +34,6 @@ public class SimpleCommandMap implements CommandMap {
final ReloadCommand reload = new ReloadCommand("reload");
private void setDefaultCommands() { this.knownCommands.put("bukkit:reload", reload);
register("bukkit", new ReloadCommand("reload")); this.knownCommands.put("bukkit:rl", reload);
- register("bukkit", new co.aikar.timings.TimingsCommand("timings")); - register("bukkit", new co.aikar.timings.TimingsCommand("timings"));
} }
public void setFallbackCommands() { public void setFallbackCommands() {
@@ -64,7 +63,6 @@ public class SimpleCommandMap implements CommandMap { @@ -66,7 +65,6 @@ public class SimpleCommandMap implements CommandMap {
*/ */
@Override @Override
public boolean register(@NotNull String label, @NotNull String fallbackPrefix, @NotNull Command command) { public boolean register(@NotNull String label, @NotNull String fallbackPrefix, @NotNull Command command) {
@@ -2923,7 +2923,7 @@ index 4acda947b7d69ab4133b4cc94e76d945e4d148d5..d356f1895e8f3fae14bbbe1f60e589af
label = label.toLowerCase(Locale.ROOT).trim(); label = label.toLowerCase(Locale.ROOT).trim();
fallbackPrefix = fallbackPrefix.toLowerCase(Locale.ROOT).trim(); fallbackPrefix = fallbackPrefix.toLowerCase(Locale.ROOT).trim();
boolean registered = register(label, command, false, fallbackPrefix); boolean registered = register(label, command, false, fallbackPrefix);
@@ -146,17 +144,9 @@ public class SimpleCommandMap implements CommandMap { @@ -148,17 +146,9 @@ public class SimpleCommandMap implements CommandMap {
return false; return false;
} }
@@ -2942,7 +2942,7 @@ index 4acda947b7d69ab4133b4cc94e76d945e4d148d5..d356f1895e8f3fae14bbbe1f60e589af
server.getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerCommandException(ex, target, sender, args))); // Paper 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 //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 diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index 001465eedafa51ac027a4db51cba6223edfe1171..dd98b4886d21ac92d9f9139450258754e985fb85 100644 index dfc2d76403993640e6283f25f9f3647bb6d1a30c..cc2a208b7cb118134ca4088c622644b5d2fac1c0 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -720,7 +720,6 @@ public final class SimplePluginManager implements PluginManager { @@ -720,7 +720,6 @@ public final class SimplePluginManager implements PluginManager {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add fakeplayer api
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index c9ea6559f809a6732588b8908001807be3d91196..fe30de1f0a7fc7112466b6eb2e5813f39259c3b6 100644 index 3bde4ad79ade5aae18e9073307f637717e8dd9e3..9971ed1347f0f37800911c6cd9d0f8ae1a4f100c 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3007,4 +3007,15 @@ public final class Bukkit { @@ -3016,4 +3016,15 @@ public final class Bukkit {
public static void restart() { public static void restart() {
server.restart(); server.restart();
} }
@@ -19,16 +19,16 @@ index c9ea6559f809a6732588b8908001807be3d91196..fe30de1f0a7fc7112466b6eb2e5813f3
+ * + *
+ * @return Bot Manager + * @return Bot Manager
+ */ + */
+ public static @NotNull org.leavesmc.leaves.entity.BotManager getBotManager() { + public static @NotNull org.leavesmc.leaves.entity.bot.BotManager getBotManager() {
+ return server.getBotManager(); + return server.getBotManager();
+ } + }
+ // Leaves end - Bot API + // Leaves end - Bot API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index ed899c4cb4b5261ceff56bbc9ca806e20904508e..a5370832380e93cf029588caeb8e29e03cc52db8 100644 index 9bab00ab10c78908090c8a1a12d4c84e9324b08b..3e7aad4ddf573f7c868b7824c4f0f34fa08cb1fe 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -2716,4 +2716,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2723,4 +2723,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/ */
void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value); void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value);
// Paper end - API to check if the server is sleeping // Paper end - API to check if the server is sleeping
@@ -39,6 +39,6 @@ index ed899c4cb4b5261ceff56bbc9ca806e20904508e..a5370832380e93cf029588caeb8e29e0
+ * + *
+ * @return Bot Manager + * @return Bot Manager
+ */ + */
+ @NotNull org.leavesmc.leaves.entity.BotManager getBotManager(); + @NotNull org.leavesmc.leaves.entity.bot.BotManager getBotManager();
+ // Leaves end - Bot API + // Leaves end - Bot API
} }

View File

@@ -5,30 +5,30 @@ Subject: [PATCH] Replay Mod API
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index fe30de1f0a7fc7112466b6eb2e5813f39259c3b6..23f3ab31bbc9d197f9a82f4ed5003e6de814fad7 100644 index 9971ed1347f0f37800911c6cd9d0f8ae1a4f100c..803611b793daed2d51ef6ab34d01fc8b0a3ecd23 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3018,4 +3018,10 @@ public final class Bukkit { @@ -3027,4 +3027,10 @@ public final class Bukkit {
return server.getBotManager(); return server.getBotManager();
} }
// Leaves end - Bot API // Leaves end - Bot API
+ +
+ // Leaves start - Photographer API + // Leaves start - Photographer API
+ public static @NotNull org.leavesmc.leaves.entity.PhotographerManager getPhotographerManager() { + public static @NotNull org.leavesmc.leaves.entity.photographer.PhotographerManager getPhotographerManager() {
+ return server.getPhotographerManager(); + return server.getPhotographerManager();
+ } + }
+ // Leaves end - Photographer API + // Leaves end - Photographer API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index a5370832380e93cf029588caeb8e29e03cc52db8..2531e82464e54e0c1b707e7c5a62ff0fd5ed8637 100644 index 3e7aad4ddf573f7c868b7824c4f0f34fa08cb1fe..ce128dd8120b75884cb208d7ba7d316ee110333b 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -2725,4 +2725,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2732,4 +2732,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/ */
@NotNull org.leavesmc.leaves.entity.BotManager getBotManager(); @NotNull org.leavesmc.leaves.entity.bot.BotManager getBotManager();
// Leaves end - Bot API // Leaves end - Bot API
+ +
+ // Leaves start - Photographer API + // Leaves start - Photographer API
+ @NotNull org.leavesmc.leaves.entity.PhotographerManager getPhotographerManager(); + @NotNull org.leavesmc.leaves.entity.photographer.PhotographerManager getPhotographerManager();
+ // Leaves end - Photographer API + // Leaves end - Photographer API
} }

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Bytebuf API
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 23f3ab31bbc9d197f9a82f4ed5003e6de814fad7..30488f80b98d1dba485e53601edb5cb0e23b7591 100644 index 803611b793daed2d51ef6ab34d01fc8b0a3ecd23..0149af5bd4234f925e12d78251766be5a16e5060 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3024,4 +3024,10 @@ public final class Bukkit { @@ -3033,4 +3033,10 @@ public final class Bukkit {
return server.getPhotographerManager(); return server.getPhotographerManager();
} }
// Leaves end - Photographer API // Leaves end - Photographer API
@@ -20,12 +20,12 @@ index 23f3ab31bbc9d197f9a82f4ed5003e6de814fad7..30488f80b98d1dba485e53601edb5cb0
+ // Leaves end - Bytebuf API + // Leaves end - Bytebuf API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 2531e82464e54e0c1b707e7c5a62ff0fd5ed8637..a1742e64232c949dc88deb5d6083c4bf62e6aae9 100644 index ce128dd8120b75884cb208d7ba7d316ee110333b..e63fb4e0c55929f2721e16f69e0c0a4b455477fa 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -2729,4 +2729,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2736,4 +2736,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
// Leaves start - Photographer API // Leaves start - Photographer API
@NotNull org.leavesmc.leaves.entity.PhotographerManager getPhotographerManager(); @NotNull org.leavesmc.leaves.entity.photographer.PhotographerManager getPhotographerManager();
// Leaves end - Photographer API // Leaves end - Photographer API
+ +
+ // Leaves start - Bytebuf API + // Leaves start - Bytebuf API
@@ -33,10 +33,10 @@ index 2531e82464e54e0c1b707e7c5a62ff0fd5ed8637..a1742e64232c949dc88deb5d6083c4bf
+ // Leaves end - Bytebuf API + // Leaves end - Bytebuf API
} }
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index d34419693fc78b3f7e8f6bbf115f17f29e5e3377..ab45edbc10398d92ddfcfd16d12d49f5b4e87c4c 100644 index 3584ca0a89f59e391ab6d5be8f2274a6801d025f..4171ac88c491c071af9def920084292e108587f0 100644
--- a/src/main/java/org/bukkit/entity/Player.java --- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3860,6 +3860,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @@ -3859,6 +3859,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
boolean isChunkSent(long chunkKey); boolean isChunkSent(long chunkKey);
// Paper end // Paper end

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Leaves Config API
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 30488f80b98d1dba485e53601edb5cb0e23b7591..91fa30c1713795007faef73280713a33d2518487 100644 index 0149af5bd4234f925e12d78251766be5a16e5060..3c019280bc751e0710f1d34478b56986bc6000fc 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3030,4 +3030,10 @@ public final class Bukkit { @@ -3039,4 +3039,10 @@ public final class Bukkit {
return server.getBytebufManager(); return server.getBytebufManager();
} }
// Leaves end - Bytebuf API // Leaves end - Bytebuf API
@@ -20,10 +20,10 @@ index 30488f80b98d1dba485e53601edb5cb0e23b7591..91fa30c1713795007faef73280713a33
+ // Leaves end - Config API + // Leaves end - Config API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index a1742e64232c949dc88deb5d6083c4bf62e6aae9..75a1917d998bf8aa0b86a67ca0f0836804fad012 100644 index e63fb4e0c55929f2721e16f69e0c0a4b455477fa..37ff5eabaf0fd3ab72eb37a1f21904b5a1adebe0 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -2733,4 +2733,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2740,4 +2740,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
// Leaves start - Bytebuf API // Leaves start - Bytebuf API
org.leavesmc.leaves.bytebuf.BytebufManager getBytebufManager(); org.leavesmc.leaves.bytebuf.BytebufManager getBytebufManager();
// Leaves end - Bytebuf API // Leaves end - Bytebuf API

View File

@@ -0,0 +1,6 @@
[*.java]
ij_java_if_brace_force = always
ij_java_do_while_brace_force = always
ij_java_for_brace_force = always
ij_java_while_brace_force = always
ij_java_use_fq_class_names = false

View File

@@ -140,6 +140,8 @@ public enum PacketType {
ServerboundMoveVehicle, ServerboundMoveVehicle,
ServerboundPaddleBoat, ServerboundPaddleBoat,
ServerboundPickItem, ServerboundPickItem,
ServerboundPickItemFromBlock,
ServerboundPickItemFromEntity,
ServerboundPlaceRecipe, ServerboundPlaceRecipe,
ServerboundPlayerAbilities, ServerboundPlayerAbilities,
ServerboundPlayerAction, ServerboundPlayerAction,
@@ -188,5 +190,7 @@ public enum PacketType {
ServerboundPong, ServerboundPong,
ServerboundResourcePack, ServerboundResourcePack,
ServerboundPingRequest, ServerboundPingRequest,
ClientboundPongResponse ClientboundPongResponse,
ClientboundShowDialog,
ClientboundClearDialog
} }

View File

@@ -1,9 +1,9 @@
package org.leavesmc.leaves.entity; package org.leavesmc.leaves.entity.bot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.botaction.LeavesBotAction; import org.leavesmc.leaves.entity.bot.action.BotAction;
import java.util.UUID; import java.util.UUID;
@@ -38,8 +38,7 @@ public interface Bot extends Player {
* *
* @param action bot action * @param action bot action
*/ */
@org.jetbrains.annotations.ApiStatus.Experimental <T extends BotAction<T>> void addAction(@NotNull T action);
void addAction(@NotNull LeavesBotAction action);
/** /**
* Get the copy action in giving index * Get the copy action in giving index
@@ -47,8 +46,7 @@ public interface Bot extends Player {
* @param index index of actions * @param index index of actions
* @return Action of that index * @return Action of that index
*/ */
@org.jetbrains.annotations.ApiStatus.Experimental BotAction<?> getAction(int index);
LeavesBotAction getAction(int index);
/** /**
* Get action size * Get action size

View File

@@ -1,4 +1,4 @@
package org.leavesmc.leaves.entity; package org.leavesmc.leaves.entity.bot;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;

View File

@@ -1,9 +1,9 @@
package org.leavesmc.leaves.entity; package org.leavesmc.leaves.entity.bot;
import org.bukkit.Location; import org.bukkit.Location;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.botaction.CustomBotAction; import org.leavesmc.leaves.entity.bot.action.BotAction;
import java.util.Collection; import java.util.Collection;
import java.util.UUID; import java.util.UUID;
@@ -37,23 +37,12 @@ public interface BotManager {
Collection<Bot> getBots(); Collection<Bot> getBots();
/** /**
* Register a custom bot action. * Create a bot action by class.
* *
* @param name action name * @param type action class
* @param action action executor * @return a bot action instance if one was found, null otherwise
* @return true if success, or false
*/ */
@org.jetbrains.annotations.ApiStatus.Experimental <T extends BotAction<T>> T newAction(@NotNull Class<T> type);
boolean registerCustomBotAction(String name, CustomBotAction action);
/**
* Unregister a custom bot action.
*
* @param name action name
* @return true if success, or false
*/
@org.jetbrains.annotations.ApiStatus.Experimental
boolean unregisterCustomBotAction(String name);
BotCreator botCreator(@NotNull String realName, @NotNull Location location); BotCreator botCreator(@NotNull String realName, @NotNull Location location);
} }

View File

@@ -0,0 +1,12 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to attack entities.
*/
public interface AttackAction extends TimerBotAction<AttackAction> {
static AttackAction create() {
return Bukkit.getBotManager().newAction(AttackAction.class);
}
}

View File

@@ -0,0 +1,85 @@
package org.leavesmc.leaves.entity.bot.action;
import java.util.UUID;
import java.util.function.Consumer;
/**
* Represents an action that can be performed by a Bot.
* <p>
* This interface defines the basic properties of an action (such as name and UUID)
* and lifecycle event callbacks (success, failure, stop).
*
* @param <T> the type of the callback parameter, usually a context object related to the action
*/
public interface BotAction<T> {
/**
* Gets the name of this action.
*
* @return the action name
*/
String getName();
/**
* Gets the UUID of this action.
*
* @return the UUID of the action
*/
UUID getUUID();
/**
* Sets whether this action is cancelled.
*
* @param cancel true to cancel the action, false otherwise
*/
void setCancelled(boolean cancel);
/**
* Checks whether this action has been cancelled.
*
* @return true if cancelled, false otherwise
*/
boolean isCancelled();
/**
* Sets the callback to be executed when the action fails.
*
* @param onFail the callback to execute on failure, with a parameter of type T
*/
void setOnFail(Consumer<T> onFail);
/**
* Gets the callback to be executed when the action fails.
*
* @return the failure callback
*/
Consumer<T> getOnFail();
/**
* Sets the callback to be executed when the action succeeds.
*
* @param onSuccess the callback to execute on success, with a parameter of type T
*/
void setOnSuccess(Consumer<T> onSuccess);
/**
* Gets the callback to be executed when the action succeeds.
*
* @return the success callback
*/
Consumer<T> getOnSuccess();
/**
* Sets the callback to be executed when the action is stopped.
*
* @param onStop the callback to execute on stop, with a parameter of type T
*/
void setOnStop(Consumer<T> onStop);
/**
* Gets the callback to be executed when the action is stopped.
*
* @return the stop callback
*/
Consumer<T> getOnStop();
}

View File

@@ -0,0 +1,12 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to break a block.
*/
public interface BreakBlockAction extends TimerBotAction<BreakBlockAction> {
static BreakBlockAction create() {
return Bukkit.getBotManager().newAction(BreakBlockAction.class);
}
}

View File

@@ -0,0 +1,12 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to drop all items in its inventory.
*/
public interface DropAction extends TimerBotAction<DropAction> {
static DropAction create() {
return Bukkit.getBotManager().newAction(DropAction.class);
}
}

View File

@@ -0,0 +1,12 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to perform auto fishing.
*/
public interface FishAction extends TimerBotAction<FishAction> {
static FishAction create() {
return Bukkit.getBotManager().newAction(FishAction.class);
}
}

View File

@@ -0,0 +1,12 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to perform a jump.
*/
public interface JumpAction extends TimerBotAction<JumpAction> {
static JumpAction create() {
return Bukkit.getBotManager().newAction(JumpAction.class);
}
}

View File

@@ -0,0 +1,54 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
/**
* Represents an action for a bot to look at a specific position or player.
* <p>
* If both a position and a player are set, the player target takes precedence.
*/
public interface LookAction extends BotAction<LookAction> {
/**
* Sets the position in the world for the bot to look at.
* <p>
* If a player target is set via {@link #setTarget(Player)}, the bot will look at the player instead of this position.
*
* @param pos the {@link Vector} representing the position to look at
* @return this {@code LookAction} instance for method chaining
*/
LookAction setPos(Vector pos);
/**
* Gets the position in the world that the bot is set to look at.
* <p>
* If a player target is set, this value may be ignored.
*
* @return the {@link Vector} position to look at, or {@code null} if not set
*/
Vector getPos();
/**
* Sets the player for the bot to look at.
* <p>
* When a player is set as the target, the bot will continuously look at the player's current position,
* overriding any position set by {@link #setPos(Vector)}.
*
* @param player the {@link Player} to look at, or {@code null} to clear the target
* @return this {@code LookAction} instance for method chaining
*/
LookAction setTarget(Player player);
/**
* Gets the player that the bot is set to look at.
*
* @return the {@link Player} target, or {@code null} if not set
*/
Player getTarget();
static LookAction create() {
return Bukkit.getBotManager().newAction(LookAction.class);
}
}

View File

@@ -0,0 +1,44 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to move to a specific direction.
*/
public interface MoveAction extends StateBotAction<MoveAction> {
/**
* Gets the direction of the move action.
*
* @return the direction of the move action
*/
MoveDirection getDirection();
/**
* Sets the direction of the move action.
*
* @param direction the direction to set
* @return this action instance
*/
MoveAction setDirection(MoveDirection direction);
/**
* Represents possible movement directions for the bot.
*/
enum MoveDirection {
FORWARD("forward"),
BACKWARD("backward"),
LEFT("left"),
RIGHT("right");
public final String name;
MoveDirection(String name) {
this.name = name;
}
}
static MoveAction create() {
return Bukkit.getBotManager().newAction(MoveAction.class);
}
}

View File

@@ -0,0 +1,43 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to rotate to a specific yaw and pitch.
*/
public interface RotationAction extends BotAction<RotationAction> {
/**
* Sets the yaw of the rotation.
*
* @param yaw the yaw to set
* @return this action instance
*/
RotationAction setYaw(float yaw);
/**
* Sets the pitch of the rotation.
*
* @param pitch the pitch to set
* @return this action instance
*/
RotationAction setPitch(float pitch);
/**
* Gets the yaw of the rotation.
*
* @return the yaw
*/
float getYaw();
/**
* Gets the pitch of the rotation.
*
* @return the pitch
*/
float getPitch();
static RotationAction create() {
return Bukkit.getBotManager().newAction(RotationAction.class);
}
}

View File

@@ -0,0 +1,12 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to sneak.
*/
public interface SneakAction extends StateBotAction<SneakAction> {
static SneakAction create() {
return Bukkit.getBotManager().newAction(SneakAction.class);
}
}

View File

@@ -0,0 +1,10 @@
package org.leavesmc.leaves.entity.bot.action;
/**
* Represents a type of bot action that places the bot in a specific state while the action is active.
* When the action is stopped, the associated state is removed from the bot.
*
* @param <E> The type of entity that this action operates on.
*/
public interface StateBotAction<E> extends BotAction<E> {
}

View File

@@ -0,0 +1,12 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action for a bot to float up in water.
*/
public interface SwimAction extends StateBotAction<SwimAction> {
static SwimAction create() {
return Bukkit.getBotManager().newAction(SwimAction.class);
}
}

View File

@@ -0,0 +1,68 @@
package org.leavesmc.leaves.entity.bot.action;
/**
* Represents a scheduled bot task that runs periodically.
* <p>
* TimerBotAction allows configuration of start delay, execution interval, and the number of executions.
* It is intended for bot actions that need to be triggered at regular intervals.
*
* @param <E> the type of entity this action operates on
*/
public interface TimerBotAction<E> extends BotAction<E> {
/**
* Sets the delay in ticks before the task starts for the first time.
*
* @param delayTick the number of ticks to delay before the first execution
*/
void setStartDelayTick(int delayTick);
/**
* Gets the delay in ticks before the task starts for the first time.
*
* @return the number of ticks to delay before the first execution
*/
int getStartDelayTick();
/**
* Sets the interval in ticks between each execution of the task.
*
* @param intervalTick the number of ticks between executions
*/
void setDoIntervalTick(int intervalTick);
/**
* Gets the interval in ticks between each execution of the task.
*
* @return the number of ticks between executions
*/
int getDoIntervalTick();
/**
* Sets the total number of times the task should be executed.
*
* @param doNumber the total number of executions
*/
void setDoNumber(int doNumber);
/**
* Gets the total number of times the task should be executed.
*
* @return the total number of executions
*/
int getDoNumber();
/**
* Gets the number of ticks remaining until the next execution.
*
* @return the number of ticks until the next execution
*/
int getTickToNext();
/**
* Gets the number of executions remaining for this task.
*
* @return the number of executions remaining
*/
int getDoNumberRemaining();
}

View File

@@ -0,0 +1,29 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action where a bot only uses an item, without using it on blocks or entities.
*/
public interface UseItemAction extends TimerBotAction<UseItemAction> {
/**
* Gets the equivalent right-click hold duration in ticks.
* Default is -1, which means will not be released.
*
* @return the equivalent right-click hold duration
*/
int getUseTick();
/**
* Sets the equivalent right-click hold duration in ticks.
*
* @param useTick the equivalent right-click hold duration
* @return this action instance
*/
UseItemAction setUseTick(int useTick);
static UseItemAction create() {
return Bukkit.getBotManager().newAction(UseItemAction.class);
}
}

View File

@@ -0,0 +1,29 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action where a bot uses an item, fully simulating the effect of a player right-clicking.
*/
public interface UseItemAutoAction extends TimerBotAction<UseItemAutoAction> {
/**
* Gets the equivalent right-click hold duration in ticks.
* Default is -1, which means will not be released.
*
* @return the equivalent right-click hold duration
*/
int getUseTick();
/**
* Sets the equivalent right-click hold duration in ticks.
*
* @param useTick the equivalent right-click hold duration
* @return this action instance
*/
UseItemAutoAction setUseTick(int useTick);
static UseItemAutoAction create() {
return Bukkit.getBotManager().newAction(UseItemAutoAction.class);
}
}

View File

@@ -0,0 +1,29 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action where a bot only uses the item in its offhand, without using it on blocks or entities.
*/
public interface UseItemOffhandAction extends TimerBotAction<UseItemOffhandAction> {
/**
* Gets the equivalent right-click hold duration in ticks.
* Default is -1, which means will not be released.
*
* @return the equivalent right-click hold duration
*/
int getUseTick();
/**
* Sets the equivalent right-click hold duration in ticks.
*
* @param useTick the equivalent right-click hold duration
* @return this action instance
*/
UseItemOffhandAction setUseTick(int useTick);
static UseItemOffhandAction create() {
return Bukkit.getBotManager().newAction(UseItemOffhandAction.class);
}
}

View File

@@ -0,0 +1,29 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action where a bot uses an item on a block.
*/
public interface UseItemOnAction extends TimerBotAction<UseItemOnAction> {
/**
* Gets the equivalent right-click hold duration in ticks.
* Default is -1, which means will not be released.
*
* @return the equivalent right-click hold duration
*/
int getUseTick();
/**
* Sets the equivalent right-click hold duration in ticks.
*
* @param useTick the equivalent right-click hold duration
* @return this action instance
*/
UseItemOnAction setUseTick(int useTick);
static UseItemOnAction create() {
return Bukkit.getBotManager().newAction(UseItemOnAction.class);
}
}

View File

@@ -0,0 +1,29 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action where a bot uses an item in its offhand on a block.
*/
public interface UseItemOnOffhandAction extends TimerBotAction<UseItemOnOffhandAction> {
/**
* Gets the equivalent right-click hold duration in ticks.
* Default is -1, which means will not be released.
*
* @return the equivalent right-click hold duration
*/
int getUseTick();
/**
* Sets the equivalent right-click hold duration in ticks.
*
* @param useTick the equivalent right-click hold duration
* @return this action instance
*/
UseItemOnOffhandAction setUseTick(int useTick);
static UseItemOnOffhandAction create() {
return Bukkit.getBotManager().newAction(UseItemOnOffhandAction.class);
}
}

View File

@@ -0,0 +1,29 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action where a bot uses an item to an entity.
*/
public interface UseItemToAction extends TimerBotAction<UseItemToAction> {
/**
* Gets the equivalent right-click hold duration in ticks.
* Default is -1, which means will not be released.
*
* @return the equivalent right-click hold duration
*/
int getUseTick();
/**
* Sets the equivalent right-click hold duration in ticks.
*
* @param useTick the equivalent right-click hold duration
* @return this action instance
*/
UseItemToAction setUseTick(int useTick);
static UseItemToAction create() {
return Bukkit.getBotManager().newAction(UseItemToAction.class);
}
}

View File

@@ -0,0 +1,29 @@
package org.leavesmc.leaves.entity.bot.action;
import org.bukkit.Bukkit;
/**
* Represents an action where a bot uses an item in its offhand to an entity.
*/
public interface UseItemToOffhandAction extends TimerBotAction<UseItemToOffhandAction> {
/**
* Gets the equivalent right-click hold duration in ticks.
* Default is -1, which means will not be released.
*
* @return the equivalent right-click hold duration
*/
int getUseTick();
/**
* Sets the equivalent right-click hold duration in ticks.
*
* @param useTick the equivalent right-click hold duration
* @return this action instance
*/
UseItemToOffhandAction setUseTick(int useTick);
static UseItemToOffhandAction create() {
return Bukkit.getBotManager().newAction(UseItemToOffhandAction.class);
}
}

View File

@@ -1,35 +0,0 @@
package org.leavesmc.leaves.entity.botaction;
/**
* A Leaves bot action enum
*/
@org.jetbrains.annotations.ApiStatus.Experimental
public enum BotActionType {
ATTACK("attack"),
BREAK("break"),
DROP("drop"),
FISH("fish"),
JUMP("jump"),
LOOK("look"),
ROTATE("rotate"),
ROTATION("rotation"),
SNEAK("sneak"),
SWIM("swim"),
USE("use"),
USE_ON("use_on"),
USE_TO("use_to"),
USE_OFFHAND("use_offhand"),
USE_ON_OFFHAND("use_on_offhand"),
USE_TO_OFFHAND("use_to_offhand");
private final String name;
BotActionType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}

View File

@@ -1,60 +0,0 @@
package org.leavesmc.leaves.entity.botaction;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.Bot;
import java.util.List;
/**
* Represents a class which contains methods for a custom bot action
*/
@org.jetbrains.annotations.ApiStatus.Experimental
public interface CustomBotAction {
/**
* Executes the action, returning its success.
*
* @param bot bot of the action
* @return true if once action finish, otherwise false
*/
boolean doTick(Bot bot);
/**
* Created a new action instance.
*
* @param player player who create this action
* @param args passed action arguments
* @return a new action instance with given args
*/
@Nullable CustomBotAction getNew(@Nullable Player player, String[] args);
/**
* Requests a list of possible completions for a action argument.
*
* @return A List of a List of possible completions for the argument.
*/
@NotNull List<List<String>> getTabComplete();
/**
* Return the interval between {@link CustomBotAction#doTick(Bot)}
*
* @return the tick interval
*/
int getInitialTickInterval();
/**
* Return the tick delay to the first {@link CustomBotAction#doTick(Bot)}
*
* @return the tick delay
*/
int getInitialTickDelay();
/**
* Return a number of times {@link CustomBotAction#doTick(Bot)} can return true
*
* @return the number of times an action can be executed
*/
int getInitialNumber();
}

View File

@@ -1,90 +0,0 @@
package org.leavesmc.leaves.entity.botaction;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
import java.util.UUID;
@org.jetbrains.annotations.ApiStatus.Experimental
public class LeavesBotAction {
private final String actionName;
private final UUID uuid;
private final int initialTickDelay;
private final int initialTickInterval;
private final int initialNumber;
private Player actionPlayer;
private int tickToNext;
private int numberRemaining;
private boolean cancel;
public LeavesBotAction(BotActionType type, int initialTickInterval, int initialNumber) {
this(type.getName(), UUID.randomUUID(), 0, initialTickInterval, initialNumber);
}
public LeavesBotAction(BotActionType type, int initialTickDelay, int initialTickInterval, int initialNumber) {
this(type.getName(), UUID.randomUUID(), initialTickDelay, initialTickInterval, initialNumber);
}
protected LeavesBotAction(String name, UUID actionUUID, int initialTickDelay, int initialTickInterval, int initialNumber) {
this.actionName = name;
this.uuid = actionUUID;
this.initialTickDelay = initialTickDelay;
this.initialTickInterval = initialTickInterval;
this.initialNumber = initialNumber;
}
public String getActionName() {
return actionName;
}
public UUID getUuid() {
return uuid;
}
public int getInitialTickDelay() {
return initialTickDelay;
}
public int getInitialTickInterval() {
return initialTickInterval;
}
public int getInitialNumber() {
return initialNumber;
}
@Nullable
public Player getActionPlayer() {
return actionPlayer;
}
public void setActionPlayer(@Nullable Player actionPlayer) {
this.actionPlayer = actionPlayer;
}
public boolean isCancel() {
return cancel;
}
public void setCancel(boolean cancel) {
this.cancel = cancel;
}
public int getNumberRemaining() {
return numberRemaining;
}
public void setNumberRemaining(int numberRemaining) {
this.numberRemaining = numberRemaining;
}
public int getTickToNext() {
return tickToNext;
}
public void setTickToNext(int tickToNext) {
this.tickToNext = tickToNext;
}
}

View File

@@ -1,4 +1,4 @@
package org.leavesmc.leaves.entity; package org.leavesmc.leaves.entity.photographer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@@ -1,4 +1,4 @@
package org.leavesmc.leaves.entity; package org.leavesmc.leaves.entity.photographer;
import org.bukkit.Location; import org.bukkit.Location;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@@ -1,7 +1,7 @@
package org.leavesmc.leaves.event.bot; package org.leavesmc.leaves.event.bot;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
import java.util.UUID; import java.util.UUID;

View File

@@ -3,7 +3,7 @@ package org.leavesmc.leaves.event.bot;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
import java.util.UUID; import java.util.UUID;

View File

@@ -5,7 +5,7 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
import java.util.UUID; import java.util.UUID;

View File

@@ -5,7 +5,7 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
import java.util.UUID; import java.util.UUID;

View File

@@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
public class BotConfigModifyEvent extends BotEvent implements Cancellable { public class BotConfigModifyEvent extends BotEvent implements Cancellable {

View File

@@ -20,6 +20,7 @@ public class BotCreateEvent extends Event implements Cancellable {
private final CommandSender creator; private final CommandSender creator;
private Location createLocation; private Location createLocation;
private boolean cancel = false; private boolean cancel = false;
public BotCreateEvent(@NotNull final String who, @NotNull final String skin, @NotNull final Location createLocation, @NotNull CreateReason reason, @Nullable CommandSender creator) { public BotCreateEvent(@NotNull final String who, @NotNull final String skin, @NotNull final Location createLocation, @NotNull CreateReason reason, @Nullable CommandSender creator) {
this.bot = who; this.bot = who;
this.skin = skin; this.skin = skin;

View File

@@ -6,7 +6,7 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
public class BotDeathEvent extends BotEvent implements Cancellable { public class BotDeathEvent extends BotEvent implements Cancellable {

View File

@@ -2,7 +2,7 @@ package org.leavesmc.leaves.event.bot;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
/** /**
* Represents a fakeplayer related event * Represents a fakeplayer related event

View File

@@ -5,7 +5,7 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
public class BotInventoryOpenEvent extends BotEvent implements Cancellable { public class BotInventoryOpenEvent extends BotEvent implements Cancellable {

View File

@@ -5,7 +5,7 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
/** /**
* Called when a fakeplayer joins a server * Called when a fakeplayer joins a server

View File

@@ -7,7 +7,7 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
/** /**
* Call when a fakeplayer removed * Call when a fakeplayer removed
@@ -20,6 +20,7 @@ public class BotRemoveEvent extends BotEvent implements Cancellable {
private Component removeMessage; private Component removeMessage;
private boolean save; private boolean save;
private boolean cancel = false; private boolean cancel = false;
public BotRemoveEvent(@NotNull final Bot who, @NotNull RemoveReason reason, @Nullable CommandSender remover, @Nullable Component removeMessage, boolean save) { public BotRemoveEvent(@NotNull final Bot who, @NotNull RemoveReason reason, @Nullable CommandSender remover, @Nullable Component removeMessage, boolean save) {
super(who); super(who);
this.reason = reason; this.reason = reason;

View File

@@ -3,7 +3,7 @@ package org.leavesmc.leaves.event.bot;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.leavesmc.leaves.entity.Bot; import org.leavesmc.leaves.entity.bot.Bot;
public class BotSpawnLocationEvent extends BotEvent { public class BotSpawnLocationEvent extends BotEvent {

View File

@@ -1,10 +1,16 @@
--- a/paper-server/build.gradle.kts --- a/paper-server/build.gradle.kts
+++ b/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts
@@ -9,25 +_,38 @@ @@ -1,4 +_,3 @@
-import io.papermc.fill.model.BuildChannel
import io.papermc.paperweight.attribute.DevBundleOutput
import io.papermc.paperweight.util.*
import io.papermc.paperweight.util.data.FileEntry
@@ -10,24 +_,36 @@
`java-library` `java-library`
`maven-publish` `maven-publish`
idea idea
- id("io.papermc.paperweight.core") - id("io.papermc.paperweight.core")
- id("io.papermc.fill.gradle") version "1.0.7"
+ id("org.leavesmc.leavesweight.core") // Leaves - build change + id("org.leavesmc.leavesweight.core") // Leaves - build change
} }
@@ -12,9 +18,9 @@
+val leavesMavenPublicUrl = "https://repo.leavesmc.com/snapshots/" // Leaves - build change +val leavesMavenPublicUrl = "https://repo.leavesmc.com/snapshots/" // Leaves - build change
dependencies { dependencies {
mache("io.papermc:mache:1.21.5+build.2") mache("io.papermc:mache:1.21.8+build.1")
- paperclip("io.papermc:paperclip:3.0.3") - paperclip("io.papermc:paperclip:3.0.3")
+ leavesclip("org.leavesmc:leavesclip:3.0.0") // Leaves - build change + leavesclip("org.leavesmc:leavesclip:3.0.4") // Leaves - build change
testRuntimeOnly("org.junit.platform:junit-platform-launcher") testRuntimeOnly("org.junit.platform:junit-platform-launcher")
} }
@@ -23,10 +29,6 @@
+ minecraftVersion = rootProject.providers.gradleProperty("mcVersion") // Leaves - build change + minecraftVersion = rootProject.providers.gradleProperty("mcVersion") // Leaves - build change
gitFilePatches = false gitFilePatches = false
//updatingMinecraft {
// oldPaperCommit = "f4f275519f7c1fbe9db173b7144a4fe81440e365"
//}
+ // Leaves start - build change + // Leaves start - build change
+ val leaves = forks.register("leaves") { + val leaves = forks.register("leaves") {
+ upstream.patchDir("paperServer") { + upstream.patchDir("paperServer") {
@@ -40,9 +42,12 @@
+ // Leaves end - build change + // Leaves end - build change
+ +
spigot { spigot {
buildDataRef = "702e1a0a5072b2c4082371d5228cb30525687efc" - enabled = true
packageVersion = "v1_21_R4" // also needs to be updated in MappingEnvironment + // enabled = true // Leaves - disable
@@ -50,6 +_,7 @@ buildDataRef = "436eac9815c211be1a2a6ca0702615f995e81c44"
packageVersion = "v1_21_R5" // also needs to be updated in MappingEnvironment
}
@@ -49,6 +_,7 @@
libraryRepositories.addAll( libraryRepositories.addAll(
"https://repo.maven.apache.org/maven2/", "https://repo.maven.apache.org/maven2/",
paperMavenPublicUrl, paperMavenPublicUrl,
@@ -50,7 +55,7 @@
) )
} }
@@ -108,7 +_,22 @@ @@ -107,7 +_,22 @@
} }
} }
@@ -74,12 +79,13 @@
configurations.named(log4jPlugins.compileClasspathConfigurationName) { configurations.named(log4jPlugins.compileClasspathConfigurationName) {
extendsFrom(configurations.compileClasspath.get()) extendsFrom(configurations.compileClasspath.get())
} }
@@ -130,7 +_,18 @@ @@ -129,7 +_,19 @@
} }
dependencies { dependencies {
- implementation(project(":paper-api")) - implementation(project(":paper-api"))
+ implementation(project(":leaves-api")) // Leaves - build change + implementation(project(":leaves-api")) // Leaves - build change
+ implementation("commons-lang:commons-lang:2.6") // Leaves - build change
+ // Leaves start - linear + // Leaves start - linear
+ implementation("com.github.luben:zstd-jni:1.5.4-1") + implementation("com.github.luben:zstd-jni:1.5.4-1")
+ implementation("org.lz4:lz4-java:1.8.0") + implementation("org.lz4:lz4-java:1.8.0")
@@ -94,18 +100,15 @@
implementation("ca.spottedleaf:concurrentutil:0.0.3") implementation("ca.spottedleaf:concurrentutil:0.0.3")
implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21
@@ -157,9 +_,9 @@ @@ -157,7 +_,6 @@
implementation("org.ow2.asm:asm-commons:9.8") implementation("org.spongepowered:configurate-yaml:4.2.0")
implementation("org.spongepowered:configurate-yaml:4.2.0-20250225.064233-199")
implementation("org.spongepowered:configurate-core:4.2.0-20250225.064233-204") // Pinned dependency of above pinned yaml snapshot.
+ implementation("commons-lang:commons-lang:2.6") // Leaves
// Deps that were previously in the API but have now been moved here for backwards compat, eventually to be removed // Deps that were previously in the API but have now been moved here for backwards compat, eventually to be removed
- runtimeOnly("commons-lang:commons-lang:2.6") - runtimeOnly("commons-lang:commons-lang:2.6")
runtimeOnly("org.xerial:sqlite-jdbc:3.49.1.0") runtimeOnly("org.xerial:sqlite-jdbc:3.49.1.0")
runtimeOnly("com.mysql:mysql-connector-j:9.2.0") runtimeOnly("com.mysql:mysql-connector-j:9.2.0")
runtimeOnly("com.lmax:disruptor:3.4.4") runtimeOnly("com.lmax:disruptor:3.4.4")
@@ -194,6 +_,16 @@ @@ -188,26 +_,36 @@
implementation("me.lucko:spark-paper:1.10.133-20250413.112336-1") implementation("me.lucko:spark-paper:1.10.133-20250413.112336-1")
} }
@@ -122,7 +125,13 @@
tasks.jar { tasks.jar {
manifest { manifest {
val git = Git(rootProject.layout.projectDirectory.path) val git = Git(rootProject.layout.projectDirectory.path)
@@ -206,14 +_,14 @@ val mcVersion = rootProject.providers.gradleProperty("mcVersion").get()
val build = System.getenv("BUILD_NUMBER") ?: null
- val buildTime = if (build != null) Instant.now() else Instant.EPOCH
+ val buildTime = Instant.now() // Leaves - always use build time
val gitHash = git.exec(providers, "rev-parse", "--short=7", "HEAD").get().trim()
val implementationVersion = "$mcVersion-${build ?: "DEV"}-$gitHash"
val date = git.exec(providers, "show", "-s", "--format=%ci", gitHash).get().trim()
val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim()
attributes( attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main", "Main-Class" to "org.bukkit.craftbukkit.Main",
@@ -142,16 +151,27 @@
"Build-Number" to (build ?: ""), "Build-Number" to (build ?: ""),
"Build-Time" to buildTime.toString(), "Build-Time" to buildTime.toString(),
"Git-Branch" to gitBranch, "Git-Branch" to gitBranch,
@@ -267,7 +_,7 @@ @@ -266,7 +_,7 @@
jvmArgumentProviders.add(provider) jvmArgumentProviders.add(provider)
} }
-val generatedDir: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath() -val generatedDir: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath()
+val generatedDir: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-server/src/generated/java").asFile.toPath() +val generatedDir: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-server/src/generated/java").asFile.toPath() // Leaves - build change
idea { idea {
module { module {
generatedSourceDirs.add(generatedDir.toFile()) generatedSourceDirs.add(generatedDir.toFile())
@@ -360,13 +_,26 @@ @@ -315,6 +_,10 @@
}
args("--nogui")
+ systemProperty("stdout.encoding", "UTF-8") // Leaves - fix utf8
+ systemProperty("stderr.encoding", "UTF-8") // Leaves - fix utf8
+ systemProperty("net.kyori.ansi.colorLevel", "truecolor") // Leaves - fix utf8
+ systemProperty("terminal.jline", true) // Leaves - fix utf8
systemProperty("net.kyori.adventure.text.warnWhenLegacyFormattingDetected", true)
if (providers.gradleProperty("paper.runDisableWatchdog").getOrElse("false") == "true") {
systemProperty("disable.watchdog", true)
@@ -359,30 +_,26 @@
classpath(tasks.createReobfBundlerJar.flatMap { it.outputZip }) classpath(tasks.createReobfBundlerJar.flatMap { it.outputZip })
mainClass.set(null as String?) mainClass.set(null as String?)
} }
@@ -165,6 +185,23 @@
- classpath(tasks.createReobfPaperclipJar.flatMap { it.outputZip }) - classpath(tasks.createReobfPaperclipJar.flatMap { it.outputZip })
- mainClass.set(null as String?) - mainClass.set(null as String?)
-} -}
-
-fill {
- project("paper")
- versionFamily(paperweight.minecraftVersion.map { it.split(".", "-").takeWhile { part -> part.toIntOrNull() != null }.take(2).joinToString(".") })
- version(paperweight.minecraftVersion)
-
- build {
- channel = BuildChannel.STABLE
-
- downloads {
- register("server:default") {
- file = tasks.createMojmapPaperclipJar.flatMap { it.outputZip }
- nameResolver.set { project, _, version, build -> "$project-$version-$build.jar" }
- }
- }
- }
-}
+ +
+// Leaves start - build change +// Leaves start - build change
+tasks.registerRunTask("runLeavesclip") { +tasks.registerRunTask("runLeavesclip") {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Build changes
diff --git a/ca/spottedleaf/moonrise/paper/PaperHooks.java b/ca/spottedleaf/moonrise/paper/PaperHooks.java diff --git a/ca/spottedleaf/moonrise/paper/PaperHooks.java b/ca/spottedleaf/moonrise/paper/PaperHooks.java
index b9b774a3ca600cee3d0e967063ea2f72c7ab184f..dfc582444cd7273afb78b250d9fa12317591d8aa 100644 index 42899a91b9061b85985fbbd0de4032c757f4aa8f..a93f00d1a64e4deb9b89435bab258f3bad487e2f 100644
--- a/ca/spottedleaf/moonrise/paper/PaperHooks.java --- a/ca/spottedleaf/moonrise/paper/PaperHooks.java
+++ b/ca/spottedleaf/moonrise/paper/PaperHooks.java +++ b/ca/spottedleaf/moonrise/paper/PaperHooks.java
@@ -29,7 +29,7 @@ import net.minecraft.world.phys.AABB; @@ -29,7 +29,7 @@ import net.minecraft.world.phys.AABB;
@@ -15,13 +15,13 @@ index b9b774a3ca600cee3d0e967063ea2f72c7ab184f..dfc582444cd7273afb78b250d9fa1231
-public final class PaperHooks extends BaseChunkSystemHooks implements PlatformHooks { -public final class PaperHooks extends BaseChunkSystemHooks implements PlatformHooks {
+public class PaperHooks extends BaseChunkSystemHooks implements PlatformHooks { // Leaves - not final +public class PaperHooks extends BaseChunkSystemHooks implements PlatformHooks { // Leaves - not final
@Override private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger();
public String getBrand() {
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index f1373fd5fdebb9f4600ba7f32a5df6188de3a0e9..4e5b27f2d00a6be6da6db461471395a515dc9b38 100644 index 7aac2a6889af3edaebfaf94deecbf00d00758b68..d2895962ad3879632ff7a33eb3ce656097aebaec 100644
--- a/net/minecraft/server/MinecraftServer.java --- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java
@@ -1190,7 +1190,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1193,7 +1193,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
LOGGER.info("*************************************************************************************"); LOGGER.info("*************************************************************************************");
LOGGER.info("This is the first time you're starting this server."); 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("It's recommended you read our 'Getting Started' documentation for guidance.");
@@ -30,7 +30,7 @@ index f1373fd5fdebb9f4600ba7f32a5df6188de3a0e9..4e5b27f2d00a6be6da6db461471395a5
LOGGER.info("*************************************************************************************"); LOGGER.info("*************************************************************************************");
} }
// Paper end - Add onboarding message for initial server start // Paper end - Add onboarding message for initial server start
@@ -1853,7 +1853,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1855,7 +1855,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate @DontObfuscate
public String getServerModName() { public String getServerModName() {
@@ -40,7 +40,7 @@ index f1373fd5fdebb9f4600ba7f32a5df6188de3a0e9..4e5b27f2d00a6be6da6db461471395a5
public SystemReport fillSystemReport(SystemReport systemReport) { public SystemReport fillSystemReport(SystemReport systemReport) {
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
index 31e02f50edd46220dac81500dbb273f1ccdbe0b9..c22234df51a61954d1728b8406545f753dd8a3c2 100644 index 98927d4a5fba2a0dcdb147ac10b82c3286ccdc6b..461dc90ac9ae7f9af693653bc56a8cf448b7823e 100644
--- a/net/minecraft/server/dedicated/DedicatedServer.java --- a/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java
@@ -182,9 +182,10 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -182,9 +182,10 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface

View File

@@ -5,50 +5,81 @@ Subject: [PATCH] Leaves Utils
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 81a18b8e605bd4c28b48a32c80be231609182970..f8d45c1076852a0553c3dd7c5512f76a6891e2cb 100644 index 70b6ea8ab35e88989b5b1f5ffd64490a9d743b56..ea616ff83c14dd582bdb49442bc0b9103fc8f1b3 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -351,6 +351,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -372,6 +372,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public boolean isTemporarilyActive; public boolean isTemporarilyActive;
public long activatedImmunityTick = Integer.MIN_VALUE; public long activatedImmunityTick = Integer.MIN_VALUE;
+ private CompoundTag leavesData = new CompoundTag(); // Leaves - Leaves ex data + private net.minecraft.nbt.CompoundTag leavesData = new net.minecraft.nbt.CompoundTag(); // Leaves - Leaves ex data
+ +
public void inactiveTick() { public void inactiveTick() {
} }
// Paper end - EAR 2 // Paper end - EAR 2
@@ -2516,6 +2518,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -2585,6 +2587,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
compound.putBoolean("Paper.FreezeLock", true); output.putBoolean("Paper.FreezeLock", true);
} }
// Paper end // Paper end
+ compound.put("Leaves.Data", leavesData); // Leaves - leaves ex data + output.store("Leaves.Data", net.minecraft.nbt.CompoundTag.CODEC, leavesData); // Leaves - leaves ex data
return compound; } catch (Throwable var7) {
} catch (Throwable var8) { CrashReport crashReport = CrashReport.forThrowable(var7, "Saving entity NBT");
CrashReport crashReport = CrashReport.forThrowable(var8, "Saving entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being saved");
@@ -2646,6 +2649,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -2705,6 +2708,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
freezeLocked = compound.getBooleanOr("Paper.FreezeLock", false);
} }
freezeLocked = input.getBooleanOr("Paper.FreezeLock", false);
// Paper end // Paper end
+ // Leaves start - leaves ex data + leavesData = input.read("Leaves.Data", net.minecraft.nbt.CompoundTag.CODEC).orElse(new net.minecraft.nbt.CompoundTag());
+ if (compound.contains("Leaves.Data")) { } catch (Throwable var7) {
+ leavesData = compound.getCompoundOrEmpty("Leaves.Data"); CrashReport crashReport = CrashReport.forThrowable(var7, "Loading entity NBT");
+ }
+ // Leaves end - leaves ex data
} catch (Throwable var8) {
CrashReport crashReport = CrashReport.forThrowable(var8, "Loading entity NBT");
CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded");
@@ -5114,4 +5122,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -4422,7 +4426,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return SlotAccess.NULL;
}
- @Nullable
+ @org.jetbrains.annotations.NotNull // Leaves - notnull
public MinecraftServer getServer() {
return this.level().getServer();
}
@@ -5364,4 +5368,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition());
} }
// Paper end - Expose entity id counter // Paper end - Expose entity id counter
+ // Leaves start - leaves ex data + // Leaves start - leaves ex data
+ public CompoundTag getLeavesData() { + public net.minecraft.nbt.CompoundTag getLeavesData() {
+ return leavesData; + return leavesData;
+ } + }
+ // Leaves end - leaves ex data + // Leaves end - leaves ex data
} }
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
index c41df4b1fff1f65532256e835dc30fadbb4f8c8b..9383d9f940163f42db8802f0a260925a83119160 100644
--- a/net/minecraft/world/level/Level.java
+++ b/net/minecraft/world/level/Level.java
@@ -962,7 +962,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup<Entity>, AutoCl
return this.isClientSide;
}
- @Nullable
+ @org.jetbrains.annotations.NotNull // Leaves - notnull
@Override
public MinecraftServer getServer() {
return null;
diff --git a/net/minecraft/world/level/LevelAccessor.java b/net/minecraft/world/level/LevelAccessor.java
index 5f28df24876f93866312c3c7d19cb6bcaf5e2f8b..049133cba588612127b45c1489f80d2fe6d6e330 100644
--- a/net/minecraft/world/level/LevelAccessor.java
+++ b/net/minecraft/world/level/LevelAccessor.java
@@ -46,7 +46,7 @@ public interface LevelAccessor extends CommonLevelAccessor, LevelTimeAccess, Sch
DifficultyInstance getCurrentDifficultyAt(BlockPos pos);
- @Nullable
+ @org.jetbrains.annotations.NotNull // Leaves - notnull
MinecraftServer getServer();
default Difficulty getDifficulty() {
diff --git a/net/minecraft/world/level/block/Block.java b/net/minecraft/world/level/block/Block.java diff --git a/net/minecraft/world/level/block/Block.java b/net/minecraft/world/level/block/Block.java
index ae3e6e31171b1bcfba1ae51a0941b52dda270acd..f289e37f77e1c9d3b0f6c29da1b99f0d5f156e37 100644 index be6f37f91569c659c609e5e8d38671ca86f8cd95..958914e40fceda5d67a98154817b4c5ce478a62d 100644
--- a/net/minecraft/world/level/block/Block.java --- a/net/minecraft/world/level/block/Block.java
+++ b/net/minecraft/world/level/block/Block.java +++ b/net/minecraft/world/level/block/Block.java
@@ -610,6 +610,13 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -610,6 +610,13 @@ public class Block extends BlockBehaviour implements ItemLike {

View File

@@ -32,30 +32,11 @@ index fb263fa1f30a7dfcb7ec2656abfb38e5fe88eac9..56fd1ed7ccaf96e7eedea60fbdbf7f93
} }
}; };
} }
diff --git a/net/minecraft/network/protocol/common/custom/DiscardedPayload.java b/net/minecraft/network/protocol/common/custom/DiscardedPayload.java
index 62b9d9486c15a1ec6527f786df4e9fc483390bcb..5384bbc6bb3dbe5481f9d8cb10282551a0f78ec1 100644
--- a/net/minecraft/network/protocol/common/custom/DiscardedPayload.java
+++ b/net/minecraft/network/protocol/common/custom/DiscardedPayload.java
@@ -4,12 +4,12 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
-public record DiscardedPayload(ResourceLocation id, byte[] data) implements CustomPacketPayload { // Paper - store data
+public record DiscardedPayload(ResourceLocation id, byte @org.jetbrains.annotations.Nullable [] data) implements CustomPacketPayload { // Paper - store data // Leaves - nullable
public static <T extends FriendlyByteBuf> StreamCodec<T, DiscardedPayload> codec(ResourceLocation id, int maxSize) {
return CustomPacketPayload.codec((value, output) -> {
// Paper start
// Always write data
- output.writeBytes(value.data);
+ if (value.data != null) output.writeBytes(value.data); // Leaves - nullable
}, buffer -> {
int i = buffer.readableBytes();
if (i >= 0 && i <= maxSize) {
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 4e5b27f2d00a6be6da6db461471395a515dc9b38..d48581353661799e5e031a512227d5e651fa2996 100644 index d2895962ad3879632ff7a33eb3ce656097aebaec..4e2e84bbd389d926b8e6f45f2e37c80f4df1af41 100644
--- a/net/minecraft/server/MinecraftServer.java --- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java
@@ -1742,6 +1742,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1744,6 +1744,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
profilerFiller.popPush("server gui refresh"); profilerFiller.popPush("server gui refresh");
@@ -64,83 +45,108 @@ index 4e5b27f2d00a6be6da6db461471395a515dc9b38..d48581353661799e5e031a512227d5e6
for (int i = 0; i < this.tickables.size(); i++) { for (int i = 0; i < this.tickables.size(); i++) {
this.tickables.get(i).run(); this.tickables.get(i).run();
} }
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 3781d9cc174b7aecacb9b9855d52c7b1ff05835c..443bfb06951f0ffe6af8724b53e150cd0907e68d 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -425,6 +425,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
private final ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder viewDistanceHolder = new ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder();
+ public net.minecraft.network.Connection internalConnection; // Leaves - protocol core
+
@Override
public final boolean moonrise$isRealPlayer() {
return this.isRealPlayer;
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index 186393485396cfe9b1baef29586198356e2d2600..ac5ef04fae4bc19bae9007c0ffd8f688434d22d7 100644 index 08c59d603fca038fc2dde36384eea1b6c971e659..2dd95aca955f19ce48be35b1ca9bcc94c3a1984d 100644
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -136,6 +136,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -57,6 +57,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
public @Nullable String playerBrand;
public final java.util.Set<String> pluginMessagerChannels;
// Paper end - retain certain values
+ public final GameProfile profile; // Leaves - protocol core
public ServerCommonPacketListenerImpl(MinecraftServer server, Connection connection, CommonListenerCookie cookie) {
this.server = server;
@@ -70,6 +71,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
this.pluginMessagerChannels = cookie.channels();
this.keepAlive = cookie.keepAlive();
// Paper end
+ this.profile = cookie.gameProfile(); // Leaves - protocol core
}
// Paper start - configuration phase API
@@ -149,6 +151,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@Override @Override
public void handleCustomPayload(ServerboundCustomPayloadPacket packet) { public void handleCustomPayload(ServerboundCustomPayloadPacket packet) {
+ // Leaves start - protocol + // Leaves start - protocol
+ if (packet.payload() instanceof org.leavesmc.leaves.protocol.core.LeavesCustomPayload leavesPayload) { + if (packet.payload() instanceof org.leavesmc.leaves.protocol.core.LeavesCustomPayload leavesPayload) {
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePayload(player, leavesPayload); + org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePayload(org.leavesmc.leaves.protocol.core.ProtocolUtils.createSelector(this), leavesPayload);
+ return; + return;
+ } + }
+ if (packet.payload() instanceof net.minecraft.network.protocol.common.custom.DiscardedPayload(net.minecraft.resources.ResourceLocation id, byte[] data)) { + if (packet.payload() instanceof net.minecraft.network.protocol.common.custom.DiscardedPayload(net.minecraft.resources.ResourceLocation id, byte[] data)) {
+ if (org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleBytebuf(player, id, io.netty.buffer.Unpooled.wrappedBuffer(data))) { + if (org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleBytebuf(org.leavesmc.leaves.protocol.core.ProtocolUtils.createSelector(this), id, io.netty.buffer.Unpooled.wrappedBuffer(data))) {
+ return; + return;
+ } + }
+ } + }
+ // Leaves end - protocol + // Leaves end - protocol
+ +
// Paper start // Paper start
if (packet.payload() instanceof net.minecraft.network.protocol.common.custom.BrandPayload(String brand)) { if (!(packet.payload() instanceof final net.minecraft.network.protocol.common.custom.DiscardedPayload discardedPayload)) {
this.player.clientBrandName = brand; return;
@@ -189,6 +201,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -208,10 +222,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
final String channel = new String(data, from, length, java.nio.charset.StandardCharsets.US_ASCII); final String channel = new String(data, from, length, java.nio.charset.StandardCharsets.US_ASCII);
if (register) { if (register) {
this.getCraftPlayer().addChannel(channel); bridge.addChannel(channel);
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleMinecraftRegister(channel, player); // Leaves - protocol + org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handleMinecraftRegister(channel, org.leavesmc.leaves.protocol.core.ProtocolUtils.createSelector(this)); // Leaves - protocol
} else { } else {
this.getCraftPlayer().removeChannel(channel); bridge.removeChannel(channel);
} }
- // Paper end
+ // Paper end
}
@Override
@@ -379,9 +394,9 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
net.minecraft.server.level.ServerPlayer player = serverGamePacketListener.player;
org.bukkit.event.player.PlayerKickEvent.Cause cause = disconnectionDetails.disconnectionReason().orElseThrow().game().orElse(org.bukkit.event.player.PlayerKickEvent.Cause.UNKNOWN);
org.bukkit.event.player.PlayerKickEvent event = new org.bukkit.event.player.PlayerKickEvent(
- player.getBukkitEntity(),
- io.papermc.paper.adventure.PaperAdventure.asAdventure(disconnectionDetails.reason()),
- rawLeaveMessage, cause
+ player.getBukkitEntity(),
+ io.papermc.paper.adventure.PaperAdventure.asAdventure(disconnectionDetails.reason()),
+ rawLeaveMessage, cause
);
@@ -414,10 +429,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
private void disconnect0(DisconnectionDetails disconnectionDetails) {
this.connection
- .send(
- new ClientboundDisconnectPacket(disconnectionDetails.reason()),
- PacketSendListener.thenRun(() -> this.connection.disconnect(disconnectionDetails))
- );
+ .send(
+ new ClientboundDisconnectPacket(disconnectionDetails.reason()),
+ PacketSendListener.thenRun(() -> this.connection.disconnect(disconnectionDetails))
+ );
this.onDisconnect(disconnectionDetails);
this.connection.setReadOnly();
// CraftBukkit - Don't wait
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 9ca3c55a3b5b1a532b86b08eb92460df4cb54f2a..722b4eb1eabe167233f75bd50bbf47e369670eaa 100644 index 2c2015bf19d5b30e945118661b7a9b474a1bddc8..87d6495738d27b2cc9ea8d5b402b7c222f624a5b 100644
--- a/net/minecraft/server/players/PlayerList.java --- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java
@@ -334,6 +334,11 @@ public abstract class PlayerList { @@ -335,6 +335,8 @@ public abstract class PlayerList {
return; return;
} }
+ // Leaves start - protocol core
+ if (player.internalConnection == null) player.internalConnection = connection;
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player); + org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player);
+ // Leaves end - protocol core
+ +
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure
@@ -504,6 +509,7 @@ public abstract class PlayerList { @@ -507,6 +509,7 @@ public abstract class PlayerList {
return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName()))); return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName())));
} }
public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) { public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) {
+ org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerLeave(player); // Leaves - protocol + org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerLeave(player); // Leaves - protocol
// Paper end - Fix kick event leave message not being sent // Paper end - Fix kick event leave message not being sent
ServerLevel serverLevel = player.serverLevel(); ServerLevel serverLevel = player.level();
player.awardStat(Stats.LEAVE_GAME); player.awardStat(Stats.LEAVE_GAME);
@@ -628,6 +634,7 @@ public abstract class PlayerList { @@ -1398,6 +1401,7 @@ public abstract class PlayerList {
SocketAddress socketAddress = loginlistener.connection.getRemoteAddress();
ServerPlayer entity = new ServerPlayer(this.server, this.server.getLevel(Level.OVERWORLD), gameProfile, ClientInformation.createDefault());
+ entity.internalConnection = loginlistener.connection; // Leaves - protocol core
entity.transferCookieConnection = loginlistener;
org.bukkit.entity.Player player = entity.getBukkitEntity();
org.bukkit.event.player.PlayerLoginEvent event = new org.bukkit.event.player.PlayerLoginEvent(player, loginlistener.connection.hostname, ((java.net.InetSocketAddress) socketAddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.connection.channel.remoteAddress()).getAddress());
@@ -1418,6 +1425,7 @@ public abstract class PlayerList {
serverPlayer.connection.send(clientboundUpdateRecipesPacket); serverPlayer.connection.send(clientboundUpdateRecipesPacket);
serverPlayer.getRecipeBook().sendInitialRecipeBook(serverPlayer); serverPlayer.getRecipeBook().sendInitialRecipeBook(serverPlayer);
} }

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable trading with the void
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index bfbfbaa9660d21071c420b60b10be0a02a1bc87e..4797e001122097f55f33729b3b20f79d75b20fb2 100644 index dda8d38ef61672cc714d9e5a475f9b0412ed5ff9..364d5e28646ea341034921622354c7b19644b343 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -2674,7 +2674,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -2727,7 +2727,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Spigot start // Spigot start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
// Paper start - Fix merchant inventory not closing on entity removal // Paper start - Fix merchant inventory not closing on entity removal
@@ -17,6 +17,19 @@ index bfbfbaa9660d21071c420b60b10be0a02a1bc87e..4797e001122097f55f33729b3b20f79d
merchant.getTrader().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); merchant.getTrader().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED);
} }
// Paper end - Fix merchant inventory not closing on entity removal // Paper end - Fix merchant inventory not closing on entity removal
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 91f505c9d84aba773d237664c2aaaf9750cadadf..184d116320f0cd3e9fba47a86e94e0a8424c913f 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -551,7 +551,7 @@ public abstract class PlayerList {
player.stopRiding();
rootVehicle.getPassengersAndSelf().forEach(entity -> {
// Paper start - Fix villager boat exploit
- if (entity instanceof net.minecraft.world.entity.npc.AbstractVillager villager) {
+ if (!org.leavesmc.leaves.LeavesConfig.modify.oldMC.voidTrade && entity instanceof net.minecraft.world.entity.npc.AbstractVillager villager) { // Leaves - Configurable trading with the void
final net.minecraft.world.entity.player.Player human = villager.getTradingPlayer();
if (human != null) {
villager.setTradingPlayer(null);
diff --git a/net/minecraft/world/inventory/MerchantMenu.java b/net/minecraft/world/inventory/MerchantMenu.java diff --git a/net/minecraft/world/inventory/MerchantMenu.java b/net/minecraft/world/inventory/MerchantMenu.java
index d59f67ffe34201c63e3d9706a4434f33b6732edb..1bf2a015fa35981328c098f2fec363c84b85b2a7 100644 index d59f67ffe34201c63e3d9706a4434f33b6732edb..1bf2a015fa35981328c098f2fec363c84b85b2a7 100644
--- a/net/minecraft/world/inventory/MerchantMenu.java --- a/net/minecraft/world/inventory/MerchantMenu.java

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Leaves Fakeplayer
diff --git a/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java b/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java diff --git a/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java b/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java
index 4b2ae046413146b11912e7aa4a9a3d643de6afd1..c5733fe17b4dd5dfe4bce461a305a13a188b2f77 100644 index a82d84283632342bd30bc3449983431ba43583e0..f59526f6bfa1b4af5b474f0b438513c96afb491c 100644
--- a/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java --- a/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java
+++ b/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java +++ b/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java
@@ -39,6 +39,7 @@ public abstract class SimpleCriterionTrigger<T extends SimpleCriterionTrigger.Si @@ -39,6 +39,7 @@ public abstract class SimpleCriterionTrigger<T extends SimpleCriterionTrigger.Si
@@ -17,7 +17,7 @@ index 4b2ae046413146b11912e7aa4a9a3d643de6afd1..c5733fe17b4dd5dfe4bce461a305a13a
Set<CriterionTrigger.Listener<T>> set = (Set) advancements.criterionData.get(this); // Paper - fix PlayerAdvancements leak Set<CriterionTrigger.Listener<T>> set = (Set) advancements.criterionData.get(this); // Paper - fix PlayerAdvancements leak
if (set != null && !set.isEmpty()) { if (set != null && !set.isEmpty()) {
diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java
index 4ed9611994c5c8da01fede690197527c5b3a5731..364ddf9f25ef3cb97ba788c469fee9dd495b84a7 100644 index 41005f6b9f53a9c1125ad5e08538d9f5aacb3571..3e9b8c5fb2157f767de8bddc3e767512c5f7651f 100644
--- a/net/minecraft/network/Connection.java --- a/net/minecraft/network/Connection.java
+++ b/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java
@@ -96,7 +96,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> { @@ -96,7 +96,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
@@ -30,28 +30,19 @@ index 4ed9611994c5c8da01fede690197527c5b3a5731..364ddf9f25ef3cb97ba788c469fee9dd
private DisconnectionDetails disconnectionDetails; private DisconnectionDetails disconnectionDetails;
private boolean encrypted; private boolean encrypted;
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index d48581353661799e5e031a512227d5e651fa2996..b0881eaf3484560740d2d53b3957cf3f4d829360 100644 index 4e2e84bbd389d926b8e6f45f2e37c80f4df1af41..83b81e990fccebad35c67712d0d497537c4e3670 100644
--- a/net/minecraft/server/MinecraftServer.java --- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java
@@ -303,6 +303,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -304,6 +304,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
private final Set<String> pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping private final Set<String> pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping
public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation
+ private org.leavesmc.leaves.bot.BotList botList; // Leaves - fakeplayer + private org.leavesmc.leaves.bot.BotList botList; // Leaves - fakeplayer
+ +
public static <S extends MinecraftServer> S spin(Function<Thread, S> threadFunction) { public static <S extends MinecraftServer> S spin(Function<Thread, S> threadFunction) {
ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system
AtomicReference<S> atomicReference = new AtomicReference<>(); AtomicReference<S> atomicReference = new AtomicReference<>();
Thread thread = new ca.spottedleaf.moonrise.common.util.TickThread(() -> atomicReference.get().runServer(), "Server thread"); @@ -996,6 +998,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -738,6 +740,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
// Paper end - Configurable player collision
+ this.getBotList().loadResume(); // Leaves - load resident bot
+
this.server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.POSTWORLD);
this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark
this.server.spark.enableAfterPlugins(this.server); // Paper - spark
@@ -993,6 +997,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
LOGGER.info("Stopping server"); LOGGER.info("Stopping server");
Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing
@@ -59,7 +50,7 @@ index d48581353661799e5e031a512227d5e651fa2996..b0881eaf3484560740d2d53b3957cf3f
// CraftBukkit start // CraftBukkit start
if (this.server != null) { if (this.server != null) {
this.server.spark.disable(); // Paper - spark this.server.spark.disable(); // Paper - spark
@@ -1760,6 +1765,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1762,6 +1765,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
public void tickConnection() { public void tickConnection() {
this.getConnection().tick(); this.getConnection().tick();
@@ -67,7 +58,7 @@ index d48581353661799e5e031a512227d5e651fa2996..b0881eaf3484560740d2d53b3957cf3f
} }
private void synchronizeTime(ServerLevel level) { private void synchronizeTime(ServerLevel level) {
@@ -2805,6 +2811,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -2811,6 +2815,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
return 0; return 0;
} }
@@ -85,10 +76,10 @@ index d48581353661799e5e031a512227d5e651fa2996..b0881eaf3484560740d2d53b3957cf3f
@Override @Override
public void close() { public void close() {
diff --git a/net/minecraft/server/PlayerAdvancements.java b/net/minecraft/server/PlayerAdvancements.java diff --git a/net/minecraft/server/PlayerAdvancements.java b/net/minecraft/server/PlayerAdvancements.java
index 52e0ae233a7b1c88bfbbc27707ef5f18453ec865..f56a3fb47aa34c39cbd0e0e4e47d924da1488d7a 100644 index fdeca41d40705f28864ce4443d01cd872c9d51b0..5c0e338dc1b0eb5724d10a73d6fc7975f9d2e5e5 100644
--- a/net/minecraft/server/PlayerAdvancements.java --- a/net/minecraft/server/PlayerAdvancements.java
+++ b/net/minecraft/server/PlayerAdvancements.java +++ b/net/minecraft/server/PlayerAdvancements.java
@@ -168,6 +168,11 @@ public class PlayerAdvancements { @@ -167,6 +167,11 @@ public class PlayerAdvancements {
} }
public boolean award(AdvancementHolder advancement, String criterionKey) { public boolean award(AdvancementHolder advancement, String criterionKey) {
@@ -101,7 +92,7 @@ index 52e0ae233a7b1c88bfbbc27707ef5f18453ec865..f56a3fb47aa34c39cbd0e0e4e47d924d
AdvancementProgress orStartProgress = this.getOrStartProgress(advancement); AdvancementProgress orStartProgress = this.getOrStartProgress(advancement);
boolean isDone = orStartProgress.isDone(); boolean isDone = orStartProgress.isDone();
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
index 4924acb972ee2c9d5d1aa32e4969d4932629273b..e56f26fc504538d88bfa1954e929ee44fd31d657 100644 index 414a8357a7498c69341fa634ada2e664e18ca03a..f85993fc507d699728e058b12bb49dcb7aaea44b 100644
--- a/net/minecraft/server/dedicated/DedicatedServer.java --- a/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java
@@ -162,6 +162,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -162,6 +162,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -112,8 +103,16 @@ index 4924acb972ee2c9d5d1aa32e4969d4932629273b..e56f26fc504538d88bfa1954e929ee44
this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage));
org.spigotmc.SpigotConfig.init((java.io.File) this.options.valueOf("spigot-settings")); org.spigotmc.SpigotConfig.init((java.io.File) this.options.valueOf("spigot-settings"));
org.spigotmc.SpigotConfig.registerCommands(); org.spigotmc.SpigotConfig.registerCommands();
@@ -185,6 +186,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
org.leavesmc.leaves.LeavesConfig.init((java.io.File) options.valueOf("leaves-settings")); // Leaves - Server Config
+ this.getBotList().loadBotInfo(); // Leaves - load resident bot info
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics // Leaves - down
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
index 0d8aefe8c886eaa4c33cbab53b0ad1c016f0531f..4785f9d6c53e18419a3df4a1be9c8a4f9d8cadfb 100644 index eb352aa4296abc3ed4cf31c590bc0be66daf4de3..019886669966c69936ae6591598c97a8afbfd3db 100644
--- a/net/minecraft/server/level/ChunkMap.java --- a/net/minecraft/server/level/ChunkMap.java
+++ b/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java
@@ -1317,6 +1317,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -1317,6 +1317,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -131,10 +130,10 @@ index 0d8aefe8c886eaa4c33cbab53b0ad1c016f0531f..4785f9d6c53e18419a3df4a1be9c8a4f
} }
} }
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 4797e001122097f55f33729b3b20f79d75b20fb2..9c32960a14916f3b032c6ae323d6efc9bdd9682c 100644 index 364d5e28646ea341034921622354c7b19644b343..c61c0b6d58f96955bfbdad0caaeb56f073a95181 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -211,6 +211,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -214,6 +214,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent
public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent
private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current)
@@ -142,7 +141,7 @@ index 4797e001122097f55f33729b3b20f79d75b20fb2..9c32960a14916f3b032c6ae323d6efc9
@Override @Override
public @Nullable LevelChunk getChunkIfLoaded(int x, int z) { public @Nullable LevelChunk getChunkIfLoaded(int x, int z) {
@@ -671,6 +672,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -675,6 +676,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler); this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler);
// Paper end - rewrite chunk system // Paper end - rewrite chunk system
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
@@ -150,7 +149,7 @@ index 4797e001122097f55f33729b3b20f79d75b20fb2..9c32960a14916f3b032c6ae323d6efc9
} }
// Paper start // Paper start
@@ -2204,6 +2206,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -2226,6 +2228,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
return this.players; return this.players;
} }
@@ -163,7 +162,7 @@ index 4797e001122097f55f33729b3b20f79d75b20fb2..9c32960a14916f3b032c6ae323d6efc9
@Override @Override
public void updatePOIOnBlockStateChange(BlockPos pos, BlockState oldState, BlockState newState) { public void updatePOIOnBlockStateChange(BlockPos pos, BlockState oldState, BlockState newState) {
Optional<Holder<PoiType>> optional = PoiTypes.forState(oldState); Optional<Holder<PoiType>> optional = PoiTypes.forState(oldState);
@@ -2616,6 +2624,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -2661,6 +2669,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true // ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.add(serverPlayer); ServerLevel.this.players.add(serverPlayer);
@@ -172,10 +171,10 @@ index 4797e001122097f55f33729b3b20f79d75b20fb2..9c32960a14916f3b032c6ae323d6efc9
+ ServerLevel.this.realPlayers.add(serverPlayer); + ServerLevel.this.realPlayers.add(serverPlayer);
+ } + }
+ // Leaves end - skip + // Leaves end - skip
ServerLevel.this.updateSleepingPlayerList(); if (serverPlayer.isReceivingWaypoints()) {
ServerLevel.this.getWaypointManager().addPlayer(serverPlayer);
} }
@@ -2739,6 +2752,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2686,6 +2699,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
ServerLevel.this.getChunkSource().removeEntity(entity); ServerLevel.this.getChunkSource().removeEntity(entity);
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.remove(serverPlayer); ServerLevel.this.players.remove(serverPlayer);
@@ -184,41 +183,41 @@ index 4797e001122097f55f33729b3b20f79d75b20fb2..9c32960a14916f3b032c6ae323d6efc9
+ ServerLevel.this.realPlayers.remove(serverPlayer); + ServerLevel.this.realPlayers.remove(serverPlayer);
+ } + }
+ // Leaves end - skip + // Leaves end - skip
ServerLevel.this.getWaypointManager().removePlayer(serverPlayer);
ServerLevel.this.updateSleepingPlayerList(); ServerLevel.this.updateSleepingPlayerList();
} }
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 443bfb06951f0ffe6af8724b53e150cd0907e68d..01687ea3acf449c49cbc615887a7dbdd3a693613 100644 index 37c0a84758a1526791913898358659de202fa19f..7e4bf7ddc26fc087832f802856f14e268b0ca32b 100644
--- a/net/minecraft/server/level/ServerPlayer.java --- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java
@@ -208,7 +208,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -219,7 +219,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
private static final boolean DEFAULT_SPAWN_EXTRA_PARTICLES_ON_FALL = false; private static final boolean DEFAULT_SPAWN_EXTRA_PARTICLES_ON_FALL = false;
public ServerGamePacketListenerImpl connection; public ServerGamePacketListenerImpl connection;
public final MinecraftServer server; private final MinecraftServer server;
- public final ServerPlayerGameMode gameMode; - public final ServerPlayerGameMode gameMode;
+ public ServerPlayerGameMode gameMode; // Leaves - not final + public ServerPlayerGameMode gameMode; // Leaves - not final
private final PlayerAdvancements advancements; private final PlayerAdvancements advancements;
private final ServerStatsCounter stats; private final ServerStatsCounter stats;
private float lastRecordedHealthAndAbsorption = Float.MIN_VALUE; private float lastRecordedHealthAndAbsorption = Float.MIN_VALUE;
@@ -1413,6 +1413,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -1450,6 +1450,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
this.lastSentHealth = -1.0F; this.lastSentHealth = -1.0F;
this.lastSentFood = -1; this.lastSentFood = -1;
this.teleportSpectators(teleportTransition, serverLevel);
+ // Leaves start - bot support + // Leaves start - bot support
+ if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) { + if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) {
+ this.server.getBotList().bots.forEach(bot -> bot.sendFakeDataIfNeed(this, true)); // Leaves - render bot + this.server.getBotList().bots.forEach(bot -> bot.sendFakeDataIfNeed(this, true)); // Leaves - render bot
+ } + }
+ // Leaves end - bot support + // Leaves end - bot support
// CraftBukkit start // CraftBukkit start
org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld()); org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld());
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 722b4eb1eabe167233f75bd50bbf47e369670eaa..0cf30681a9e3d68f3abe1d87b9fd4220083685a9 100644 index bd3cb8d68ac2940cd6f3b28a91c17ebc64147f2d..204c25d33e86a736f091848a277ea882f129e468 100644
--- a/net/minecraft/server/players/PlayerList.java --- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java
@@ -339,6 +339,19 @@ public abstract class PlayerList { @@ -337,6 +337,19 @@ public abstract class PlayerList {
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player); org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player);
// Leaves end - protocol core
+ // Leaves start - bot support + // Leaves start - bot support
+ if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) { + if (org.leavesmc.leaves.LeavesConfig.modify.fakeplayer.enable) {
@@ -236,7 +235,7 @@ index 722b4eb1eabe167233f75bd50bbf47e369670eaa..0cf30681a9e3d68f3abe1d87b9fd4220
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure
@@ -870,6 +883,12 @@ public abstract class PlayerList { @@ -829,6 +842,12 @@ public abstract class PlayerList {
} }
// Paper end - Add PlayerPostRespawnEvent // Paper end - Add PlayerPostRespawnEvent
@@ -249,7 +248,7 @@ index 722b4eb1eabe167233f75bd50bbf47e369670eaa..0cf30681a9e3d68f3abe1d87b9fd4220
// CraftBukkit end // CraftBukkit end
return serverPlayer; return serverPlayer;
@@ -974,11 +993,16 @@ public abstract class PlayerList { @@ -933,11 +952,16 @@ public abstract class PlayerList {
} }
public String[] getPlayerNamesArray() { public String[] getPlayerNamesArray() {
@@ -267,7 +266,7 @@ index 722b4eb1eabe167233f75bd50bbf47e369670eaa..0cf30681a9e3d68f3abe1d87b9fd4220
return strings; return strings;
} }
@@ -1064,7 +1088,14 @@ public abstract class PlayerList { @@ -1040,7 +1064,14 @@ public abstract class PlayerList {
@Nullable @Nullable
public ServerPlayer getPlayerByName(String username) { public ServerPlayer getPlayerByName(String username) {
@@ -283,7 +282,7 @@ index 722b4eb1eabe167233f75bd50bbf47e369670eaa..0cf30681a9e3d68f3abe1d87b9fd4220
} }
public void broadcast(@Nullable Player except, double x, double y, double z, double radius, ResourceKey<Level> dimension, Packet<?> packet) { public void broadcast(@Nullable Player except, double x, double y, double z, double radius, ResourceKey<Level> dimension, Packet<?> packet) {
@@ -1380,7 +1411,13 @@ public abstract class PlayerList { @@ -1356,7 +1387,13 @@ public abstract class PlayerList {
@Nullable @Nullable
public ServerPlayer getPlayer(UUID playerUUID) { public ServerPlayer getPlayer(UUID playerUUID) {
@@ -298,11 +297,48 @@ index 722b4eb1eabe167233f75bd50bbf47e369670eaa..0cf30681a9e3d68f3abe1d87b9fd4220
} }
public boolean canBypassPlayerLimit(GameProfile profile) { public boolean canBypassPlayerLimit(GameProfile profile) {
diff --git a/net/minecraft/server/waypoints/ServerWaypointManager.java b/net/minecraft/server/waypoints/ServerWaypointManager.java
index f9e7532f86122a379692561a639a209a126e8bba..2412f46837e967694222730e68e7d25ac32225cf 100644
--- a/net/minecraft/server/waypoints/ServerWaypointManager.java
+++ b/net/minecraft/server/waypoints/ServerWaypointManager.java
@@ -22,6 +22,11 @@ public class ServerWaypointManager implements WaypointManager<WaypointTransmitte
@Override
public void trackWaypoint(WaypointTransmitter waypoint) {
+ // Leaves start - fakeplayer
+ if (waypoint instanceof org.leavesmc.leaves.bot.ServerBot bot && !bot.getConfigValue(org.leavesmc.leaves.bot.agent.Configs.ENABLE_LOCATOR_BAR)) {
+ return;
+ }
+ // Leaves end - fakeplayer
this.waypoints.add(waypoint);
for (ServerPlayer serverPlayer : this.players) {
@@ -53,6 +58,11 @@ public class ServerWaypointManager implements WaypointManager<WaypointTransmitte
}
public void addPlayer(ServerPlayer player) {
+ // Leaves start - fakeplayer
+ if (player instanceof org.leavesmc.leaves.bot.ServerBot) {
+ return;
+ }
+ // Leaves end - fakeplayer
this.players.add(player);
for (WaypointTransmitter waypointTransmitter : this.waypoints) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index f8d45c1076852a0553c3dd7c5512f76a6891e2cb..1f50aca05ff1adf8f2e16cab2fac757a7094e1b8 100644 index ea616ff83c14dd582bdb49442bc0b9103fc8f1b3..843cbeb5d125ff1964a9e2c5a29215c738a98f76 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -1454,7 +1454,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1173,7 +1173,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
BlockPos onPosLegacy = this.getOnPosLegacy();
BlockState blockState = this.level().getBlockState(onPosLegacy);
- if (this.isLocalInstanceAuthoritative()) {
+ if (this.isLocalInstanceAuthoritative() || this instanceof org.leavesmc.leaves.bot.ServerBot) { // Leaves - ServerBot needs check fall damage
this.checkFallDamage(vec3.y, this.onGround(), blockState, onPosLegacy);
}
@@ -1487,7 +1487,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
} }
// Paper start - optimise collisions // Paper start - optimise collisions
@@ -312,10 +348,10 @@ index f8d45c1076852a0553c3dd7c5512f76a6891e2cb..1f50aca05ff1adf8f2e16cab2fac757a
final boolean yZero = movement.y == 0.0; final boolean yZero = movement.y == 0.0;
final boolean zZero = movement.z == 0.0; final boolean zZero = movement.z == 0.0;
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index 2046c4d3ad5ea3254ad6bc83e6437e5c237c92b6..2fe76bc1c26423ed5e39453ac1b27a2cc66b1f2e 100644 index 8f4c45fbea2d7c1317aff36031bb834b07b23a82..8ec6f52f58bcc985fdc758a692798a35d6c86378 100644
--- a/net/minecraft/world/entity/player/Player.java --- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java
@@ -196,7 +196,7 @@ public abstract class Player extends LivingEntity { @@ -205,7 +205,7 @@ public abstract class Player extends LivingEntity {
private int lastLevelUpTime; private int lastLevelUpTime;
public GameProfile gameProfile; public GameProfile gameProfile;
private boolean reducedDebugInfo; private boolean reducedDebugInfo;
@@ -324,7 +360,7 @@ index 2046c4d3ad5ea3254ad6bc83e6437e5c237c92b6..2fe76bc1c26423ed5e39453ac1b27a2c
private final ItemCooldowns cooldowns = this.createItemCooldowns(); private final ItemCooldowns cooldowns = this.createItemCooldowns();
private Optional<GlobalPos> lastDeathLocation = Optional.empty(); private Optional<GlobalPos> lastDeathLocation = Optional.empty();
@Nullable @Nullable
@@ -362,6 +362,12 @@ public abstract class Player extends LivingEntity { @@ -372,6 +372,12 @@ public abstract class Player extends LivingEntity {
} }
} }
@@ -337,7 +373,7 @@ index 2046c4d3ad5ea3254ad6bc83e6437e5c237c92b6..2fe76bc1c26423ed5e39453ac1b27a2c
@Override @Override
protected float getMaxHeadRotationRelativeToBody() { protected float getMaxHeadRotationRelativeToBody() {
return this.isBlocking() ? 15.0F : super.getMaxHeadRotationRelativeToBody(); return this.isBlocking() ? 15.0F : super.getMaxHeadRotationRelativeToBody();
@@ -664,7 +670,7 @@ public abstract class Player extends LivingEntity { @@ -674,7 +680,7 @@ public abstract class Player extends LivingEntity {
} }
} }
@@ -346,7 +382,7 @@ index 2046c4d3ad5ea3254ad6bc83e6437e5c237c92b6..2fe76bc1c26423ed5e39453ac1b27a2c
entity.playerTouch(this); entity.playerTouch(this);
} }
@@ -1287,7 +1293,7 @@ public abstract class Player extends LivingEntity { @@ -1299,7 +1305,7 @@ public abstract class Player extends LivingEntity {
this.sweepAttack(); this.sweepAttack();
} }
@@ -356,10 +392,10 @@ index 2046c4d3ad5ea3254ad6bc83e6437e5c237c92b6..2fe76bc1c26423ed5e39453ac1b27a2c
boolean cancelled = false; boolean cancelled = false;
org.bukkit.entity.Player player = (org.bukkit.entity.Player) target.getBukkitEntity(); org.bukkit.entity.Player player = (org.bukkit.entity.Player) target.getBukkitEntity();
diff --git a/net/minecraft/world/entity/projectile/FishingHook.java b/net/minecraft/world/entity/projectile/FishingHook.java diff --git a/net/minecraft/world/entity/projectile/FishingHook.java b/net/minecraft/world/entity/projectile/FishingHook.java
index ca5cd9354d53c6c05bd7ba50c6e1dbd1ed548f67..f82f37d498f99ce38f72a63d051721c6dab9f2ca 100644 index 5f3abbe943be394e9cb987945a238208940b5015..8c139d572bd3c44b8e2b6205e28ab09f82c9abfe 100644
--- a/net/minecraft/world/entity/projectile/FishingHook.java --- a/net/minecraft/world/entity/projectile/FishingHook.java
+++ b/net/minecraft/world/entity/projectile/FishingHook.java +++ b/net/minecraft/world/entity/projectile/FishingHook.java
@@ -55,7 +55,7 @@ public class FishingHook extends Projectile { @@ -58,7 +58,7 @@ public class FishingHook extends Projectile {
public static final EntityDataAccessor<Integer> DATA_HOOKED_ENTITY = SynchedEntityData.defineId(FishingHook.class, EntityDataSerializers.INT); public static final EntityDataAccessor<Integer> DATA_HOOKED_ENTITY = SynchedEntityData.defineId(FishingHook.class, EntityDataSerializers.INT);
private static final EntityDataAccessor<Boolean> DATA_BITING = SynchedEntityData.defineId(FishingHook.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor<Boolean> DATA_BITING = SynchedEntityData.defineId(FishingHook.class, EntityDataSerializers.BOOLEAN);
private int life; private int life;
@@ -369,10 +405,10 @@ index ca5cd9354d53c6c05bd7ba50c6e1dbd1ed548f67..f82f37d498f99ce38f72a63d051721c6
public int timeUntilHooked; public int timeUntilHooked;
public float fishAngle; public float fishAngle;
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
index 813417a09b4acc7d57e80a53d970767e230d75b1..2a4763c951ddc78c9d8a39e661e59bbffc5cf109 100644 index 96da9b8e3556e58365dc6742f44d6dfd608e2953..e5811924577fb04fd2d67fb4a32a9de1dbe3c7b1 100644
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java --- a/net/minecraft/world/inventory/AbstractContainerMenu.java
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
@@ -376,6 +376,7 @@ public abstract class AbstractContainerMenu { @@ -400,6 +400,7 @@ public abstract class AbstractContainerMenu {
private void doClick(int slotId, int button, ClickType clickType, Player player) { private void doClick(int slotId, int button, ClickType clickType, Player player) {
Inventory inventory = player.getInventory(); Inventory inventory = player.getInventory();
@@ -380,7 +416,7 @@ index 813417a09b4acc7d57e80a53d970767e230d75b1..2a4763c951ddc78c9d8a39e661e59bbf
if (clickType == ClickType.QUICK_CRAFT) { if (clickType == ClickType.QUICK_CRAFT) {
int i = this.quickcraftStatus; int i = this.quickcraftStatus;
this.quickcraftStatus = getQuickcraftHeader(button); this.quickcraftStatus = getQuickcraftHeader(button);
@@ -652,6 +653,22 @@ public abstract class AbstractContainerMenu { @@ -674,6 +675,22 @@ public abstract class AbstractContainerMenu {
} }
} }
@@ -404,10 +440,10 @@ index 813417a09b4acc7d57e80a53d970767e230d75b1..2a4763c951ddc78c9d8a39e661e59bbf
FeatureFlagSet featureFlagSet = player.level().enabledFeatures(); FeatureFlagSet featureFlagSet = player.level().enabledFeatures();
return carriedItem.isItemEnabled(featureFlagSet) && carriedItem.overrideStackedOnOther(slot, action, player) return carriedItem.isItemEnabled(featureFlagSet) && carriedItem.overrideStackedOnOther(slot, action, player)
diff --git a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java diff --git a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
index 1669b76800756000a2f620610b3c8c8b6c48dd4a..8449545bd5278f5558567dd6b7c1522f63045f22 100644 index f1ce4cff1c03a0037ade2c8ef989cf327c973a7e..0976aef81b950a062152094501372d00c20bb2b7 100644
--- a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java --- a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
+++ b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java +++ b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
@@ -136,7 +136,7 @@ public class PistonMovingBlockEntity extends BlockEntity { @@ -135,7 +135,7 @@ public class PistonMovingBlockEntity extends BlockEntity {
break; break;
} }
@@ -446,10 +482,10 @@ index bef794c3f58c41d910aa0bcc63fbdeea7225fddf..a601da588e6973cc5b87d3e3eeba49b5
} }
diff --git a/net/minecraft/world/level/storage/PlayerDataStorage.java b/net/minecraft/world/level/storage/PlayerDataStorage.java diff --git a/net/minecraft/world/level/storage/PlayerDataStorage.java b/net/minecraft/world/level/storage/PlayerDataStorage.java
index ab9282c04c1996b037567d07f95e2b150bcfcd38..91f2e0abd1e6d5ad1613b8f750a900bfc39b2f9e 100644 index fe44d8d17d2622b3d6021c11579af85ef96737bb..0aae211dc2048f8cd14213c2a868394d1ed16070 100644
--- a/net/minecraft/world/level/storage/PlayerDataStorage.java --- a/net/minecraft/world/level/storage/PlayerDataStorage.java
+++ b/net/minecraft/world/level/storage/PlayerDataStorage.java +++ b/net/minecraft/world/level/storage/PlayerDataStorage.java
@@ -18,7 +18,7 @@ import net.minecraft.util.datafix.DataFixTypes; @@ -19,7 +19,7 @@ import net.minecraft.util.datafix.DataFixTypes;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import org.slf4j.Logger; import org.slf4j.Logger;

View File

@@ -5,12 +5,12 @@ Subject: [PATCH] Make shears in dispenser can unlimited use
diff --git a/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java b/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java diff --git a/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java b/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
index c1bd6d91cf9828ccc7275efe0f5c959c0f457c13..310e4bd5bd0c447adc70cff6d414f88be1966d04 100644 index b4a9be09452a889c228612a466b8925cb3768102..38442a054bbe87db8dcfab20147d19b2c758d225 100644
--- a/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java --- a/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
+++ b/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java +++ b/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
@@ -45,7 +45,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior { @@ -45,7 +45,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior {
BlockPos blockPos = blockSource.pos().relative(blockSource.state().getValue(DispenserBlock.FACING)); BlockPos blockPos = blockSource.pos().relative(blockSource.state().getValue(DispenserBlock.FACING));
this.setSuccess(tryShearBeehive(serverLevel, blockPos) || tryShearLivingEntity(serverLevel, blockPos, item, bukkitBlock, craftItem)); // CraftBukkit this.setSuccess(tryShearBeehive(serverLevel, blockPos) || tryShearEntity(serverLevel, blockPos, item, bukkitBlock, craftItem)); // CraftBukkit
if (this.isSuccess()) { if (this.isSuccess()) {
- item.hurtAndBreak(1, serverLevel, null, item1 -> {}); - item.hurtAndBreak(1, serverLevel, null, item1 -> {});
+ item.hurtAndBreak(1, serverLevel, null, item1 -> { if (org.leavesmc.leaves.LeavesConfig.modify.oldMC.shearsInDispenserCanZeroAmount) item.grow(1); }); // Leaves - Make shears in dispenser can unlimited use + item.hurtAndBreak(1, serverLevel, null, item1 -> { if (org.leavesmc.leaves.LeavesConfig.modify.oldMC.shearsInDispenserCanZeroAmount) item.grow(1); }); // Leaves - Make shears in dispenser can unlimited use

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Redstone Shears Wrench
diff --git a/net/minecraft/world/item/ShearsItem.java b/net/minecraft/world/item/ShearsItem.java diff --git a/net/minecraft/world/item/ShearsItem.java b/net/minecraft/world/item/ShearsItem.java
index 8cf3e51e12f9cf98836657e722edb23943f9e866..813a6d2bfe99ad8ddf81d7dfca51a7544b5fef0d 100644 index 8cf3e51e12f9cf98836657e722edb23943f9e866..4705004e4a7c36836e3a4c82412e54d0015cfef6 100644
--- a/net/minecraft/world/item/ShearsItem.java --- a/net/minecraft/world/item/ShearsItem.java
+++ b/net/minecraft/world/item/ShearsItem.java +++ b/net/minecraft/world/item/ShearsItem.java
@@ -24,6 +24,22 @@ import net.minecraft.world.level.block.GrowingPlantHeadBlock; @@ -24,6 +24,30 @@ import net.minecraft.world.level.block.GrowingPlantHeadBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.gameevent.GameEvent;
@@ -23,31 +23,70 @@ index 8cf3e51e12f9cf98836657e722edb23943f9e866..813a6d2bfe99ad8ddf81d7dfca51a754
+import net.minecraft.world.level.block.CrafterBlock; +import net.minecraft.world.level.block.CrafterBlock;
+import net.minecraft.world.level.block.LeverBlock; +import net.minecraft.world.level.block.LeverBlock;
+import net.minecraft.world.level.block.CocoaBlock; +import net.minecraft.world.level.block.CocoaBlock;
+import net.minecraft.world.level.block.TrapDoorBlock;
+import net.minecraft.world.level.block.FenceGateBlock;
+import net.minecraft.world.level.block.LightningRodBlock;
+import net.minecraft.world.level.block.RailBlock;
+import net.minecraft.world.level.block.BaseRailBlock;
+import net.minecraft.world.level.block.PoweredRailBlock;
+import net.minecraft.world.level.block.CalibratedSculkSensorBlock;
+import net.minecraft.world.level.block.piston.PistonBaseBlock; +import net.minecraft.world.level.block.piston.PistonBaseBlock;
+import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.properties.RailShape;
+import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.block.state.properties.Property;
+// Leaves end - shears wrench +// Leaves end - shears wrench
+ +
public class ShearsItem extends Item { public class ShearsItem extends Item {
public ShearsItem(Item.Properties properties) { public ShearsItem(Item.Properties properties) {
super(properties); super(properties);
@@ -80,7 +96,68 @@ public class ShearsItem extends Item { @@ -80,7 +104,108 @@ public class ShearsItem extends Item {
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} else { } else {
+ // Leaves start - shears wrench + // Leaves start - shears wrench
+ Block block = blockState.getBlock(); + Block block = blockState.getBlock();
+ if (org.leavesmc.leaves.LeavesConfig.modify.redstoneShearsWrench && block instanceof ObserverBlock || block instanceof DispenserBlock || + if (org.leavesmc.leaves.LeavesConfig.modify.redstoneShearsWrench &&
+ block instanceof PistonBaseBlock || block instanceof HopperBlock || block instanceof RepeaterBlock || block instanceof ComparatorBlock || + block instanceof ObserverBlock ||
+ block instanceof CrafterBlock || block instanceof LeverBlock || block instanceof CocoaBlock) { + block instanceof DispenserBlock ||
+ block instanceof PistonBaseBlock ||
+ block instanceof HopperBlock ||
+ block instanceof RepeaterBlock ||
+ block instanceof ComparatorBlock ||
+ block instanceof CrafterBlock ||
+ block instanceof LeverBlock ||
+ block instanceof CocoaBlock ||
+ block instanceof TrapDoorBlock ||
+ block instanceof FenceGateBlock ||
+ block instanceof LightningRodBlock ||
+ block instanceof CalibratedSculkSensorBlock ||
+ block instanceof BaseRailBlock
+ ) {
+ StateDefinition<Block, BlockState> blockstatelist = block.getStateDefinition(); + StateDefinition<Block, BlockState> blockstatelist = block.getStateDefinition();
+ Property<?> iblockstate = block instanceof CrafterBlock ? blockstatelist.getProperty("orientation") : blockstatelist.getProperty("facing"); + Property<?> iblockstate;
+ if (block instanceof CrafterBlock) iblockstate = blockstatelist.getProperty("orientation");
+ else if (block instanceof BaseRailBlock) iblockstate = blockstatelist.getProperty("shape");
+ else iblockstate = blockstatelist.getProperty("facing");
+ Player player = context.getPlayer(); + Player player = context.getPlayer();
+ +
+ if (iblockstate == null || player == null) { + if (iblockstate == null || player == null) {
+ return InteractionResult.FAIL; + return InteractionResult.FAIL;
+ } + }
+ +
+ if (block instanceof BaseRailBlock) {
+ if (block instanceof RailBlock) {
+ if (blockState.getValue(RailBlock.SHAPE).isSlope()) {
+ return InteractionResult.FAIL;
+ }
+ } else {
+ if (getNameHelper(blockState, PoweredRailBlock.POWERED).equals("true")) {
+ return InteractionResult.FAIL;
+ }
+ if (blockState.getValue(PoweredRailBlock.SHAPE).isSlope()) {
+ return InteractionResult.FAIL;
+ }
+ }
+ }
+
+ if (block instanceof PistonBaseBlock) { + if (block instanceof PistonBaseBlock) {
+ if (getNameHelper(blockState, PistonBaseBlock.EXTENDED).equals("true")) { + if (getNameHelper(blockState, PistonBaseBlock.EXTENDED).equals("true")) {
+ return InteractionResult.FAIL; + return InteractionResult.FAIL;
@@ -84,7 +123,16 @@ index 8cf3e51e12f9cf98836657e722edb23943f9e866..813a6d2bfe99ad8ddf81d7dfca51a754
+ +
+ // Leaves start - shears wrench + // Leaves start - shears wrench
+ private static <T extends Comparable<T>> BlockState cycleState(BlockState state, Property<T> property, boolean inverse) { + private static <T extends Comparable<T>> BlockState cycleState(BlockState state, Property<T> property, boolean inverse) {
+ return state.setValue(property, ShearsItem.getRelative(property.getPossibleValues(), state.getValue(property), inverse)); // CraftBukkit - decompile error + List<T> possibleValues = property.getPossibleValues();
+ if (possibleValues.getFirst() instanceof RailShape) {
+ boolean isRailBlock = state.getBlock() instanceof RailBlock;
+ possibleValues = possibleValues.stream().filter(possibleValue -> {
+ RailShape shape = (RailShape) possibleValue;
+ if (isRailBlock) return !shape.isSlope();
+ return !shape.isSlope() && shape != RailShape.NORTH_EAST && shape != RailShape.NORTH_WEST && shape != RailShape.SOUTH_EAST && shape != RailShape.SOUTH_WEST;
+ }).toList();
+ }
+ return state.setValue(property, ShearsItem.getRelative(possibleValues, state.getValue(property), inverse)); // CraftBukkit - decompile error
+ } + }
+ +
+ private static <T> T getRelative(Iterable<T> elements, T current, boolean inverse) { + private static <T> T getRelative(Iterable<T> elements, T current, boolean inverse) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add isShrink to EntityResurrectEvent
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 3e8f4f3c3d43c6875108295187023c48eece2788..5fc4d97ef421a37158b01864b035385bb7bf5f5f 100644 index 1ba342a1a60951f828034d3ed535b577b3990bf6..7a7971ec03fcdf72ecaa1e934d5ab3c62113c251 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -1701,14 +1701,14 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1733,14 +1733,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
} }
final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Spectator dont get Advancement
diff --git a/net/minecraft/server/PlayerAdvancements.java b/net/minecraft/server/PlayerAdvancements.java diff --git a/net/minecraft/server/PlayerAdvancements.java b/net/minecraft/server/PlayerAdvancements.java
index f56a3fb47aa34c39cbd0e0e4e47d924da1488d7a..82fb9c61ce97c2e88a3252068bb28eb40bda0273 100644 index 5c0e338dc1b0eb5724d10a73d6fc7975f9d2e5e5..a14401edec04964e6c596c16ba58643b835ef9c1 100644
--- a/net/minecraft/server/PlayerAdvancements.java --- a/net/minecraft/server/PlayerAdvancements.java
+++ b/net/minecraft/server/PlayerAdvancements.java +++ b/net/minecraft/server/PlayerAdvancements.java
@@ -168,6 +168,11 @@ public class PlayerAdvancements { @@ -167,6 +167,11 @@ public class PlayerAdvancements {
} }
public boolean award(AdvancementHolder advancement, String criterionKey) { public boolean award(AdvancementHolder advancement, String criterionKey) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Stick can change ArmorStand arm status
diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java
index 6f601a0a300bbf01f77d835576d15e25c8ba10b8..9ef422c34a70367f4dcee50b51a17143d14f131c 100644 index 46369e554be8c72e6fc2e6d58374dbfc77d94879..d7725b5ca689e3d5b512baab04e113be77c0b2ee 100644
--- a/net/minecraft/world/entity/decoration/ArmorStand.java --- a/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java
@@ -270,6 +270,13 @@ public class ArmorStand extends LivingEntity { @@ -228,6 +228,13 @@ public class ArmorStand extends LivingEntity {
return InteractionResult.SUCCESS_SERVER; return InteractionResult.SUCCESS_SERVER;
} }
} else { } else {

View File

@@ -27,25 +27,6 @@ index 47cb25aa9c37bd84d156288c397321009f1d9ae2..a94981882ac37ea215df3a71117d4a9b
public void write(FriendlyByteBuf buffer) { public void write(FriendlyByteBuf buffer) {
buffer.writeCollection(this.entries, (buffer1, entry) -> entry.write(buffer1)); buffer.writeCollection(this.entries, (buffer1, entry) -> entry.write(buffer1));
} }
diff --git a/net/minecraft/network/FriendlyByteBuf.java b/net/minecraft/network/FriendlyByteBuf.java
index 7da7d645f83f351e8c964da01734f3074a877ca1..a9d37c540397b5e24721b3eba47e2d5b2577579f 100644
--- a/net/minecraft/network/FriendlyByteBuf.java
+++ b/net/minecraft/network/FriendlyByteBuf.java
@@ -118,6 +118,14 @@ public class FriendlyByteBuf extends ByteBuf {
public <T> void writeJsonWithCodec(Codec<T> codec, T value, int maxLength) {
// 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 = dataResult.getOrThrow(string -> new EncoderException("Failed to encode: " + string + " " + value));
+ element.getAsJsonObject().addProperty("preventsChatReports", org.leavesmc.leaves.LeavesConfig.mics.noChatSign);
+ this.writeUtf(GSON.toJson(element));
+ return;
+ }
+ // Leaves end - no chat sign
this.writeUtf(GSON.toJson(dataResult.getOrThrow(exception -> new EncoderException("Failed to encode: " + exception + " " + value))), maxLength); // Paper - Adventure; add max length parameter
}
diff --git a/net/minecraft/network/protocol/game/ServerboundChatPacket.java b/net/minecraft/network/protocol/game/ServerboundChatPacket.java diff --git a/net/minecraft/network/protocol/game/ServerboundChatPacket.java b/net/minecraft/network/protocol/game/ServerboundChatPacket.java
index b5afc05924ae899e020c303c8b86398e1d4ab8a0..4479634e577913372faf87138b5ba26ba02ea4f7 100644 index b5afc05924ae899e020c303c8b86398e1d4ab8a0..4479634e577913372faf87138b5ba26ba02ea4f7 100644
--- a/net/minecraft/network/protocol/game/ServerboundChatPacket.java --- a/net/minecraft/network/protocol/game/ServerboundChatPacket.java
@@ -90,11 +71,45 @@ index 1df628ac0b414511aaed6e09d78f884c4170f730..b92081d70ffeec47c304e553ce1aea0a
handler.handleChatSessionUpdate(this); handler.handleChatSessionUpdate(this);
} }
} }
diff --git a/net/minecraft/network/protocol/status/ServerStatus.java b/net/minecraft/network/protocol/status/ServerStatus.java
index a491be4250de3199c3e1aa9e5482b568692bd2f5..9844b19020ef6e4fa5a3008dcd768bb674657d2f 100644
--- a/net/minecraft/network/protocol/status/ServerStatus.java
+++ b/net/minecraft/network/protocol/status/ServerStatus.java
@@ -20,7 +20,8 @@ public record ServerStatus(
Optional<ServerStatus.Players> players,
Optional<ServerStatus.Version> version,
Optional<ServerStatus.Favicon> favicon,
- boolean enforcesSecureChat
+ boolean enforcesSecureChat, // Leaves - no chat sign
+ boolean preventsChatReports // Leaves - no chat sign
) {
public static final Codec<ServerStatus> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
@@ -28,11 +29,18 @@ public record ServerStatus(
ServerStatus.Players.CODEC.lenientOptionalFieldOf("players").forGetter(ServerStatus::players),
ServerStatus.Version.CODEC.lenientOptionalFieldOf("version").forGetter(ServerStatus::version),
ServerStatus.Favicon.CODEC.lenientOptionalFieldOf("favicon").forGetter(ServerStatus::favicon),
- Codec.BOOL.lenientOptionalFieldOf("enforcesSecureChat", false).forGetter(ServerStatus::enforcesSecureChat)
+ Codec.BOOL.lenientOptionalFieldOf("enforcesSecureChat", false).forGetter(ServerStatus::enforcesSecureChat), // Leaves - no chat sign
+ Codec.BOOL.lenientOptionalFieldOf("preventsChatReports", false).forGetter(ServerStatus::preventsChatReports) // Leaves - no chat sign
)
.apply(instance, ServerStatus::new)
);
+ // Leaves start - no chat sign
+ public ServerStatus(Component description, Optional<ServerStatus.Players> players, Optional<ServerStatus.Version> version, Optional<ServerStatus.Favicon> favicon, boolean enforcesSecureChat) {
+ this(description, players, version, favicon, enforcesSecureChat, org.leavesmc.leaves.LeavesConfig.mics.noChatSign);
+ }
+ // Leaves end - no chat sign
+
public record Favicon(byte[] iconBytes) {
private static final String PREFIX = "data:image/png;base64,";
public static final Codec<ServerStatus.Favicon> CODEC = Codec.STRING.comapFlatMap(string -> {
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
index e56f26fc504538d88bfa1954e929ee44fd31d657..e4946438d0c1fb9d2be616cb95768f890b32f286 100644 index f85993fc507d699728e058b12bb49dcb7aaea44b..91babab6152bb12768399ef6f2ea6afcb5e644b7 100644
--- a/net/minecraft/server/dedicated/DedicatedServer.java --- a/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java
@@ -574,7 +574,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -573,7 +573,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
// Paper start - Add setting for proxy online mode status // Paper start - Add setting for proxy online mode status
return properties.enforceSecureProfile return properties.enforceSecureProfile
&& io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode()
@@ -104,10 +119,10 @@ index e56f26fc504538d88bfa1954e929ee44fd31d657..e4946438d0c1fb9d2be616cb95768f89
} }
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index ac5ef04fae4bc19bae9007c0ffd8f688434d22d7..649aeec6954d26cb67827e99c4b5b736f4f5bef4 100644 index 2dd95aca955f19ce48be35b1ca9bcc94c3a1984d..e9d328dacdc23eea792ab350ec2ea9f8337ae008 100644
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -294,10 +294,24 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -322,10 +322,24 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
} }
public void send(Packet<?> packet) { public void send(Packet<?> packet) {
@@ -121,11 +136,11 @@ index ac5ef04fae4bc19bae9007c0ffd8f688434d22d7..649aeec6954d26cb67827e99c4b5b736
this.send(packet, null); this.send(packet, null);
} }
public void send(Packet<?> packet, @Nullable PacketSendListener listener) { public void send(Packet<?> packet, @Nullable ChannelFutureListener channelFutureListener) {
+ // Leaves start - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket + // Leaves start - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket
+ if (org.leavesmc.leaves.LeavesConfig.mics.noChatSign) { + if (org.leavesmc.leaves.LeavesConfig.mics.noChatSign) {
+ if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket && listener != null) { + if (packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket && channelFutureListener != null) {
+ listener = null; + channelFutureListener = null;
+ } + }
+ } + }
+ // Leaves end - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket + // Leaves end - no ClientboundPlayerChatHeaderPacket and rebuild ClientboundPlayerChatPacket
@@ -133,10 +148,10 @@ index ac5ef04fae4bc19bae9007c0ffd8f688434d22d7..649aeec6954d26cb67827e99c4b5b736
if (packet == null || this.processedDisconnect) { // Spigot if (packet == null || this.processedDisconnect) { // Spigot
return; return;
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 0cf30681a9e3d68f3abe1d87b9fd4220083685a9..491d7b5a0cc099a3eb658e19cbe9d97b4419382c 100644 index 204c25d33e86a736f091848a277ea882f129e468..742a49c9f1cec6a7ed343b1f0072fc36bb3df26b 100644
--- a/net/minecraft/server/players/PlayerList.java --- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java
@@ -1339,7 +1339,7 @@ public abstract class PlayerList { @@ -1315,7 +1315,7 @@ public abstract class PlayerList {
} }
public boolean verifyChatTrusted(PlayerChatMessage message) { public boolean verifyChatTrusted(PlayerChatMessage message) {

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Dont send useless entity packets
This patch is Powered by Purpur(https://github.com/PurpurMC/Purpur) This patch is Powered by Purpur(https://github.com/PurpurMC/Purpur)
diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java
index b118e91f1e0b5a8b8c0b2a4a32faabc5a34a5954..7681195587d361acf524d09ad3958e628aad73b6 100644 index e96d4dee14c05f2fa329bfb1588ec795d4e3d730..f6b2d541fdfd11c6ff6033fbf4cd5153796634e3 100644
--- a/net/minecraft/server/level/ServerEntity.java --- a/net/minecraft/server/level/ServerEntity.java
+++ b/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java
@@ -196,6 +196,11 @@ public class ServerEntity { @@ -200,6 +200,11 @@ public class ServerEntity {
} else if (flag) { } else if (flag) {
packet = new ClientboundMoveEntityPacket.Rot(this.entity.getId(), b, b1, this.entity.onGround()); packet = new ClientboundMoveEntityPacket.Rot(this.entity.getId(), b, b1, this.entity.onGround());
flag4 = true; flag4 = true;
@@ -21,7 +21,7 @@ index b118e91f1e0b5a8b8c0b2a4a32faabc5a34a5954..7681195587d361acf524d09ad3958e62
} }
} else { } else {
packet = new ClientboundMoveEntityPacket.PosRot(this.entity.getId(), (short)l, (short)l1, (short)l2, b, b1, this.entity.onGround()); packet = new ClientboundMoveEntityPacket.PosRot(this.entity.getId(), (short)l, (short)l1, (short)l2, b, b1, this.entity.onGround());
@@ -315,6 +320,21 @@ public class ServerEntity { @@ -319,6 +324,21 @@ public class ServerEntity {
this.positionCodec.setBase(this.entity.position()); this.positionCodec.setBase(this.entity.position());
} }

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Optimize suffocation
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 5fc4d97ef421a37158b01864b035385bb7bf5f5f..b5f6a76c977bbb5dbb06fb3dd654f0b01aaba692 100644 index 7a7971ec03fcdf72ecaa1e934d5ab3c62113c251..f0ff74a4f2831ead191bc12cb4873162a470c71f 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -423,7 +423,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -437,7 +437,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) { if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) {
boolean flag = this instanceof Player; boolean flag = this instanceof Player;
@@ -18,7 +18,7 @@ index 5fc4d97ef421a37158b01864b035385bb7bf5f5f..b5f6a76c977bbb5dbb06fb3dd654f0b0
this.hurtServer(serverLevel1, this.damageSources().inWall(), 1.0F); this.hurtServer(serverLevel1, this.damageSources().inWall(), 1.0F);
} else if (flag && !serverLevel1.getWorldBorder().isWithinBounds(this.getBoundingBox())) { } else if (flag && !serverLevel1.getWorldBorder().isWithinBounds(this.getBoundingBox())) {
double d = serverLevel1.getWorldBorder().getDistanceToBorder(this) + serverLevel1.getWorldBorder().getDamageSafeZone(); double d = serverLevel1.getWorldBorder().getDistanceToBorder(this) + serverLevel1.getWorldBorder().getDamageSafeZone();
@@ -1372,6 +1372,12 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1404,6 +1404,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
return this.getHealth() <= 0.0F; return this.getHealth() <= 0.0F;
} }

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Only check for spooky season once an hour
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java
index eb9fb57440f498079182030a46034008d3f6b5e8..5f0ddf96e8ca1bb32c773f11232dedd1a981fde9 100644 index 912b099a51269f92f250c7d6094ad41817749f93..af661d572d2bab00a392f858dd910c8be5e16e81 100644
--- a/net/minecraft/world/entity/ambient/Bat.java --- a/net/minecraft/world/entity/ambient/Bat.java
+++ b/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java
@@ -244,12 +244,30 @@ public class Bat extends AmbientCreature { @@ -245,12 +245,30 @@ public class Bat extends AmbientCreature {
} }
} }

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Config to disable method profiler
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 940e6cb4b8f990e3c4ae8a5efc7adc56ffae28de..105c207b8db2c505f256f4104642af5929b50aa9 100644 index feb5fc93498a5ed89e3bcb61cd72ba6e75881358..6539574b72dcb362d8d106a68d6e2d968340fc5e 100644
--- a/net/minecraft/server/MinecraftServer.java --- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java
@@ -1247,7 +1247,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1248,7 +1248,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
lastTick = currentTime; lastTick = currentTime;
this.nextTickTimeNanos += l; this.nextTickTimeNanos += l;

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) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
index 73ba442b9d39bc021cd5eb6c1c0f98aed94a5a02..c83ad2553145b66aad000be3b82fec57f56359ce 100644 index 0470c4bbf8be7e48ce8dfa4910c3b9f5ebb23360..a8bb9822e963d7d8245c8d6589604fd92b424f18 100644
--- a/net/minecraft/world/entity/Mob.java --- a/net/minecraft/world/entity/Mob.java
+++ b/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java
@@ -203,11 +203,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -206,11 +206,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
return this.lookControl; return this.lookControl;
} }

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Reduce entity allocations
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/net/minecraft/world/entity/ai/attributes/AttributeMap.java diff --git a/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/net/minecraft/world/entity/ai/attributes/AttributeMap.java
index bed9b564c493cd84bf53fc49368fda736f3fbc2b..69ec8e21c96e26bafedcdd979fc9d050b1f3846f 100644 index fdb02fc40579866167e8cc9bcefbd961588b53a6..05c4a98966f7ed86dd658166caf0256566fd2985 100644
--- a/net/minecraft/world/entity/ai/attributes/AttributeMap.java --- a/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/net/minecraft/world/entity/ai/attributes/AttributeMap.java
@@ -18,9 +18,11 @@ public class AttributeMap { @@ -18,9 +18,11 @@ public class AttributeMap {

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Remove lambda from ticking guard
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index b1821dc6bfdda93431e2f43d5de6ecc60901c757..26a20dea38628c7acd88f172a09b12af02a82d09 100644 index c61c0b6d58f96955bfbdad0caaeb56f073a95181..ed05aaa76e1e34ca82fcc7cfb73f371a11600eee 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -806,7 +806,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -810,7 +810,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
} }
profilerFiller.push("tick"); profilerFiller.push("tick");

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) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java
index 2ebee223085fe7926c7f3e555df19ae69f36157e..40f83551c74b594aa5fda82ac67eec72c3cd4942 100644 index ae2bb9a73106febfe5f0d090abd4252bbb5fd27e..b3e536400efa41ba754e52f1ee224365b69dcdab 100644
--- a/io/papermc/paper/entity/activation/ActivationRange.java --- a/io/papermc/paper/entity/activation/ActivationRange.java
+++ b/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java
@@ -215,7 +215,7 @@ public final class ActivationRange { @@ -221,7 +221,7 @@ public final class ActivationRange {
} }
// special cases. // special cases.
if (entity instanceof final LivingEntity living) { if (entity instanceof final LivingEntity living) {
@@ -19,10 +19,10 @@ index 2ebee223085fe7926c7f3e555df19ae69f36157e..40f83551c74b594aa5fda82ac67eec72
} }
if (entity instanceof final Mob mob && mob.getTarget() != null) { if (entity instanceof final Mob mob && mob.getTarget() != null) {
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index b5f6a76c977bbb5dbb06fb3dd654f0b01aaba692..108430b3934a6f9757e7be50d77e760bbade669c 100644 index f0ff74a4f2831ead191bc12cb4873162a470c71f..33d14040a8ac97758881cd31a88d950a14a78450 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -2094,6 +2094,22 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -2126,6 +2126,22 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
return this.lastClimbablePos; return this.lastClimbablePos;
} }

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Reduce chunk loading & lookups
This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish)
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
index ab7f7846d3fc0252c6f71277b3e67d7a785a96b5..8ac90690bd3fb7b5bf8798a4ca5c900e8bc7acb3 100644 index 4edd94ac765d2ab107612504b67e6e07da609313..6760bfd91f59139922768db5e5d362c5e7e4e473 100644
--- a/net/minecraft/world/entity/monster/EnderMan.java --- a/net/minecraft/world/entity/monster/EnderMan.java
+++ b/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java
@@ -300,11 +300,28 @@ public class EnderMan extends Monster implements NeutralMob { @@ -296,11 +296,28 @@ public class EnderMan extends Monster implements NeutralMob {
private boolean teleport(double x, double y, double z) { private boolean teleport(double x, double y, double z) {
BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(x, y, z); BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(x, y, z);

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] InstantBlockUpdater Reintroduced
This patch is Powered by Carpet-TIS-Addition(https://github.com/plusls/Carpet-TIS-Addition) This patch is Powered by Carpet-TIS-Addition(https://github.com/plusls/Carpet-TIS-Addition)
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
index 013ed7dbe2309f562f63e66203179a90566e8115..12a63f75d878fcdad83847b20f5a57f7936c7779 100644 index c41df4b1fff1f65532256e835dc30fadbb4f8c8b..ef8a072838558caab19e8a85f4b59cac570c2635 100644
--- a/net/minecraft/world/level/Level.java --- a/net/minecraft/world/level/Level.java
+++ b/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java
@@ -873,7 +873,13 @@ public abstract class Level implements LevelAccessor, UUIDLookup<Entity>, AutoCl @@ -873,7 +873,13 @@ public abstract class Level implements LevelAccessor, UUIDLookup<Entity>, AutoCl

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] BBOR Protocol
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
index 5d3fc807221392d378fec283bfdefb8747fb8376..bf731da711ce629c0f9250a7bd4025d363623773 100644 index 75578e6ed7233a03d9b6cd3c6d3997f1c6148392..f24db919989bc2e5768e18b4fda68c38d6cde7e0 100644
--- a/net/minecraft/world/level/chunk/LevelChunk.java --- a/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java
@@ -743,6 +743,11 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @@ -749,6 +749,11 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
public void setLoaded(boolean loaded) { public void setLoaded(boolean loaded) {
this.loaded = loaded; this.loaded = loaded;

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] PCA sync protocol
This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition) This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition)
diff --git a/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java diff --git a/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java
index 7c473eea481f5e055cc70512027726f41f0c6f67..3165d1eaa46f2adceba28d4aef95fda3f05ee5e3 100644 index 31ed5d7cfbda1a1f98ebfc89f5cbc65332cabdae..18c683f7d7e18200a24cfc8d26e83f578681f7f5 100644
--- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java
@@ -303,6 +303,13 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory @@ -305,6 +305,13 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory
public void createInventory() { public void createInventory() {
SimpleContainer simpleContainer = this.inventory; SimpleContainer simpleContainer = this.inventory;
this.inventory = new SimpleContainer(this.getInventorySize(), (org.bukkit.entity.AbstractHorse) this.getBukkitEntity()); // CraftBukkit this.inventory = new SimpleContainer(this.getInventorySize(), (org.bukkit.entity.AbstractHorse) this.getBukkitEntity()); // CraftBukkit
@@ -24,7 +24,7 @@ index 7c473eea481f5e055cc70512027726f41f0c6f67..3165d1eaa46f2adceba28d4aef95fda3
int min = Math.min(simpleContainer.getContainerSize(), this.inventory.getContainerSize()); int min = Math.min(simpleContainer.getContainerSize(), this.inventory.getContainerSize());
diff --git a/net/minecraft/world/entity/npc/AbstractVillager.java b/net/minecraft/world/entity/npc/AbstractVillager.java diff --git a/net/minecraft/world/entity/npc/AbstractVillager.java b/net/minecraft/world/entity/npc/AbstractVillager.java
index 1d3381f1481bb2b192bb78462c85c2a185d94ad5..a375fad192cc09ba83775d5e37c1bb351730e6c4 100644 index f8782cdcf3015cad2693663a3c222bd60822f45b..38572ecba568072b132b9e7fc12e6c0c38edd2e2 100644
--- a/net/minecraft/world/entity/npc/AbstractVillager.java --- a/net/minecraft/world/entity/npc/AbstractVillager.java
+++ b/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/net/minecraft/world/entity/npc/AbstractVillager.java
@@ -48,6 +48,15 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @@ -48,6 +48,15 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa
@@ -44,10 +44,10 @@ index 1d3381f1481bb2b192bb78462c85c2a185d94ad5..a375fad192cc09ba83775d5e37c1bb35
@Override @Override
diff --git a/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java diff --git a/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
index a7e2f23ed3279801504f99fc3c5f972e8c1b984f..4509b1a68273effa30d1befafc9104220d02fe8b 100644 index 6a008c86f4e360c916b93f0e3a62a9d8b43e74e6..7781ca07a0c8fe1140f341b695e66de95802ee2e 100644
--- a/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java --- a/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
+++ b/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java +++ b/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
@@ -64,6 +64,11 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme @@ -65,6 +65,11 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme
@Override @Override
public void setChanged() { public void setChanged() {
@@ -60,7 +60,7 @@ index a7e2f23ed3279801504f99fc3c5f972e8c1b984f..4509b1a68273effa30d1befafc910422
@Override @Override
diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index c5b3b5e5f621f8db152aa190374ae0fe567d6828..7729c33cad94cf2b4162324be75713650fc9d378 100644 index 36a72a11d28f99bfe85868461925b778cc01478e..bebe8737b71fc37336342f14b6ea4cfab12d3f34 100644
--- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java --- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -429,6 +429,16 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit @@ -429,6 +429,16 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
@@ -81,7 +81,7 @@ index c5b3b5e5f621f8db152aa190374ae0fe567d6828..7729c33cad94cf2b4162324be7571365
public void setRecipeUsed(@Nullable RecipeHolder<?> recipe) { public void setRecipeUsed(@Nullable RecipeHolder<?> recipe) {
if (recipe != null) { if (recipe != null) {
diff --git a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
index 027502d0af5512c31878978c4d05c52fa3029cca..b3da250aa326d05a4e95c7b749c8ae8975dfd804 100644 index d679ab599dfd0bdbdc3ab5530d7fcd1c38baf7fa..f0ba09c0edc598dfc4e501ba69016e8a2f8d3a7c 100644
--- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java --- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
@@ -121,6 +121,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { @@ -121,6 +121,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity {
@@ -102,10 +102,10 @@ index 027502d0af5512c31878978c4d05c52fa3029cca..b3da250aa326d05a4e95c7b749c8ae89
protected Component getDefaultName() { protected Component getDefaultName() {
return Component.translatable("container.barrel"); return Component.translatable("container.barrel");
diff --git a/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
index 331eb5416307378162e39e20192ba06a047b70ea..69419e74c308e46509cc40fde9ed05583964a1ca 100644 index 91f7ee163107d846e7f6a5783be6eff96e783886..cbbe3dee3dda06d0e2451597dae0ac03009330e0 100644
--- a/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java --- a/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
@@ -144,6 +144,11 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -147,6 +147,11 @@ public class BeehiveBlockEntity extends BlockEntity {
super.setChanged(); super.setChanged();
} }
@@ -117,7 +117,7 @@ index 331eb5416307378162e39e20192ba06a047b70ea..69419e74c308e46509cc40fde9ed0558
return list; return list;
} }
@@ -201,6 +206,11 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -204,6 +209,11 @@ public class BeehiveBlockEntity extends BlockEntity {
this.level.gameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Context.of(bee, this.getBlockState())); this.level.gameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Context.of(bee, this.getBlockState()));
} }
@@ -129,7 +129,7 @@ index 331eb5416307378162e39e20192ba06a047b70ea..69419e74c308e46509cc40fde9ed0558
bee.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.ENTER_BLOCK); // CraftBukkit - add Bukkit remove cause bee.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.ENTER_BLOCK); // CraftBukkit - add Bukkit remove cause
super.setChanged(); super.setChanged();
} }
@@ -322,6 +332,11 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -325,6 +335,11 @@ public class BeehiveBlockEntity extends BlockEntity {
if (releaseOccupant(level, pos, state, beeData.toOccupant(), null, beeReleaseStatus, savedFlowerPos)) { if (releaseOccupant(level, pos, state, beeData.toOccupant(), null, beeReleaseStatus, savedFlowerPos)) {
flag = true; flag = true;
iterator.remove(); iterator.remove();
@@ -141,10 +141,10 @@ index 331eb5416307378162e39e20192ba06a047b70ea..69419e74c308e46509cc40fde9ed0558
} }
// Paper start - Fix bees aging inside; use exitTickCounter to keep actual bee life // Paper start - Fix bees aging inside; use exitTickCounter to keep actual bee life
else if (level.paperConfig().entities.behavior.cooldownFailedBeehiveReleases) { else if (level.paperConfig().entities.behavior.cooldownFailedBeehiveReleases) {
@@ -355,6 +370,11 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -358,6 +373,11 @@ public class BeehiveBlockEntity extends BlockEntity {
tag.read("bees", BeehiveBlockEntity.Occupant.LIST_CODEC).orElse(List.of()).forEach(this::storeBee); input.read("bees", BeehiveBlockEntity.Occupant.LIST_CODEC).orElse(List.of()).forEach(this::storeBee);
this.savedFlowerPos = tag.read("flower_pos", BlockPos.CODEC).orElse(null); this.savedFlowerPos = input.read("flower_pos", BlockPos.CODEC).orElse(null);
this.maxBees = tag.getIntOr("Bukkit.MaxEntities", MAX_OCCUPANTS); // Paper - persist max bukkit occupants this.maxBees = input.getIntOr("Bukkit.MaxEntities", MAX_OCCUPANTS); // Paper - persist max bukkit occupants
+ // Leaves start - pca + // Leaves start - pca
+ if (org.leavesmc.leaves.LeavesConfig.protocol.pca.enable) { + if (org.leavesmc.leaves.LeavesConfig.protocol.pca.enable) {
+ org.leavesmc.leaves.protocol.PcaSyncProtocol.syncBlockEntityToClient(this); + org.leavesmc.leaves.protocol.PcaSyncProtocol.syncBlockEntityToClient(this);
@@ -154,7 +154,7 @@ index 331eb5416307378162e39e20192ba06a047b70ea..69419e74c308e46509cc40fde9ed0558
@Override @Override
diff --git a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
index 2e369167d4d1664df1f0b375597bb12b728c5c62..e13a2845efc88bd68ee96cbc1b58bf4f7fb77845 100644 index 79a9f1c87de30cda479b55cf70fbc3219a3dcad4..7eac2188a38fff2ecfa4082b5d023b111cf7d8f6 100644
--- a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java --- a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
@@ -331,4 +331,14 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements @@ -331,4 +331,14 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
@@ -173,7 +173,7 @@ index 2e369167d4d1664df1f0b375597bb12b728c5c62..e13a2845efc88bd68ee96cbc1b58bf4f
+ // Leaves end - pca + // Leaves end - pca
} }
diff --git a/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/net/minecraft/world/level/block/entity/ChestBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/net/minecraft/world/level/block/entity/ChestBlockEntity.java
index a7a095cc0ffdf7b0daf7b4d19c3e78bc4399fa7c..faac046a95a7db5f5fd456bd8f768b0aaab1db5e 100644 index b7d94ebe0ee995392c355c4237da8443dcc79b21..784e146b28370dc2dac094d5f2ac654a5bc47e01 100644
--- a/net/minecraft/world/level/block/entity/ChestBlockEntity.java --- a/net/minecraft/world/level/block/entity/ChestBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/ChestBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ChestBlockEntity.java
@@ -202,6 +202,16 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement @@ -202,6 +202,16 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement
@@ -194,11 +194,11 @@ index a7a095cc0ffdf7b0daf7b4d19c3e78bc4399fa7c..faac046a95a7db5f5fd456bd8f768b0a
protected AbstractContainerMenu createMenu(int id, Inventory player) { protected AbstractContainerMenu createMenu(int id, Inventory player) {
return ChestMenu.threeRows(id, player, this); return ChestMenu.threeRows(id, player, this);
diff --git a/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java b/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java b/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java
index d0119f3df52fe26c85d8b67ee59e24adf7b427ac..18ff2cd322168f57f3a1b3b4c0e9a02560cb9965 100644 index 6b5179ae4269829b1e356840c9a8c33153334c32..b78ee57634471bc6e5308fb30c8f974fdce516de 100644
--- a/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java --- a/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ComparatorBlockEntity.java
@@ -25,6 +25,16 @@ public class ComparatorBlockEntity extends BlockEntity { @@ -25,6 +25,16 @@ public class ComparatorBlockEntity extends BlockEntity {
this.output = tag.getIntOr("OutputSignal", 0); this.output = input.getIntOr("OutputSignal", 0);
} }
+ // Leaves start - pca + // Leaves start - pca
@@ -215,7 +215,7 @@ index d0119f3df52fe26c85d8b67ee59e24adf7b427ac..18ff2cd322168f57f3a1b3b4c0e9a025
return this.output; return this.output;
} }
diff --git a/net/minecraft/world/level/block/entity/DispenserBlockEntity.java b/net/minecraft/world/level/block/entity/DispenserBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/DispenserBlockEntity.java b/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
index 3fb7a7b9f182062ebed778e7bb9ba239ae9f179c..a8256fd0d14655fe480b6e04ce32814e54f9d9c6 100644 index ae52dc75335799e55e403e3d3f11e9f1d67e4305..36b9362e1ce31b63c100ec65921e095fb7871e82 100644
--- a/net/minecraft/world/level/block/entity/DispenserBlockEntity.java --- a/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/DispenserBlockEntity.java +++ b/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
@@ -104,6 +104,16 @@ public class DispenserBlockEntity extends RandomizableContainerBlockEntity { @@ -104,6 +104,16 @@ public class DispenserBlockEntity extends RandomizableContainerBlockEntity {
@@ -236,7 +236,7 @@ index 3fb7a7b9f182062ebed778e7bb9ba239ae9f179c..a8256fd0d14655fe480b6e04ce32814e
protected Component getDefaultName() { protected Component getDefaultName() {
return Component.translatable("container.dispenser"); return Component.translatable("container.dispenser");
diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index 15d4f60942c0cc612c1468b4c0fda886867a67cb..212a1a1410550a2456a88a948f377048447a1fc8 100644 index 800b7e78ae989868ed0b9e060c80dcd002759412..5f42af7c6fc82d6672ed06a2315254c9c5886ce4 100644
--- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java --- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -122,6 +122,16 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @@ -122,6 +122,16 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
@@ -269,7 +269,7 @@ index 15d4f60942c0cc612c1468b4c0fda886867a67cb..212a1a1410550a2456a88a948f377048
} }
} }
diff --git a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
index 87ebdb6deb66662a38b3eec0dae27eaf859ecabb..5e58113b3401268e0432235dc10b2734dbbd8b71 100644 index ebea67223ce1d350087c73dff0cc3fe6d7b47ca0..a820ab9a2b6dc6b95d4de61aaaad4e79c521efe4 100644
--- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java --- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
@@ -267,6 +267,16 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl @@ -267,6 +267,16 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl

View File

@@ -9,10 +9,10 @@ MasaGadget(https://github.com/plusls/MasaGadget)
litematica(https://github.com/maruohon/litematica) litematica(https://github.com/maruohon/litematica)
diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java
index 2fbbbac9f1472354bd507926a85c25f48291edfe..98c94e0957933828be79e6326d782af6aa738dd9 100644 index 6db566adf2d0df1d26221eda04aa01738df6d3d2..14387fa191fb52aaa8b25396292c1d528a6aed17 100644
--- a/net/minecraft/world/item/BlockItem.java --- a/net/minecraft/world/item/BlockItem.java
+++ b/net/minecraft/world/item/BlockItem.java +++ b/net/minecraft/world/item/BlockItem.java
@@ -151,6 +151,27 @@ public class BlockItem extends Item { @@ -150,6 +150,27 @@ public class BlockItem extends Item {
@Nullable @Nullable
protected BlockState getPlacementState(BlockPlaceContext context) { protected BlockState getPlacementState(BlockPlaceContext context) {
BlockState stateForPlacement = this.getBlock().getStateForPlacement(context); BlockState stateForPlacement = this.getBlock().getStateForPlacement(context);
@@ -62,7 +62,7 @@ index 12c6c8aeec89a0a55633c62fe98f5a3aa75fd476..1f0e7c391d02b18e2c89700025713ec3
blockState = blockState1; blockState = blockState1;
break; break;
diff --git a/net/minecraft/world/level/block/Block.java b/net/minecraft/world/level/block/Block.java diff --git a/net/minecraft/world/level/block/Block.java b/net/minecraft/world/level/block/Block.java
index f289e37f77e1c9d3b0f6c29da1b99f0d5f156e37..848409f44e766ce2a5b74563bf2fd4a6b5d63d33 100644 index 958914e40fceda5d67a98154817b4c5ce478a62d..02ea7616e0c19032374959f59a9ab186e91c5f7b 100644
--- a/net/minecraft/world/level/block/Block.java --- a/net/minecraft/world/level/block/Block.java
+++ b/net/minecraft/world/level/block/Block.java +++ b/net/minecraft/world/level/block/Block.java
@@ -439,6 +439,33 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -439,6 +439,33 @@ public class Block extends BlockBehaviour implements ItemLike {

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Jade Protocol
This patch is Powered by Jade(https://github.com/Snownee/Jade) This patch is Powered by Jade(https://github.com/Snownee/Jade)
diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java
index b72e07ad954efa7f26f876a59f428086b40d9bb2..102746fc84ca9c8899db971fc1490060ea016b7e 100644 index c1798db2972c8f2a343cf6e16fd9354ff212d906..a8d617b16ab2b2c0cdb289a0aa05fa171940cd7e 100644
--- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java
+++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java
@@ -62,7 +62,7 @@ public class Armadillo extends Animal { @@ -63,7 +63,7 @@ public class Armadillo extends Animal {
public final AnimationState rollOutAnimationState = new AnimationState(); public final AnimationState rollOutAnimationState = new AnimationState();
public final AnimationState rollUpAnimationState = new AnimationState(); public final AnimationState rollUpAnimationState = new AnimationState();
public final AnimationState peekAnimationState = new AnimationState(); public final AnimationState peekAnimationState = new AnimationState();
@@ -19,10 +19,10 @@ index b72e07ad954efa7f26f876a59f428086b40d9bb2..102746fc84ca9c8899db971fc1490060
public Armadillo(EntityType<? extends Animal> entityType, Level level) { public Armadillo(EntityType<? extends Animal> entityType, Level level) {
diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java
index ebdfd3fb6c0de48982d392bb2aa415f3676c6056..9d5acb2559143358b1258cbb674191bdddb331e3 100644 index 17f58246849ed407821a987b200cc765eb7943f9..ac27df3ba0ce9bbdf2f32ea87171fbb9407008d6 100644
--- a/net/minecraft/world/entity/animal/frog/Tadpole.java --- a/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java
@@ -252,7 +252,7 @@ public class Tadpole extends AbstractFish { @@ -254,7 +254,7 @@ public class Tadpole extends AbstractFish {
} }
} }
@@ -32,10 +32,10 @@ index ebdfd3fb6c0de48982d392bb2aa415f3676c6056..9d5acb2559143358b1258cbb674191bd
} }
diff --git a/net/minecraft/world/level/storage/loot/LootPool.java b/net/minecraft/world/level/storage/loot/LootPool.java diff --git a/net/minecraft/world/level/storage/loot/LootPool.java b/net/minecraft/world/level/storage/loot/LootPool.java
index 29ad43245a310756c4227acd7532e905f7f8b8ee..ad422817593449b8e914628b51d760e732e2d50c 100644 index 6901e629d941e22e64d83eed4e8cfee3165a96a1..fdc26c8d8c82c20534c57af2a0281b99998cc9f6 100644
--- a/net/minecraft/world/level/storage/loot/LootPool.java --- a/net/minecraft/world/level/storage/loot/LootPool.java
+++ b/net/minecraft/world/level/storage/loot/LootPool.java +++ b/net/minecraft/world/level/storage/loot/LootPool.java
@@ -36,7 +36,7 @@ public class LootPool { @@ -37,7 +37,7 @@ public class LootPool {
) )
.apply(instance, LootPool::new) .apply(instance, LootPool::new)
); );
@@ -45,10 +45,10 @@ index 29ad43245a310756c4227acd7532e905f7f8b8ee..ad422817593449b8e914628b51d760e7
private final Predicate<LootContext> compositeCondition; private final Predicate<LootContext> compositeCondition;
private final List<LootItemFunction> functions; private final List<LootItemFunction> functions;
diff --git a/net/minecraft/world/level/storage/loot/LootTable.java b/net/minecraft/world/level/storage/loot/LootTable.java diff --git a/net/minecraft/world/level/storage/loot/LootTable.java b/net/minecraft/world/level/storage/loot/LootTable.java
index 7a8eb1e8b07647e1124594f78652d34731e4fda6..6cfe7ef8c81f506bce9c971b597cc4e902bcabbe 100644 index 8612cdf7161f8ddff60a6478cc901318b8f958ba..07a962d647baa99b0e1bf3898a07cc914e91397e 100644
--- a/net/minecraft/world/level/storage/loot/LootTable.java --- a/net/minecraft/world/level/storage/loot/LootTable.java
+++ b/net/minecraft/world/level/storage/loot/LootTable.java +++ b/net/minecraft/world/level/storage/loot/LootTable.java
@@ -49,7 +49,7 @@ public class LootTable { @@ -50,7 +50,7 @@ public class LootTable {
public static final LootTable EMPTY = new LootTable(LootContextParamSets.EMPTY, Optional.empty(), List.of(), List.of()); public static final LootTable EMPTY = new LootTable(LootContextParamSets.EMPTY, Optional.empty(), List.of(), List.of());
private final ContextKeySet paramSet; private final ContextKeySet paramSet;
private final Optional<ResourceLocation> randomSequence; private final Optional<ResourceLocation> randomSequence;
@@ -58,23 +58,23 @@ index 7a8eb1e8b07647e1124594f78652d34731e4fda6..6cfe7ef8c81f506bce9c971b597cc4e9
private final BiFunction<ItemStack, LootContext, ItemStack> compositeFunction; private final BiFunction<ItemStack, LootContext, ItemStack> compositeFunction;
public org.bukkit.craftbukkit.CraftLootTable craftLootTable; // CraftBukkit public org.bukkit.craftbukkit.CraftLootTable craftLootTable; // CraftBukkit
diff --git a/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java b/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java diff --git a/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java b/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java
index 8e91ddc6c0e492d165ad8322b4a3d5c3bad5409c..6e420bfb3c223b094157bdfec7dad20d8eab4968 100644 index eeaa49e9f70a18b5d39493aeff73f31b05ac2faa..8cd0403d7873c4c37caef75935b06b056c3d951d 100644
--- a/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java --- a/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java
+++ b/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java +++ b/net/minecraft/world/level/storage/loot/entries/CompositeEntryBase.java
@@ -9,7 +9,7 @@ import net.minecraft.world.level.storage.loot.ValidationContext; @@ -16,7 +16,7 @@ public abstract class CompositeEntryBase extends LootPoolEntryContainer {
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; return "Empty children list";
}
public abstract class CompositeEntryBase extends LootPoolEntryContainer { };
- protected final List<LootPoolEntryContainer> children; - protected final List<LootPoolEntryContainer> children;
+ public final List<LootPoolEntryContainer> children; // Leaves - private -> public + public final List<LootPoolEntryContainer> children; // Leaves - private -> public
private final ComposableEntryContainer composedChildren; private final ComposableEntryContainer composedChildren;
protected CompositeEntryBase(List<LootPoolEntryContainer> children, List<LootItemCondition> conditions) { protected CompositeEntryBase(List<LootPoolEntryContainer> children, List<LootItemCondition> conditions) {
diff --git a/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java b/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java diff --git a/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java b/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java
index e0e933245e038b7229eeddbda272b081161ab603..c5e3834fa970ac909cefea43420378394153d781 100644 index 65e27bce9e59ef97bc8b914d646fba924d0f0877..a49bdcdf37b351436e0ba6d7865f10827c4e6ab4 100644
--- a/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java --- a/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java
+++ b/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java +++ b/net/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer.java
@@ -13,7 +13,7 @@ import net.minecraft.world.level.storage.loot.predicates.ConditionUserBuilder; @@ -14,7 +14,7 @@ import net.minecraft.world.level.storage.loot.predicates.ConditionUserBuilder;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
public abstract class LootPoolEntryContainer implements ComposableEntryContainer { public abstract class LootPoolEntryContainer implements ComposableEntryContainer {
@@ -84,23 +84,23 @@ index e0e933245e038b7229eeddbda272b081161ab603..c5e3834fa970ac909cefea4342037839
protected LootPoolEntryContainer(List<LootItemCondition> conditions) { protected LootPoolEntryContainer(List<LootItemCondition> conditions) {
diff --git a/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java b/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java diff --git a/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java b/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java
index f7b647e81ca99040bae8161a2bc0dcacf5bd537f..069df530b1db72bd4a2b1b80b2570dca545dfd20 100644 index 141026601cd9a4561426b85fd1f8e7dc0544fbd7..a5d7ebb93c147bf0f806ac3c9b2dc4b878573944 100644
--- a/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java --- a/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java
+++ b/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java +++ b/net/minecraft/world/level/storage/loot/entries/NestedLootTable.java
@@ -22,7 +22,7 @@ public class NestedLootTable extends LootPoolSingletonContainer { @@ -29,7 +29,7 @@ public class NestedLootTable extends LootPoolSingletonContainer {
.and(singletonFields(instance)) return "->{inline}";
.apply(instance, NestedLootTable::new) }
); };
- private final Either<ResourceKey<LootTable>, LootTable> contents; - private final Either<ResourceKey<LootTable>, LootTable> contents;
+ public final Either<ResourceKey<LootTable>, LootTable> contents; // Leaves - private -> public + public final Either<ResourceKey<LootTable>, LootTable> contents; // Leaves - private -> public
private NestedLootTable( private NestedLootTable(
Either<ResourceKey<LootTable>, LootTable> contents, int weight, int quality, List<LootItemCondition> conditions, List<LootItemFunction> functions Either<ResourceKey<LootTable>, LootTable> contents, int weight, int quality, List<LootItemCondition> conditions, List<LootItemFunction> functions
diff --git a/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java b/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java diff --git a/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java b/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java
index 7134c54984a12949cd6a2e8dc35c2e1c0431e524..52f36fbb9bfcad81004e531efab85e9b87d3284d 100644 index bae72197acc929c7ed3e964f156115d728eb2176..8f3094f42f3366a1313d70c0b27fbe5632b2082a 100644
--- a/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java --- a/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java
+++ b/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java +++ b/net/minecraft/world/level/storage/loot/predicates/CompositeLootItemCondition.java
@@ -11,7 +11,7 @@ import net.minecraft.world.level.storage.loot.LootContext; @@ -12,7 +12,7 @@ import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.ValidationContext; import net.minecraft.world.level.storage.loot.ValidationContext;
public abstract class CompositeLootItemCondition implements LootItemCondition { public abstract class CompositeLootItemCondition implements LootItemCondition {

View File

@@ -6,12 +6,12 @@ Subject: [PATCH] Player operation limiter
This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition) This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition)
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 01687ea3acf449c49cbc615887a7dbdd3a693613..988992a181e35a3856817419cb4941c73a9c31f2 100644 index 7e4bf7ddc26fc087832f802856f14e268b0ca32b..1b9a5e8b061371649cbd464d1167c2e99e6494bc 100644
--- a/net/minecraft/server/level/ServerPlayer.java --- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java
@@ -420,6 +420,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -429,6 +429,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
public boolean isRealPlayer; // Paper
public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
public @Nullable String clientBrandName = null; // Paper - Brand support
public @Nullable 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 public @Nullable 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
+ // Leaves start - player operation limiter + // Leaves start - player operation limiter
+ private int instaBreakCountPerTick = 0; + private int instaBreakCountPerTick = 0;
@@ -20,7 +20,7 @@ index 01687ea3acf449c49cbc615887a7dbdd3a693613..988992a181e35a3856817419cb4941c7
// Paper start - rewrite chunk system // Paper start - rewrite chunk system
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
@@ -744,6 +748,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -745,6 +749,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
} }
// CraftBukkit end // CraftBukkit end
this.tickClientLoadTimeout(); this.tickClientLoadTimeout();
@@ -28,7 +28,7 @@ index 01687ea3acf449c49cbc615887a7dbdd3a693613..988992a181e35a3856817419cb4941c7
this.gameMode.tick(); this.gameMode.tick();
this.wardenSpawnTracker.tick(); this.wardenSpawnTracker.tick();
if (this.invulnerableTime > 0) { if (this.invulnerableTime > 0) {
@@ -2933,4 +2938,31 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -2977,4 +2982,31 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity(); return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity();
} }
// CraftBukkit end // CraftBukkit end
@@ -61,7 +61,7 @@ index 01687ea3acf449c49cbc615887a7dbdd3a693613..988992a181e35a3856817419cb4941c7
+ // Leaves end - player operation limiter + // Leaves end - player operation limiter
} }
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
index b604cba2490a747661d6819251bc3b9a1d35c7d4..5e54d6de0430cd137fbe13ca8f17dc487ce52ff3 100644 index cfbf34964288526e93d0a5b212c1b60296c10430..9cce442c16ced8d9320a5760580ff13f02cbf8f1 100644
--- a/net/minecraft/server/level/ServerPlayerGameMode.java --- a/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -300,6 +300,19 @@ public class ServerPlayerGameMode { @@ -300,6 +300,19 @@ public class ServerPlayerGameMode {
@@ -85,7 +85,7 @@ index b604cba2490a747661d6819251bc3b9a1d35c7d4..5e54d6de0430cd137fbe13ca8f17dc48
this.debugLogging(pos, true, sequence, message); this.debugLogging(pos, true, sequence, message);
} else { } else {
diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java
index 3f58574069f22d83298a77f253255b25724890ad..0c67e5481a43bf7c02bb54a8ea1abca77d53a292 100644 index 14387fa191fb52aaa8b25396292c1d528a6aed17..eff2c0418e1dc8dff1b9045d8f6ff619100964d1 100644
--- a/net/minecraft/world/item/BlockItem.java --- a/net/minecraft/world/item/BlockItem.java
+++ b/net/minecraft/world/item/BlockItem.java +++ b/net/minecraft/world/item/BlockItem.java
@@ -65,6 +65,21 @@ public class BlockItem extends Item { @@ -65,6 +65,21 @@ public class BlockItem extends Item {

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) This patch is Powered by Carpet-TIS-Addition(https://github.com/plusls/Carpet-TIS-Addition)
diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java
index 483b0499f1f70b3aa8862e6cd8e512748492bee0..5467a1b28525386dfae2a04d8c69d23f163c74f5 100644 index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..d985f224f06f5a823f74b276477ededdbe77596a 100644
--- a/net/minecraft/world/entity/monster/Phantom.java --- a/net/minecraft/world/entity/monster/Phantom.java
+++ b/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java
@@ -231,6 +231,20 @@ public class Phantom extends FlyingMob implements Enemy { @@ -246,6 +246,20 @@ public class Phantom extends Mob implements Enemy {
return targetingConditions.test(level, this, entity); return targetingConditions.test(level, this, entity);
} }

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] MC Technical Survival Mode
Will automatically overwrite some configuration after startup Will automatically overwrite some configuration after startup
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 988992a181e35a3856817419cb4941c73a9c31f2..66110486725de7967e55839043b9fc9690e4c0f5 100644 index 1b9a5e8b061371649cbd464d1167c2e99e6494bc..c6adc1009df62699264d996a6eba85d7db4d3bcf 100644
--- a/net/minecraft/server/level/ServerPlayer.java --- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1614,7 +1614,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -1650,7 +1650,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
public boolean isInvulnerableTo(ServerLevel level, DamageSource damageSource) { public boolean isInvulnerableTo(ServerLevel level, DamageSource damageSource) {
return (super.isInvulnerableTo(level, damageSource) // Paper - disable player cramming; return (super.isInvulnerableTo(level, damageSource) // Paper - disable player cramming;
|| this.isChangingDimension() && !damageSource.is(DamageTypes.ENDER_PEARL) || this.isChangingDimension() && !damageSource.is(DamageTypes.ENDER_PEARL)
@@ -19,10 +19,10 @@ index 988992a181e35a3856817419cb4941c73a9c31f2..66110486725de7967e55839043b9fc96
@Override @Override
diff --git a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java diff --git a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
index d813427cf20117014bc42af0eb7cdee037fbcd9c..35f8644a9b4704363f6fe1ca19135566a45ef835 100644 index a0e0fad40838fa7d835f31e5ce4ae3ab40e0bfa4..d8effc3a9773d29319b8e2bd15abbf03f0996ce5 100644
--- a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java --- a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
+++ b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
@@ -64,7 +64,7 @@ public class EndCrystal extends Entity { @@ -65,7 +65,7 @@ public class EndCrystal extends Entity {
} }
// Paper start - Fix invulnerable end crystals // Paper start - Fix invulnerable end crystals
@@ -32,10 +32,10 @@ index d813427cf20117014bc42af0eb7cdee037fbcd9c..35f8644a9b4704363f6fe1ca19135566
|| ((ServerLevel) this.level()).getDragonFight() == null || ((ServerLevel) this.level()).getDragonFight() == null
|| ((ServerLevel) this.level()).getDragonFight().respawnStage == null || ((ServerLevel) this.level()).getDragonFight().respawnStage == null
diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java
index 5d23d8754b304d5e2fd54400cc81c7fe5c14a804..0f28b1befd42a85ffa5462e86d5cde142f9d1196 100644 index 17d54d38dcec39eefeb989cd576cc640a36e82f5..1d7a1739d6a3a55aacb33d57a58712350b150f64 100644
--- a/net/minecraft/world/entity/item/PrimedTnt.java --- a/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java
@@ -101,7 +101,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -100,7 +100,7 @@ public class PrimedTnt extends Entity implements TraceableEntity {
@Override @Override
public void tick() { public void tick() {
@@ -58,7 +58,7 @@ index 14a2514a408a66a83f7b5fb43b4c4dc8f23fd5f4..5427f5e1f0416a8dfa3e9c38c3ce69d6
entity.spawnReason == org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CHUNK_GEN)) { entity.spawnReason == org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CHUNK_GEN)) {
continue; continue;
diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index 212a1a1410550a2456a88a948f377048447a1fc8..2d979850378c05ce569782d8e04a452f986612a7 100644 index 5f42af7c6fc82d6672ed06a2315254c9c5886ce4..e53b40c70c0a61cbe14a236a99725daa28512b0b 100644
--- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java --- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -275,7 +275,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @@ -275,7 +275,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen

View File

@@ -1,12 +1,12 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com> From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Wed, 14 Dec 2022 14:47:06 +0800 Date: Wed, 14 Dec 2022 14:47:06 +0800
Subject: [PATCH] Stackable ShulkerBoxes Subject: [PATCH] Item overstack util
This patch is Powered by fabric-carpet(https://github.com/gnembon/fabric-carpet) and plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition) 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/net/minecraft/commands/arguments/item/ItemInput.java b/net/minecraft/commands/arguments/item/ItemInput.java diff --git a/net/minecraft/commands/arguments/item/ItemInput.java b/net/minecraft/commands/arguments/item/ItemInput.java
index 643797124fe5a4489d0b7419b7e600c04f283ef2..51971a4ef18ab048dc576c26652982d57e440dc0 100644 index 643797124fe5a4489d0b7419b7e600c04f283ef2..04b4100da96aad50f08e8c59200eec934e7e873d 100644
--- a/net/minecraft/commands/arguments/item/ItemInput.java --- a/net/minecraft/commands/arguments/item/ItemInput.java
+++ b/net/minecraft/commands/arguments/item/ItemInput.java +++ b/net/minecraft/commands/arguments/item/ItemInput.java
@@ -39,11 +39,13 @@ public class ItemInput { @@ -39,11 +39,13 @@ public class ItemInput {
@@ -15,95 +15,95 @@ index 643797124fe5a4489d0b7419b7e600c04f283ef2..51971a4ef18ab048dc576c26652982d5
itemStack.applyComponents(this.components); itemStack.applyComponents(this.components);
- if (allowOversizedStacks && count > itemStack.getMaxStackSize()) { - if (allowOversizedStacks && count > itemStack.getMaxStackSize()) {
- throw ERROR_STACK_TOO_BIG.create(this.getItemName(), itemStack.getMaxStackSize()); - throw ERROR_STACK_TOO_BIG.create(this.getItemName(), itemStack.getMaxStackSize());
+ // Leaves start - stackable shulker boxes + // Leaves start - item over-stack util
+ if (allowOversizedStacks && count > org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack)) { + if (allowOversizedStacks && count > org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack)) {
+ throw ERROR_STACK_TOO_BIG.create(this.getItemName(), org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack)); + throw ERROR_STACK_TOO_BIG.create(this.getItemName(), org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack));
} else { } else {
return itemStack; return itemStack;
} }
+ // Leaves end - stackable shulker boxes + // Leaves end - item over-stack util
} }
public String serialize(HolderLookup.Provider levelRegistry) { public String serialize(HolderLookup.Provider levelRegistry) {
diff --git a/net/minecraft/server/commands/GiveCommand.java b/net/minecraft/server/commands/GiveCommand.java diff --git a/net/minecraft/server/commands/GiveCommand.java b/net/minecraft/server/commands/GiveCommand.java
index b81f98738ef166336e4cc3092b6ba63f385b68e3..e800abc1149db77bc9b7ee1aabd17526ebda377c 100644 index adba92a9ebef64561147427d1339f70e2701d93c..fc367026ca84b125bf3ccd261ef43a3833c1da5c 100644
--- a/net/minecraft/server/commands/GiveCommand.java --- a/net/minecraft/server/commands/GiveCommand.java
+++ b/net/minecraft/server/commands/GiveCommand.java +++ b/net/minecraft/server/commands/GiveCommand.java
@@ -52,7 +52,7 @@ public class GiveCommand { @@ -55,7 +55,7 @@ public class GiveCommand {
private static int giveItem(CommandSourceStack source, ItemInput item, Collection<ServerPlayer> targets, int count) throws CommandSyntaxException { private static int giveItem(CommandSourceStack source, ItemInput item, Collection<ServerPlayer> targets, int count) throws CommandSyntaxException {
ItemStack itemStack = item.createItemStack(1, false); ItemStack itemStack = item.createItemStack(1, false);
final Component displayName = itemStack.getDisplayName(); // Paper - get display name early final Component displayName = itemStack.getDisplayName(); // Paper - get display name early
- int maxStackSize = itemStack.getMaxStackSize(); - int maxStackSize = itemStack.getMaxStackSize();
+ int maxStackSize = org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack); // Leaves - stackable shulker boxes + int maxStackSize = org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack); // Leaves - item over-stack util
int i = maxStackSize * 100; int i = maxStackSize * 100;
if (count > i) { if (count > i) {
source.sendFailure(Component.translatable("commands.give.failed.toomanyitems", i, itemStack.getDisplayName())); source.sendFailure(Component.translatable("commands.give.failed.toomanyitems", i, itemStack.getDisplayName()));
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 9041830c19e2899479e1519488faba5c416ccd88..ca814ebdb05ca3af138bf087f26d2cf50baf3b9c 100644 index e6a1dfb9a9f60791457b86d20e86fab8cca79c39..6622d11f970def6adc2a732187004413a9501c95 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2974,7 +2974,7 @@ public class ServerGamePacketListenerImpl @@ -2986,7 +2986,7 @@ public class ServerGamePacketListenerImpl
} else if (slot.mayPlace(cursor)) { } else if (slot.mayPlace(cursor)) {
if (ItemStack.isSameItemSameComponents(clickedItem, cursor)) { if (ItemStack.isSameItemSameComponents(clickedItem, cursor)) {
int toPlace = packet.buttonNum() == 0 ? cursor.getCount() : 1; int toPlace = packet.buttonNum() == 0 ? cursor.getCount() : 1;
- toPlace = Math.min(toPlace, clickedItem.getMaxStackSize() - clickedItem.getCount()); - toPlace = Math.min(toPlace, clickedItem.getMaxStackSize() - clickedItem.getCount());
+ toPlace = Math.min(toPlace, org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(clickedItem) - clickedItem.getCount()); // Leaves - stackable shulker boxes + toPlace = Math.min(toPlace, org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(clickedItem) - clickedItem.getCount()); // Leaves - item over-stack util
toPlace = Math.min(toPlace, slot.container.getMaxStackSize() - clickedItem.getCount()); toPlace = Math.min(toPlace, slot.container.getMaxStackSize() - clickedItem.getCount());
if (toPlace == 1) { if (toPlace == 1) {
action = InventoryAction.PLACE_ONE; action = InventoryAction.PLACE_ONE;
@@ -3010,7 +3010,7 @@ public class ServerGamePacketListenerImpl @@ -3022,7 +3022,7 @@ public class ServerGamePacketListenerImpl
} }
} else if (ItemStack.isSameItemSameComponents(cursor, clickedItem)) { } else if (ItemStack.isSameItemSameComponents(cursor, clickedItem)) {
if (clickedItem.getCount() >= 0) { if (clickedItem.getCount() >= 0) {
- if (clickedItem.getCount() + cursor.getCount() <= cursor.getMaxStackSize()) { - if (clickedItem.getCount() + cursor.getCount() <= cursor.getMaxStackSize()) {
+ if (clickedItem.getCount() + cursor.getCount() <= org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(cursor)) { // Leaves - stackable shulker boxes + if (clickedItem.getCount() + cursor.getCount() <= org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(cursor)) { // Leaves - item over-stack util
// As of 1.5, this is result slots only // As of 1.5, this is result slots only
action = InventoryAction.PICKUP_ALL; action = InventoryAction.PICKUP_ALL;
} }
@@ -3269,6 +3269,7 @@ public class ServerGamePacketListenerImpl @@ -3233,6 +3233,7 @@ public class ServerGamePacketListenerImpl
this.player.containerMenu.broadcastFullState(); this.player.containerMenu.broadcastFullState();
} else { } else {
this.player.containerMenu.broadcastChanges(); this.player.containerMenu.broadcastChanges();
+ if (org.leavesmc.leaves.LeavesConfig.modify.shulkerBoxStackSize > 1) this.player.containerMenu.broadcastCarriedItem(); // Leaves - stackable shulker boxes - force send carried item + if (org.leavesmc.leaves.util.ItemOverstackUtils.hasOverstackingItem()) this.player.containerMenu.broadcastCarriedItem(); // Leaves - item over-stack util - force send carried item
} }
if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.updateEquipmentOnPlayerActions) this.player.detectEquipmentUpdates(); // Paper - Force update attributes. if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.updateEquipmentOnPlayerActions) this.player.detectEquipmentUpdates(); // Paper - Force update attributes.
} }
@@ -3381,7 +3382,7 @@ public class ServerGamePacketListenerImpl @@ -3343,7 +3344,7 @@ public class ServerGamePacketListenerImpl
} }
boolean flag1 = packet.slotNum() >= 1 && packet.slotNum() <= 45; boolean flag1 = packet.slotNum() >= 1 && packet.slotNum() <= 45;
- boolean flag2 = itemStack.isEmpty() || itemStack.getCount() <= itemStack.getMaxStackSize(); - boolean flag2 = itemStack.isEmpty() || itemStack.getCount() <= itemStack.getMaxStackSize();
+ boolean flag2 = itemStack.isEmpty() || itemStack.getCount() <= org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack); // Leaves - stackable shulker boxes + boolean flag2 = itemStack.isEmpty() || itemStack.getCount() <= org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack); // Leaves - item over-stack util
if (flag || (flag1 && !ItemStack.matches(this.player.inventoryMenu.getSlot(packet.slotNum()).getItem(), packet.itemStack()))) { // Insist on valid slot if (flag || (flag1 && !ItemStack.matches(this.player.inventoryMenu.getSlot(packet.slotNum()).getItem(), packet.itemStack()))) { // Insist on valid slot
// CraftBukkit start - Call click event // CraftBukkit start - Call click event
org.bukkit.inventory.InventoryView inventory = this.player.inventoryMenu.getBukkitView(); org.bukkit.inventory.InventoryView inventory = this.player.inventoryMenu.getBukkitView();
@@ -3423,6 +3424,7 @@ public class ServerGamePacketListenerImpl @@ -3385,6 +3386,7 @@ public class ServerGamePacketListenerImpl
this.player.inventoryMenu.getSlot(packet.slotNum()).setByPlayer(itemStack); this.player.inventoryMenu.getSlot(packet.slotNum()).setByPlayer(itemStack);
this.player.inventoryMenu.setRemoteSlot(packet.slotNum(), itemStack); this.player.inventoryMenu.setRemoteSlot(packet.slotNum(), itemStack);
this.player.inventoryMenu.broadcastChanges(); this.player.inventoryMenu.broadcastChanges();
+ if (org.leavesmc.leaves.LeavesConfig.modify.shulkerBoxStackSize > 1) this.player.containerMenu.sendSingleSlot(packet.slotNum(), itemStack); // Leaves - stackable shulker boxes - force send carried item + if (org.leavesmc.leaves.util.ItemOverstackUtils.hasOverstackingItem()) this.player.containerMenu.sendSingleSlot(packet.slotNum(), itemStack); // Leaves - item over-stack util - force send carried item
if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.updateEquipmentOnPlayerActions) this.player.detectEquipmentUpdates(); // Paper - Force update attributes. if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.updateEquipmentOnPlayerActions) this.player.detectEquipmentUpdates(); // Paper - Force update attributes.
} else if (flag && flag2) { } else if (flag && flag2) {
if (this.dropSpamThrottler.isUnderThreshold()) { if (this.dropSpamThrottler.isUnderThreshold()) {
diff --git a/net/minecraft/world/Container.java b/net/minecraft/world/Container.java diff --git a/net/minecraft/world/Container.java b/net/minecraft/world/Container.java
index b382665cc125b8b5c0938e5e55984e4bf91d37ff..f575b464a8ce430646cb872ae6206a9a0677736b 100644 index b382665cc125b8b5c0938e5e55984e4bf91d37ff..86cac164a2bf0e76528396e6aabbfd64cfc29559 100644
--- a/net/minecraft/world/Container.java --- a/net/minecraft/world/Container.java
+++ b/net/minecraft/world/Container.java +++ b/net/minecraft/world/Container.java
@@ -32,6 +32,12 @@ public interface Container extends Clearable, Iterable<ItemStack> { @@ -32,6 +32,12 @@ public interface Container extends Clearable, Iterable<ItemStack> {
return Math.min(this.getMaxStackSize(), stack.getMaxStackSize()); return Math.min(this.getMaxStackSize(), stack.getMaxStackSize());
} }
+ // Leaves start - stackable shulker boxes + // Leaves start - item over-stack util
+ default int getMaxStackLeaves(ItemStack stack) { + default int getMaxStackLeaves(ItemStack stack) {
+ return Math.min(this.getMaxStackSize(), org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)); + return Math.min(this.getMaxStackSize(), org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(stack));
+ } + }
+ // Leaves end - stackable shulker boxes + // Leaves end - item over-stack util
+ +
void setChanged(); void setChanged();
boolean stillValid(Player player); boolean stillValid(Player player);
diff --git a/net/minecraft/world/SimpleContainer.java b/net/minecraft/world/SimpleContainer.java diff --git a/net/minecraft/world/SimpleContainer.java b/net/minecraft/world/SimpleContainer.java
index 133e042371bcf84f1935903ec57d204e3b7abd84..201599988e20219b6a99bf1594ad6c0c19e09038 100644 index d907e24d563e27acab2f2bf9711b1755ea9afd19..75170c8d3be477a6ea2a1d62018a6ab630b0e54e 100644
--- a/net/minecraft/world/SimpleContainer.java --- a/net/minecraft/world/SimpleContainer.java
+++ b/net/minecraft/world/SimpleContainer.java +++ b/net/minecraft/world/SimpleContainer.java
@@ -211,7 +211,7 @@ public class SimpleContainer implements Container, StackedContentsCompatible { @@ -211,7 +211,7 @@ public class SimpleContainer implements Container, StackedContentsCompatible {
@@ -111,7 +111,7 @@ index 133e042371bcf84f1935903ec57d204e3b7abd84..201599988e20219b6a99bf1594ad6c0c
public void setItem(int index, ItemStack stack) { public void setItem(int index, ItemStack stack) {
this.items.set(index, stack); this.items.set(index, stack);
- stack.limitSize(this.getMaxStackSize(stack)); - stack.limitSize(this.getMaxStackSize(stack));
+ stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - stackable shulker boxes + stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - item over-stack util
this.setChanged(); this.setChanged();
} }
@@ -120,125 +120,88 @@ index 133e042371bcf84f1935903ec57d204e3b7abd84..201599988e20219b6a99bf1594ad6c0c
private void moveItemsBetweenStacks(ItemStack stack, ItemStack other) { private void moveItemsBetweenStacks(ItemStack stack, ItemStack other) {
- int maxStackSize = this.getMaxStackSize(other); - int maxStackSize = this.getMaxStackSize(other);
+ int maxStackSize = this.getMaxStackLeaves(other); // Leaves - stackable shulker boxes + int maxStackSize = this.getMaxStackLeaves(other); // Leaves - item over-stack util
int min = Math.min(stack.getCount(), maxStackSize - other.getCount()); int min = Math.min(stack.getCount(), maxStackSize - other.getCount());
if (min > 0) { if (min > 0) {
other.grow(min); other.grow(min);
diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java
index 6c0ebfb2be4e8b884456a2aa3d5fdc87e45a0e3c..b0e60d1d2a44bb35c87c35e82a172a38406b6c54 100644 index 51804b611f469f2ab53e455e8c633b867b00cc88..df24938d5136948b151d3c1c72ccb2ec97640478 100644
--- a/net/minecraft/world/entity/item/ItemEntity.java --- a/net/minecraft/world/entity/item/ItemEntity.java
+++ b/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java
@@ -281,10 +281,52 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -279,10 +279,15 @@ public class ItemEntity extends Entity implements TraceableEntity {
private boolean isMergable() { private boolean isMergable() {
ItemStack item = this.getItem(); ItemStack item = this.getItem();
- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && item.getCount() < item.getMaxStackSize(); // Paper - Alternative item-despawn-rate - return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && item.getCount() < item.getMaxStackSize(); // Paper - Alternative item-despawn-rate
+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && item.getCount() < org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(item); // Paper - Alternative item-despawn-rate // Leaves - stackable shulker boxes + return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && item.getCount() < org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(item); // Paper - Alternative item-despawn-rate // Leaves - item over-stack util
} }
+ // Leaves end - stackable shulker boxes
+ private boolean tryStackShulkerBoxes(ItemEntity other) {
+ ItemStack selfStack = this.getItem();
+ if (org.leavesmc.leaves.LeavesConfig.modify.shulkerBoxStackSize == 1 ||
+ !(selfStack.getItem() instanceof net.minecraft.world.item.BlockItem blockItem) ||
+ !(blockItem.getBlock() instanceof net.minecraft.world.level.block.ShulkerBoxBlock)
+ ) {
+ return false;
+ }
+
+ ItemStack otherStack = other.getItem();
+ if (selfStack.getItem() == otherStack.getItem()
+ && org.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxNoItem(selfStack)
+ && org.leavesmc.leaves.util.ShulkerBoxUtils.shulkerBoxNoItem(otherStack)
+ && Objects.equals(selfStack.getComponents(), otherStack.getComponents()) // empty block entity tags are cleaned up when spawning
+ && selfStack.getCount() != org.leavesmc.leaves.LeavesConfig.modify.shulkerBoxStackSize) {
+ int amount = Math.min(otherStack.getCount(), org.leavesmc.leaves.LeavesConfig.modify.shulkerBoxStackSize - selfStack.getCount());
+
+ selfStack.grow(amount);
+ this.setItem(selfStack);
+
+ this.pickupDelay = Math.max(other.pickupDelay, this.pickupDelay);
+ this.age = Math.min(other.getAge(), this.age);
+
+ otherStack.shrink(amount);
+ if (otherStack.isEmpty()) {
+ other.discard();
+ }
+ else {
+ other.setItem(otherStack);
+ }
+ return true;
+ }
+ return false;
+ }
+ // Leaves end - stackable shulker boxes
+
private void tryToMerge(ItemEntity itemEntity) { private void tryToMerge(ItemEntity itemEntity) {
+ // Leaves start - stackable shulker boxes + // Leaves start - item over-stack util
+ if (tryStackShulkerBoxes(itemEntity)) { + if (org.leavesmc.leaves.util.ItemOverstackUtils.tryStackItems(this, itemEntity)) {
+ return; + return;
+ } + }
+ // Leaves end - stackable shulker boxes + // Leaves end - item over-stack util
ItemStack item = this.getItem(); ItemStack item = this.getItem();
ItemStack item1 = itemEntity.getItem(); ItemStack item1 = itemEntity.getItem();
if (Objects.equals(this.target, itemEntity.target) && areMergable(item, item1)) { if (Objects.equals(this.target, itemEntity.target) && areMergable(item, item1)) {
diff --git a/net/minecraft/world/entity/player/Inventory.java b/net/minecraft/world/entity/player/Inventory.java diff --git a/net/minecraft/world/entity/player/Inventory.java b/net/minecraft/world/entity/player/Inventory.java
index d9cb4f0ed0c4f63362c837aeef3c4194911455c9..57bf2819271b3293a065b58d31b609f8463811b4 100644 index a6bb436dc80daf6901dc027a6011ead4b3ed27e2..71df58ae26325a2d28b6679733c474c0c59f7654 100644
--- a/net/minecraft/world/entity/player/Inventory.java --- a/net/minecraft/world/entity/player/Inventory.java
+++ b/net/minecraft/world/entity/player/Inventory.java +++ b/net/minecraft/world/entity/player/Inventory.java
@@ -148,10 +148,12 @@ public class Inventory implements Container, Nameable { @@ -165,10 +165,12 @@ public class Inventory implements Container, Nameable {
} }
private boolean hasRemainingSpaceForItem(ItemStack destination, ItemStack origin) { private boolean hasRemainingSpaceForItem(ItemStack destination, ItemStack origin) {
+ // Leaves start - stackable shulker boxes + // Leaves start - item over-stack util
return !destination.isEmpty() return !destination.isEmpty()
- && destination.isStackable() - && destination.isStackable()
- && destination.getCount() < this.getMaxStackSize(destination) - && destination.getCount() < this.getMaxStackSize(destination)
+ && org.leavesmc.leaves.util.ShulkerBoxUtils.isStackable(destination) + && org.leavesmc.leaves.util.ItemOverstackUtils.isStackable(destination)
+ && destination.getCount() < org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(destination) + && destination.getCount() < org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(destination)
&& ItemStack.isSameItemSameComponents(destination, origin); // Paper - check if itemstack is stackable first && ItemStack.isSameItemSameComponents(destination, origin); // Paper - check if itemstack is stackable first
+ // Leaves end - stackable shulker boxes + // Leaves end - item over-stack util
} }
// CraftBukkit start - Watch method above! :D // CraftBukkit start - Watch method above! :D
@@ -164,7 +166,7 @@ public class Inventory implements Container, Nameable { @@ -181,7 +183,7 @@ public class Inventory implements Container, Nameable {
} }
if (this.hasRemainingSpaceForItem(itemInSlot, itemStack)) { if (this.hasRemainingSpaceForItem(itemInSlot, itemStack)) {
- remains -= (itemInSlot.getMaxStackSize() < this.getMaxStackSize() ? itemInSlot.getMaxStackSize() : this.getMaxStackSize()) - itemInSlot.getCount(); - remains -= (itemInSlot.getMaxStackSize() < this.getMaxStackSize() ? itemInSlot.getMaxStackSize() : this.getMaxStackSize()) - itemInSlot.getCount();
+ remains -= (org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemInSlot) < this.getMaxStackSize() ? org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemInSlot) : this.getMaxStackSize()) - itemInSlot.getCount(); // Leaves - stackable shulker boxes + remains -= (org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemInSlot) < this.getMaxStackSize() ? org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemInSlot) : this.getMaxStackSize()) - itemInSlot.getCount(); // Leaves - item over-stack util
} }
if (remains <= 0) { if (remains <= 0) {
return itemStack.getCount(); return itemStack.getCount();
@@ -173,7 +175,7 @@ public class Inventory implements Container, Nameable { @@ -190,7 +192,7 @@ public class Inventory implements Container, Nameable {
ItemStack itemInOffhand = this.equipment.get(EquipmentSlot.OFFHAND); ItemStack itemInOffhand = this.equipment.get(EquipmentSlot.OFFHAND);
if (this.hasRemainingSpaceForItem(itemInOffhand, itemStack)) { if (this.hasRemainingSpaceForItem(itemInOffhand, itemStack)) {
- remains -= (itemInOffhand.getMaxStackSize() < this.getMaxStackSize() ? itemInOffhand.getMaxStackSize() : this.getMaxStackSize()) - itemInOffhand.getCount(); - remains -= (itemInOffhand.getMaxStackSize() < this.getMaxStackSize() ? itemInOffhand.getMaxStackSize() : this.getMaxStackSize()) - itemInOffhand.getCount();
+ remains -= (org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemInOffhand) < this.getMaxStackSize() ? org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemInOffhand) : this.getMaxStackSize()) - itemInOffhand.getCount(); // Leaves - stackable shulker boxes + remains -= (org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemInOffhand) < this.getMaxStackSize() ? org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemInOffhand) : this.getMaxStackSize()) - itemInOffhand.getCount(); // Leaves - item over-stack util
} }
if (remains <= 0) { if (remains <= 0) {
return itemStack.getCount(); return itemStack.getCount();
@@ -297,7 +299,7 @@ public class Inventory implements Container, Nameable { @@ -314,7 +316,7 @@ public class Inventory implements Container, Nameable {
this.setItem(slot, item); this.setItem(slot, item);
} }
- int i = this.getMaxStackSize(item) - item.getCount(); - int i = this.getMaxStackSize(item) - item.getCount();
+ int i = this.getMaxStackLeaves(item) - item.getCount(); // Leaves - stackable shulker boxes + int i = this.getMaxStackLeaves(item) - item.getCount(); // Leaves - item over-stack util
int min = Math.min(count, i); int min = Math.min(count, i);
if (min == 0) { if (min == 0) {
return count; return count;
@@ -403,7 +405,7 @@ public class Inventory implements Container, Nameable { @@ -420,7 +422,7 @@ public class Inventory implements Container, Nameable {
break; break;
} }
- int i = stack.getMaxStackSize() - this.getItem(slotWithRemainingSpace).getCount(); - int i = stack.getMaxStackSize() - this.getItem(slotWithRemainingSpace).getCount();
+ int i = org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack) - this.getItem(slotWithRemainingSpace).getCount(); // Leaves - stackable shulker boxes + int i = org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(stack) - this.getItem(slotWithRemainingSpace).getCount(); // Leaves - item over-stack util
if (this.add(slotWithRemainingSpace, stack.split(i)) && sendPacket && this.player instanceof ServerPlayer serverPlayer) { if (this.add(slotWithRemainingSpace, stack.split(i)) && sendPacket && this.player instanceof ServerPlayer serverPlayer) {
serverPlayer.connection.send(this.createInventoryUpdatePacket(slotWithRemainingSpace)); serverPlayer.connection.send(this.createInventoryUpdatePacket(slotWithRemainingSpace));
} }
diff --git a/net/minecraft/world/entity/player/StackedItemContents.java b/net/minecraft/world/entity/player/StackedItemContents.java diff --git a/net/minecraft/world/entity/player/StackedItemContents.java b/net/minecraft/world/entity/player/StackedItemContents.java
index 83ccde54c625d40dc595e000c533f60aa929bd5a..1b92676459468d42931b84e5ceb19e8d30302f06 100644 index 83ccde54c625d40dc595e000c533f60aa929bd5a..6779503888e6d311758cffde582b0efbd66a33de 100644
--- a/net/minecraft/world/entity/player/StackedItemContents.java --- a/net/minecraft/world/entity/player/StackedItemContents.java
+++ b/net/minecraft/world/entity/player/StackedItemContents.java +++ b/net/minecraft/world/entity/player/StackedItemContents.java
@@ -23,7 +23,7 @@ public class StackedItemContents { @@ -23,7 +23,7 @@ public class StackedItemContents {
@@ -246,12 +209,12 @@ index 83ccde54c625d40dc595e000c533f60aa929bd5a..1b92676459468d42931b84e5ceb19e8d
public void accountStack(ItemStack stack) { public void accountStack(ItemStack stack) {
- this.accountStack(stack, stack.getMaxStackSize()); - this.accountStack(stack, stack.getMaxStackSize());
+ this.accountStack(stack, org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)); // Leaves - stackable shulker boxes + this.accountStack(stack, org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(stack)); // Leaves - item over-stack util
} }
public void accountStack(ItemStack stack, int maxStackSize) { public void accountStack(ItemStack stack, int maxStackSize) {
diff --git a/net/minecraft/world/entity/vehicle/ContainerEntity.java b/net/minecraft/world/entity/vehicle/ContainerEntity.java diff --git a/net/minecraft/world/entity/vehicle/ContainerEntity.java b/net/minecraft/world/entity/vehicle/ContainerEntity.java
index feebd1610ebd3c26a337259c14f5c774dc72b937..7df6ff842e41763aec2d88d1f8a5f7503932d905 100644 index 02d2efef2dc0f0e12eac0c71fa290af706f7694d..99f109e2653eff10c011f380694bd77a76381cee 100644
--- a/net/minecraft/world/entity/vehicle/ContainerEntity.java --- a/net/minecraft/world/entity/vehicle/ContainerEntity.java
+++ b/net/minecraft/world/entity/vehicle/ContainerEntity.java +++ b/net/minecraft/world/entity/vehicle/ContainerEntity.java
@@ -163,7 +163,7 @@ public interface ContainerEntity extends Container, MenuProvider { @@ -163,7 +163,7 @@ public interface ContainerEntity extends Container, MenuProvider {
@@ -259,61 +222,61 @@ index feebd1610ebd3c26a337259c14f5c774dc72b937..7df6ff842e41763aec2d88d1f8a5f750
this.unpackChestVehicleLootTable(null); this.unpackChestVehicleLootTable(null);
this.getItemStacks().set(slot, stack); this.getItemStacks().set(slot, stack);
- stack.limitSize(this.getMaxStackSize(stack)); - stack.limitSize(this.getMaxStackSize(stack));
+ stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - stackable shulker boxes + stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - item over-stack util
} }
default SlotAccess getChestVehicleSlot(final int index) { default SlotAccess getChestVehicleSlot(final int index) {
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
index 2a4763c951ddc78c9d8a39e661e59bbffc5cf109..8aa689129334f75986fb7a18895e2c3fb3c365c8 100644 index e5811924577fb04fd2d67fb4a32a9de1dbe3c7b1..863b9ab56304a58e8ecbe43657857b95a19cea87 100644
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java --- a/net/minecraft/world/inventory/AbstractContainerMenu.java
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
@@ -271,6 +271,13 @@ public abstract class AbstractContainerMenu { @@ -295,6 +295,13 @@ public abstract class AbstractContainerMenu {
this.sendAllDataToRemote(); this.sendAllDataToRemote();
} }
+ // Leaves start - stackable shulker boxes + // Leaves start - item over-stack util
+ public void sendSingleSlot(int slotIndex, ItemStack item) { + public void sendSingleSlot(int slotIndex, ItemStack item) {
+ if (this.synchronizer != null) { + if (this.synchronizer != null) {
+ this.synchronizer.sendSlotChange(this, slotIndex, item); + this.synchronizer.sendSlotChange(this, slotIndex, item);
+ } + }
+ } + }
+ // Leaves end - stackable shulker boxes + // Leaves end - item over-stack util
private void updateDataSlotListeners(int slotIndex, int value) { private void updateDataSlotListeners(int slotIndex, int value) {
for (ContainerListener containerListener : this.containerListeners) { for (ContainerListener containerListener : this.containerListeners) {
containerListener.dataChanged(this, slotIndex, value); containerListener.dataChanged(this, slotIndex, value);
@@ -428,7 +435,7 @@ public abstract class AbstractContainerMenu { @@ -452,7 +459,7 @@ public abstract class AbstractContainerMenu {
&& (this.quickcraftType == 2 || carried1.getCount() >= this.quickcraftSlots.size()) && (this.quickcraftType == 2 || carried1.getCount() >= this.quickcraftSlots.size())
&& this.canDragTo(slot1)) { && this.canDragTo(slot1)) {
int i2 = slot1.hasItem() ? slot1.getItem().getCount() : 0; int i2 = slot1.hasItem() ? slot1.getItem().getCount() : 0;
- int min = Math.min(itemStack.getMaxStackSize(), slot1.getMaxStackSize(itemStack)); - int min = Math.min(itemStack.getMaxStackSize(), slot1.getMaxStackSize(itemStack));
+ int min = Math.min(org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack), slot1.getMaxStackSize(itemStack)); // Leaves - stackable shulker boxes + int min = Math.min(org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack), slot1.getMaxStackSize(itemStack)); // Leaves - item over-stack util
int min1 = Math.min(getQuickCraftPlaceCount(this.quickcraftSlots, this.quickcraftType, itemStack) + i2, min); int min1 = Math.min(getQuickCraftPlaceCount(this.quickcraftSlots, this.quickcraftType, itemStack) + i2, min);
count -= min1 - i2; count -= min1 - i2;
// slot1.setByPlayer(itemStack.copyWithCount(min1)); // slot1.setByPlayer(itemStack.copyWithCount(min1));
@@ -542,7 +549,7 @@ public abstract class AbstractContainerMenu { @@ -564,7 +571,7 @@ public abstract class AbstractContainerMenu {
slot.setByPlayer(carried2); slot.setByPlayer(carried2);
} }
} else if (ItemStack.isSameItemSameComponents(carried, carried2)) { } else if (ItemStack.isSameItemSameComponents(carried, carried2)) {
- Optional<ItemStack> optional1 = slot.tryRemove(carried.getCount(), carried2.getMaxStackSize() - carried2.getCount(), player); - Optional<ItemStack> optional1 = slot.tryRemove(carried.getCount(), carried2.getMaxStackSize() - carried2.getCount(), player);
+ Optional<ItemStack> optional1 = slot.tryRemove(carried.getCount(), org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(carried2) - carried2.getCount(), player); // Leaves - stackable shulker boxes + Optional<ItemStack> optional1 = slot.tryRemove(carried.getCount(), org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(carried2) - carried2.getCount(), player); // Leaves - item over-stack util
optional1.ifPresent(itemStack2 -> { optional1.ifPresent(itemStack2 -> {
carried2.grow(itemStack2.getCount()); carried2.grow(itemStack2.getCount());
slot.onTake(player, itemStack2); slot.onTake(player, itemStack2);
@@ -604,7 +611,7 @@ public abstract class AbstractContainerMenu { @@ -626,7 +633,7 @@ public abstract class AbstractContainerMenu {
Slot slot2 = this.slots.get(slotId); Slot slot2 = this.slots.get(slotId);
if (slot2.hasItem()) { if (slot2.hasItem()) {
ItemStack itemStack = slot2.getItem(); ItemStack itemStack = slot2.getItem();
- this.setCarried(itemStack.copyWithCount(itemStack.getMaxStackSize())); - this.setCarried(itemStack.copyWithCount(itemStack.getMaxStackSize()));
+ this.setCarried(itemStack.copyWithCount(org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack))); // Leaves - stackable shulker boxes + this.setCarried(itemStack.copyWithCount(org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack))); // Leaves - item over-stack util
} }
} else if (clickType == ClickType.THROW && this.getCarried().isEmpty() && slotId >= 0) { } else if (clickType == ClickType.THROW && this.getCarried().isEmpty() && slotId >= 0) {
Slot slot2 = this.slots.get(slotId); Slot slot2 = this.slots.get(slotId);
@@ -635,15 +642,15 @@ public abstract class AbstractContainerMenu { @@ -657,15 +664,15 @@ public abstract class AbstractContainerMenu {
int maxStackSize = button == 0 ? 1 : -1; int maxStackSize = button == 0 ? 1 : -1;
for (int i3 = 0; i3 < 2; i3++) { for (int i3 = 0; i3 < 2; i3++) {
- for (int i4 = count; i4 >= 0 && i4 < this.slots.size() && itemStack.getCount() < itemStack.getMaxStackSize(); i4 += maxStackSize) { - for (int i4 = count; i4 >= 0 && i4 < this.slots.size() && itemStack.getCount() < itemStack.getMaxStackSize(); i4 += maxStackSize) {
+ for (int i4 = count; i4 >= 0 && i4 < this.slots.size() && itemStack.getCount() < org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack); i4 += maxStackSize) { // Leaves - stackable shulker boxes + for (int i4 = count; i4 >= 0 && i4 < this.slots.size() && itemStack.getCount() < org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack); i4 += maxStackSize) { // Leaves - item over-stack util
Slot slot3 = this.slots.get(i4); Slot slot3 = this.slots.get(i4);
if (slot3.hasItem() if (slot3.hasItem()
&& canItemQuickReplace(slot3, itemStack, true) && canItemQuickReplace(slot3, itemStack, true)
@@ -322,49 +285,49 @@ index 2a4763c951ddc78c9d8a39e661e59bbffc5cf109..8aa689129334f75986fb7a18895e2c3f
ItemStack item1 = slot3.getItem(); ItemStack item1 = slot3.getItem();
- if (i3 != 0 || item1.getCount() != item1.getMaxStackSize()) { - if (i3 != 0 || item1.getCount() != item1.getMaxStackSize()) {
- ItemStack itemStack1 = slot3.safeTake(item1.getCount(), itemStack.getMaxStackSize() - itemStack.getCount(), player); - ItemStack itemStack1 = slot3.safeTake(item1.getCount(), itemStack.getMaxStackSize() - itemStack.getCount(), player);
+ if (i3 != 0 || item1.getCount() != org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(item1)) { // Leaves - stackable shulker boxes + if (i3 != 0 || item1.getCount() != org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(item1)) { // Leaves - item over-stack util
+ ItemStack itemStack1 = slot3.safeTake(item1.getCount(), org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack) - itemStack.getCount(), player); // Leaves - stackable shulker boxes + ItemStack itemStack1 = slot3.safeTake(item1.getCount(), org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack) - itemStack.getCount(), player); // Leaves - item over-stack util
itemStack.grow(itemStack1.getCount()); itemStack.grow(itemStack1.getCount());
} }
} }
@@ -761,7 +768,7 @@ public abstract class AbstractContainerMenu { @@ -783,7 +790,7 @@ public abstract class AbstractContainerMenu {
i = endIndex - 1; i = endIndex - 1;
} }
- if (stack.isStackable()) { - if (stack.isStackable()) {
+ if (org.leavesmc.leaves.util.ShulkerBoxUtils.isStackable(stack)) { // Leaves - stackable shulker boxes + if (org.leavesmc.leaves.util.ItemOverstackUtils.isStackable(stack)) { // Leaves - item over-stack util
while (!stack.isEmpty() && (reverseDirection ? i >= startIndex : i < endIndex)) { while (!stack.isEmpty() && (reverseDirection ? i >= startIndex : i < endIndex)) {
Slot slot = this.slots.get(i); Slot slot = this.slots.get(i);
ItemStack item = slot.getItem(); ItemStack item = slot.getItem();
@@ -862,7 +869,7 @@ public abstract class AbstractContainerMenu { @@ -884,7 +891,7 @@ public abstract class AbstractContainerMenu {
public static boolean canItemQuickReplace(@Nullable Slot slot, ItemStack stack, boolean stackSizeMatters) { public static boolean canItemQuickReplace(@Nullable Slot slot, ItemStack stack, boolean stackSizeMatters) {
boolean flag = slot == null || !slot.hasItem(); boolean flag = slot == null || !slot.hasItem();
return !flag && ItemStack.isSameItemSameComponents(stack, slot.getItem()) return !flag && ItemStack.isSameItemSameComponents(stack, slot.getItem())
- ? slot.getItem().getCount() + (stackSizeMatters ? 0 : stack.getCount()) <= stack.getMaxStackSize() - ? slot.getItem().getCount() + (stackSizeMatters ? 0 : stack.getCount()) <= stack.getMaxStackSize()
+ ? slot.getItem().getCount() + (stackSizeMatters ? 0 : stack.getCount()) <= org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack) // Leaves - stackable shulker boxes + ? slot.getItem().getCount() + (stackSizeMatters ? 0 : stack.getCount()) <= org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(stack) // Leaves - item over-stack util
: flag; : flag;
} }
@@ -870,7 +877,7 @@ public abstract class AbstractContainerMenu { @@ -892,7 +899,7 @@ public abstract class AbstractContainerMenu {
return switch (type) { return switch (type) {
case 0 -> Mth.floor((float)stack.getCount() / slots.size()); case 0 -> Mth.floor((float)stack.getCount() / slots.size());
case 1 -> 1; case 1 -> 1;
- case 2 -> stack.getMaxStackSize(); - case 2 -> stack.getMaxStackSize();
+ case 2 -> org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack); // Leaves - stackable shulker boxes + case 2 -> org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(stack); // Leaves - item over-stack util
default -> stack.getCount(); default -> stack.getCount();
}; };
} }
@@ -892,7 +899,7 @@ public abstract class AbstractContainerMenu { @@ -914,7 +921,7 @@ public abstract class AbstractContainerMenu {
for (int i = 0; i < container.getContainerSize(); i++) { for (int i = 0; i < container.getContainerSize(); i++) {
ItemStack item = container.getItem(i); ItemStack item = container.getItem(i);
if (!item.isEmpty()) { if (!item.isEmpty()) {
- f += (float)item.getCount() / container.getMaxStackSize(item); - f += (float)item.getCount() / container.getMaxStackSize(item);
+ f += (float)item.getCount() / container.getMaxStackLeaves(item); // Leaves - stackable shulker boxes + f += Math.clamp((float) item.getCount() / container.getMaxStackSize(item), 0f, 1f); // Leaves - item over-stack util
} }
} }
diff --git a/net/minecraft/world/inventory/MerchantContainer.java b/net/minecraft/world/inventory/MerchantContainer.java diff --git a/net/minecraft/world/inventory/MerchantContainer.java b/net/minecraft/world/inventory/MerchantContainer.java
index 1e5dfb1f9e371fa23cdfa9280797aa0e183d4cd2..cf87267130c0aebd38206556261929d6f6383bc9 100644 index 1e5dfb1f9e371fa23cdfa9280797aa0e183d4cd2..1a593d5bfc4574fd071604105422cd1d395648b8 100644
--- a/net/minecraft/world/inventory/MerchantContainer.java --- a/net/minecraft/world/inventory/MerchantContainer.java
+++ b/net/minecraft/world/inventory/MerchantContainer.java +++ b/net/minecraft/world/inventory/MerchantContainer.java
@@ -109,7 +109,7 @@ public class MerchantContainer implements Container { @@ -109,7 +109,7 @@ public class MerchantContainer implements Container {
@@ -372,12 +335,12 @@ index 1e5dfb1f9e371fa23cdfa9280797aa0e183d4cd2..cf87267130c0aebd38206556261929d6
public void setItem(int index, ItemStack stack) { public void setItem(int index, ItemStack stack) {
this.itemStacks.set(index, stack); this.itemStacks.set(index, stack);
- stack.limitSize(this.getMaxStackSize(stack)); - stack.limitSize(this.getMaxStackSize(stack));
+ stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - stackable shulker boxes + stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - item over-stack util
if (this.isPaymentSlot(index)) { if (this.isPaymentSlot(index)) {
this.updateSellItem(); this.updateSellItem();
} }
diff --git a/net/minecraft/world/inventory/Slot.java b/net/minecraft/world/inventory/Slot.java diff --git a/net/minecraft/world/inventory/Slot.java b/net/minecraft/world/inventory/Slot.java
index 5ceb8964476b40db4511bec91ff13c4f522a1357..371bad86218971d6e031c6d74307b2ab0d460997 100644 index 5ceb8964476b40db4511bec91ff13c4f522a1357..f416d7976e41a06b5a8be93485eaa233ffceda5c 100644
--- a/net/minecraft/world/inventory/Slot.java --- a/net/minecraft/world/inventory/Slot.java
+++ b/net/minecraft/world/inventory/Slot.java +++ b/net/minecraft/world/inventory/Slot.java
@@ -75,7 +75,7 @@ public class Slot { @@ -75,7 +75,7 @@ public class Slot {
@@ -385,41 +348,41 @@ index 5ceb8964476b40db4511bec91ff13c4f522a1357..371bad86218971d6e031c6d74307b2ab
public int getMaxStackSize(ItemStack stack) { public int getMaxStackSize(ItemStack stack) {
- return Math.min(this.getMaxStackSize(), stack.getMaxStackSize()); - return Math.min(this.getMaxStackSize(), stack.getMaxStackSize());
+ return Math.min(this.getMaxStackSize(), org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)); // Leaves - stackable shulker boxes + return Math.min(this.getMaxStackSize(), org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(stack)); // Leaves - item over-stack util
} }
@Nullable @Nullable
diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java
index 24ecca78dc1140b6fc47d59f2acefca6bc2b0220..649d17dcd7856e3b1344192d8ea4b2e9f73fc03b 100644 index da16f4831c875e07c25d7ed041bed493db614658..3ba64f91883b88f3131d4582c771b511bbccfcd9 100644
--- a/net/minecraft/world/item/ItemStack.java --- a/net/minecraft/world/item/ItemStack.java
+++ b/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java
@@ -165,7 +165,7 @@ public final class ItemStack implements DataComponentHolder { @@ -162,7 +162,7 @@ public final class ItemStack implements DataComponentHolder {
@Deprecated @Deprecated
@Nullable @Nullable
private Item item; private Item item;
- PatchedDataComponentMap components; - PatchedDataComponentMap components;
+ public PatchedDataComponentMap components; // Leaves - stackable shulker boxes + public PatchedDataComponentMap components; // Leaves - item over-stack util
@Nullable @Nullable
private Entity entityRepresentation; private Entity entityRepresentation;
@@ -192,7 +192,8 @@ public final class ItemStack implements DataComponentHolder { @@ -189,7 +189,8 @@ public final class ItemStack implements DataComponentHolder {
} else { } else {
Holder<Item> holder = Item.STREAM_CODEC.decode(buffer); Holder<Item> holder = Item.STREAM_CODEC.decode(buffer);
DataComponentPatch dataComponentPatch = codec.decode(buffer); DataComponentPatch dataComponentPatch = codec.decode(buffer);
- return new ItemStack(holder, varInt, dataComponentPatch); - return new ItemStack(holder, varInt, dataComponentPatch);
+ ItemStack itemStack = new ItemStack(holder, varInt, dataComponentPatch); + ItemStack itemStack = new ItemStack(holder, varInt, dataComponentPatch);
+ return org.leavesmc.leaves.util.ShulkerBoxUtils.decodeMaxStackSize(itemStack); + return org.leavesmc.leaves.util.ItemOverstackUtils.decodeMaxStackSize(itemStack);
} }
} }
@@ -201,13 +202,15 @@ public final class ItemStack implements DataComponentHolder { @@ -198,13 +199,15 @@ public final class ItemStack implements DataComponentHolder {
if (value.isEmpty() || value.getItem() == null) { // CraftBukkit - NPE fix itemstack.getItem() if (value.isEmpty() || value.getItem() == null) { // CraftBukkit - NPE fix itemstack.getItem()
buffer.writeVarInt(0); buffer.writeVarInt(0);
} else { } else {
- buffer.writeVarInt(io.papermc.paper.util.sanitizer.ItemComponentSanitizer.sanitizeCount(io.papermc.paper.util.sanitizer.ItemObfuscationSession.currentSession(), value, value.getCount())); // Paper - potentially sanitize count - buffer.writeVarInt(io.papermc.paper.util.sanitizer.ItemComponentSanitizer.sanitizeCount(io.papermc.paper.util.sanitizer.ItemObfuscationSession.currentSession(), value, value.getCount())); // Paper - potentially sanitize count
- Item.STREAM_CODEC.encode(buffer, value.getItemHolder()); - Item.STREAM_CODEC.encode(buffer, value.getItemHolder());
+ // Leaves start - stackable shulker boxes + // Leaves start - item over-stack util
+ final ItemStack itemStack = org.leavesmc.leaves.util.ShulkerBoxUtils.encodeMaxStackSize(value.copy()); + final ItemStack itemStack = org.leavesmc.leaves.util.ItemOverstackUtils.encodeMaxStackSize(value.copy());
+ buffer.writeVarInt(io.papermc.paper.util.sanitizer.ItemComponentSanitizer.sanitizeCount(io.papermc.paper.util.sanitizer.ItemObfuscationSession.currentSession(), itemStack, itemStack.getCount())); // Paper - potentially sanitize count + buffer.writeVarInt(io.papermc.paper.util.sanitizer.ItemComponentSanitizer.sanitizeCount(io.papermc.paper.util.sanitizer.ItemObfuscationSession.currentSession(), itemStack, itemStack.getCount())); // Paper - potentially sanitize count
+ Item.STREAM_CODEC.encode(buffer, itemStack.getItemHolder()); + Item.STREAM_CODEC.encode(buffer, itemStack.getItemHolder());
// Paper start - adventure; conditionally render translatable components // Paper start - adventure; conditionally render translatable components
@@ -432,50 +395,17 @@ index 24ecca78dc1140b6fc47d59f2acefca6bc2b0220..649d17dcd7856e3b1344192d8ea4b2e9
} finally { } finally {
net.minecraft.network.chat.ComponentSerialization.DONT_RENDER_TRANSLATABLES.set(prev); net.minecraft.network.chat.ComponentSerialization.DONT_RENDER_TRANSLATABLES.set(prev);
} }
@@ -302,7 +305,7 @@ public final class ItemStack implements DataComponentHolder { @@ -299,7 +302,7 @@ public final class ItemStack implements DataComponentHolder {
for (ItemStack itemStack : itemContainerContents.nonEmptyItems()) { for (ItemStack itemStack : itemContainerContents.nonEmptyItems()) {
int count = itemStack.getCount(); int count = itemStack.getCount();
- int maxStackSize = itemStack.getMaxStackSize(); - int maxStackSize = itemStack.getMaxStackSize();
+ int maxStackSize = org.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemStack); // Leaves - stackable shulker boxes + int maxStackSize = org.leavesmc.leaves.util.ItemOverstackUtils.getItemStackMaxCount(itemStack); // Leaves - item over-stack util
if (count > maxStackSize) { if (count > maxStackSize) {
return DataResult.error(() -> "Item stack with count of " + count + " was larger than maximum: " + maxStackSize); return DataResult.error(() -> "Item stack with count of " + count + " was larger than maximum: " + maxStackSize);
} }
diff --git a/net/minecraft/world/level/block/AbstractCauldronBlock.java b/net/minecraft/world/level/block/AbstractCauldronBlock.java
index ad3f32888afd8b5f0038445a1b0fcc8cacec9fe2..18b7b7fe68c54a400f269f5ff1d09fe9e3d519b8 100644
--- a/net/minecraft/world/level/block/AbstractCauldronBlock.java
+++ b/net/minecraft/world/level/block/AbstractCauldronBlock.java
@@ -62,9 +62,27 @@ public abstract class AbstractCauldronBlock extends Block {
ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult
) {
CauldronInteraction cauldronInteraction = this.interactions.map().get(stack.getItem());
- return cauldronInteraction.interact(state, level, pos, player, hand, stack, hitResult.getDirection()); // Paper - pass hit direction
+ return wrapInteractor(cauldronInteraction, state, level, pos, player, hand, stack, hitResult.getDirection()); // Paper - pass hit direction // Leaves - stackable shulker boxes
}
+ // Leaves start - stackable shulker boxes
+ private InteractionResult wrapInteractor(CauldronInteraction cauldronBehavior, BlockState blockState, Level world, BlockPos blockPos, Player playerEntity, InteractionHand hand, ItemStack itemStack, net.minecraft.core.Direction hitDirection) {
+ int count = -1;
+ if (org.leavesmc.leaves.LeavesConfig.modify.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, hitDirection);
+ if (count > 0 && result.consumesAction()) {
+ ItemStack current = playerEntity.getItemInHand(hand);
+ if (current.getItem() instanceof net.minecraft.world.item.BlockItem bi && bi.getBlock() instanceof ShulkerBoxBlock) {
+ current.setCount(count);
+ }
+ }
+ return result;
+ }
+ // Leaves end - stackable shulker boxes
+
@Override
protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
return SHAPE;
diff --git a/net/minecraft/world/level/block/CrafterBlock.java b/net/minecraft/world/level/block/CrafterBlock.java diff --git a/net/minecraft/world/level/block/CrafterBlock.java b/net/minecraft/world/level/block/CrafterBlock.java
index 38b03c7b02bdfc579e5e126c12de3d878e26d188..33e24f2c3b63b2d3b55dfae2f2e55869abeed055 100644 index 38b03c7b02bdfc579e5e126c12de3d878e26d188..caf31218a1aff84367da126ee1dc46b8c8a1e5d1 100644
--- a/net/minecraft/world/level/block/CrafterBlock.java --- a/net/minecraft/world/level/block/CrafterBlock.java
+++ b/net/minecraft/world/level/block/CrafterBlock.java +++ b/net/minecraft/world/level/block/CrafterBlock.java
@@ -192,7 +192,7 @@ public class CrafterBlock extends BaseEntityBlock { @@ -192,7 +192,7 @@ public class CrafterBlock extends BaseEntityBlock {
@@ -483,12 +413,12 @@ index 38b03c7b02bdfc579e5e126c12de3d878e26d188..33e24f2c3b63b2d3b55dfae2f2e55869
Container containerAt = HopperBlockEntity.getContainerAt(level, pos.relative(direction)); Container containerAt = HopperBlockEntity.getContainerAt(level, pos.relative(direction));
ItemStack itemStack = stack.copy(); ItemStack itemStack = stack.copy();
- if (containerAt != null && (containerAt instanceof CrafterBlockEntity || stack.getCount() > containerAt.getMaxStackSize(stack))) { - if (containerAt != null && (containerAt instanceof CrafterBlockEntity || stack.getCount() > containerAt.getMaxStackSize(stack))) {
+ if (containerAt != null && (containerAt instanceof CrafterBlockEntity || stack.getCount() > containerAt.getMaxStackLeaves(stack))) { // Leaves - stackable shulker boxes + if (containerAt != null && (containerAt instanceof CrafterBlockEntity || stack.getCount() > containerAt.getMaxStackLeaves(stack))) { // Leaves - item over-stack util
// CraftBukkit start - InventoryMoveItemEvent // CraftBukkit start - InventoryMoveItemEvent
org.bukkit.craftbukkit.inventory.CraftItemStack oitemstack = org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack); org.bukkit.craftbukkit.inventory.CraftItemStack oitemstack = org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack);
diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 7729c33cad94cf2b4162324be75713650fc9d378..78b3bdb668320e9cf2fb09b59929fac43cf56aca 100644 index bebe8737b71fc37336342f14b6ea4cfab12d3f34..4fdb3c36b39213f01f86ba281c7b62af99f5dcce 100644
--- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java --- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -409,7 +409,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit @@ -409,7 +409,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
@@ -496,25 +426,25 @@ index 7729c33cad94cf2b4162324be75713650fc9d378..78b3bdb668320e9cf2fb09b59929fac4
boolean flag = !stack.isEmpty() && ItemStack.isSameItemSameComponents(itemStack, stack); boolean flag = !stack.isEmpty() && ItemStack.isSameItemSameComponents(itemStack, stack);
this.items.set(index, stack); this.items.set(index, stack);
- stack.limitSize(this.getMaxStackSize(stack)); - stack.limitSize(this.getMaxStackSize(stack));
+ stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - stackable shulker boxes + stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - item over-stack util
if (index == 0 && !flag && this.level instanceof ServerLevel serverLevel) { if (index == 0 && !flag && this.level instanceof ServerLevel serverLevel) {
this.cookingTotalTime = getTotalCookTime(serverLevel, this, this.recipeType, this.cookSpeedMultiplier); // Paper - cook speed multiplier API this.cookingTotalTime = getTotalCookTime(serverLevel, this, this.recipeType, this.cookSpeedMultiplier); // Paper - cook speed multiplier API
this.cookingTimer = 0; this.cookingTimer = 0;
diff --git a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java b/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java b/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java
index c63370fd458fb4f7190b79b1a8174fcc92d88f9c..4cca3fbbb93bb76d5d501dfad6997d909211809e 100644 index 5a094257a31f0500278a706a418e1697f8810ffb..63d6a43dab067aa4c8fb67095c455130196eef9f 100644
--- a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java --- a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java
@@ -148,7 +148,7 @@ public abstract class BaseContainerBlockEntity extends BlockEntity implements Co @@ -145,7 +145,7 @@ public abstract class BaseContainerBlockEntity extends BlockEntity implements Co
@Override @Override
public void setItem(int slot, ItemStack stack) { public void setItem(int slot, ItemStack stack) {
this.getItems().set(slot, stack); this.getItems().set(slot, stack);
- stack.limitSize(this.getMaxStackSize(stack)); - stack.limitSize(this.getMaxStackSize(stack));
+ stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - stackable shulker boxes + stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - item over-stack util
this.setChanged(); this.setChanged();
} }
diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index 2d979850378c05ce569782d8e04a452f986612a7..a2fe5fdf50ae731e423821a0d1c52141b478e0be 100644 index e53b40c70c0a61cbe14a236a99725daa28512b0b..d152ad88e8e873a0164b2394516bd10f23c7b263 100644
--- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java --- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -113,7 +113,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @@ -113,7 +113,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
@@ -522,7 +452,7 @@ index 2d979850378c05ce569782d8e04a452f986612a7..a2fe5fdf50ae731e423821a0d1c52141
this.unpackLootTable(null); this.unpackLootTable(null);
this.getItems().set(index, stack); this.getItems().set(index, stack);
- stack.limitSize(this.getMaxStackSize(stack)); - stack.limitSize(this.getMaxStackSize(stack));
+ stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - stackable shulker boxes + stack.limitSize(this.getMaxStackLeaves(stack)); // Leaves - item over-stack util
} }
@Override @Override
@@ -531,10 +461,10 @@ index 2d979850378c05ce569782d8e04a452f986612a7..a2fe5fdf50ae731e423821a0d1c52141
// Spigot start - SPIGOT-6693, SimpleContainer#setItem // Spigot start - SPIGOT-6693, SimpleContainer#setItem
ItemStack leftover = ItemStack.EMPTY; // Paper - Make hoppers respect inventory max stack size ItemStack leftover = ItemStack.EMPTY; // Paper - Make hoppers respect inventory max stack size
- if (!stack.isEmpty() && stack.getCount() > destination.getMaxStackSize()) { - if (!stack.isEmpty() && stack.getCount() > destination.getMaxStackSize()) {
+ if (!stack.isEmpty() && (stack.getCount() > destination.getMaxStackSize() || stack.getCount() > stack.getMaxStackSize())) { // Leaves - stackable shulker boxes + if (!stack.isEmpty() && (stack.getCount() > destination.getMaxStackSize() || stack.getCount() > stack.getMaxStackSize())) { // Leaves - item over-stack util
leftover = stack; // Paper - Make hoppers respect inventory max stack size leftover = stack; // Paper - Make hoppers respect inventory max stack size
- stack = stack.split(destination.getMaxStackSize()); - stack = stack.split(destination.getMaxStackSize());
+ stack = stack.split(Math.min(destination.getMaxStackSize(), stack.getMaxStackSize())); // Leaves - stackable shulker boxes + stack = stack.split(Math.min(destination.getMaxStackSize(), stack.getMaxStackSize())); // Leaves - item over-stack util
} }
// Spigot end // Spigot end
ignoreBlockEntityUpdates = true; // Paper - Perf: Optimize Hoppers ignoreBlockEntityUpdates = true; // Paper - Perf: Optimize Hoppers

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Return nether portal fix
This patch is powered by NetherPortalFix(https://github.com/TwelveIterationMods/NetherPortalFix) This patch is powered by NetherPortalFix(https://github.com/TwelveIterationMods/NetherPortalFix)
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 66110486725de7967e55839043b9fc9690e4c0f5..f144a8bd5eb55ce093ad92ffd1304860dc52c1b1 100644 index c6adc1009df62699264d996a6eba85d7db4d3bcf..a3fe89776a6a5067dbd53a82defa0ffc92fbac1d 100644
--- a/net/minecraft/server/level/ServerPlayer.java --- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1428,6 +1428,21 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -1464,6 +1464,21 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld()); org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld());
this.level().getCraftServer().getPluginManager().callEvent(changeEvent); this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
// CraftBukkit end // CraftBukkit end
@@ -32,10 +32,10 @@ index 66110486725de7967e55839043b9fc9690e4c0f5..f144a8bd5eb55ce093ad92ffd1304860
if (this.isBlocking()) { if (this.isBlocking()) {
this.stopUsingItem(); this.stopUsingItem();
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 491d7b5a0cc099a3eb658e19cbe9d97b4419382c..72c2762485da81d3a252290455f57a8cf81dfe66 100644 index 742a49c9f1cec6a7ed343b1f0072fc36bb3df26b..1fe310309311d00d6889b706bb1a468323204dd9 100644
--- a/net/minecraft/server/players/PlayerList.java --- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java
@@ -863,6 +863,20 @@ public abstract class PlayerList { @@ -822,6 +822,20 @@ public abstract class PlayerList {
if (fromWorld != level) { if (fromWorld != level) {
org.bukkit.event.player.PlayerChangedWorldEvent event = new org.bukkit.event.player.PlayerChangedWorldEvent(player.getBukkitEntity(), fromWorld.getWorld()); org.bukkit.event.player.PlayerChangedWorldEvent event = new org.bukkit.event.player.PlayerChangedWorldEvent(player.getBukkitEntity(), fromWorld.getWorld());
this.server.server.getPluginManager().callEvent(event); this.server.server.getPluginManager().callEvent(event);
@@ -57,10 +57,10 @@ index 491d7b5a0cc099a3eb658e19cbe9d97b4419382c..72c2762485da81d3a252290455f57a8c
// Save player file again if they were disconnected // Save player file again if they were disconnected
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 108430b3934a6f9757e7be50d77e760bbade669c..6893ca36cd4ae9a62fecedb1167cc6cf797a7f8f 100644 index 942be06bebe8c3fca0b0c33fa387e30deda8dd7c..bc19f0bf079d6a7fa2fc8aaed6477da5e57d32da 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -245,7 +245,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -257,7 +257,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
protected ItemStack useItem = ItemStack.EMPTY; protected ItemStack useItem = ItemStack.EMPTY;
public int useItemRemaining; public int useItemRemaining;
protected int fallFlyTicks; protected int fallFlyTicks;
@@ -70,10 +70,10 @@ index 108430b3934a6f9757e7be50d77e760bbade669c..6893ca36cd4ae9a62fecedb1167cc6cf
@Nullable @Nullable
private DamageSource lastDamageSource; private DamageSource lastDamageSource;
diff --git a/net/minecraft/world/level/block/NetherPortalBlock.java b/net/minecraft/world/level/block/NetherPortalBlock.java diff --git a/net/minecraft/world/level/block/NetherPortalBlock.java b/net/minecraft/world/level/block/NetherPortalBlock.java
index 2f08780430fc643991ffb4aeba1f1ae8e78944d2..171b383efabbbe849aff28832c47076f85a46307 100644 index 6c5629a6f5f91496a55eb0bf281ceae1567915b1..3aabae6e27e692aa65cc931e57306426e0f4d645 100644
--- a/net/minecraft/world/level/block/NetherPortalBlock.java --- a/net/minecraft/world/level/block/NetherPortalBlock.java
+++ b/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/net/minecraft/world/level/block/NetherPortalBlock.java
@@ -184,7 +184,18 @@ public class NetherPortalBlock extends Block implements Portal { @@ -179,7 +179,18 @@ public class NetherPortalBlock extends Block implements Portal {
@Nullable @Nullable
private TeleportTransition getExitPortal(ServerLevel level, Entity entity, BlockPos pos, BlockPos exitPos, boolean isNether, WorldBorder worldBorder, int searchRadius, boolean canCreatePortal, int createRadius) { // CraftBukkit private TeleportTransition getExitPortal(ServerLevel level, Entity entity, BlockPos pos, BlockPos exitPos, boolean isNether, WorldBorder worldBorder, int searchRadius, boolean canCreatePortal, int createRadius) { // CraftBukkit

View File

@@ -18,10 +18,10 @@ index 8c3151c25c172b846f0d028b5100718ada2d09d7..d59d05f8894481fb5ebe1aeb8ee7a162
private final String baseUrl; private final String baseUrl;
private final URL joinUrl; private final URL joinUrl;
diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java
index 9c9b601a3f903bebb0dd1bda0e24745587229727..4cde785a679dccc3dfa42272e6094328e9ce98c1 100644 index fd3553bdc1c3cdbf6aa3dc00e0a4987f8eaa4fb8..e673df664b06c654a7be0622874b9b27ad7ef20f 100644
--- a/net/minecraft/server/Main.java --- a/net/minecraft/server/Main.java
+++ b/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java
@@ -177,7 +177,7 @@ public class Main { @@ -178,7 +178,7 @@ public class Main {
file = new File(bukkitConfiguration.getString("settings.world-container", ".")); file = new File(bukkitConfiguration.getString("settings.world-container", "."));
} }
// Paper end - fix SPIGOT-5824 // Paper end - fix SPIGOT-5824
@@ -31,10 +31,10 @@ index 9c9b601a3f903bebb0dd1bda0e24745587229727..4cde785a679dccc3dfa42272e6094328
String string = Optional.ofNullable((String) optionSet.valueOf("world")).orElse(dedicatedServerSettings.getProperties().levelName); String string = Optional.ofNullable((String) optionSet.valueOf("world")).orElse(dedicatedServerSettings.getProperties().levelName);
LevelStorageSource levelStorageSource = LevelStorageSource.createDefault(file.toPath()); LevelStorageSource levelStorageSource = LevelStorageSource.createDefault(file.toPath());
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 105c207b8db2c505f256f4104642af5929b50aa9..50f73905e6785d87a0faf886802d956a1c7b9751 100644 index 11728fa48bb144bbe933eb8fa2df22b52ac1b5a5..7e339cb26a132487ac0ab91d3db7e4885bacd545 100644
--- a/net/minecraft/server/MinecraftServer.java --- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java
@@ -244,7 +244,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -245,7 +245,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
private boolean isDemo; private boolean isDemo;
private volatile boolean isReady; private volatile boolean isReady;
private long lastOverloadWarningNanos; private long lastOverloadWarningNanos;

View File

@@ -1,41 +1,41 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: violetc <58360096+s-yh-china@users.noreply.github.com> From: violetc <58360096+s-yh-china@users.noreply.github.com>
Date: Thu, 16 Feb 2023 17:25:01 +0800 Date: Thu, 16 Feb 2023 17:25:01 +0800
Subject: [PATCH] Configurable vanilla random Subject: [PATCH] NOT_FINISH Configurable vanilla random
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 632a1cb5eee13d7287915433e9e646ec4a3a1a09..0e5c4aa2b8856c7b88ff90031715a55c4a1bf89e 100644 index 089b50dbae2ae351d81deb041663f8885e3bfae1..b922ac57ca5bbe9e126be9b24a79718bf62888f6 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -261,7 +261,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -281,7 +281,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public double yOld; public double yOld;
public double zOld; public double zOld;
public boolean noPhysics; public boolean noPhysics;
- public final RandomSource random = SHARED_RANDOM; // Paper - Share random for entities to make them more random - public final RandomSource random = SHARED_RANDOM; // Paper - Share random for entities to make them more random
+ public final RandomSource random = org.leavesmc.leaves.LeavesConfig.modify.useVanillaRandom ? RandomSource.create() : SHARED_RANDOM; // Paper - Share random for entities to make them more random // Leaves - but mojang use it, optimize? no! + public final RandomSource random = org.leavesmc.leaves.LeavesConfig.modify.useVanillaRandom ? RandomSource.create() : SHARED_RANDOM; // Paper - Share random for entities to make them more random // Leaves - but mojang use it, optimize? no!
public int tickCount; public int tickCount;
private int remainingFireTicks = -this.getFireImmuneTicks(); private int remainingFireTicks;
public boolean wasTouchingWater; public boolean wasTouchingWater;
diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java
index edca2fa21e600fa1e7ef91af673adaae7d4c86c4..9007128a4619ab6130424786ae81c23ae38e55e9 100644 index d40954f03c865bfbc5beb308bbcf7b7c9ac48eb9..bee8374eaca826de1a167c4c98a1a09aad8287d0 100644
--- a/net/minecraft/world/entity/animal/Bee.java --- a/net/minecraft/world/entity/animal/Bee.java
+++ b/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java
@@ -801,7 +801,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -802,7 +802,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@VisibleForDebug @VisibleForDebug
public class BeeGoToHiveGoal extends Bee.BaseBeeGoal { public class BeeGoToHiveGoal extends Bee.BaseBeeGoal {
public static final int MAX_TRAVELLING_TICKS = 2400; public static final int MAX_TRAVELLING_TICKS = 2400;
- int travellingTicks = Bee.this.random.nextInt(10); // CraftBukkit - SPIGOT-7495: Give Bees another chance and let them use their own random, avoid concurrency issues - int travellingTicks;
+ int travellingTicks = org.leavesmc.leaves.LeavesConfig.modify.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 + int travellingTicks; // TODO: int travellingTicks = org.leavesmc.leaves.LeavesConfig.modify.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
private static final int MAX_BLACKLISTED_TARGETS = 3; private static final int MAX_BLACKLISTED_TARGETS = 3;
final List<BlockPos> blacklistedTargets = Lists.newArrayList(); final List<BlockPos> blacklistedTargets = Lists.newArrayList();
@Nullable @Nullable
@@ -917,7 +917,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -918,7 +918,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
public class BeeGoToKnownFlowerGoal extends Bee.BaseBeeGoal { public class BeeGoToKnownFlowerGoal extends Bee.BaseBeeGoal {
private static final int MAX_TRAVELLING_TICKS = 2400; private static final int MAX_TRAVELLING_TICKS = 2400;
- int travellingTicks = Bee.this.random.nextInt(10); // CraftBukkit - SPIGOT-7495: Give Bees another chance and let them use their own random, avoid concurrency issues - int travellingTicks;
+ int travellingTicks = org.leavesmc.leaves.LeavesConfig.modify.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 + int travellingTicks; // TODO: int travellingTicks = org.leavesmc.leaves.LeavesConfig.modify.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
BeeGoToKnownFlowerGoal() { BeeGoToKnownFlowerGoal() {
this.setFlags(EnumSet.of(Goal.Flag.MOVE)); this.setFlags(EnumSet.of(Goal.Flag.MOVE));
@@ -53,10 +53,10 @@ index 58e1bc90cbc32669fa6c66d214119f0c459ff38c..ea41360af5e5d49c96ca24e9c36bd52c
} }
diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java
index b0e60d1d2a44bb35c87c35e82a172a38406b6c54..0cb2d5cd37171cd6e01748ed3d2ce99da1a15e3f 100644 index 1c7bed7b7856a69f91e7f2f8970a84f0459c7929..7040d2212f20bb2cd83198b6886074a6f430ee71 100644
--- a/net/minecraft/world/entity/item/ItemEntity.java --- a/net/minecraft/world/entity/item/ItemEntity.java
+++ b/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java
@@ -70,7 +70,13 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -67,7 +67,13 @@ public class ItemEntity extends Entity implements TraceableEntity {
// Paper start - Don't use level random in entity constructors (to make them thread-safe) // Paper start - Don't use level random in entity constructors (to make them thread-safe)
this(EntityType.ITEM, level); this(EntityType.ITEM, level);
this.setPos(posX, posY, posZ); this.setPos(posX, posY, posZ);
@@ -72,10 +72,10 @@ index b0e60d1d2a44bb35c87c35e82a172a38406b6c54..0cb2d5cd37171cd6e01748ed3d2ce99d
// Paper end - Don't use level random in entity constructors // Paper end - Don't use level random in entity constructors
} }
diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java
index 0f28b1befd42a85ffa5462e86d5cde142f9d1196..8cbcae0ef84b160d08b677972dc70cabfb5b6c5f 100644 index 1d7a1739d6a3a55aacb33d57a58712350b150f64..87dff2fb5246d730feca82396a68b41150e2d383 100644
--- a/net/minecraft/world/entity/item/PrimedTnt.java --- a/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java
@@ -69,7 +69,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -68,7 +68,7 @@ public class PrimedTnt extends Entity implements TraceableEntity {
public PrimedTnt(Level level, double x, double y, double z, @Nullable LivingEntity owner) { public PrimedTnt(Level level, double x, double y, double z, @Nullable LivingEntity owner) {
this(EntityType.TNT, level); this(EntityType.TNT, level);
this.setPos(x, y, z); this.setPos(x, y, z);

View File

@@ -20,7 +20,7 @@ index 4535858701b2bb232b9d2feb2af6551526232ddc..2a51acd97afc525170e8001b76f57ad1
if (var4 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) { if (var4 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) {
throw makeReportedException(var4, packet, processor); throw makeReportedException(var4, packet, processor);
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index b40e6b156614e9248b9423d0fbf208c2dc139489..f12b397901c0a2f779221e6694cecaced7069c9e 100644 index 46be518ca1ecc96acbd764e21c430210ceb72b1b..4a427b80ad9bc387bd774e33c844b4d67836737c 100644
--- a/net/minecraft/server/MinecraftServer.java --- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java
@@ -1725,6 +1725,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1725,6 +1725,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -34,11 +34,25 @@ index b40e6b156614e9248b9423d0fbf208c2dc139489..f12b397901c0a2f779221e6694cecace
} catch (Throwable var7) { } catch (Throwable var7) {
CrashReport crashReport = CrashReport.forThrowable(var7, "Exception ticking world"); CrashReport crashReport = CrashReport.forThrowable(var7, "Exception ticking world");
serverLevel.fillReportDetails(crashReport); serverLevel.fillReportDetails(crashReport);
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index ed05aaa76e1e34ca82fcc7cfb73f371a11600eee..31fb5ea1e33672ae71210776a0302f0ef87c6814 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -814,6 +814,9 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
if (org.leavesmc.leaves.LeavesConfig.performance.remove.tickGuardLambda) {
try {
this.tickNonPassenger(entity); // Leaves - changed
+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) { // Leaves start - dragon suppression fix
+ org.leavesmc.leaves.LeavesLogger.LOGGER.info(exception.getMessage());
+ // Leaves end - dragon suppression fix
} catch (Throwable throwable) {
if (throwable instanceof ThreadDeath) throw throwable; // Paper
// Paper start - Prevent block entity and entity crashes
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index f144a8bd5eb55ce093ad92ffd1304860dc52c1b1..1d24dba868cfedb2b66a33e56f6b907435d11d4f 100644 index a3fe89776a6a5067dbd53a82defa0ffc92fbac1d..478acab8ddf0b88c2bbde19ea4895c11380b62d1 100644
--- a/net/minecraft/server/level/ServerPlayer.java --- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java
@@ -891,6 +891,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -901,6 +901,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
((org.bukkit.craftbukkit.CraftWorldBorder) this.getBukkitEntity().getWorldBorder()).getHandle().tick(); ((org.bukkit.craftbukkit.CraftWorldBorder) this.getBukkitEntity().getWorldBorder()).getHandle().tick();
} }
// CraftBukkit end // CraftBukkit end
@@ -50,10 +64,10 @@ index f144a8bd5eb55ce093ad92ffd1304860dc52c1b1..1d24dba868cfedb2b66a33e56f6b9074
CrashReport crashReport = CrashReport.forThrowable(var4, "Ticking player"); CrashReport crashReport = CrashReport.forThrowable(var4, "Ticking player");
CrashReportCategory crashReportCategory = crashReport.addCategory("Player being ticked"); CrashReportCategory crashReportCategory = crashReport.addCategory("Player being ticked");
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 2d54997ead46e5185104af621dbe39f66246aa96..f983ea2bb9d089bd4dfd81a482fd4810c6b8ebd7 100644 index 2d11b99b36e30d3a6b45f3037d479cf125134de3..7a82ab3b1a4a4cc7708cbec5d424b3bfcede87a9 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -1318,9 +1318,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1351,9 +1351,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.walkingStepSound(pos, state); this.walkingStepSound(pos, state);
} }
@@ -64,7 +78,7 @@ index 2d54997ead46e5185104af621dbe39f66246aa96..f983ea2bb9d089bd4dfd81a482fd4810
+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) { + } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) {
+ org.leavesmc.leaves.LeavesLogger.LOGGER.info(exception.getMessage()); + org.leavesmc.leaves.LeavesLogger.LOGGER.info(exception.getMessage());
} }
+ // Leaves start - update suppression crash fix + // Leaves end - update suppression crash fix
return true; return true;
} else { } else {
@@ -104,10 +118,10 @@ index 9b9842462b210b0407279ee8a8e9ccecf3ead005..ce809dc4997aa1b9c8802208679462c8
// Paper end - optimise blockstate property access // Paper end - optimise blockstate property access
} }
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
index bf731da711ce629c0f9250a7bd4025d363623773..845319dd3e355f739cce70b7df3172dd146601b1 100644 index f24db919989bc2e5768e18b4fda68c38d6cde7e0..2cdca2917ce6a4912b57594697bf5543801eb868 100644
--- a/net/minecraft/world/level/chunk/LevelChunk.java --- a/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java
@@ -371,7 +371,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @@ -373,7 +373,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
if (blockState == state) { if (blockState == state) {
return null; return null;
} else { } else {
@@ -116,7 +130,7 @@ index bf731da711ce629c0f9250a7bd4025d363623773..845319dd3e355f739cce70b7df3172dd
this.heightmaps.get(Heightmap.Types.MOTION_BLOCKING).update(i, y, i2, state); this.heightmaps.get(Heightmap.Types.MOTION_BLOCKING).update(i, y, i2, state);
this.heightmaps.get(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES).update(i, y, i2, state); this.heightmaps.get(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES).update(i, y, i2, state);
this.heightmaps.get(Heightmap.Types.OCEAN_FLOOR).update(i, y, i2, state); this.heightmaps.get(Heightmap.Types.OCEAN_FLOOR).update(i, y, i2, state);
@@ -443,6 +443,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @@ -445,6 +445,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
this.markUnsaved(); this.markUnsaved();
return blockState; return blockState;
} }

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Bedrock break list
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index f12b397901c0a2f779221e6694cecaced7069c9e..ca4fdcabbe6c0c57bfa13ef6d83bcd560baae8fc 100644 index 4a427b80ad9bc387bd774e33c844b4d67836737c..952275263fca69dc55266348ead59dc3ca2b1520 100644
--- a/net/minecraft/server/MinecraftServer.java --- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java
@@ -1752,6 +1752,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1752,6 +1752,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -17,10 +17,10 @@ index f12b397901c0a2f779221e6694cecaced7069c9e..ca4fdcabbe6c0c57bfa13ef6d83bcd56
for (int i = 0; i < this.tickables.size(); i++) { for (int i = 0; i < this.tickables.size(); i++) {
this.tickables.get(i).run(); this.tickables.get(i).run();
diff --git a/net/minecraft/server/ServerScoreboard.java b/net/minecraft/server/ServerScoreboard.java diff --git a/net/minecraft/server/ServerScoreboard.java b/net/minecraft/server/ServerScoreboard.java
index 9e22e93b1fab6822e0e9c1122024a88942c8679e..75fe9d99d22b1e89ad8011632d636772e118b0a8 100644 index fc1c377ad05edcefacd407671801ae605f3fc31a..5c9f2a8476ff260ec7f0843f7c956c71e9b0d34d 100644
--- a/net/minecraft/server/ServerScoreboard.java --- a/net/minecraft/server/ServerScoreboard.java
+++ b/net/minecraft/server/ServerScoreboard.java +++ b/net/minecraft/server/ServerScoreboard.java
@@ -154,6 +154,7 @@ public class ServerScoreboard extends Scoreboard { @@ -158,6 +158,7 @@ public class ServerScoreboard extends Scoreboard {
@Override @Override
public void onObjectiveAdded(Objective objective) { public void onObjectiveAdded(Objective objective) {
super.onObjectiveAdded(objective); super.onObjectiveAdded(objective);
@@ -28,7 +28,7 @@ index 9e22e93b1fab6822e0e9c1122024a88942c8679e..75fe9d99d22b1e89ad8011632d636772
this.setDirty(); this.setDirty();
} }
@@ -170,6 +171,7 @@ public class ServerScoreboard extends Scoreboard { @@ -174,6 +175,7 @@ public class ServerScoreboard extends Scoreboard {
@Override @Override
public void onObjectiveRemoved(Objective objective) { public void onObjectiveRemoved(Objective objective) {
super.onObjectiveRemoved(objective); super.onObjectiveRemoved(objective);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Disable distance check for UseItemOnPacket
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 72e1265509a00376515e963499099c0765104ea2..878d80d0cb9fddeb7916a34d39c34119d65fbe00 100644 index 6622d11f970def6adc2a732187004413a9501c95..e0687743975db1832933661540650df86a911a80 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1991,7 +1991,7 @@ public class ServerGamePacketListenerImpl @@ -2038,7 +2038,7 @@ public class ServerGamePacketListenerImpl
if (this.player.canInteractWithBlock(blockPos, 1.0)) { if (this.player.canInteractWithBlock(blockPos, 1.0)) {
Vec3 vec3 = location.subtract(Vec3.atCenterOf(blockPos)); Vec3 vec3 = location.subtract(Vec3.atCenterOf(blockPos));
double d = 1.0000001; double d = 1.0000001;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Disable packet limit
diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java
index 364ddf9f25ef3cb97ba788c469fee9dd495b84a7..7af8b2cf9ccfeadac1cc60541da31ba6f4dc0edb 100644 index 3e9b8c5fb2157f767de8bddc3e767512c5f7651f..ce65b531ec2b8a5dd1955ee8d826520f9a9a5f3b 100644
--- a/net/minecraft/network/Connection.java --- a/net/minecraft/network/Connection.java
+++ b/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java
@@ -243,8 +243,8 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> { @@ -245,8 +245,8 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
if (this.stopReadingPackets) { if (this.stopReadingPackets) {
return; return;
} }
@@ -20,19 +20,19 @@ index 364ddf9f25ef3cb97ba788c469fee9dd495b84a7..7af8b2cf9ccfeadac1cc60541da31ba6
synchronized (PACKET_LIMIT_LOCK) { synchronized (PACKET_LIMIT_LOCK) {
if (this.allPacketCounts != null) { if (this.allPacketCounts != null) {
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 878d80d0cb9fddeb7916a34d39c34119d65fbe00..2ed38800fb3e3a1f4fb04c781321c642e402a854 100644 index e0687743975db1832933661540650df86a911a80..3c7b691a60f355ebaeb96f7ba07955f5be7fd09b 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -780,7 +780,7 @@ public class ServerGamePacketListenerImpl @@ -821,7 +821,7 @@ public class ServerGamePacketListenerImpl
public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) { public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) {
// PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - AsyncTabCompleteEvent; run this async // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); // Paper - AsyncTabCompleteEvent; run this async
// CraftBukkit start // CraftBukkit start
- if (!this.tabSpamThrottler.isIncrementAndUnderThreshold() && !this.server.getPlayerList().isOp(this.player.getGameProfile()) && !this.server.isSingleplayerOwner(this.player.getGameProfile())) { // Paper - configurable tab spam limits - if (!this.tabSpamThrottler.isIncrementAndUnderThreshold() && !this.server.getPlayerList().isOp(this.player.getGameProfile()) && !this.server.isSingleplayerOwner(this.player.getGameProfile())) { // Paper - configurable tab spam limits
+ if (!org.leavesmc.leaves.LeavesConfig.modify.disablePacketLimit && !this.tabSpamThrottler.isIncrementAndUnderThreshold() && !this.server.getPlayerList().isOp(this.player.getGameProfile()) && !this.server.isSingleplayerOwner(this.player.getGameProfile())) { // Paper - configurable tab spam limits // Leaves - can disable + if (!org.leavesmc.leaves.LeavesConfig.modify.disablePacketLimit && !this.tabSpamThrottler.isIncrementAndUnderThreshold() && !this.server.getPlayerList().isOp(this.player.getGameProfile()) && !this.server.isSingleplayerOwner(this.player.getGameProfile())) { // Paper - configurable tab spam limits // Leaves - can disable
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - Kick event cause // Paper - add proper async disconnect this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - Kick event cause // Paper - add proper async disconnect
return; return;
} }
@@ -1955,6 +1955,7 @@ public class ServerGamePacketListenerImpl @@ -2002,6 +2002,7 @@ public class ServerGamePacketListenerImpl
private static int getSpamThreshold() { return io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.incomingPacketThreshold; } // Paper - Configurable threshold private static int getSpamThreshold() { return io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.incomingPacketThreshold; } // Paper - Configurable threshold
private boolean checkLimit(long timestamp) { private boolean checkLimit(long timestamp) {
@@ -40,7 +40,7 @@ index 878d80d0cb9fddeb7916a34d39c34119d65fbe00..2ed38800fb3e3a1f4fb04c781321c642
if (this.lastLimitedPacket != -1 && timestamp - this.lastLimitedPacket < getSpamThreshold() && this.limitedPackets++ >= 8) { // Paper - Configurable threshold; raise packet limit to 8 if (this.lastLimitedPacket != -1 && timestamp - this.lastLimitedPacket < getSpamThreshold() && this.limitedPackets++ >= 8) { // Paper - Configurable threshold; raise packet limit to 8
return false; return false;
} }
@@ -2492,6 +2493,7 @@ public class ServerGamePacketListenerImpl @@ -2536,6 +2537,7 @@ public class ServerGamePacketListenerImpl
// Spigot start - spam exclusions // Spigot start - spam exclusions
private void detectRateSpam(String message) { private void detectRateSpam(String message) {
@@ -48,7 +48,7 @@ index 878d80d0cb9fddeb7916a34d39c34119d65fbe00..2ed38800fb3e3a1f4fb04c781321c642
// CraftBukkit start - replaced with thread safe throttle // CraftBukkit start - replaced with thread safe throttle
if (org.spigotmc.SpigotConfig.enableSpamExclusions) { if (org.spigotmc.SpigotConfig.enableSpamExclusions) {
for (String exclude : org.spigotmc.SpigotConfig.spamExclusions) { for (String exclude : org.spigotmc.SpigotConfig.spamExclusions) {
@@ -3280,7 +3282,7 @@ public class ServerGamePacketListenerImpl @@ -3244,7 +3246,7 @@ public class ServerGamePacketListenerImpl
@Override @Override
public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) { public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) {
// Paper start - auto recipe limit // Paper start - auto recipe limit

View File

@@ -6,18 +6,19 @@ Subject: [PATCH] Syncmatica Protocol
This patch is Powered by Syncmatica(https://github.com/End-Tech/syncmatica) This patch is Powered by Syncmatica(https://github.com/End-Tech/syncmatica)
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 2f4776fa065cb712afe9d8abc835c57777c963b7..f1372015cf5991ef80a07e7fcbd1fb9d65e9d74f 100644 index 3c7b691a60f355ebaeb96f7ba07955f5be7fd09b..6e8e4b009a4dd52047bc8d8f8e2e27558e0d8dff 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -319,8 +319,11 @@ public class ServerGamePacketListenerImpl @@ -323,9 +323,12 @@ public class ServerGamePacketListenerImpl
this.signedMessageDecoder = SignedMessageChain.Decoder.unsigned(player.getUUID(), server::enforceSecureProfile); this.signedMessageDecoder = SignedMessageChain.Decoder.unsigned(player.getUUID(), server::enforceSecureProfile);
this.chatMessageChain = new FutureChain(server.chatExecutor); // CraftBukkit - async chat this.chatMessageChain = new FutureChain(server.chatExecutor); // CraftBukkit - async chat
this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event
+ this.exchangeTarget = new org.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget(this); // Leaves - Syncmatica Protocol + this.exchangeTarget = new org.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget(this); // Leaves - Syncmatica Protocol
this.playerGameConnection = new io.papermc.paper.connection.PaperPlayerGameConnection(this); // Paper
} }
+ public final org.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget exchangeTarget; // Leaves - Syncmatica Protocol + public final org.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget exchangeTarget; // Leaves - Syncmatica Protocol
+ +
// Paper start - configuration phase API
@Override @Override
public void tick() { public io.papermc.paper.connection.PlayerCommonConnection getApiConnection() {
if (this.ackBlockChangesUpTo > -1) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Despawn enderman with block
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
index 41c8fc535e7f0bd61e23f48ac250f362807fa062..775466831746b914947cd018d8def4b8bf1d6f15 100644 index 6760bfd91f59139922768db5e5d362c5e7e4e473..33d4025ac997f46b7bf129c4dd3ba457c6fc9da2 100644
--- a/net/minecraft/world/entity/monster/EnderMan.java --- a/net/minecraft/world/entity/monster/EnderMan.java
+++ b/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java
@@ -452,7 +452,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -448,7 +448,7 @@ public class EnderMan extends Monster implements NeutralMob {
@Override @Override
public boolean requiresCustomPersistence() { public boolean requiresCustomPersistence() {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Creative fly no clip
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index 2fe76bc1c26423ed5e39453ac1b27a2cc66b1f2e..f6e963d75fdcd951e5f5624f7d69cbbf6b8b480f 100644 index 8ec6f52f58bcc985fdc758a692798a35d6c86378..0d046133ea2b6d47e089cb792cf3bc3abace70ba 100644
--- a/net/minecraft/world/entity/player/Player.java --- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java
@@ -277,8 +277,8 @@ public abstract class Player extends LivingEntity { @@ -287,8 +287,8 @@ public abstract class Player extends LivingEntity {
@Override @Override
public void tick() { public void tick() {
@@ -19,7 +19,7 @@ index 2fe76bc1c26423ed5e39453ac1b27a2cc66b1f2e..f6e963d75fdcd951e5f5624f7d69cbbf
this.setOnGround(false); this.setOnGround(false);
} }
@@ -471,7 +471,7 @@ public abstract class Player extends LivingEntity { @@ -481,7 +481,7 @@ public abstract class Player extends LivingEntity {
if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.SWIMMING)) { if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.SWIMMING)) {
Pose desiredPose = this.getDesiredPose(); Pose desiredPose = this.getDesiredPose();
Pose pose; Pose pose;
@@ -28,7 +28,7 @@ index 2fe76bc1c26423ed5e39453ac1b27a2cc66b1f2e..f6e963d75fdcd951e5f5624f7d69cbbf
pose = desiredPose; pose = desiredPose;
} else if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.CROUCHING)) { } else if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.CROUCHING)) {
pose = Pose.CROUCHING; pose = Pose.CROUCHING;
@@ -614,7 +614,7 @@ public abstract class Player extends LivingEntity { @@ -624,7 +624,7 @@ public abstract class Player extends LivingEntity {
} }
this.bob = this.bob + (f - this.bob) * 0.4F; this.bob = this.bob + (f - this.bob) * 0.4F;
@@ -37,7 +37,7 @@ index 2fe76bc1c26423ed5e39453ac1b27a2cc66b1f2e..f6e963d75fdcd951e5f5624f7d69cbbf
AABB aabb; AABB aabb;
if (this.isPassenger() && !this.getVehicle().isRemoved()) { if (this.isPassenger() && !this.getVehicle().isRemoved()) {
aabb = this.getBoundingBox().minmax(this.getVehicle().getBoundingBox()).inflate(1.0, 0.0, 1.0); aabb = this.getBoundingBox().minmax(this.getVehicle().getBoundingBox()).inflate(1.0, 0.0, 1.0);
@@ -1931,6 +1931,26 @@ public abstract class Player extends LivingEntity { @@ -1949,6 +1949,26 @@ public abstract class Player extends LivingEntity {
return this.gameMode() == GameType.SPECTATOR; return this.gameMode() == GameType.SPECTATOR;
} }
@@ -65,10 +65,10 @@ index 2fe76bc1c26423ed5e39453ac1b27a2cc66b1f2e..f6e963d75fdcd951e5f5624f7d69cbbf
public boolean canBeHitByProjectile() { public boolean canBeHitByProjectile() {
return !this.isSpectator() && super.canBeHitByProjectile(); return !this.isSpectator() && super.canBeHitByProjectile();
diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java
index 0c67e5481a43bf7c02bb54a8ea1abca77d53a292..5cbd5d04de525c33715bc45826bd2ed446355505 100644 index eff2c0418e1dc8dff1b9045d8f6ff619100964d1..8b6bbdf44a840e19722d42aec91fa1f8805f917b 100644
--- a/net/minecraft/world/item/BlockItem.java --- a/net/minecraft/world/item/BlockItem.java
+++ b/net/minecraft/world/item/BlockItem.java +++ b/net/minecraft/world/item/BlockItem.java
@@ -207,8 +207,9 @@ public class BlockItem extends Item { @@ -206,8 +206,9 @@ public class BlockItem extends Item {
protected boolean canPlace(BlockPlaceContext context, BlockState state) { protected boolean canPlace(BlockPlaceContext context, BlockState state) {
Player player = context.getPlayer(); Player player = context.getPlayer();
// CraftBukkit start // CraftBukkit start
@@ -93,7 +93,7 @@ index 1f0e7c391d02b18e2c89700025713ec3d759f2ea..300ee12ca9584e53e9d72e3ebfd039be
org.bukkit.event.block.BlockCanBuildEvent event = new org.bukkit.event.block.BlockCanBuildEvent(org.bukkit.craftbukkit.block.CraftBlock.at(context.getLevel(), clickedPos), player, org.bukkit.craftbukkit.block.data.CraftBlockData.fromData(blockState), defaultReturn, org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(context.getHand())); // Paper - Expose hand in BlockCanBuildEvent org.bukkit.event.block.BlockCanBuildEvent event = new org.bukkit.event.block.BlockCanBuildEvent(org.bukkit.craftbukkit.block.CraftBlock.at(context.getLevel(), clickedPos), player, org.bukkit.craftbukkit.block.data.CraftBlockData.fromData(blockState), defaultReturn, org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(context.getHand())); // Paper - Expose hand in BlockCanBuildEvent
diff --git a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java diff --git a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
index 5e58113b3401268e0432235dc10b2734dbbd8b71..1f7c2d06952febd7a5d4e216b6e22794239b9325 100644 index a820ab9a2b6dc6b95d4de61aaaad4e79c521efe4..c1d1e28daa3b4d2a0bb359af08670f5d071e51ed 100644
--- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java --- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
@@ -152,7 +152,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl @@ -152,7 +152,7 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl
@@ -106,10 +106,10 @@ index 5e58113b3401268e0432235dc10b2734dbbd8b71..1f7c2d06952febd7a5d4e216b6e22794
MoverType.SHULKER_BOX, MoverType.SHULKER_BOX,
new Vec3( new Vec3(
diff --git a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java diff --git a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
index 8449545bd5278f5558567dd6b7c1522f63045f22..3d2770828d4fe1123b158e70bfe459d7cf16332a 100644 index 0976aef81b950a062152094501372d00c20bb2b7..2841dd4896ee15d8d7ea1105d0f78b7fe41937fb 100644
--- a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java --- a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
+++ b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java +++ b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java
@@ -152,7 +152,7 @@ public class PistonMovingBlockEntity extends BlockEntity { @@ -151,7 +151,7 @@ public class PistonMovingBlockEntity extends BlockEntity {
d3 = movementDirection.getStepZ(); d3 = movementDirection.getStepZ();
} }
@@ -118,7 +118,7 @@ index 8449545bd5278f5558567dd6b7c1522f63045f22..3d2770828d4fe1123b158e70bfe459d7
// Paper - EAR items stuck in slime pushed by a piston // Paper - EAR items stuck in slime pushed by a piston
entity.activatedTick = Math.max(entity.activatedTick, net.minecraft.server.MinecraftServer.currentTick + 10); entity.activatedTick = Math.max(entity.activatedTick, net.minecraft.server.MinecraftServer.currentTick + 10);
entity.activatedImmunityTick = Math.max(entity.activatedImmunityTick, net.minecraft.server.MinecraftServer.currentTick + 10); entity.activatedImmunityTick = Math.max(entity.activatedImmunityTick, net.minecraft.server.MinecraftServer.currentTick + 10);
@@ -188,6 +188,7 @@ public class PistonMovingBlockEntity extends BlockEntity { @@ -187,6 +187,7 @@ public class PistonMovingBlockEntity extends BlockEntity {
} }
private static void moveEntityByPiston(Direction noClipDirection, Entity entity, double progress, Direction direction) { private static void moveEntityByPiston(Direction noClipDirection, Entity entity, double progress, Direction direction) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Elytra aeronautics no chunk load
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
index 4785f9d6c53e18419a3df4a1be9c8a4f9d8cadfb..711bd09283c57e5cbe3b04d6950ecf1308fcf09c 100644 index 019886669966c69936ae6591598c97a8afbfd3db..b6fb1f2ba8622d9d319210ea7cf0a984349444e6 100644
--- a/net/minecraft/server/level/ChunkMap.java --- a/net/minecraft/server/level/ChunkMap.java
+++ b/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java
@@ -854,7 +854,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -854,7 +854,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -27,10 +27,10 @@ index 4785f9d6c53e18419a3df4a1be9c8a4f9d8cadfb..711bd09283c57e5cbe3b04d6950ecf13
SectionPos lastSectionPos = player.getLastSectionPos(); SectionPos lastSectionPos = player.getLastSectionPos();
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 325e3948e5bdfddfe217c9972208582e83f2c4cb..68490d8dc26c2d5f4999361fd7ad72a83581f48f 100644 index 31fb5ea1e33672ae71210776a0302f0ef87c6814..e6de7ef46d197c14495d4b55d094af34816fc063 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -830,6 +830,9 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -837,6 +837,9 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
} }
} }
); );
@@ -41,10 +41,10 @@ index 325e3948e5bdfddfe217c9972208582e83f2c4cb..68490d8dc26c2d5f4999361fd7ad72a8
this.tickBlockEntities(); this.tickBlockEntities();
} }
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 448c77f5002276eab680a96b518e8a7234806f80..655ca2ead22addbb458b89e12cb2be1d269e4f5e 100644 index 6e8e4b009a4dd52047bc8d8f8e2e27558e0d8dff..52ef9208da25022bbc8f375696ea4f3d4e4962a3 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -541,7 +541,7 @@ public class ServerGamePacketListenerImpl @@ -582,7 +582,7 @@ public class ServerGamePacketListenerImpl
speed *= 2f; // TODO: Get the speed of the vehicle instead of the player speed *= 2f; // TODO: Get the speed of the vehicle instead of the player
// Paper start - Prevent moving into unloaded chunks // Paper start - Prevent moving into unloaded chunks
@@ -53,19 +53,19 @@ index 448c77f5002276eab680a96b518e8a7234806f80..655ca2ead22addbb458b89e12cb2be1d
!serverLevel.areChunksLoadedForMove(this.player.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(this.player.position()))) || !serverLevel.areChunksLoadedForMove(this.player.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(this.player.position()))) ||
!serverLevel.areChunksLoadedForMove(rootVehicle.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(rootVehicle.position()))) !serverLevel.areChunksLoadedForMove(rootVehicle.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(rootVehicle.position())))
)) { )) {
@@ -1549,6 +1549,7 @@ public class ServerGamePacketListenerImpl @@ -1597,6 +1597,7 @@ public class ServerGamePacketListenerImpl
teleportBack = this.hasNewCollision(serverLevel, this.player, boundingBox, newBox); allowMovement = !this.hasNewCollision(serverLevel, this.player, boundingBox, newBox);
} // else: no collision at all detected, why do we care? } // else: no collision at all detected, why do we care?
} }
+ teleportBack = teleportBack && !player.elytraAeronauticsNoChunk; // Leaves - Elytra aeronautics + allowMovement = allowMovement || player.elytraAeronauticsNoChunk; // Leaves - Elytra aeronautics
// Paper end - optimise out extra getCubes // Paper end - optimise out extra getCubes
if (teleportBack) { if (!allowMovement) {
io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.CLIPPED_INTO_BLOCK, io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.CLIPPED_INTO_BLOCK,
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index f983ea2bb9d089bd4dfd81a482fd4810c6b8ebd7..0c1a50d293638c319b34f757c0ba41d31a1538ac 100644 index 7a82ab3b1a4a4cc7708cbec5d424b3bfcede87a9..6b3fcd3e02755ab187d075d868e9376718c218e5 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -1092,7 +1092,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1118,7 +1118,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return; return;
} }
} }
@@ -80,7 +80,7 @@ index f983ea2bb9d089bd4dfd81a482fd4810c6b8ebd7..0c1a50d293638c319b34f757c0ba41d3
ProfilerFiller profilerFiller = Profiler.get(); ProfilerFiller profilerFiller = Profiler.get();
profilerFiller.push("move"); profilerFiller.push("move");
if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7) { if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7) {
@@ -2057,6 +2063,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -2131,6 +2137,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.yo = y; this.yo = y;
this.zo = d1; this.zo = d1;
this.setPos(d, y, d1); this.setPos(d, y, d1);
@@ -89,10 +89,10 @@ index f983ea2bb9d089bd4dfd81a482fd4810c6b8ebd7..0c1a50d293638c319b34f757c0ba41d3
} }
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 6893ca36cd4ae9a62fecedb1167cc6cf797a7f8f..a95fec1506af042bd3d4424e93aa3f4de9627487 100644 index bc19f0bf079d6a7fa2fc8aaed6477da5e57d32da..1f0042d24a11c709f291a03e1699fcaf0d6571c6 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -3276,6 +3276,11 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3328,6 +3328,11 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
this.fallFlyTicks++; this.fallFlyTicks++;
} else { } else {
this.fallFlyTicks = 0; this.fallFlyTicks = 0;
@@ -105,10 +105,10 @@ index 6893ca36cd4ae9a62fecedb1167cc6cf797a7f8f..a95fec1506af042bd3d4424e93aa3f4d
if (this.isSleeping()) { if (this.isSleeping()) {
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index f6e963d75fdcd951e5f5624f7d69cbbf6b8b480f..ee8c0d0edbb296106a128c48f4186ba3a5bf9df8 100644 index 0d046133ea2b6d47e089cb792cf3bc3abace70ba..0abdf0e520d1a0672917d60b79f467df4399e256 100644
--- a/net/minecraft/world/entity/player/Player.java --- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java
@@ -210,6 +210,7 @@ public abstract class Player extends LivingEntity { @@ -219,6 +219,7 @@ public abstract class Player extends LivingEntity {
private int currentImpulseContextResetGraceTime = 0; private int currentImpulseContextResetGraceTime = 0;
public boolean affectsSpawning = true; // Paper - Affects Spawning API 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 public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage
@@ -117,11 +117,11 @@ index f6e963d75fdcd951e5f5624f7d69cbbf6b8b480f..ee8c0d0edbb296106a128c48f4186ba3
// CraftBukkit start // CraftBukkit start
public boolean fauxSleeping; public boolean fauxSleeping;
diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
index e0e193078e550225e163149638bf9e053c0531f8..484f1c5eba3776eff86438ba02607e60c7083b3b 100644 index d8dc196ef92e97f831cf97cd1536a46f81f9d5d1..92da11f86a95ff635277cbfcea73c48731080953 100644
--- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java --- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
+++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java +++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
@@ -328,7 +328,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier { @@ -324,7 +324,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
this.spawningEntity = compound.read("SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); // Paper this.spawningEntity = input.read("SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); // Paper
} }
- private List<FireworkExplosion> getExplosions() { - private List<FireworkExplosion> getExplosions() {
@@ -130,10 +130,10 @@ index e0e193078e550225e163149638bf9e053c0531f8..484f1c5eba3776eff86438ba02607e60
Fireworks fireworks = itemStack.get(DataComponents.FIREWORKS); Fireworks fireworks = itemStack.get(DataComponents.FIREWORKS);
return fireworks != null ? fireworks.explosions() : List.of(); return fireworks != null ? fireworks.explosions() : List.of();
diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java
index 18d63d2da49451a2d5e1da7bf0c00e05e2f192bc..6c78a59b6518799c9b199c96cc4592fb48229e9a 100644 index f86b0579e707ecfa5c2074ea22bbe383b5e11841..0e4335bb2469a4698b303b598ec773b5c7cc73ce 100644
--- a/net/minecraft/world/item/FireworkRocketItem.java --- a/net/minecraft/world/item/FireworkRocketItem.java
+++ b/net/minecraft/world/item/FireworkRocketItem.java +++ b/net/minecraft/world/item/FireworkRocketItem.java
@@ -57,6 +57,24 @@ public class FireworkRocketItem extends Item implements ProjectileItem { @@ -64,6 +64,24 @@ public class FireworkRocketItem extends Item implements ProjectileItem {
if (player.isFallFlying()) { if (player.isFallFlying()) {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
if (level instanceof ServerLevel serverLevel) { if (level instanceof ServerLevel serverLevel) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Lava riptide
diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java
index df629e3f2defce5e65aaf874d7c5ddff71f39c28..a069729494d638e5f0828c12ad1186e748d0677e 100644 index fac4c58ea5d467a8686e42676e2323fbddeb8c7b..0afe875e003704a53856fac72d2feb8b664c1207 100644
--- a/net/minecraft/world/item/TridentItem.java --- a/net/minecraft/world/item/TridentItem.java
+++ b/net/minecraft/world/item/TridentItem.java +++ b/net/minecraft/world/item/TridentItem.java
@@ -70,7 +70,7 @@ public class TridentItem extends Item implements ProjectileItem { @@ -70,7 +70,7 @@ public class TridentItem extends Item implements ProjectileItem {
@@ -17,7 +17,7 @@ index df629e3f2defce5e65aaf874d7c5ddff71f39c28..a069729494d638e5f0828c12ad1186e7
return false; return false;
} else if (stack.nextDamageWillBreak()) { } else if (stack.nextDamageWillBreak()) {
return false; return false;
@@ -150,7 +150,7 @@ public class TridentItem extends Item implements ProjectileItem { @@ -149,7 +149,7 @@ public class TridentItem extends Item implements ProjectileItem {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
if (itemInHand.nextDamageWillBreak()) { if (itemInHand.nextDamageWillBreak()) {
return InteractionResult.FAIL; return InteractionResult.FAIL;

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