64 Commits

Author SHA1 Message Date
a148b24dd0 Merge branch 'slime/1.20.4' of https://github.com/AtlasMediaGroup/Scissors into slime/1.20.4 2024-01-10 18:43:43 -06:00
11d285c279 Update AdvancedSlimePaper 2024-01-10 18:43:21 -06:00
54e9d9ec69 yeah that would explain it 2024-01-10 14:07:00 -06:00
10addc9031 bruh 2024-01-07 15:32:09 -06:00
d4884cefc7 Update Paper 2024-01-07 15:15:59 -06:00
94834835af Update Paper 2024-01-02 17:08:05 -06:00
6423b04da8 add regular 1.20.4 patches 2023-12-29 13:48:29 -06:00
488e1c3dc2 Update 0001-AdvancedSlimePaper-API-Changes.patch 2023-12-29 13:01:26 -06:00
bdef90c145 Update 0001-AdvancedSlimePaper-Server-Changes.patch 2023-12-29 12:55:54 -06:00
c05142d907 i didnt realize i was still on 1.20.2 i'll fix it soon 2023-12-29 12:38:44 -06:00
a259c0202c add more of asp changes 2023-12-22 01:02:42 -06:00
414fbf6840 begin 1.20.4 work 2023-12-21 23:42:31 -06:00
30341c1148 Fix build issues 2023-12-10 13:18:16 -06:00
3271c24791 Update Paper 2023-12-03 22:21:20 -06:00
6dbfcd0704 Update Paper 2023-11-29 19:38:59 -06:00
0179964845 Update Paper 2023-11-25 23:26:48 -06:00
b817ef863d Update Paper 2023-11-22 20:26:22 -06:00
f678e6140b Update Paper 2023-11-20 16:15:27 -06:00
f12f438481 Update Paper 2023-11-12 19:30:17 -06:00
4c5d35e901 Java 21 support 2023-11-05 14:12:13 -06:00
437e40a2f8 Update Paper 2023-11-04 21:46:48 -05:00
9e874fb21f Update 0001-AdvancedSlimePaper-Server-Changes.patch 2023-10-29 23:40:57 -05:00
0ef1c4d8a8 Update Paper 2023-10-29 23:23:41 -05:00
291a7fa852 Update Paper 2023-10-23 20:25:24 -05:00
1283dcdd4c Update Paper 2023-10-22 21:24:14 -05:00
6b3e59b039 oops 2023-10-20 22:47:01 -05:00
acfd3e1814 Revise compiling instructions 2023-10-20 22:45:56 -05:00
e393f9b057 Add compiling instructions for Windows and update Metrics class 2023-10-20 22:36:42 -05:00
7ceedf9453 Update 0001-AdvancedSlimePaper-Server-Changes.patch 2023-10-19 19:16:53 -05:00
574452466d update urls 2023-10-19 02:54:47 -05:00
a394fb44d8 Update 0002-Build-changes.patch 2023-10-19 02:26:39 -05:00
763df5c337 Update AdvancedSlimePaper 2023-10-19 02:15:30 -05:00
f70596845b oops 2023-10-19 02:05:14 -05:00
58a5036119 changes 2023-10-19 02:03:56 -05:00
e0f91f7178 Fix ASWM server patch 2023-10-19 00:03:42 -05:00
c9e9ae9573 Begin work on slime 1.20.2 2023-10-18 17:49:54 -05:00
3ce7bbf9ca Merge branch '1.20.1' of https://github.com/AtlasMediaGroup/Scissors into slime/1.20.1 2023-09-23 14:26:13 -05:00
3acfa3fa80 Rebuild patches 2023-09-23 12:46:35 -05:00
f8898d0e1c Update AdvancedSlimePaper 2023-09-23 12:40:43 -05:00
d5b68d8f5c Merge branch '1.20.1' of https://github.com/AtlasMediaGroup/Scissors into slime/1.20.1 2023-09-23 12:38:22 -05:00
fb3550ad44 Update Paper 2023-09-12 18:28:31 -05:00
612fc104c3 Update Paper 2023-09-07 11:38:25 -05:00
a40d598ab1 Update ASP 2023-08-30 19:19:11 -05:00
182525b22b Rebuild patches 2023-08-30 18:59:11 -05:00
a5af796395 Merge branch '1.20.1' of https://github.com/AtlasMediaGroup/Scissors into slime/1.20.1 2023-08-30 18:55:35 -05:00
30b69bc059 Merge branch 'slime/1.20.1' of https://github.com/AtlasMediaGroup/Scissors into slime/1.20.1 2023-08-26 18:39:16 -05:00
9fc9c36cb3 Update Paper 2023-08-26 18:34:07 -05:00
b2bc2c2152 Update Jenkinsfile 2023-08-26 18:34:07 -05:00
c39661c11a Update Jenkinsfile 2023-08-26 18:34:07 -05:00
dc0a3610ec try this 2023-08-26 18:34:07 -05:00
185c5ee1a6 Update Jenkinsfile 2023-08-26 18:34:07 -05:00
76822727f6 Jenkins fix (#139)
* Update Jenkinsfile

* Update Jenkinsfile
2023-08-26 18:34:07 -05:00
Luna
511733b8d5 Fix Github actions (#138) 2023-08-26 18:34:07 -05:00
Luna
40a91ca05e Slime (#136)
* Slime

* Add proper credits. Thanks ASP!

* Cleanup
2023-08-26 18:34:07 -05:00
ff6a9c5ff6 Update Paper 2023-08-26 18:29:50 -05:00
Taahh
8226a3b03a Update slime branch (#142)
* Update Paper

* Add length limit to note block sound (#141)

Reported by @NekosAreKawaii

---------

Co-authored-by: Telesphoreo <me@telesphoreo.me>
Co-authored-by: allinkdev <44676012+allinkdev@users.noreply.github.com>
2023-08-26 14:38:40 +01:00
d6432c162f Update Paper 2023-08-24 16:35:32 -05:00
79705ff262 Update Jenkinsfile 2023-08-23 16:44:58 -05:00
d013cfde88 Update Jenkinsfile 2023-08-23 16:43:37 -05:00
1bbbb18b2e try this 2023-08-23 16:37:40 -05:00
8bc2c95edb Update Jenkinsfile 2023-08-23 16:35:23 -05:00
cbd52d38d9 Jenkins fix (#139)
* Update Jenkinsfile

* Update Jenkinsfile
2023-08-22 23:07:02 -05:00
Luna
8f2be500b5 Fix Github actions (#138) 2023-08-22 20:11:53 -05:00
Luna
3f889f5040 Slime (#136)
* Slime

* Add proper credits. Thanks ASP!

* Cleanup
2023-08-22 19:15:48 -05:00
83 changed files with 4699 additions and 1051 deletions

View File

@@ -13,6 +13,8 @@ jobs:
steps: steps:
- name: Checkout Git Repository - name: Checkout Git Repository
uses: actions/checkout@v3 uses: actions/checkout@v3
with:
submodules: 'true'
- name: Validate Gradle wrapper - name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1 uses: gradle/wrapper-validation-action@v1
- name: Setup Gradle - name: Setup Gradle

3
.gitignore vendored
View File

@@ -51,4 +51,7 @@ Scissors-API
!gradle/wrapper/gradle-wrapper.jar !gradle/wrapper/gradle-wrapper.jar
aswm-api/src
aswm-core/src
paper-api-generator paper-api-generator

4
.gitmodules vendored Normal file
View File

@@ -0,0 +1,4 @@
[submodule "submodules/AdvancedSlimePaper"]
path = submodules/AdvancedSlimePaper
url = https://github.com/InfernalSuite/AdvancedSlimePaper.git
branch = mc/1.20.4

11
Jenkinsfile vendored
View File

@@ -1,9 +1,15 @@
pipeline { pipeline {
options { skipDefaultCheckout() }
agent any agent any
environment { environment {
GITHUB_BRANCH = "${BRANCH_NAME}" GITHUB_BRANCH = "${BRANCH_NAME}"
} }
stages { stages {
stage('checkout') {
steps {
checkout scmGit(branches: [[name: '*/slime/1.20.4']], extensions: [submodule(parentCredentials: true, recursiveSubmodules: true, reference: 'https://github.com/InfernalSuite/AdvancedSlimePaper')], userRemoteConfigs: [[url: 'https://github.com/AtlasMediaGroup/Scissors']])
}
}
stage('applyPatches') { stage('applyPatches') {
steps { steps {
withGradle { withGradle {
@@ -14,12 +20,13 @@ pipeline {
stage('paperclipJar') { stage('paperclipJar') {
steps { steps {
withGradle { withGradle {
sh './gradlew createMojmapBundlerJar --no-daemon --refresh-dependencies' sh './gradlew createReobfPaperclipJar --no-daemon --refresh-dependencies'
} }
sh """ sh """
#!/bin/sh #!/bin/sh
BRANCH=\$(echo "\${BRANCH_NAME}" | sed 's/\\//_/g') BRANCH=\$(echo "\${BRANCH_NAME}" | sed 's/\\//_/g')
mv \${WORKSPACE}/build/libs/Scissors-bundler-*.jar \${WORKSPACE}/build/libs/scissors-\${BRANCH}-\${BUILD_NUMBER}.jar mv \${WORKSPACE}/build/libs/Scissors-paperclip-*.jar \${WORKSPACE}/build/libs/scissors-\${BRANCH}-\${BUILD_NUMBER}.jar
rm \${WORKSPACE}/build/libs/Scissors-bundler-*.jar
""" """
} }
} }

View File

@@ -1,11 +1,21 @@
# Scissors [![Build Status](https://ci.scissors.gg/job/Scissors/job/1.20.6/badge/icon)](https://ci.scissors.gg/job/Scissors/job/1.20.6/) # Scissors [![Build Status](https://ci.plex.us.org/job/Scissors/job/slime%252F1.20.2/badge/icon)](https://ci.plex.us.org/job/Scissors/job/slime%252F1.20.2/)
Scissors is a fork of Paper that aims to fix exploits possible in Creative Mode. Many of these exploits are ones that Scissors is a fork of Paper that aims to fix exploits possible in Creative Mode. Many of these exploits are ones that
Paper's own team has either refused to fix or would have. Paper's own team has either refused to fix or would have.
All SWM patches/SWM API belongs to [AdvancedSlimePaper and InfernalSuite](https://github.com/InfernalSuite/AdvancedSlimePaper)
Note: This will not compile on Windows by default. To make it compile, you need to delete the `aswm-core/src`
and `aswm-api/src` files. Then open up Command Prompt as an administrator and run the following for the api project:
```mklink /D C:\full\path\to\project\aswm-api\src C:\full\path\to\project\submodules\AdvancedSlimePaper\api\src```. Now,
run the same thing again for the core
project: ```mklink /D C:\full\path\to\project\aswm-core\src C:\full\path\to\project\submodules\AdvancedSlimePaper\core\src```
Make sure you replace the placeholder `C:\full\path\to\project` with the actual full path to the root project on your
local machine. You do not need to do this if you are compiling on macOS or Linux.
## Links ## Links
### [Scissors Download](https://ci.plex.us.org/job/Scissors) ### [Scissors Download](https://ci.plex.us.org/job/Scissors)
### [Scissors Javadoc](https://javadoc.scissors.gg/1.20.6) ### [Scissors Javadoc](https://javadoc.scissors.gg/1.20.2)
### [Scissors Announcements](https://totalfreedom.tf/forums/scissors-announcements.55) ### [Scissors Announcements](https://totalfreedom.tf/forums/scissors-announcements.55)
### [Scissors General Discussion](https://totalfreedom.tf/forums/scissors-discussion.56/) ### [Scissors General Discussion](https://totalfreedom.tf/forums/scissors-discussion.56/)

17
aswm-api/build.gradle.kts Normal file
View File

@@ -0,0 +1,17 @@
plugins {
`java-library`
`maven-publish`
signing
}
dependencies {
api("com.flowpowered:flow-nbt:2.0.2")
api("org.jetbrains:annotations:23.0.0")
compileOnly("io.papermc.paper:paper-api:1.20.2-R0.1-SNAPSHOT")
}
java {
withSourcesJar()
withJavadocJar()
}

1
aswm-api/src Symbolic link
View File

@@ -0,0 +1 @@
../submodules/AdvancedSlimePaper/api/src

View File

@@ -0,0 +1,7 @@
plugins {
}
dependencies {
compileOnly(project(":aswm-api"))
implementation("com.github.luben:zstd-jni:1.5.2-2")
}

1
aswm-core/src Symbolic link
View File

@@ -0,0 +1 @@
../submodules/AdvancedSlimePaper/core/src

View File

@@ -8,3 +8,9 @@
# To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: # To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId:
# minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter # minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter
# minecraft net/minecraft/world/level/entity/LevelEntityGetter.java # minecraft net/minecraft/world/level/entity/LevelEntityGetter.java
## Used in Scissors 1.19
#minecraft net/minecraft/world/ContainerHelper
#minecraft net/minecraft/network/chat/contents/NbtContents
#minecraft net/minecraft/network/chat/ComponentUtils
#minecraft net/minecraft/network/chat/contents/EntityDataSource

View File

@@ -2,7 +2,7 @@ plugins {
java java
`maven-publish` `maven-publish`
id("com.github.johnrengelman.shadow") version "8.1.1" apply false id("com.github.johnrengelman.shadow") version "8.1.1" apply false
id("io.papermc.paperweight.patcher") version "1.7.1" id("io.papermc.paperweight.patcher") version "1.5.11"
} }
val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/" val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/"
@@ -15,8 +15,8 @@ repositories {
} }
dependencies { dependencies {
remapper("net.fabricmc:tiny-remapper:0.10.2:fat") remapper("net.fabricmc:tiny-remapper:0.8.11:fat")
decompiler("org.vineflower:vineflower:1.10.1") decompiler("net.minecraftforge:forgeflower:2.0.629.1")
paperclip("io.papermc:paperclip:3.0.4-SNAPSHOT") paperclip("io.papermc:paperclip:3.0.4-SNAPSHOT")
} }
@@ -26,7 +26,7 @@ allprojects {
java { java {
toolchain { toolchain {
languageVersion.set(JavaLanguageVersion.of(21)) languageVersion.set(JavaLanguageVersion.of(17))
} }
} }
} }
@@ -34,7 +34,7 @@ allprojects {
subprojects { subprojects {
tasks.withType<JavaCompile> { tasks.withType<JavaCompile> {
options.encoding = Charsets.UTF_8.name() options.encoding = Charsets.UTF_8.name()
options.release.set(21) options.release.set(17)
} }
tasks.withType<Javadoc> { tasks.withType<Javadoc> {
options.encoding = Charsets.UTF_8.name() options.encoding = Charsets.UTF_8.name()
@@ -49,6 +49,7 @@ subprojects {
repositories { repositories {
mavenCentral() mavenCentral()
maven(paperMavenPublicUrl) maven(paperMavenPublicUrl)
maven("https://repo.rapture.pw/repository/maven-releases/")
} }
} }
@@ -80,6 +81,7 @@ paperweight {
tasks.generateDevelopmentBundle { tasks.generateDevelopmentBundle {
apiCoordinates.set("me.totalfreedom.scissors:scissors-api") apiCoordinates.set("me.totalfreedom.scissors:scissors-api")
mojangApiCoordinates.set("io.papermc.paper:paper-mojangapi")
libraryRepositories.set( libraryRepositories.set(
listOf( listOf(
"https://repo.maven.apache.org/maven2/", "https://repo.maven.apache.org/maven2/",

View File

@@ -1,8 +1,8 @@
group=me.totalfreedom.scissors group=me.totalfreedom.scissors
version=1.20.6-R0.1-SNAPSHOT version=1.20.4-R0.1-SNAPSHOT
mcVersion=1.20.6 mcVersion=1.20.4
paperRef=e41d44fa873466064879ebed476d280932379a9c paperRef=07b956e3a30d9cd192111829b59bdf4372f128b1
org.gradle.caching=true org.gradle.caching=true
org.gradle.parallel=true org.gradle.parallel=true

Binary file not shown.

View File

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

14
gradlew vendored
View File

@@ -145,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #( case $MAX_FD in #(
max*) max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045 # shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
@@ -153,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #( '' | soft) :;; #(
*) *)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045 # shellcheck disable=SC3045
ulimit -n "$MAX_FD" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
@@ -202,11 +202,11 @@ fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-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 $GRADLE_OPTS can contain fragments of
# and any embedded shellness will be escaped. # shell script including quotes and variable substitutions, so put them in
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # double quotes to make sure that they get re-expanded; and
# treated as '${Hostname}' itself on the command line. # * put everything else in single quotes, so that it's not re-expanded.
set -- \ set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \ "-Dorg.gradle.appname=$APP_BASE_NAME" \

View File

@@ -0,0 +1,48 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Date: Mon, 26 Dec 2022 12:08:15 -0500
Subject: [PATCH] AdvancedSlimePaper API Changes
AdvancedSlimePaper
Copyright (C) 2023 InfernalSuite
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/build.gradle.kts b/build.gradle.kts
index 3e3ea0e4e4ceb3283ad2b99957e3795d66a9a716..e2db0e69bd254fca5177781d67f4664b69a18625 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -28,6 +28,7 @@ configurations.api {
dependencies {
// api dependencies are listed transitively to API consumers
+ api(project(":aswm-api")) // ASWM
api("com.google.guava:guava:32.1.2-jre")
api("com.google.code.gson:gson:2.10.1")
// Paper start - adventure
diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
index f9b57b872780aa6b9b959494874b57c7a8ff0c53..c3c5f24f1d70995641216934a3a9e88ac75e365a 100644
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
@@ -265,7 +265,9 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
// Paper end
super.close();
} finally {
- jar.close();
+ if (this.plugin == null || !this.plugin.getName().equals("SlimeWorldManager")) { // ASWM - Don't close
+ jar.close();
+ } // ASWM - Don't close
}
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add Scissors configuration file
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 30cbe3bdc7142769019765b03cc4fe1f9ba1ddb4..d1f5766f2b021df282b929457a27d09f7c21a21e 100644 index 9af4bc16da09e59009c47911219e99450cdf2aa5..94244872f7cd6b4a6df709c0f68b1f484538c159 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
@@ -2257,6 +2257,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2198,6 +2198,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
} }
// Paper end // Paper end

File diff suppressed because it is too large Load Diff

View File

@@ -1,25 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 17:38:20 -0500 Date: Thu, 21 Dec 2023 23:23:17 -0600
Subject: [PATCH] Build changes Subject: [PATCH] Build changes
diff --git a/build.gradle.kts b/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts
index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..b0e9bf22d546110d995b5625ce8ed22501992679 100644 index 58da26ad2f128ba0b66f86820f60853f4be352f0..9d4e802c76470eeab5550ba9a8e31d074af4265a 100644
--- a/build.gradle.kts --- a/build.gradle.kts
+++ b/build.gradle.kts +++ b/build.gradle.kts
@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -13,8 +13,13 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
val alsoShade: Configuration by configurations.creating val alsoShade: Configuration by configurations.creating
dependencies { dependencies {
- implementation(project(":paper-api")) - implementation(project(":paper-api"))
+ implementation(project(":Scissors-API")) // Scissors - implementation(project(":paper-mojangapi"))
+ implementation(project(":aswm-core"))
+ // Scissors start
+ implementation(project(":Scissors-API"))
+ implementation("io.papermc.paper:paper-mojangapi:1.20.4-R0.1-SNAPSHOT") {
+ exclude("io.papermc.paper", "paper-api")
+ }
+ // Scissors end
// Paper start // Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("net.minecrell:terminalconsoleappender:1.3.0")
@@ -77,17 +77,25 @@ tasks.jar { @@ -66,11 +71,19 @@ tasks.jar {
val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim() val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim()
val implementationVersion = "$mcVersion-${build ?: "DEV"}-$gitHash" val implementationVersion = System.getenv("BUILD_NUMBER") ?: "\"$gitHash\""
val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper
- val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper - val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper
+ // Scissors start + // Scissors start
@@ -33,22 +40,13 @@ index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..b0e9bf22d546110d995b5625ce8ed225
+ // Scissors end + // Scissors end
attributes( attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main", "Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "Paper", "Implementation-Title" to "CraftBukkit",
"Implementation-Version" to implementationVersion, - "Implementation-Version" to "git-Paper-$implementationVersion",
+ "Implementation-Version" to "git-Scissors-$implementationVersion", // Scissors
"Implementation-Vendor" to date, // Paper "Implementation-Vendor" to date, // Paper
- "Specification-Title" to "Paper", "Specification-Title" to "Bukkit",
+ "Specification-Title" to "Scissors",
"Specification-Version" to project.version, "Specification-Version" to project.version,
- "Specification-Vendor" to "Paper Team", @@ -154,7 +167,7 @@ fun TaskContainer.registerRunTask(
- "Brand-Id" to "papermc:paper",
- "Brand-Name" to "Paper",
+ "Specification-Vendor" to "Scissors Team",
+ "Brand-Id" to "scissorsmc:scissors",
+ "Brand-Name" to "Scissors",
"Build-Number" to (build ?: ""),
"Build-Time" to Instant.now().toString(),
"Git-Branch" to gitBranch, // Paper
@@ -144,7 +152,7 @@ fun TaskContainer.registerRunTask(
name: String, name: String,
block: JavaExec.() -> Unit block: JavaExec.() -> Unit
): TaskProvider<JavaExec> = register<JavaExec>(name) { ): TaskProvider<JavaExec> = register<JavaExec>(name) {
@@ -58,7 +56,7 @@ index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..b0e9bf22d546110d995b5625ce8ed225
standardInput = System.`in` standardInput = System.`in`
workingDir = rootProject.layout.projectDirectory workingDir = rootProject.layout.projectDirectory
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
index 4b002e8b75d117b726b0de274a76d3596fce015b..5ff11b9bcef76cb767f0b03ffc326d3f7a361371 100644 index 4b002e8b75d117b726b0de274a76d3596fce015b..87fd35ad9c7364124286fa5e9ef1d4b7efa73990 100644
--- a/src/main/java/com/destroystokyo/paper/Metrics.java --- a/src/main/java/com/destroystokyo/paper/Metrics.java
+++ b/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java
@@ -593,7 +593,7 @@ public class Metrics { @@ -593,7 +593,7 @@ public class Metrics {
@@ -66,7 +64,7 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..5ff11b9bcef76cb767f0b03ffc326d3f
// Only start Metrics, if it's enabled in the config // Only start Metrics, if it's enabled in the config
if (config.getBoolean("enabled", true)) { if (config.getBoolean("enabled", true)) {
- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); - Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger());
+ Metrics metrics = new Metrics("Scissors", serverUUID, logFailedRequests, Bukkit.getLogger()); + Metrics metrics = new Metrics("Scissors", serverUUID, logFailedRequests, Bukkit.getLogger()); // Scissors
metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> {
String minecraftVersion = Bukkit.getVersion(); String minecraftVersion = Bukkit.getVersion();
@@ -75,17 +73,17 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..5ff11b9bcef76cb767f0b03ffc326d3f
if (implVersion != null) { if (implVersion != null) {
final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1);
- paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); - paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash);
+ paperVersion = "git-Scissors-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); + paperVersion = "git-ScissorsASWM-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Scissors
} else { } else {
paperVersion = "unknown"; paperVersion = "unknown";
} }
- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion)); - metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion));
+ metrics.addCustomChart(new Metrics.SimplePie("scissors_version", () -> paperVersion)); + metrics.addCustomChart(new Metrics.SimplePie("scissors_version", () -> paperVersion)); // Scissors
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
Map<String, Map<String, Integer>> map = new HashMap<>(); Map<String, Map<String, Integer>> map = new HashMap<>();
diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..2fbb5fc19e6d7f3767c7c6eedcbc6af2b0877ae5 100644 index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..21ded7c14c56a40feaa7741131be5166947f7169 100644
--- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
+++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
@@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole {
@@ -93,10 +91,23 @@ index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..2fbb5fc19e6d7f3767c7c6eedcbc6af2
protected LineReader buildReader(LineReaderBuilder builder) { protected LineReader buildReader(LineReaderBuilder builder) {
builder builder
- .appName("Paper") - .appName("Paper")
+ .appName("Scissors") + .appName("Scissors") // Scissors
.variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history"))
.completer(new ConsoleCommandCompleter(this.server)) .completer(new ConsoleCommandCompleter(this.server))
.option(LineReader.Option.COMPLETE_IN_WORD, true); .option(LineReader.Option.COMPLETE_IN_WORD, true);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index d6f329f4c9534d45533774ad2fadec709365297a..242d780a1ad761bf6c401369ca331d6ab6b6d4eb 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1879,7 +1879,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate
public String getServerModName() {
- return "Paper"; // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
+ return "Scissors"; // Scissors - Scissors > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
}
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
index 774556a62eb240da42e84db4502e2ed43495be17..741c76c4dfa0bb34cc23bd795c194bdea10418cc 100644 index 774556a62eb240da42e84db4502e2ed43495be17..741c76c4dfa0bb34cc23bd795c194bdea10418cc 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java

View File

@@ -1,26 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 5 May 2024 12:16:30 -0500
Subject: [PATCH] UUID validation
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index 1a958f994365eb8f2e010d703046fb73e04b66e4..d8de9ec38f5e5b10c177895728815d8659d0b601 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -171,7 +171,14 @@ public class HoverEvent {
DynamicOps<JsonElement> dynamicOps = (DynamicOps<JsonElement>)(ops != null ? ops.withParent(JsonOps.INSTANCE) : JsonOps.INSTANCE);
DataResult<Component> dataResult = ComponentSerialization.CODEC.parse(dynamicOps, JsonParser.parseString(compoundTag.getString("name")));
EntityType<?> entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(compoundTag.getString("type")));
- UUID uUID = UUID.fromString(compoundTag.getString("id"));
+ // Scissors start
+ UUID uUID;
+ try {
+ uUID = UUID.fromString(compoundTag.getString("id"));
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
return dataResult.map(textx -> new HoverEvent.EntityTooltipInfo(entityType, uUID, textx));
} catch (Exception var7) {
return DataResult.error(() -> "Failed to parse tooltip: " + var7.getMessage());

View File

@@ -1,40 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 17:48:49 -0500
Subject: [PATCH] ResourceLocation validation
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 8b612b772ca87c852d0b108c2afd6785c261c9b9..e063562fdbe05882c4a81f9fb15141056c35ed8b 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -678,7 +678,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
@Override
public final ResourceKey<LootTable> getLootTable() {
- return this.lootTable == null ? this.getDefaultLootTable() : this.lootTable;
+ try {
+ return this.lootTable == null ? this.getDefaultLootTable() : this.lootTable;
+ } catch (Exception ex) {
+ return this.getDefaultLootTable();
+ }
}
protected ResourceKey<LootTable> getDefaultLootTable() {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java b/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java
index 1f90f4b3f310b8cf5750c3a581be178f19b979d2..0c6aad363f99bd86393335b9df1e186a3198274f 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftLootTable.java
@@ -38,7 +38,11 @@ public class CraftLootTable implements org.bukkit.loot.LootTable {
}
public static org.bukkit.loot.LootTable minecraftToBukkit(ResourceKey<LootTable> minecraft) {
- return (minecraft == null || minecraft.location().getPath().isEmpty()) ? null : Bukkit.getLootTable(CraftLootTable.minecraftToBukkitKey(minecraft)); // Paper - fix some NamespacedKey parsing
+ try {
+ return (minecraft == null || minecraft.location().getPath().isEmpty()) ? null : Bukkit.getLootTable(CraftLootTable.minecraftToBukkitKey(minecraft)); // Paper - fix some NamespacedKey parsing
+ } catch (Exception ex) {
+ return null;
+ }
}
public static NamespacedKey minecraftToBukkitKey(ResourceKey<LootTable> minecraft) {

View File

@@ -0,0 +1,34 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 10 Dec 2023 13:11:22 -0600
Subject: [PATCH] UUID validation
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index 7fd85ae2ebd7225f06d874aa7e37fbdb89e3ea92..b2cc15da40aa7bbcfc234b4e147ed0e53f359efa 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -20,6 +20,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.TagParser;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ExtraCodecs;
+import net.minecraft.util.GsonHelper;
import net.minecraft.util.StringRepresentable;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.Item;
@@ -161,7 +162,14 @@ public class HoverEvent {
CompoundTag compoundTag = TagParser.parseTag(text.getString());
Component component = Component.Serializer.fromJson(compoundTag.getString("name"));
EntityType<?> entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(compoundTag.getString("type")));
- UUID uUID = UUID.fromString(compoundTag.getString("id"));
+ // Scissors start
+ UUID uUID;
+ try {
+ uUID = UUID.fromString(compoundTag.getString("id"));
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
return DataResult.success(new HoverEvent.EntityTooltipInfo(entityType, uUID, component));
} catch (Exception var5) {
return DataResult.error(() -> {

View File

@@ -1,45 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 5 May 2024 12:31:13 -0500
Subject: [PATCH] Fixes log spam
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index d8de9ec38f5e5b10c177895728815d8659d0b601..d141a39f98f58c5d61e25cab89e742845ca8185b 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -271,7 +271,7 @@ public class HoverEvent {
DynamicOps<Tag> dynamicOps = (DynamicOps<Tag>)(ops != null ? ops.withParent(NbtOps.INSTANCE) : NbtOps.INSTANCE);
return ItemStack.CODEC.parse(dynamicOps, compoundTag).map(HoverEvent.ItemStackInfo::new);
} catch (CommandSyntaxException var4) {
- return DataResult.error(() -> "Failed to parse item tag: " + var4.getMessage());
+ return null;
}
}
}
diff --git a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
index ee972fa1a2bc023ed18eaceae21c8c8244754e6a..4f92d9c5850156c2349371d801a96a477f1af96c 100644
--- a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
+++ b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
@@ -385,7 +385,7 @@ public class AreaEffectCloud extends Entity implements TraceableEntity {
if (nbt.contains("Particle", 10)) {
ParticleTypes.CODEC.parse(registryops, nbt.get("Particle")).resultOrPartial((s) -> {
- AreaEffectCloud.LOGGER.warn("Failed to parse area effect cloud particle options: '{}'", s);
+ // Scissors - Don't log custom particle errors
}).ifPresent(this::setParticle);
}
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index a46bf73c608641bf1f00fd55242de71a0f2ee06e..06a4a1cb9e46b3981629f1f8c4a0028c407ce234 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -603,7 +603,7 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
if (generation) entity.generation = true; // Paper - Don't fire sync event during generation
entity.load(nbt);
}, () -> {
- EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
+ // Scissors - Don't log invalid entities
});
}

View File

@@ -0,0 +1,167 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 10 Dec 2023 13:40:21 -0600
Subject: [PATCH] ResourceLocation validation
diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java
index 15173e715fa36546820d930a46e0f0c493d07cfc..356cc6f468975faa676db87db8fc0fa2df32f020 100644
--- a/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java
+++ b/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java
@@ -17,7 +17,7 @@ public class PaperContainerEntityLootableInventory implements PaperLootableEntit
@Override
public org.bukkit.loot.LootTable getLootTable() {
- return entity.getLootTable() != null && !entity.getLootTable().getPath().isEmpty() ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(entity.getLootTable())) : null;
+ return entity.getLootTable() != null && !entity.getLootTable().getPath().isEmpty() && entity.getLootTable().toString().length() < 256 ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(entity.getLootTable())) : null; // Scissors - Validate length of loot tables before even trying
}
@Override
diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
index 2ee4ee14ab3345486dad6b24fd9a4fcc6c746b99..c5ac6cda91a81d3075f5c763e30dc009b6be7936 100644
--- a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
+++ b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
@@ -15,7 +15,7 @@ public class PaperTileEntityLootableInventory implements PaperLootableBlockInven
@Override
public org.bukkit.loot.LootTable getLootTable() {
- return tileEntityLootable.lootTable != null && !tileEntityLootable.lootTable.getPath().isEmpty() ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(tileEntityLootable.lootTable)) : null;
+ return tileEntityLootable.lootTable != null && !tileEntityLootable.lootTable.getPath().isEmpty() && tileEntityLootable.lootTable.toString().length() < 256 ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(tileEntityLootable.lootTable)) : null; // Scissors - Validate length of loot tables before even trying
}
@Override
diff --git a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
index 1f55185814125c691288294d18bf1580461c8066..259d65f8e21f9cf99585d416eafdc967dddccf57 100644
--- a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
+++ b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
@@ -409,7 +409,7 @@ public class AreaEffectCloud extends Entity implements TraceableEntity {
try {
this.setParticle(ParticleArgument.readParticle(new StringReader(nbt.getString("Particle")), (HolderLookup) BuiltInRegistries.PARTICLE_TYPE.asLookup()));
} catch (CommandSyntaxException commandsyntaxexception) {
- AreaEffectCloud.LOGGER.warn("Couldn't load custom particle {}", nbt.getString("Particle"), commandsyntaxexception);
+ // Scissors - Don't log custom particle errors
}
}
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index 6cfce9755dd464a7afb01f9032e567ce3bcd5bc5..264c94f49035236e3584a3577f2516f0f430a552 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -599,7 +599,7 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
if (generation) entity.generation = true; // Paper - add generation bool param
entity.load(nbt);
}, () -> {
- EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
+ // Scissors - Don't log invalid entities
});
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index a18aadbf7ae83713e1f2b21553185d8000bc7699..f5ad7ddf13cbb6452c2927aef9b54eae3335b4c6 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -289,7 +289,12 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
while (iterator.hasNext()) {
String s = (String) iterator.next();
- this.recipesUsed.put(new ResourceLocation(s), nbttagcompound1.getInt(s));
+ // Scissors start
+ final ResourceLocation rl = ResourceLocation.tryParse(s);
+ if (rl != null) {
+ this.recipesUsed.put(rl, nbttagcompound1.getInt(s));
+ }
+ // Scissors end
}
// Paper start - cook speed API
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
index b5b1831631e233a96b6fd55972a8862b0f420da8..a086f12c09a5e38f63c8de118fcb5a6a30e40b52 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
@@ -199,7 +199,7 @@ public class BrushableBlockEntity extends BlockEntity {
private boolean tryLoadLootTable(CompoundTag nbt) {
if (nbt.contains("LootTable", 8)) {
- this.lootTable = new ResourceLocation(nbt.getString("LootTable"));
+ this.lootTable = ResourceLocation.tryParse(nbt.getString("LootTable")); // Scissors
this.lootTableSeed = nbt.getLong("LootTableSeed");
return true;
} else {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java
index 64875525df244db838560f5fefb7b1b07b0f1f51..fd490db7431404b0324e5ade474ec95d694aa489 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java
@@ -50,7 +50,7 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc
// Copied from super with changes, always check the original method
this.lootableData.loadNbt(nbt); // Paper
if (nbt.contains("LootTable", 8)) {
- this.setLootTable(new ResourceLocation(nbt.getString("LootTable")));
+ this.setLootTable(ResourceLocation.tryParse((nbt.getString("LootTable")))); // Scissors - Validate loot tables
try { org.bukkit.craftbukkit.util.CraftNamespacedKey.fromMinecraft(this.lootTable); } catch (IllegalArgumentException ex) { this.lootTable = null; } // Paper - validate
this.setLootTableSeed(nbt.getLong("LootTableSeed"));
return false; // Paper - always load the items, table may still remain
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java b/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
index f6942cb3ef1f9ef03708d4bc932ea9aeb1c13894..8b32864bafb3c1948993688be8f639dd6492057e 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
@@ -34,8 +34,14 @@ public abstract class CraftLootable<T extends RandomizableContainerBlockEntity>
return null;
}
- ResourceLocation key = this.getSnapshot().lootTable;
- return Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(key));
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try {
+ ResourceLocation key = this.getSnapshot().lootTable;
+ return Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(key));
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
index 313ee5c8737b2e57f9b5db6512c1871766b2ccd4..a115a13ec911884a804800fc13f0347be1a30932 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
@@ -33,8 +33,15 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements Lo
return null; // return empty loot table?
}
- NamespacedKey key = CraftNamespacedKey.fromMinecraft(nmsTable);
- return Bukkit.getLootTable(key);
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try
+ {
+ NamespacedKey key = CraftNamespacedKey.fromMinecraft(nmsTable);
+ return Bukkit.getLootTable(key);
+ } catch (Exception exception) {
+ return null;
+ }
+ // Scissors end
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
index 5f6a1fb323782816f706ccf7df922cb203238302..21b4594379a5e904ad60f9c9512ace94e7ed5f68 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
@@ -80,8 +80,15 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob {
@Override
public LootTable getLootTable() {
- NamespacedKey key = CraftNamespacedKey.fromMinecraft(this.getHandle().getLootTable());
- return Bukkit.getLootTable(key);
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try
+ {
+ NamespacedKey key = CraftNamespacedKey.fromMinecraft(this.getHandle().getLootTable());
+ return Bukkit.getLootTable(key);
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override

View File

@@ -0,0 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 10 Dec 2023 16:57:48 -0600
Subject: [PATCH] Fixes log spam caused by invalid entities in beehives
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
index dfd364ac4b7551a13c4c6c100b5e62c0dfb10595..e0b0dec10dfc5d8e336a4c0f7005e7186f925c1a 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
@@ -11,6 +11,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.protocol.game.DebugPackets;
+import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.tags.BlockTags;
@@ -370,6 +371,13 @@ public class BeehiveBlockEntity extends BlockEntity {
for (int i = 0; i < nbttaglist.size(); ++i) {
CompoundTag nbttagcompound1 = nbttaglist.getCompound(i);
+
+ // Scissors start - Do not allow invalid entities from being used for bees
+ if (!nbttagcompound1.contains("id") || !ResourceLocation.isValidResourceLocation(nbttagcompound1.getString("id")) || EntityType.byString(nbttagcompound1.getString("id")).isEmpty()) {
+ continue;
+ }
+ // Scissors end
+
BeehiveBlockEntity.BeeData tileentitybeehive_hivebee = new BeehiveBlockEntity.BeeData(nbttagcompound1.getCompound("EntityData").copy(), nbttagcompound1.getInt("TicksInHive"), nbttagcompound1.getInt("MinOccupationTicks"));
this.stored.add(tileentitybeehive_hivebee);

View File

@@ -1,41 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 5 May 2024 12:47:29 -0500
Subject: [PATCH] Fixes Knowledge Books causing log spam when invalid data is
provided
diff --git a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
index 635936aaac2426de05f0450f10815b29b52ca617..0b122b281c195ca47e7eeb27be29bffd916a8535 100644
--- a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
+++ b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
@@ -38,9 +38,9 @@ public class KnowledgeBookItem extends Item {
List<RecipeHolder<?>> list2 = new ArrayList<>(list.size());
for (ResourceLocation resourceLocation : list) {
- Optional<RecipeHolder<?>> optional = recipeManager.byKey(resourceLocation);
+ Optional<RecipeHolder<?>> optional = recipeManager.byKey(ResourceLocation.tryParse(resourceLocation.getNamespace())); // Scissors - Validate resource location
if (!optional.isPresent()) {
- LOGGER.error("Invalid recipe: {}", resourceLocation);
+ // Scissors - don't log errors caused by invalid recipes being provided
return InteractionResultHolder.fail(itemStack);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
index 20638aa593e0a6c78e4bfdb936e69f3d36e18f4e..00b877fb43a8793a0f07580be93d026b624ad011 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
@@ -38,7 +38,12 @@ public class CraftMetaKnowledgeBook extends CraftMetaItem implements KnowledgeBo
for (int i = 0; i < pages.size(); i++) {
ResourceLocation recipe = pages.get(i);
- this.addRecipe(CraftNamespacedKey.fromMinecraft(recipe));
+ // Scissors start - Don't add recipes with invalid namespaces
+ try {
+ this.addRecipe(CraftNamespacedKey.fromMinecraft(recipe));
+ } catch (Exception ignored)
+ {}
+ // Scissors end
}
});
}

View File

@@ -0,0 +1,20 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 10 Dec 2023 16:58:55 -0600
Subject: [PATCH] Removes useless spammy error logging
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index 91bbea5cb169f96910cc8661151c04dbff057091..84c9f2b09576046c138a11a835c9192a6e347c1d 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -1805,8 +1805,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
resource = CraftNamespacedKey.fromMinecraft(key);
}
} catch (IllegalArgumentException ex) {
- org.bukkit.Bukkit.getLogger().warning("Namespaced resource does not validate: " + key.toString());
- ex.printStackTrace();
+ // Scissors - Don't log errors thrown by invalid namespaces when an error is thrown
}
return resource;

View File

@@ -1,28 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Video <videogamesm12@gmail.com>
Date: Sun, 5 May 2024 12:32:55 -0500 Date: Sun, 13 Mar 2022 08:14:44 -0600
Subject: [PATCH] Ignore errors thrown when trying to remove minecart entities Subject: [PATCH] Ignore errors thrown when trying to remove minecart entities
with content in them with content in them
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
index 9549eee0d92f322bd5232abd7e695213660c2e22..94a689e1adf24f6385dc97eb5cc3790c8e14da97 100644 index 6d23c39e4eadf23616080d6d08672e13b5d3c37d..0bd5c3e3bb7074b5265e3f1bf670f993c9fe167d 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
@@ -142,8 +142,14 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme @@ -139,7 +139,11 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme
@Override @Override
public void remove(Entity.RemovalReason entity_removalreason, EntityRemoveEvent.Cause cause) { public void remove(Entity.RemovalReason reason) {
// CraftBukkit end if (!this.level().isClientSide && reason.shouldDestroy()) {
- if (!this.level().isClientSide && entity_removalreason.shouldDestroy()) {
- Containers.dropContents(this.level(), (Entity) this, (Container) this); - Containers.dropContents(this.level(), (Entity) this, (Container) this);
+ if (!this.level().isClientSide && entity_removalreason.shouldDestroy()) + // Scissors start - Ignore errors thrown when trying to remove minecart entities with content in them
+ {
+ // Scissors start - Ignore errors thrown when trying to remove Minecart entities with content in them
+ try { + try {
+ Containers.dropContents(this.level(), (Entity) this, (Container) this); + Containers.dropContents(this.level(), (Entity) this, (Container) this);
+ } catch (Exception ignored) + } catch (Exception ignored) {}
+ {}
+ // Scissors end + // Scissors end
} }
super.remove(entity_removalreason, cause); // CraftBukkit - add Bukkit remove cause super.remove(reason);

View File

@@ -0,0 +1,28 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Sun, 13 Mar 2022 14:38:38 -0300
Subject: [PATCH] ItemEntity - Check if items are air before calling setItem
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index a39db702063887cf530f272deaf4f334047cc7d4..1816d8bc0716d06cb3db37730234bd37b100f573 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -444,11 +444,15 @@ public class ItemEntity extends Entity implements TraceableEntity {
CompoundTag nbttagcompound1 = nbt.getCompound("Item");
- this.setItem(ItemStack.of(nbttagcompound1));
- if (this.getItem().isEmpty()) {
+ // Scissors start
+ ItemStack item = ItemStack.of(nbttagcompound1);
+ if (item.isEmpty()) {
this.discard();
+ return;
}
+ this.setItem(item);
+ // Scissors end
}
@Override

View File

@@ -0,0 +1,49 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 13 Mar 2022 18:42:07 -0600
Subject: [PATCH] Fixes Knowledge Books causing log spam when invalid data is
provided
diff --git a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
index 37f37be56bab171df442b980ff46ff325daae283..deade19d16a7d6870171b9a60806a8cadb437db4 100644
--- a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
+++ b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
@@ -40,9 +40,9 @@ public class KnowledgeBookItem extends Item {
for(int i = 0; i < listTag.size(); ++i) {
String string = listTag.getString(i);
- Optional<RecipeHolder<?>> optional = recipeManager.byKey(new ResourceLocation(string));
+ Optional<RecipeHolder<?>> optional = recipeManager.byKey(ResourceLocation.tryParse(string)); // Scissors - Validate resource locations
if (!optional.isPresent()) {
- LOGGER.error("Invalid recipe: {}", (Object)string);
+ // Scissors - Don't log errors caused by invalid recipes being provided
return InteractionResultHolder.fail(itemStack);
}
@@ -55,7 +55,7 @@ public class KnowledgeBookItem extends Item {
return InteractionResultHolder.sidedSuccess(itemStack, world.isClientSide());
} else {
- LOGGER.error("Tag not valid: {}", (Object)compoundTag);
+ // Scissors - Don't throw errors into the logs if an NBT compound isn't present or is missing the Recipes tag.
return InteractionResultHolder.fail(itemStack);
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
index e904bf8b6a7d18a0e846c3b59e2d7f3d6e530e39..65b076b376bf6ab363a3eb62dfa2c96c45624957 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
@@ -41,7 +41,11 @@ public class CraftMetaKnowledgeBook extends CraftMetaItem implements KnowledgeBo
for (int i = 0; i < pages.size(); i++) {
String recipe = pages.getString(i);
- this.addRecipe(CraftNamespacedKey.fromString(recipe));
+ // Scissors start - Don't add recipes with invalid namespaces
+ try {
+ this.addRecipe(CraftNamespacedKey.fromString(recipe));
+ } catch (Exception ignored) {}
+ // Scissors end
}
}
}

View File

@@ -1,28 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 18:00:35 -0500
Subject: [PATCH] Prevent attributes with invalid namespaces from being applied
to CraftMetaItems
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index b6cd6897844aa9c8b9a94e41c56c4cfe4ac78780..34130c2cc3f643fcfe32a02747c45dd1eba05396 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -57,6 +57,7 @@ import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.SnbtPrinterTagVisitor;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
+import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.Unit;
import net.minecraft.world.entity.EquipmentSlotGroup;
@@ -764,7 +765,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
continue;
}
String attributeName = (String) obj;
- if (Strings.isNullOrEmpty(attributeName)) {
+ if (Strings.isNullOrEmpty(attributeName) || attributeName.length() > 256 || !ResourceLocation.isValidResourceLocation(attributeName)) { // Scissors
continue;
}
List<?> list = SerializableMeta.getObject(List.class, mods, attributeName, true);

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 13 Mar 2022 21:56:29 -0600
Subject: [PATCH] Validate BlockState and SoundEvent values
diff --git a/src/main/java/net/minecraft/nbt/NbtUtils.java b/src/main/java/net/minecraft/nbt/NbtUtils.java
index 80083fed4b44b9d433925f09db83e559582109a1..032fc2add6c25780a3663fd1d2e429fcfd37dc4a 100644
--- a/src/main/java/net/minecraft/nbt/NbtUtils.java
+++ b/src/main/java/net/minecraft/nbt/NbtUtils.java
@@ -231,7 +231,7 @@ public final class NbtUtils {
return Blocks.AIR.defaultBlockState();
} else {
// Paper start - Validate resource location
- ResourceLocation resourceLocation = ResourceLocation.tryParse(nbt.getString("Name"));
+ ResourceLocation resourceLocation = ResourceLocation.tryParse(nbt.getString("Name")); // Scissors - Validate BlockState
Optional<? extends Holder<Block>> optional = resourceLocation != null ? blockLookup.get(ResourceKey.create(Registries.BLOCK, resourceLocation)) : Optional.empty();
// Paper end
if (optional.isEmpty()) {

View File

@@ -0,0 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 10 Dec 2023 17:13:15 -0600
Subject: [PATCH] Do not log invalid items in HoverEvent and ItemFrame
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index b2cc15da40aa7bbcfc234b4e147ed0e53f359efa..dbe9f81e298a931c3e0e5b879dc13b493b3fdb52 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -280,7 +280,7 @@ public class HoverEvent {
return DataResult.success(new HoverEvent.ItemStackInfo(ItemStack.of(compoundTag)));
} catch (CommandSyntaxException var2) {
return DataResult.error(() -> {
- return "Failed to parse item tag: " + var2.getMessage();
+ return null;
});
}
}
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
index 69912c5b300b67394dce3876d2d96872033cf156..ebc403ff31385a12e072fd6a419a7787ee76429e 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
@@ -436,7 +436,7 @@ public class ItemFrame extends HangingEntity {
ItemStack itemstack = ItemStack.of(nbttagcompound1);
if (itemstack.isEmpty()) {
- ItemFrame.LOGGER.warn("Unable to load item from: {}", nbttagcompound1);
+ // Scissors - ignore invalid items
}
ItemStack itemstack1 = this.getItem();

View File

@@ -0,0 +1,91 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sat, 26 Mar 2022 21:51:07 -0500
Subject: [PATCH] Change version fetcher to AMG
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..bc5ed619e05f24f3ad50a6a81306d120869f57a1 100644
--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
@@ -4,11 +4,13 @@ import com.destroystokyo.paper.util.VersionFetcher;
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import com.google.gson.*;
+import io.papermc.paper.util.JarManifests; // Scissors
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.TextComponent;
+import org.bukkit.Bukkit; // Scissors
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -19,8 +21,8 @@ import java.util.stream.StreamSupport;
public class PaperVersionFetcher implements VersionFetcher {
private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end
- private static final String GITHUB_BRANCH_NAME = "master";
- private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads/paper";
+ private static final String GITHUB_BRANCH_NAME = getBranch(); // Scissors
+ private static final String DOWNLOAD_PAGE = "https://ci.scissors.gg/job/Scissors/job/" + GITHUB_BRANCH_NAME; // Scissors
private static @Nullable String mcVer;
@Override
@@ -31,8 +33,8 @@ public class PaperVersionFetcher implements VersionFetcher {
@Nonnull
@Override
public Component getVersionMessage(@Nonnull String serverVersion) {
- String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]");
- final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]);
+ String[] parts = serverVersion.substring("git-Scissors-".length()).split("[-\\s]"); // Scissors
+ final Component updateMessage = getUpdateStatusMessage("AtlasMediaGroup/Scissors", GITHUB_BRANCH_NAME, parts[0]); // Scissors
final Component history = getHistory();
return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage;
@@ -54,15 +56,24 @@ public class PaperVersionFetcher implements VersionFetcher {
return mcVer;
}
+ // Scissors start - Allow getting git information
+ public static String getCommit() {
+ final var manifest = JarManifests.manifest(Bukkit.getServer().getClass());
+ return manifest == null ? null : manifest.getMainAttributes().getValue("Git-Commit");
+ }
+
+ public static String getBranch() {
+ final var manifest = JarManifests.manifest(Bukkit.getServer().getClass());
+ return manifest == null ? null : manifest.getMainAttributes().getValue("Git-Branch");
+ }
+ // Scissors end
+
private static Component getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) {
int distance;
- try {
- int jenkinsBuild = Integer.parseInt(versionInfo);
- distance = fetchDistanceFromSiteApi(jenkinsBuild, getMinecraftVersion());
- } catch (NumberFormatException ignored) {
- versionInfo = versionInfo.replace("\"", "");
- distance = fetchDistanceFromGitHub(repo, branch, versionInfo);
- }
+ // Scissors start - always use Git for version checking
+ versionInfo = getCommit();
+ distance = fetchDistanceFromGitHub(repo, branch, versionInfo);
+ // Scissors end
switch (distance) {
case -1:
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index a74a8a027c99eef199c1a6a54232ac2c8ffb9d08..1576a201c92d8b17fd3a92ec497c42861db8ad1e 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -301,7 +301,7 @@ public class Main {
if (buildDate.before(deadline.getTime())) {
// Paper start - This is some stupid bullshit
System.err.println("*** Warning, you've not updated in a while! ***");
- System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads/paper ***"); // Paper
+ System.err.println("*** Please download a new build from https://ci.scissors.gg/job/Scissors ***"); // Scissors > // Paper
//System.err.println("*** Server will start in 20 seconds ***");
//Thread.sleep(TimeUnit.SECONDS.toMillis(20));
// Paper End

View File

@@ -1,11 +1,29 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Wed, 8 May 2024 12:15:48 -0500 Date: Sun, 10 Dec 2023 17:26:11 -0600
Subject: [PATCH] Better handling of invalid JSON components Subject: [PATCH] Better handling of invalid JSON components
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
index 200ed770b57e1a9240abf0473968d4b85cbefe3c..1a2a3b506e2f9bce77294c3788451bfd47394548 100644
--- a/src/main/java/io/papermc/paper/util/MCUtil.java
+++ b/src/main/java/io/papermc/paper/util/MCUtil.java
@@ -654,12 +654,6 @@ public final class MCUtil {
return null;
}
String string = compound.getString(key);
- try {
- return net.minecraft.network.chat.Component.Serializer.fromJson(string);
- } catch (com.google.gson.JsonParseException e) {
- org.bukkit.Bukkit.getLogger().warning("Unable to parse " + key + " from " + compound +": " + e.getMessage());
- }
-
- return null;
+ return net.minecraft.network.chat.Component.Serializer.fromJsonSafe(string);
}
}
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index 6dcade427f19771b08e04cfa036dedcfac30b5cd..3b075dcb6bda40b278296fc8750f2af90c13acc4 100644 index d3a80d0a23be762c05931ae8001d98e43cab2b4a..ba13650b52e39c9cc5cfa421f7720c7d4ba75678 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java --- a/src/main/java/net/minecraft/network/chat/Component.java
+++ b/src/main/java/net/minecraft/network/chat/Component.java +++ b/src/main/java/net/minecraft/network/chat/Component.java
@@ -23,6 +23,8 @@ import java.util.List; @@ -23,6 +23,8 @@ import java.util.List;
@@ -14,27 +32,27 @@ index 6dcade427f19771b08e04cfa036dedcfac30b5cd..3b075dcb6bda40b278296fc8750f2af9
import javax.annotation.Nullable; import javax.annotation.Nullable;
+ +
+import net.minecraft.ChatFormatting; +import net.minecraft.ChatFormatting;
import net.minecraft.core.HolderLookup; import net.minecraft.Util;
import net.minecraft.network.chat.contents.DataSource; import net.minecraft.network.chat.contents.DataSource;
import net.minecraft.network.chat.contents.KeybindContents; import net.minecraft.network.chat.contents.KeybindContents;
@@ -311,6 +313,26 @@ public interface Component extends Message, FormattedText, Iterable<Component> { @@ -315,6 +317,26 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
return json == null ? null : Serializer.deserialize(json, registries); return json == null ? null : Serializer.deserialize(json);
} }
+ // Scissors start + // Scissors start
+ @Nullable + @Nullable
+ public static MutableComponent fromJsonSafe(String json, HolderLookup.Provider registries) { + public static MutableComponent fromJsonSafe(String json) {
+ try { + try {
+ return fromJson(json, registries); + return fromJson(json);
+ } catch (Exception ex) { + } catch (Exception ex) {
+ return Component.empty().append("** Invalid JSON Component **").withStyle(ChatFormatting.RED); + return Component.empty().append("** Invalid JSON Component **").withStyle(ChatFormatting.RED);
+ } + }
+ } + }
+ +
+ @Nullable + @Nullable
+ public static MutableComponent fromJsonSafe(JsonElement json, HolderLookup.Provider registries) { + public static MutableComponent fromJsonSafe(JsonElement json) {
+ try { + try {
+ return fromJson(json, registries); + return fromJson(json);
+ } catch (Exception ex) { + } catch (Exception ex) {
+ return Component.empty().append("** Invalid JSON Component **").withStyle(ChatFormatting.RED); + return Component.empty().append("** Invalid JSON Component **").withStyle(ChatFormatting.RED);
+ } + }
@@ -42,92 +60,91 @@ index 6dcade427f19771b08e04cfa036dedcfac30b5cd..3b075dcb6bda40b278296fc8750f2af9
+ // Scissors end + // Scissors end
+ +
@Nullable @Nullable
public static MutableComponent fromJsonLenient(String json, HolderLookup.Provider registries) { public static MutableComponent fromJsonLenient(String json) {
JsonReader jsonreader = new JsonReader(new StringReader(json)); JsonReader jsonreader = new JsonReader(new StringReader(json));
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index dbe9f81e298a931c3e0e5b879dc13b493b3fdb52..6708290b6d096e8081c56d2e0da3c9ae2a112176 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -160,7 +160,7 @@ public class HoverEvent {
public static DataResult<HoverEvent.EntityTooltipInfo> legacyCreate(Component text) {
try {
CompoundTag compoundTag = TagParser.parseTag(text.getString());
- Component component = Component.Serializer.fromJson(compoundTag.getString("name"));
+ Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("name")); // Scissors - Use safer method for getting Components from JSON
EntityType<?> entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(compoundTag.getString("type")));
// Scissors start
UUID uUID;
diff --git a/src/main/java/net/minecraft/network/chat/contents/NbtContents.java b/src/main/java/net/minecraft/network/chat/contents/NbtContents.java diff --git a/src/main/java/net/minecraft/network/chat/contents/NbtContents.java b/src/main/java/net/minecraft/network/chat/contents/NbtContents.java
index df26c39a2bb20e2021b50211dce905483a77f4e6..0b85d5aef65fdb08c1c11f0ebb973078b57e5773 100644 index 186547674894fd084bceb478bb6017b747df4173..74c880425964da042ca57c097eb93273da59ce7e 100644
--- a/src/main/java/net/minecraft/network/chat/contents/NbtContents.java --- a/src/main/java/net/minecraft/network/chat/contents/NbtContents.java
+++ b/src/main/java/net/minecraft/network/chat/contents/NbtContents.java +++ b/src/main/java/net/minecraft/network/chat/contents/NbtContents.java
@@ -124,10 +124,10 @@ public class NbtContents implements ComponentContents { @@ -115,10 +115,10 @@ public class NbtContents implements ComponentContents {
); Component component = DataFixUtils.orElse(ComponentUtils.updateForEntity(source, this.separator, sender, depth), ComponentUtils.DEFAULT_NO_STYLE_SEPARATOR);
return stream.flatMap(text -> { return stream.flatMap((text) -> {
try { try {
- MutableComponent mutableComponent = Component.Serializer.fromJson(text, source.registryAccess()); - MutableComponent mutableComponent = Component.Serializer.fromJson(text);
+ MutableComponent mutableComponent = Component.Serializer.fromJsonSafe(text, source.registryAccess()); // Scissors + MutableComponent mutableComponent = Component.Serializer.fromJsonSafe(text);
return Stream.of(ComponentUtils.updateForEntity(source, mutableComponent, sender, depth)); return Stream.of(ComponentUtils.updateForEntity(source, mutableComponent, sender, depth));
} catch (Exception var5x) { } catch (Exception var5) {
- LOGGER.warn("Failed to parse component: {}", text, var5x); - LOGGER.warn("Failed to parse component: {}", text, var5);
+ // Scissors - don't log + // Scissors - don't log
return Stream.of(); return Stream.of();
} }
}).reduce((accumulator, current) -> accumulator.append(component).append(current)).orElseGet(Component::empty); }).reduce((accumulator, current) -> {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 7ef9f67d27cc240191dd5d07e8dcf5fbdebe1049..6ee2d11e4f3fbc8424a2ffbe6a7ebd1832a25503 100644 index 1be10c57e374ad4018c08d96cfb69397a2f541d3..2e11d0f17fc8fa4ed84c40dd9747e136675030a4 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2602,12 +2602,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -2526,11 +2526,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.setRot(this.getYRot(), this.getXRot());
if (nbt.contains("CustomName", 8)) { if (nbt.contains("CustomName", 8)) {
String s = nbt.getString("CustomName"); String s = nbt.getString("CustomName");
-
- try { - try {
- this.setCustomName(Component.Serializer.fromJson(s, this.registryAccess())); - this.setCustomName(Component.Serializer.fromJson(s));
- } catch (Exception exception) { - } catch (Exception exception) {
- Entity.LOGGER.warn("Failed to parse entity custom name {}", s, exception); - Entity.LOGGER.warn("Failed to parse entity custom name {}", s, exception);
- } - }
+ this.setCustomName(Component.Serializer.fromJsonSafe(s, this.registryAccess())); // Scissors - Use safer method for getting Components from JSON + this.setCustomName(Component.Serializer.fromJsonSafe(s)); // Scissors - Use safer method for getting Components from JSON
} }
this.setCustomNameVisible(nbt.getBoolean("CustomNameVisible")); this.setCustomNameVisible(nbt.getBoolean("CustomNameVisible"));
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
index c0563260277f9f4bd9ff08993b2efb4bca9a0c60..f3c296f2464620083e44c14cc99eca1add8f8d9b 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
@@ -362,7 +362,7 @@ public abstract class BlockEntity {
@Nullable
public static Component parseCustomNameSafe(String json, HolderLookup.Provider registryLookup) {
try {
- return Component.Serializer.fromJson(json, registryLookup);
+ return Component.Serializer.fromJsonSafe(json, registryLookup); // Scissors
} catch (Exception exception) {
BlockEntity.LOGGER.warn("Failed to parse custom name from string '{}', discarding", json, exception);
return null;
diff --git a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java diff --git a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java
index b679bbdfa307d3aa9f2f5e4c70c559695b2733de..4c195b56b956b31028c4f51453d6e9bf31cada0c 100644 index b49d60d20d170d16a7daf2bc874e5d8d04552b3e..56ae1fa22bb722f91a06d7344bf879210f4ef8f2 100644
--- a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java --- a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java
+++ b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java +++ b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java
@@ -42,7 +42,7 @@ public class ScoreboardSaveData extends SavedData { @@ -41,7 +41,7 @@ public class ScoreboardSaveData extends SavedData {
CompoundTag compoundTag = nbt.getCompound(i); CompoundTag compoundTag = nbt.getCompound(i);
String string = compoundTag.getString("Name"); String string = compoundTag.getString("Name");
PlayerTeam playerTeam = this.scoreboard.addPlayerTeam(string); PlayerTeam playerTeam = this.scoreboard.addPlayerTeam(string);
- Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName"), registries); - Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName"));
+ Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName"), registries); // Scissors - Use safer method for getting Components from JSON + Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName")); // Scissors - Use safer method for getting Components from JSON
if (component != null) { if (component != null) {
playerTeam.setDisplayName(component); playerTeam.setDisplayName(component);
} }
@@ -60,14 +60,14 @@ public class ScoreboardSaveData extends SavedData { @@ -59,14 +59,14 @@ public class ScoreboardSaveData extends SavedData {
} }
if (compoundTag.contains("MemberNamePrefix", 8)) { if (compoundTag.contains("MemberNamePrefix", 8)) {
- Component component2 = Component.Serializer.fromJson(compoundTag.getString("MemberNamePrefix"), registries); - Component component2 = Component.Serializer.fromJson(compoundTag.getString("MemberNamePrefix"));
+ Component component2 = Component.Serializer.fromJsonSafe(compoundTag.getString("MemberNamePrefix"), registries); // Scissors - Use safer method for getting Components from JSON + Component component2 = Component.Serializer.fromJsonSafe(compoundTag.getString("MemberNamePrefix")); // Scissors - Use safer method for getting Components from JSON
if (component2 != null) { if (component2 != null) {
playerTeam.setPlayerPrefix(component2); playerTeam.setPlayerPrefix(component2);
} }
} }
if (compoundTag.contains("MemberNameSuffix", 8)) { if (compoundTag.contains("MemberNameSuffix", 8)) {
- Component component3 = Component.Serializer.fromJson(compoundTag.getString("MemberNameSuffix"), registries); - Component component3 = Component.Serializer.fromJson(compoundTag.getString("MemberNameSuffix"));
+ Component component3 = Component.Serializer.fromJsonSafe(compoundTag.getString("MemberNameSuffix"), registries); // Scissors - Use safer method for getting Components from JSON + Component component3 = Component.Serializer.fromJsonSafe(compoundTag.getString("MemberNameSuffix")); // Scissors - Use safer method for getting Components from JSON
if (component3 != null) { if (component3 != null) {
playerTeam.setPlayerSuffix(component3); playerTeam.setPlayerSuffix(component3);
} }
@@ -124,7 +124,7 @@ public class ScoreboardSaveData extends SavedData { @@ -126,7 +126,7 @@ public class ScoreboardSaveData extends SavedData {
return ObjectiveCriteria.DUMMY; return ObjectiveCriteria.DUMMY;
}); });
String string2 = compoundTag.getString("Name"); String string2 = compoundTag.getString("Name");
- Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName"), registries); - Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName"));
+ Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName"), registries); // Scissors - Use safer method for getting Components from JSON + Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName")); // Scissors - Use safer method for getting Components from JSON
ObjectiveCriteria.RenderType renderType = ObjectiveCriteria.RenderType.byId(compoundTag.getString("RenderType")); ObjectiveCriteria.RenderType renderType = ObjectiveCriteria.RenderType.byId(compoundTag.getString("RenderType"));
boolean bl = compoundTag.getBoolean("display_auto_update"); boolean bl = compoundTag.getBoolean("display_auto_update");
NumberFormat numberFormat = NumberFormatTypes.CODEC NumberFormat numberFormat = NumberFormatTypes.CODEC.parse(NbtOps.INSTANCE, compoundTag.get("format")).result().orElse((NumberFormat)null);

View File

@@ -0,0 +1,180 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: ayunami2000 <spwilliamsiam@gmail.com>
Date: Mon, 28 Mar 2022 17:02:21 -0400
Subject: [PATCH] Block server-side chunkbans
diff --git a/src/main/java/net/minecraft/network/PacketEncoder.java b/src/main/java/net/minecraft/network/PacketEncoder.java
index d364bd57b1675c8b21d781c2bc16c3e65800455c..f2e7585630ff724f966c7bcedc17e502d786870d 100644
--- a/src/main/java/net/minecraft/network/PacketEncoder.java
+++ b/src/main/java/net/minecraft/network/PacketEncoder.java
@@ -7,8 +7,16 @@ import io.netty.handler.codec.MessageToByteEncoder;
import io.netty.util.Attribute;
import io.netty.util.AttributeKey;
import java.io.IOException;
+import java.util.Collections; // Scissors
+import net.minecraft.ChatFormatting; // Scissors
+import net.minecraft.core.NonNullList; // Scissors
+import net.minecraft.nbt.CompoundTag; // Scissors
+import net.minecraft.network.chat.Component; // Scissors
+import net.minecraft.network.chat.SignedMessageBody; // Scissors
import net.minecraft.network.protocol.Packet;
+import net.minecraft.network.protocol.game.*; // Scissors
import net.minecraft.util.profiling.jfr.JvmProfiler;
+import net.minecraft.world.item.ItemStack; // Scissors
import org.slf4j.Logger;
public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
@@ -19,6 +27,23 @@ public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
this.codecKey = protocolKey;
}
+ // Scissors start
+ private int tryWrite(Packet packet, FriendlyByteBuf friendlyByteBuf, ChannelHandlerContext channelHandlerContext, int i) {
+ friendlyByteBuf.writeVarInt(i);
+ friendlyByteBuf.adventure$locale = channelHandlerContext.channel().attr(io.papermc.paper.adventure.PaperAdventure.LOCALE_ATTRIBUTE).get(); // Paper
+
+ int j = friendlyByteBuf.writerIndex();
+ packet.write(friendlyByteBuf);
+ int k = friendlyByteBuf.writerIndex() - j;
+ int packetLength = friendlyByteBuf.readableBytes();
+ if (packetLength > MAX_PACKET_SIZE) {
+ throw new PacketTooLargeException(packet, this.codecKey, packetLength);
+ }
+
+ return k;
+ }
+ // Scissors end
+
protected void encode(ChannelHandlerContext channelHandlerContext, Packet<?> packet, ByteBuf byteBuf) throws Exception {
Attribute<ConnectionProtocol.CodecData<?>> attribute = channelHandlerContext.channel().attr(this.codecKey);
ConnectionProtocol.CodecData<?> codecData = attribute.get();
@@ -34,46 +59,59 @@ public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
throw new IOException("Can't serialize unregistered packet");
} else {
FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(byteBuf);
- friendlyByteBuf.writeVarInt(i);
- friendlyByteBuf.adventure$locale = channelHandlerContext.channel().attr(io.papermc.paper.adventure.PaperAdventure.LOCALE_ATTRIBUTE).get(); // Paper
+ // Scissors start
+ int k;
try {
- int j = friendlyByteBuf.writerIndex();
- packet.write(friendlyByteBuf);
- int k = friendlyByteBuf.writerIndex() - j;
- if (false && k > 8388608) { // Paper - disable
- throw new IllegalArgumentException("Packet too big (is " + k + ", should be less than 8388608): " + packet);
- }
-
- JvmProfiler.INSTANCE.onPacketSent(codecData.protocol(), i, channelHandlerContext.channel().remoteAddress(), k);
+ k = this.tryWrite(packet, friendlyByteBuf, channelHandlerContext, i);
} catch (Throwable var13) {
- // Paper start - Give proper error message
- String packetName = io.papermc.paper.util.ObfHelper.INSTANCE.deobfClassName(packet.getClass().getName());
- if (packetName.contains(".")) {
- packetName = packetName.substring(packetName.lastIndexOf(".") + 1);
- }
-
- LOGGER.error("Packet encoding of packet {} (ID: {}) threw (skippable? {})", packetName, i, packet.isSkippable(), var13);
- // Paper end
- if (packet.isSkippable()) {
- throw new SkipPacketException(var13);
- }
-
- throw var13;
- } finally {
- // Paper start
- int packetLength = friendlyByteBuf.readableBytes();
- if (packetLength > MAX_PACKET_SIZE) {
- throw new PacketTooLargeException(packet, this.codecKey, packetLength);
+ packet = capPacket(packet, i);
+ if (packet == null) {
+ throw new SkipPacketException(new IllegalArgumentException("Packet too big: " + packet));
}
- // Paper end
- ProtocolSwapHandler.swapProtocolIfNeeded(attribute, packet);
+ friendlyByteBuf.clear();
+ k = this.tryWrite(packet, friendlyByteBuf, channelHandlerContext, i);
}
+ JvmProfiler.INSTANCE.onPacketSent(codecData.protocol(), i, channelHandlerContext.channel().remoteAddress(), k);
+ ProtocolSwapHandler.swapProtocolIfNeeded(attribute, packet);
+ // Scissors end
}
}
}
+ // Scissors start
+ private static Packet capPacket(Packet packet, int i) {
+ if (packet instanceof ClientboundBlockEntityDataPacket blockEntityDataPacket) {
+ packet = new ClientboundBlockEntityDataPacket(blockEntityDataPacket.getPos(), blockEntityDataPacket.getType(), new CompoundTag());
+ } else if (packet instanceof ClientboundLevelChunkPacketData chunkPacket) {
+ chunkPacket.clearNBT();
+ } else if (packet instanceof ClientboundContainerSetContentPacket containerSetContentPacket) {
+ packet = new ClientboundContainerSetContentPacket(containerSetContentPacket.getContainerId(), containerSetContentPacket.getStateId(), NonNullList.create(), ItemStack.EMPTY);
+ } else if (packet instanceof ClientboundSetEquipmentPacket setEquipmentPacket) {
+ packet = new ClientboundSetEquipmentPacket(setEquipmentPacket.getEntity(), Collections.emptyList());
+ } else if (packet instanceof ClientboundContainerSetSlotPacket containerSetSlotPacket) {
+ packet = new ClientboundContainerSetSlotPacket(containerSetSlotPacket.getContainerId(), containerSetSlotPacket.getStateId(), containerSetSlotPacket.getSlot(), ItemStack.EMPTY);
+ } else if (packet instanceof ClientboundMapItemDataPacket mapItemDataPacket) {
+ packet = new ClientboundMapItemDataPacket(mapItemDataPacket.getMapId(), mapItemDataPacket.getScale(), mapItemDataPacket.isLocked(), null, null);
+ } else if (packet instanceof ClientboundPlayerChatPacket playerChatPacket) {
+ final SignedMessageBody.Packed body = playerChatPacket.body();
+ packet = new ClientboundPlayerChatPacket(playerChatPacket.sender(), // Not sending this packet results in a kick when someone says something.
+ playerChatPacket.index(),
+ playerChatPacket.signature(),
+ playerChatPacket.body(),
+ Component.empty().append("** Message too large **").withStyle(ChatFormatting.RED),
+ playerChatPacket.filterMask(),
+ playerChatPacket.chatType()
+ );
+ } else {
+ return null;
+ }
+
+ return packet;
+ }
+ // Scissors end
+
// Paper start
private static int MAX_PACKET_SIZE = 8388608;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
index 3944852921335c78a04a9dc301882ab5b152b1ed..96ee53c7cc862e059328c5cdf5e07f309df6a79e 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
@@ -24,7 +24,7 @@ public class ClientboundBlockEntityDataPacket implements Packet<ClientGamePacket
return create(blockEntity, BlockEntity::getUpdateTag);
}
- private ClientboundBlockEntityDataPacket(BlockPos pos, BlockEntityType<?> blockEntityType, CompoundTag nbt) {
+ public ClientboundBlockEntityDataPacket(BlockPos pos, BlockEntityType<?> blockEntityType, CompoundTag nbt) { // Scissors - private -> public
this.pos = pos;
this.type = blockEntityType;
this.tag = nbt.isEmpty() ? null : nbt;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
index 51e24105facfe71ce9f2757c6c881a21b58dacfd..5692fbae221fb01d32d92edc7bea0f6312e24e1c 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
@@ -33,6 +33,13 @@ public class ClientboundLevelChunkPacketData {
}
// Paper end
+ // Scissors start
+ public void clearNBT() {
+ this.blockEntitiesData.clear();
+ this.extraPackets.clear();
+ }
+ // Scissors end
+
// Paper start - Anti-Xray - Add chunk packet info
@Deprecated @io.papermc.paper.annotation.DoNotUse public ClientboundLevelChunkPacketData(LevelChunk chunk) { this(chunk, null); }
public ClientboundLevelChunkPacketData(LevelChunk chunk, com.destroystokyo.paper.antixray.ChunkPacketInfo<net.minecraft.world.level.block.state.BlockState> chunkPacketInfo) {
@@ -58,6 +65,7 @@ public class ClientboundLevelChunkPacketData {
int totalTileEntities = 0; // Paper
for(Map.Entry<BlockPos, BlockEntity> entry2 : chunk.getBlockEntities().entrySet()) {
+ if (this.extraPackets.size() > 50) break; // Scissors - Limit extraPackets size
// Paper start
if (++totalTileEntities > TE_LIMIT) {
var packet = entry2.getValue().getUpdatePacket();

View File

@@ -1,22 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Video <videogamesm12@gmail.com>
Date: Wed, 8 May 2024 12:08:31 -0500 Date: Mon, 28 Mar 2022 16:49:17 -0600
Subject: [PATCH] Reject oversized components from updating Subject: [PATCH] Reject oversized components from updating
diff --git a/src/main/java/net/minecraft/network/chat/ComponentUtils.java b/src/main/java/net/minecraft/network/chat/ComponentUtils.java diff --git a/src/main/java/net/minecraft/network/chat/ComponentUtils.java b/src/main/java/net/minecraft/network/chat/ComponentUtils.java
index 3365aed2b67ae0e4dd0410f5190ba474f146139b..5dea669ed5da073dcdfe4cbbf5521a622242563b 100644 index 7daca712816a79cc4a30b084afbd3d07b5d3755f..a7e04eb4284e7d5148e1c7b991620d666785ec70 100644
--- a/src/main/java/net/minecraft/network/chat/ComponentUtils.java --- a/src/main/java/net/minecraft/network/chat/ComponentUtils.java
+++ b/src/main/java/net/minecraft/network/chat/ComponentUtils.java +++ b/src/main/java/net/minecraft/network/chat/ComponentUtils.java
@@ -1,6 +1,7 @@ @@ -38,8 +38,9 @@ public class ComponentUtils {
package net.minecraft.network.chat;
import com.google.common.collect.Lists;
+import com.google.gson.JsonParser;
import com.mojang.brigadier.Message;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.datafixers.DataFixUtils;
@@ -38,8 +39,9 @@ public class ComponentUtils {
} }
public static MutableComponent updateForEntity(@Nullable CommandSourceStack source, Component text, @Nullable Entity sender, int depth) throws CommandSyntaxException { public static MutableComponent updateForEntity(@Nullable CommandSourceStack source, Component text, @Nullable Entity sender, int depth) throws CommandSyntaxException {
@@ -25,16 +17,16 @@ index 3365aed2b67ae0e4dd0410f5190ba474f146139b..5dea669ed5da073dcdfe4cbbf5521a62
- return text.copy(); - return text.copy();
+ result = text.copy(); // Scissors + result = text.copy(); // Scissors
} else { } else {
// Paper start - adventure; pass actual vanilla component // Paper start
if (text instanceof io.papermc.paper.adventure.AdventureComponent adventureComponent) { if (text instanceof io.papermc.paper.adventure.AdventureComponent adventureComponent) {
@@ -52,8 +54,9 @@ public class ComponentUtils { @@ -52,8 +53,9 @@ public class ComponentUtils {
mutableComponent.append(updateForEntity(source, component, sender, depth + 1)); mutableComponent.append(updateForEntity(source, component, sender, depth + 1));
} }
- return mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth)); - return mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth));
+ result = mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth)); + result = mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth)); // Scissors
} }
+ return JsonParser.parseString(result.toString()).toString().length() > 65535 ? Component.empty() : result; // Scissors + return Component.Serializer.toJson(result).length() > 65535 ? Component.empty() : result; // Scissors
} }
private static Style resolveStyle(@Nullable CommandSourceStack source, Style style, @Nullable Entity sender, int depth) throws CommandSyntaxException { private static Style resolveStyle(@Nullable CommandSourceStack source, Style style, @Nullable Entity sender, int depth) throws CommandSyntaxException {

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Fri, 14 Jun 2024 17:56:03 -0500 Date: Sun, 10 Jul 2022 10:12:04 +0100
Subject: [PATCH] Add Scissors configuration file & command Subject: [PATCH] Add Scissors configuration file & command
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
index 7620c72a4c243cbeea245203ce03a97cbfa7d922..a05a348c299a68a61fabcbdcc689a89a81d1301f 100644 index a2f71a6d1a9e98133dff6cd0f625da9435a8af14..f83b2c4298bd1a5f65487f64bd6a11fb190a622d 100644
--- a/src/main/java/co/aikar/timings/TimingsExport.java --- a/src/main/java/co/aikar/timings/TimingsExport.java
+++ b/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java
@@ -25,6 +25,7 @@ package co.aikar.timings; @@ -25,6 +25,7 @@ package co.aikar.timings;
@@ -16,7 +16,7 @@ index 7620c72a4c243cbeea245203ce03a97cbfa7d922..a05a348c299a68a61fabcbdcc689a89a
import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
@@ -240,7 +241,8 @@ public class TimingsExport extends Thread { @@ -242,7 +243,8 @@ public class TimingsExport extends Thread {
parent.put("config", createObject( parent.put("config", createObject(
pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)),
pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)),
@@ -184,10 +184,10 @@ index 0000000000000000000000000000000000000000..797677d892d83cf54d9a60af1e277b67
+} +}
diff --git a/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java b/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java diff --git a/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java b/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..1ada5b7778f03815455cac1a4aad4411d0cae053 index 0000000000000000000000000000000000000000..8cd2848aa6b06c5efbe797ed2d75ff4b025b3c52
--- /dev/null --- /dev/null
+++ b/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java +++ b/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java
@@ -0,0 +1,224 @@ @@ -0,0 +1,225 @@
+package me.totalfreedom.scissors; +package me.totalfreedom.scissors;
+ +
+ +
@@ -412,25 +412,26 @@ index 0000000000000000000000000000000000000000..1ada5b7778f03815455cac1a4aad4411
+ return config.getString(path, config.getString(path)); + return config.getString(path, config.getString(path));
+ } + }
+} +}
+
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
index 244a19ecd0234fa1d7a6ecfea20751595688605d..fdc76373fd458884a45312c6edf2915a811910eb 100644 index 7573c12a77797146c51ef2dfe4b2a636df45e21a..90d9c9cbf730df6ec1800a611fd9103418cce607 100644
--- a/src/main/java/net/minecraft/server/Main.java --- a/src/main/java/net/minecraft/server/Main.java
+++ b/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java
@@ -133,6 +133,7 @@ public class Main { @@ -141,6 +141,7 @@ public class Main {
// Paper start - load config files early for access below if needed // Paper start - load config files for access below if needed
org.bukkit.configuration.file.YamlConfiguration bukkitConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("bukkit-settings")); org.bukkit.configuration.file.YamlConfiguration bukkitConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("bukkit-settings"));
org.bukkit.configuration.file.YamlConfiguration spigotConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("spigot-settings")); org.bukkit.configuration.file.YamlConfiguration spigotConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("spigot-settings"));
+ org.bukkit.configuration.file.YamlConfiguration scissorsConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("scissors-settings")); // Scissors - TODO Change this + org.bukkit.configuration.file.YamlConfiguration scissorsConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("scissors-settings")); // Scissors - TODO Change this
// Paper end - load config files early for access below if needed // Paper end
if (optionset.has("initSettings")) { // CraftBukkit if (optionset.has("initSettings")) { // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index ad967cc2283f902c76e48a59d59cf0dbdacbb5e3..0342ea47cb313e28027cb76e632a4d5b1565fc8d 100644 index 58536aabf607015939a1326f80207c0a06eed8ff..34a8c36d88eb17b7574b6766f5e14ef926ec9080 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -234,6 +234,16 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -222,6 +222,16 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now // Paper end
+ // Scissors start + // Scissors start
+ try { + try {
@@ -446,10 +447,10 @@ index ad967cc2283f902c76e48a59d59cf0dbdacbb5e3..0342ea47cb313e28027cb76e632a4d5b
this.setFlightAllowed(dedicatedserverproperties.allowFlight); this.setFlightAllowed(dedicatedserverproperties.allowFlight);
this.setMotd(dedicatedserverproperties.motd); this.setMotd(dedicatedserverproperties.motd);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 5db08432b6afd3639688830e717f40ceaf599248..f2497d08157d3007d20be7ab333ab7c4f282c414 100644 index 142d2c48239d4ebe3896218536656d116cd24d7c..36fe3df8b26136a62381336c83fe266a5bf2266d 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1055,6 +1055,7 @@ public final class CraftServer implements Server { @@ -1036,6 +1036,7 @@ public final class CraftServer implements Server {
} }
org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot
@@ -457,7 +458,7 @@ index 5db08432b6afd3639688830e717f40ceaf599248..f2497d08157d3007d20be7ab333ab7c4
this.console.paperConfigurations.reloadConfigs(this.console); this.console.paperConfigurations.reloadConfigs(this.console);
for (ServerLevel world : this.console.getAllLevels()) { for (ServerLevel world : this.console.getAllLevels()) {
// world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty
@@ -1087,6 +1088,7 @@ public final class CraftServer implements Server { @@ -1067,6 +1068,7 @@ public final class CraftServer implements Server {
this.reloadData(); this.reloadData();
org.spigotmc.SpigotConfig.registerCommands(); // Spigot org.spigotmc.SpigotConfig.registerCommands(); // Spigot
io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper
@@ -465,7 +466,7 @@ index 5db08432b6afd3639688830e717f40ceaf599248..f2497d08157d3007d20be7ab333ab7c4
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
@@ -3053,6 +3055,14 @@ public final class CraftServer implements Server { @@ -3011,6 +3013,14 @@ public final class CraftServer implements Server {
return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console);
} }
@@ -481,26 +482,27 @@ index 5db08432b6afd3639688830e717f40ceaf599248..f2497d08157d3007d20be7ab333ab7c4
public void restart() { public void restart() {
org.spigotmc.RestartCommand.restart(); org.spigotmc.RestartCommand.restart();
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index b86ba59158964f73abd6622341a9acb98a33fa44..6101ff98022e7c1ad253edb112a0bf87b139e62b 100644 index 1576a201c92d8b17fd3a92ec497c42861db8ad1e..81454e29639f428e3331c5c20bb7ad39351d2f8a 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java --- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -169,6 +169,19 @@ public class Main { @@ -181,6 +181,20 @@ public class Main {
.defaultsTo(new File("paper.yml")) .defaultsTo("Unknown Server")
.describedAs("Yml file"); .describedAs("Name");
// Paper end
+
+ // Scissors start + // Scissors start
+ acceptsAll(asList("scissors-dir", "scissors-settings-directory"), "Directory for Scissors settings") + acceptsAll(asList("scissors-dir", "scissors-settings-directory"), "Directory for Scissors settings")
+ .withRequiredArg() + .withRequiredArg()
+ .ofType(File.class) + .ofType(File.class)
+ .defaultsTo(new File(io.papermc.paper.configuration.PaperConfigurations.CONFIG_DIR)) + .defaultsTo(new File(io.papermc.paper.configuration.PaperConfigurations.CONFIG_DIR))
+ .describedAs("Config directory"); + .describedAs("Config directory");
+
+ acceptsAll(asList("scissors", "scissors-settings"), "File for Scissors settings") + acceptsAll(asList("scissors", "scissors-settings"), "File for Scissors settings")
+ .withRequiredArg() + .withRequiredArg()
+ .ofType(File.class) + .ofType(File.class)
+ .defaultsTo(new File("scissors.yml")) + .defaultsTo(new File("scissors.yml"))
+ .describedAs("YAML file"); + .describedAs("YAML file");
+ // Scissors end + // Scissors end
+ }
acceptsAll(asList("add-plugin", "add-extra-plugin-jar"), "Specify paths to extra plugin jars to be loaded in addition to those in the plugins folder. This argument can be specified multiple times, once for each extra plugin jar path.") };
.withRequiredArg()
.ofType(File.class)

View File

@@ -0,0 +1,28 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Wed, 30 Mar 2022 18:20:09 -0600
Subject: [PATCH] Prevent attributes with invalid namespaces from being applied
to CraftMetaItems
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index 98118cadae93000192003b40e9051a6df216d197..36cd18534910efd410efd9dcc7e4bec27eb99a8f 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -47,6 +47,7 @@ import net.minecraft.nbt.NbtIo;
import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
+import net.minecraft.resources.ResourceLocation; // Scissors
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.level.block.state.BlockState;
import org.apache.commons.lang3.EnumUtils;
@@ -487,7 +488,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
AttributeModifier attribMod = CraftAttributeInstance.convert(nmsModifier);
String attributeName = org.bukkit.craftbukkit.attribute.CraftAttributeMap.convertIfNeeded(entry.getString(CraftMetaItem.ATTRIBUTES_IDENTIFIER.NBT)); // Paper
- if (attributeName == null || attributeName.isEmpty()) {
+ if (attributeName == null || attributeName.isEmpty() || attributeName.length() > 256 || !ResourceLocation.isValidResourceLocation(attributeName)) { // Scissors
continue;
}

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Wed, 8 May 2024 12:35:56 -0500 Date: Sun, 10 Dec 2023 17:39:52 -0600
Subject: [PATCH] Don't query player data in the `nbt` component Subject: [PATCH] Don't query player data in the `nbt` component
diff --git a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java diff --git a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
index 2750702cff35762bc817ffbe5bf81631e86bc49b..f69261dae717cbb3e7bc9f5e0767adc897f0388d 100644 index 3bec895fecb3521653fb0b88d4a4854fd3766b46..5fd278ac13c02b9d511be22dba9719cb0cb0e17b 100644
--- a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java --- a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
+++ b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java +++ b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
@@ -8,12 +8,15 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -8,12 +8,15 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
@@ -20,10 +20,10 @@ index 2750702cff35762bc817ffbe5bf81631e86bc49b..f69261dae717cbb3e7bc9f5e0767adc8
import net.minecraft.commands.arguments.selector.EntitySelectorParser; import net.minecraft.commands.arguments.selector.EntitySelectorParser;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
+import org.bukkit.entity.Player; +import net.minecraft.world.entity.player.Player;
public record EntityDataSource(String selectorPattern, @Nullable EntitySelector compiledSelector) implements DataSource { public record EntityDataSource(String selectorPattern, @Nullable EntitySelector compiledSelector) implements DataSource {
public static final MapCodec<EntityDataSource> SUB_CODEC = RecordCodecBuilder.mapCodec( public static final MapCodec<EntityDataSource> SUB_CODEC = RecordCodecBuilder.mapCodec((instance) -> {
@@ -39,7 +42,11 @@ public record EntityDataSource(String selectorPattern, @Nullable EntitySelector @@ -39,7 +42,11 @@ public record EntityDataSource(String selectorPattern, @Nullable EntitySelector
public Stream<CompoundTag> getData(CommandSourceStack source) throws CommandSyntaxException { public Stream<CompoundTag> getData(CommandSourceStack source) throws CommandSyntaxException {
if (this.compiledSelector != null) { if (this.compiledSelector != null) {

View File

@@ -1,36 +1,36 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Luna <lunahatesgogle@gmail.com>
Date: Wed, 8 May 2024 12:43:35 -0500 Date: Fri, 8 Apr 2022 23:38:12 -0300
Subject: [PATCH] Limit string tag visitors to 1024 elements Subject: [PATCH] Limit string tag visitors to 1024 elements
diff --git a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java diff --git a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
index b45bb4ddf6b586ba1285db230e0bc3d1b5e447e8..4a46935cac263325a87a1b0bf32302839a75516e 100644 index e07cc7970955ce240754cfe424d768c2bba0241a..a4f41bb4ec6cb20f782668c714229b61415cfdfb 100644
--- a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java --- a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
+++ b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java +++ b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
@@ -89,6 +89,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor { @@ -89,6 +89,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
public void visitByteArray(ByteArrayTag element) { public void visitByteArray(ByteArrayTag element) {
StringBuilder stringBuilder = new StringBuilder("[").append("B").append(";"); StringBuilder stringBuilder = (new StringBuilder("[")).append("B").append(";");
byte[] bs = element.getAsByteArray(); byte[] bs = element.getAsByteArray();
+ if (bs.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors + if (bs.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
for (int i = 0; i < bs.length; i++) { for(int i = 0; i < bs.length; ++i) {
stringBuilder.append(" ").append(bs[i]).append("B"); stringBuilder.append(" ").append((int)bs[i]).append("B");
@@ -105,6 +106,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor { @@ -105,6 +106,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
public void visitIntArray(IntArrayTag element) { public void visitIntArray(IntArrayTag element) {
StringBuilder stringBuilder = new StringBuilder("[").append("I").append(";"); StringBuilder stringBuilder = (new StringBuilder("[")).append("I").append(";");
int[] is = element.getAsIntArray(); int[] is = element.getAsIntArray();
+ if (is.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors + if (is.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
for (int i = 0; i < is.length; i++) { for(int i = 0; i < is.length; ++i) {
stringBuilder.append(" ").append(is[i]); stringBuilder.append(" ").append(is[i]);
@@ -122,6 +124,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor { @@ -122,6 +124,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
String string = "L"; String string = "L";
StringBuilder stringBuilder = new StringBuilder("[").append("L").append(";"); StringBuilder stringBuilder = (new StringBuilder("[")).append("L").append(";");
long[] ls = element.getAsLongArray(); long[] ls = element.getAsLongArray();
+ if (ls.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors + if (ls.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
for (int i = 0; i < ls.length; i++) { for(int i = 0; i < ls.length; ++i) {
stringBuilder.append(" ").append(ls[i]).append("L"); stringBuilder.append(" ").append(ls[i]).append("L");
@@ -136,7 +139,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor { @@ -136,7 +139,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
@@ -51,7 +51,7 @@ index b45bb4ddf6b586ba1285db230e0bc3d1b5e447e8..4a46935cac263325a87a1b0bf3230283
} else { } else {
StringBuilder stringBuilder = new StringBuilder("{"); StringBuilder stringBuilder = new StringBuilder("{");
diff --git a/src/main/java/net/minecraft/nbt/StringTagVisitor.java b/src/main/java/net/minecraft/nbt/StringTagVisitor.java diff --git a/src/main/java/net/minecraft/nbt/StringTagVisitor.java b/src/main/java/net/minecraft/nbt/StringTagVisitor.java
index d8892641d5671fa100aeb43d42ebb6103a2d280c..d10242ecd6f8442e1af3f4cd13f769517b33058a 100644 index a687a0f17df30126d53a1e3a669dc6d157c23ed5..2c50f41dd8034af16fcceca75eeb6c7a9940e327 100644
--- a/src/main/java/net/minecraft/nbt/StringTagVisitor.java --- a/src/main/java/net/minecraft/nbt/StringTagVisitor.java
+++ b/src/main/java/net/minecraft/nbt/StringTagVisitor.java +++ b/src/main/java/net/minecraft/nbt/StringTagVisitor.java
@@ -53,6 +53,7 @@ public class StringTagVisitor implements TagVisitor { @@ -53,6 +53,7 @@ public class StringTagVisitor implements TagVisitor {
@@ -60,7 +60,7 @@ index d8892641d5671fa100aeb43d42ebb6103a2d280c..d10242ecd6f8442e1af3f4cd13f76951
byte[] bs = element.getAsByteArray(); byte[] bs = element.getAsByteArray();
+ if (bs.length > 1024) { this.builder.append(']'); return; } // Scissors + if (bs.length > 1024) { this.builder.append(']'); return; } // Scissors
for (int i = 0; i < bs.length; i++) { for(int i = 0; i < bs.length; ++i) {
if (i != 0) { if (i != 0) {
@@ -69,6 +70,7 @@ public class StringTagVisitor implements TagVisitor { @@ -69,6 +70,7 @@ public class StringTagVisitor implements TagVisitor {
public void visitIntArray(IntArrayTag element) { public void visitIntArray(IntArrayTag element) {
@@ -68,7 +68,7 @@ index d8892641d5671fa100aeb43d42ebb6103a2d280c..d10242ecd6f8442e1af3f4cd13f76951
int[] is = element.getAsIntArray(); int[] is = element.getAsIntArray();
+ if (is.length > 1024) { this.builder.append(']'); return; } // Scissors + if (is.length > 1024) { this.builder.append(']'); return; } // Scissors
for (int i = 0; i < is.length; i++) { for(int i = 0; i < is.length; ++i) {
if (i != 0) { if (i != 0) {
@@ -85,6 +87,7 @@ public class StringTagVisitor implements TagVisitor { @@ -85,6 +87,7 @@ public class StringTagVisitor implements TagVisitor {
public void visitLongArray(LongArrayTag element) { public void visitLongArray(LongArrayTag element) {
@@ -76,7 +76,7 @@ index d8892641d5671fa100aeb43d42ebb6103a2d280c..d10242ecd6f8442e1af3f4cd13f76951
long[] ls = element.getAsLongArray(); long[] ls = element.getAsLongArray();
+ if (ls.length > 1024) { this.builder.append(']'); return; } // Scissors + if (ls.length > 1024) { this.builder.append(']'); return; } // Scissors
for (int i = 0; i < ls.length; i++) { for(int i = 0; i < ls.length; ++i) {
if (i != 0) { if (i != 0) {
@@ -100,6 +103,7 @@ public class StringTagVisitor implements TagVisitor { @@ -100,6 +103,7 @@ public class StringTagVisitor implements TagVisitor {
@Override @Override
@@ -84,7 +84,7 @@ index d8892641d5671fa100aeb43d42ebb6103a2d280c..d10242ecd6f8442e1af3f4cd13f76951
this.builder.append('['); this.builder.append('[');
+ if (element.size() > 1024) { this.builder.append(']'); return; } // Scissors + if (element.size() > 1024) { this.builder.append(']'); return; } // Scissors
for (int i = 0; i < element.size(); i++) { for(int i = 0; i < element.size(); ++i) {
if (i != 0) { if (i != 0) {
@@ -116,6 +120,7 @@ public class StringTagVisitor implements TagVisitor { @@ -116,6 +120,7 @@ public class StringTagVisitor implements TagVisitor {
public void visitCompound(CompoundTag compound) { public void visitCompound(CompoundTag compound) {
@@ -95,48 +95,48 @@ index d8892641d5671fa100aeb43d42ebb6103a2d280c..d10242ecd6f8442e1af3f4cd13f76951
for(String string : list) { for(String string : list) {
diff --git a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java diff --git a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
index 6644359d68706b7c3af2f782c33f930387c221d7..b76cd0ff6f60d83da8754ef788bc0e669b8b4f9c 100644 index 149def3da0b92f64e4fc04630965dce44884f938..c9d753f37bd65e35f8a4e2eb5c6fe8f74d5d1606 100644
--- a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java --- a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
+++ b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java +++ b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
@@ -105,6 +105,7 @@ public class TextComponentTagVisitor implements TagVisitor { @@ -97,6 +97,7 @@ public class TextComponentTagVisitor implements TagVisitor {
Component component = Component.literal("B").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE); Component component = Component.literal("B").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
MutableComponent mutableComponent = Component.literal("[").append(component).append(";"); MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
byte[] bs = element.getAsByteArray(); byte[] bs = element.getAsByteArray();
+ if (bs.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors + if (bs.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
for (int i = 0; i < bs.length; i++) { for(int i = 0; i < bs.length; ++i) {
MutableComponent mutableComponent2 = Component.literal(String.valueOf(bs[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER); MutableComponent mutableComponent2 = Component.literal(String.valueOf((int)bs[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER);
@@ -123,6 +124,7 @@ public class TextComponentTagVisitor implements TagVisitor { @@ -115,6 +116,7 @@ public class TextComponentTagVisitor implements TagVisitor {
Component component = Component.literal("I").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE); Component component = Component.literal("I").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
MutableComponent mutableComponent = Component.literal("[").append(component).append(";"); MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
int[] is = element.getAsIntArray(); int[] is = element.getAsIntArray();
+ if (is.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors + if (is.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
for (int i = 0; i < is.length; i++) { for(int i = 0; i < is.length; ++i) {
mutableComponent.append(" ").append(Component.literal(String.valueOf(is[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER)); mutableComponent.append(" ").append(Component.literal(String.valueOf(is[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER));
@@ -140,6 +142,7 @@ public class TextComponentTagVisitor implements TagVisitor { @@ -132,6 +134,7 @@ public class TextComponentTagVisitor implements TagVisitor {
Component component = Component.literal("L").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE); Component component = Component.literal("L").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
MutableComponent mutableComponent = Component.literal("[").append(component).append(";"); MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
long[] ls = element.getAsLongArray(); long[] ls = element.getAsLongArray();
+ if (ls.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors + if (ls.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
for (int i = 0; i < ls.length; i++) { for(int i = 0; i < ls.length; ++i) {
Component component2 = Component.literal(String.valueOf(ls[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER); Component component2 = Component.literal(String.valueOf(ls[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER);
@@ -155,7 +158,7 @@ public class TextComponentTagVisitor implements TagVisitor { @@ -147,7 +150,7 @@ public class TextComponentTagVisitor implements TagVisitor {
@Override @Override
public void visitList(ListTag element) { public void visitList(ListTag element) {
- if (element.isEmpty()) { - if (element.isEmpty()) {
+ if (element.isEmpty() || element.size() > 1024) { // Scissors + if (element.isEmpty() || element.size() > 1024) { // Scissors
this.result = Component.literal("[]"); this.result = Component.literal("[]");
} else if (this.depth >= 64) { } else if (INLINE_ELEMENT_TYPES.contains(element.getElementType()) && element.size() <= 8) {
this.result = Component.literal("[").append(TOO_DEEP).append("]"); String string = ELEMENT_SEPARATOR + " ";
@@ -202,7 +205,7 @@ public class TextComponentTagVisitor implements TagVisitor { @@ -190,7 +193,7 @@ public class TextComponentTagVisitor implements TagVisitor {
@Override @Override
public void visitCompound(CompoundTag compound) { public void visitCompound(CompoundTag compound) {
- if (compound.isEmpty()) { - if (compound.isEmpty()) {
+ if (compound.isEmpty() || compound.size() > 1024) { // Scissors + if (compound.isEmpty() || compound.size() > 1024) { // Scissors
this.result = Component.literal("{}"); this.result = Component.literal("{}");
} else if (this.depth >= 64) { } else {
this.result = Component.literal("{").append(TOO_DEEP).append("}"); MutableComponent mutableComponent = Component.literal("{");

View File

@@ -1,34 +1,34 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Video <videogamesm12@gmail.com>
Date: Wed, 8 May 2024 12:46:29 -0500 Date: Mon, 11 Apr 2022 13:33:52 -0600
Subject: [PATCH] Fixes creative-killing potion effects and certain potion Subject: [PATCH] Fixes creative-killing potion effects and certain potion
effect overflows effect overflows
diff --git a/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java b/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java diff --git a/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java b/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java
index b95afa9f6b7cf6c522ff5ec278adec7a9a851e9a..3f65f24936cdf3379e39bab3cd8bd46aacd95518 100644 index 1c7794de5f0a7238b944c9473e2cc9d011ef2306..9c594c504611b9da5fcd119284b2dcb4b59d3bf4 100644
--- a/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java --- a/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java
+++ b/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java
@@ -15,6 +15,10 @@ class HealOrHarmMobEffect extends InstantenousMobEffect { @@ -16,6 +16,11 @@ class HealOrHarmMobEffect extends InstantenousMobEffect {
@Override @Override
public boolean applyEffectTick(LivingEntity entity, int amplifier) { public void applyEffectTick(LivingEntity entity, int amplifier) {
super.applyEffectTick(entity, amplifier);
+ // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't. + // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't.
+ if (entity instanceof net.minecraft.world.entity.player.Player player && (player.isCreative() || player.isInvulnerable())) return false; + if (entity instanceof net.minecraft.world.entity.player.Player player && (player.isCreative() || player.isInvulnerable())) return;
+ amplifier = Math.min(Math.abs(amplifier), 124); + amplifier = Math.min(Math.abs(amplifier), 124);
+ // Scissors end + // Scissors end
+
if (this.isHarm == entity.isInvertedHealAndHarm()) { if (this.isHarm == entity.isInvertedHealAndHarm()) {
entity.heal((float) Math.max(4 << amplifier, 0), org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.MAGIC); // CraftBukkit entity.heal((float) Math.max(4 << amplifier, 0), org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.MAGIC); // CraftBukkit
} else { } else {
@@ -28,6 +32,11 @@ class HealOrHarmMobEffect extends InstantenousMobEffect { @@ -27,6 +32,10 @@ class HealOrHarmMobEffect extends InstantenousMobEffect {
@Override
public void applyInstantenousEffect(@Nullable Entity source, @Nullable Entity attacker, LivingEntity target, int amplifier, double proximity) { public void applyInstantenousEffect(@Nullable Entity source, @Nullable Entity attacker, LivingEntity target, int amplifier, double proximity) {
int j; int j;
+ // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't. + // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't.
+ if (target instanceof net.minecraft.world.entity.player.Player player && (player.isCreative() || player.isInvulnerable())) return; + if (target instanceof net.minecraft.world.entity.player.Player player && (player.isCreative() || player.isInvulnerable())) return;
+ amplifier = Math.min(Math.abs(amplifier), 124); + amplifier = Math.min(Math.abs(amplifier), 124);
+ // Scissors end + // Scissors end
+
if (this.isHarm == target.isInvertedHealAndHarm()) { if (this.isHarm == target.isInvertedHealAndHarm()) {
j = (int) (proximity * (double) (4 << amplifier) + 0.5D); j = (int) (proximity * (double) (4 << amplifier) + 0.5D);
target.heal((float) j, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.MAGIC); // CraftBukkit

View File

@@ -1,19 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Wed, 8 May 2024 12:48:19 -0500 Date: Mon, 18 Apr 2022 16:55:19 +0100
Subject: [PATCH] Fix negative death times Subject: [PATCH] Fix negative death times
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 6e043457a29a890bcefd27fc5bb07c1a7e4e30f7..8ff815b1bb77eab735c65fa9c6bf469dca8562c4 100644 index bc908b75cb99536df658281ae7f8b4eeedbbedc9..8c81cd6a6563e4eb46a26c30baa3dfd9df3ecf1f 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -650,7 +650,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -628,7 +628,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
protected void tickDeath() { protected void tickDeath() {
++this.deathTime; ++this.deathTime;
- if (this.deathTime >= 20 && !this.level().isClientSide() && !this.isRemoved()) { - if (this.deathTime >= 20 && !this.level().isClientSide() && !this.isRemoved()) {
+ if ((this.deathTime >= 20 || this.deathTime <= 0) && !this.level().isClientSide() && !this.isRemoved()) { // Scissors + if ((this.deathTime >= 20 || this.deathTime <= 0) && !this.level().isClientSide() && !this.isRemoved()) { // Scissors
this.level().broadcastEntityEvent(this, (byte) 60); this.level().broadcastEntityEvent(this, (byte) 60);
this.remove(Entity.RemovalReason.KILLED, EntityRemoveEvent.Cause.DEATH); // CraftBukkit - add Bukkit remove cause this.remove(Entity.RemovalReason.KILLED);
} }

View File

@@ -1,23 +1,23 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Wed, 8 May 2024 13:00:39 -0500 Date: Thu, 21 Apr 2022 13:52:32 +0100
Subject: [PATCH] Limit amount of vehicle collision checks to 3 and discard Subject: [PATCH] Limit amount of vehicle collision checks to 3 and discard
vehicles if they collide with more than 15 other entities vehicles if they collide with more than 15 other entities
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
index 4d7454e5a64fc18e63793a221daa94617f17c666..0ebc9b469d684251ba73989b3f7483522faf48d7 100644 index c906ca07509939a06b9aaf2da0dafb172830a638..c1e91ea440202014419aa9601915f9288a41e32c 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
@@ -8,6 +8,7 @@ import com.mojang.datafixers.util.Pair; @@ -8,6 +8,7 @@ import com.mojang.datafixers.util.Pair;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
+import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeUnit; // Scissors
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.BlockUtil; import net.minecraft.BlockUtil;
import net.minecraft.Util; import net.minecraft.Util;
@@ -101,6 +102,7 @@ public abstract class AbstractMinecart extends VehicleEntity { @@ -104,6 +105,7 @@ public abstract class AbstractMinecart extends VehicleEntity {
private double flyingX = 0.95; private double flyingX = 0.95;
private double flyingY = 0.95; private double flyingY = 0.95;
private double flyingZ = 0.95; private double flyingZ = 0.95;
@@ -25,7 +25,7 @@ index 4d7454e5a64fc18e63793a221daa94617f17c666..0ebc9b469d684251ba73989b3f748352
public double maxSpeed = 0.4D; public double maxSpeed = 0.4D;
// CraftBukkit end // CraftBukkit end
@@ -381,8 +383,8 @@ public abstract class AbstractMinecart extends VehicleEntity { @@ -384,8 +386,8 @@ public abstract class AbstractMinecart extends VehicleEntity {
if (this.getMinecartType() == AbstractMinecart.Type.RIDEABLE && this.getDeltaMovement().horizontalDistanceSqr() > 0.01D) { if (this.getMinecartType() == AbstractMinecart.Type.RIDEABLE && this.getDeltaMovement().horizontalDistanceSqr() > 0.01D) {
List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D), EntitySelector.pushableBy(this)); List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D), EntitySelector.pushableBy(this));
@@ -36,13 +36,14 @@ index 4d7454e5a64fc18e63793a221daa94617f17c666..0ebc9b469d684251ba73989b3f748352
while (iterator.hasNext()) { while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next(); Entity entity = (Entity) iterator.next();
@@ -411,6 +413,13 @@ public abstract class AbstractMinecart extends VehicleEntity { @@ -414,6 +416,14 @@ public abstract class AbstractMinecart extends VehicleEntity {
entity.push(this); entity.push(this);
} }
} }
+
+ // Scissors start - Add a collision debounce + // Scissors start - Add a collision debounce
+ if (list.size() > 15) { + if (list.size() > 15) {
+ this.discard(null); + this.discard();
+ } else if (list.size() > 3) { + } else if (list.size() > 3) {
+ lastLargeCollision = System.currentTimeMillis(); + lastLargeCollision = System.currentTimeMillis();
+ } + }
@@ -51,27 +52,26 @@ index 4d7454e5a64fc18e63793a221daa94617f17c666..0ebc9b469d684251ba73989b3f748352
} else { } else {
Iterator iterator1 = this.level().getEntities(this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D)).iterator(); Iterator iterator1 = this.level().getEntities(this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D)).iterator();
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
index b068cff9b5aa457d65b679529956e8210296d799..8274154f2ce4a752ea49790c6526ecb353934a04 100644 index c041c0b81be41cfd128c2f5ba56a5329d50b2efc..7dcbdcb30d264cf76fd975489918509e6e589127 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
@@ -4,6 +4,7 @@ import com.google.common.collect.Lists; @@ -5,6 +5,7 @@ import com.google.common.collect.UnmodifiableIterator;
import com.google.common.collect.UnmodifiableIterator;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
+import java.util.concurrent.TimeUnit;
import java.util.function.IntFunction; import java.util.function.IntFunction;
+import java.util.concurrent.TimeUnit; // Scissors
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.BlockUtil; import net.minecraft.BlockUtil;
@@ -107,6 +108,8 @@ public class Boat extends VehicleEntity implements VariantHolder<Boat.Type> { import net.minecraft.core.BlockPos;
@@ -108,6 +109,7 @@ public class Boat extends VehicleEntity implements VariantHolder<Boat.Type> {
public double unoccupiedDeceleration = -1;
public boolean landBoats = false; public boolean landBoats = false;
// CraftBukkit end // CraftBukkit end
+ private long lastLargeCollision = 0L; // Scissors - Add a collision debounce + private long lastLargeCollision = 0L; // Scissors - Add a collision debounce
+
public Boat(EntityType<? extends Boat> type, Level world) { public Boat(EntityType<? extends Boat> type, Level world) {
super(type, world); super(type, world);
this.paddlePositions = new float[2]; @@ -408,9 +410,9 @@ public class Boat extends VehicleEntity implements VariantHolder<Boat.Type> {
@@ -401,9 +404,9 @@ public class Boat extends VehicleEntity implements VariantHolder<Boat.Type> {
this.checkInsideBlocks(); this.checkInsideBlocks();
List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox().inflate(0.20000000298023224D, -0.009999999776482582D, 0.20000000298023224D), EntitySelector.pushableBy(this)); List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox().inflate(0.20000000298023224D, -0.009999999776482582D, 0.20000000298023224D), EntitySelector.pushableBy(this));
@@ -83,13 +83,14 @@ index b068cff9b5aa457d65b679529956e8210296d799..8274154f2ce4a752ea49790c6526ecb3
while (iterator.hasNext()) { while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next(); Entity entity = (Entity) iterator.next();
@@ -416,6 +419,13 @@ public class Boat extends VehicleEntity implements VariantHolder<Boat.Type> { @@ -423,6 +425,14 @@ public class Boat extends VehicleEntity implements VariantHolder<Boat.Type> {
} }
} }
} }
+
+ // Scissors start - Add collision debounce + // Scissors start - Add collision debounce
+ if (list.size() > 15) { + if (list.size() > 15) {
+ this.discard(null); + this.discard();
+ } else if (list.size() > 3) { + } else if (list.size() > 3) {
+ lastLargeCollision = System.currentTimeMillis(); + lastLargeCollision = System.currentTimeMillis();
+ } + }

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Wed, 8 May 2024 13:01:45 -0500 Date: Sat, 11 Jun 2022 22:56:59 -0500
Subject: [PATCH] Add custom classes used by Scissors Subject: [PATCH] Add custom classes used by Scissors
@@ -41,19 +41,18 @@ index 0000000000000000000000000000000000000000..754b578b575137a9c48cb20dee965a93
+} +}
diff --git a/src/main/java/me/totalfreedom/scissors/NbtUtility.java b/src/main/java/me/totalfreedom/scissors/NbtUtility.java diff --git a/src/main/java/me/totalfreedom/scissors/NbtUtility.java b/src/main/java/me/totalfreedom/scissors/NbtUtility.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..9ad690056bffd9e85e469c5a54dffa3e1e13db5a index 0000000000000000000000000000000000000000..b3efac47ee700d5a7ff26452d6bcbf2f687a32cf
--- /dev/null --- /dev/null
+++ b/src/main/java/me/totalfreedom/scissors/NbtUtility.java +++ b/src/main/java/me/totalfreedom/scissors/NbtUtility.java
@@ -0,0 +1,76 @@ @@ -0,0 +1,75 @@
+package me.totalfreedom.scissors; +package me.totalfreedom.scissors;
+ +
+import java.nio.charset.StandardCharsets;
+import javax.annotation.Nullable;
+import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.ListTag;
+import net.minecraft.nbt.Tag; +import net.minecraft.nbt.Tag;
+ +
+import javax.annotation.Nullable;
+import java.nio.charset.StandardCharsets;
+
+public class NbtUtility +public class NbtUtility
+{ +{
+ public static final long MAXIMUM_SIZE = (256 * 1024); + public static final long MAXIMUM_SIZE = (256 * 1024);

View File

@@ -0,0 +1,313 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Mon, 18 Apr 2022 03:56:09 +0100
Subject: [PATCH] Reset large tags
diff --git a/src/main/java/net/minecraft/world/ContainerHelper.java b/src/main/java/net/minecraft/world/ContainerHelper.java
index 4092c7a8c2b0d9d26e6f4d97386735236300d132..04c47cf1a920ae6c356449df801227ee14f6dfb7 100644
--- a/src/main/java/net/minecraft/world/ContainerHelper.java
+++ b/src/main/java/net/minecraft/world/ContainerHelper.java
@@ -2,6 +2,7 @@ package net.minecraft.world;
import java.util.List;
import java.util.function.Predicate;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
@@ -22,10 +23,12 @@ public class ContainerHelper {
public static CompoundTag saveAllItems(CompoundTag nbt, NonNullList<ItemStack> stacks, boolean setIfEmpty) {
ListTag listTag = new ListTag();
+ long total = 0; // Scissors
for(int i = 0; i < stacks.size(); ++i) {
ItemStack itemStack = stacks.get(i);
if (!itemStack.isEmpty()) {
+ total += NbtUtility.getTagSize(itemStack.getTag()); // Scissors
CompoundTag compoundTag = new CompoundTag();
compoundTag.putByte("Slot", (byte)i);
itemStack.save(compoundTag);
@@ -33,7 +36,7 @@ public class ContainerHelper {
}
}
- if (!listTag.isEmpty() || setIfEmpty) {
+ if ((!listTag.isEmpty() || setIfEmpty) && !(total > NbtUtility.MAXIMUM_SIZE)) { // Scissors
nbt.put("Items", listTag);
}
@@ -42,11 +45,19 @@ public class ContainerHelper {
public static void loadAllItems(CompoundTag nbt, NonNullList<ItemStack> stacks) {
ListTag listTag = nbt.getList("Items", 10);
+ long total = 0; // Scissors - Account for items inside containers
for(int i = 0; i < listTag.size(); ++i) {
CompoundTag compoundTag = listTag.getCompound(i);
int j = compoundTag.getByte("Slot") & 255;
if (j >= 0 && j < stacks.size()) {
+ // Scissors start
+ total += NbtUtility.getTagSize(compoundTag);
+ if (total >= NbtUtility.MAXIMUM_SIZE) {
+ stacks.clear();
+ break;
+ }
+ // Scissors end
stacks.set(j, ItemStack.of(compoundTag));
}
}
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index de277d61b718fe07a87d75a2547bb1c7f8553aa1..e2dbfe581717cc107d89206c1ba46014a6965693 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -23,6 +23,7 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.advancements.CriteriaTriggers;
@@ -277,6 +278,12 @@ public final class ItemStack {
// CraftBukkit - break into own method
private void load(CompoundTag nbttagcompound) {
+ // Scissors start - Reset large tags
+ if (NbtUtility.isTooLarge(nbttagcompound)) {
+ // Reset tag without destroying item
+ nbttagcompound = NbtUtility.Item.removeItemData(nbttagcompound);
+ }
+ // Scissors end
this.item = (Item) BuiltInRegistries.ITEM.get(new ResourceLocation(nbttagcompound.getString("id")));
this.count = nbttagcompound.getByte("Count");
if (nbttagcompound.contains("tag", 10)) {
@@ -584,7 +591,11 @@ public final class ItemStack {
nbt.putString("id", minecraftkey == null ? "minecraft:air" : minecraftkey.toString());
nbt.putByte("Count", (byte) this.count);
if (this.tag != null) {
- nbt.put("tag", this.tag.copy());
+ // Scissors start - Don't save large tags
+ if (!NbtUtility.isTooLarge(this.tag)) {
+ nbt.put("tag", this.tag.copy());
+ }
+ // Scissors end
}
return nbt;
@@ -918,6 +929,7 @@ public final class ItemStack {
// Paper end
public void setTag(@Nullable CompoundTag nbt) {
+ if (NbtUtility.isTooLarge(nbt)) return; // Scissors - Ignore large tags
this.tag = nbt;
this.processEnchantOrder(this.tag); // Paper
if (this.getItem().canBeDepleted()) {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index f5ad7ddf13cbb6452c2927aef9b54eae3335b4c6..041e3c8fb7c9ca69a7c7c1c952ed9915a75d7752 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -9,6 +9,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.SharedConstants;
import net.minecraft.Util;
import net.minecraft.core.BlockPos;
@@ -212,6 +213,17 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>();
public List<ItemStack> getContents() {
+ // Scissors start - Account for items inside containers
+ long total = 0;
+
+ for (ItemStack item : this.items) {
+ total += NbtUtility.getTagSize(item.getOrCreateTag());
+ }
+
+ if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear();
+ }
+ // Scissors end
return this.items;
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
index 416aa989ebb18a8741cc9d605a1180ab830f6643..a9a8c9e68e5b767dec2c26495685da88e0caa627 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
@@ -1,5 +1,6 @@
package net.minecraft.world.level.block.entity;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
@@ -34,6 +35,17 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity {
@Override
public List<ItemStack> getContents() {
+ // Scissors start - Account for items inside containers
+ long total = 0;
+
+ for (ItemStack item : this.items) {
+ total += NbtUtility.getTagSize(item.getOrCreateTag());
+ }
+
+ if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear();
+ }
+ // Scissors end
return this.items;
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
index c57efcb9a79337ec791e4e8f6671612f0a82b441..2cbb8170953cb555411db8c171a3d1d91eb799bb 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
@@ -3,6 +3,7 @@ package net.minecraft.world.level.block.entity;
import java.util.Arrays;
import java.util.Iterator;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
@@ -73,6 +74,17 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
}
public List<ItemStack> getContents() {
+ // Scissors start - Account for items inside containers
+ long total = 0;
+
+ for (ItemStack item : this.items) {
+ total += NbtUtility.getTagSize(item.getOrCreateTag());
+ }
+
+ if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear();
+ }
+ // Scissors end
return this.items;
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java
index a71414397bd45ee7bcacfeef0041d80dfa25f114..f51abf1722e98d7ce9e616d84472d847e597eafb 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java
@@ -1,5 +1,6 @@
package net.minecraft.world.level.block.entity;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
@@ -40,6 +41,17 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement
private int maxStack = MAX_STACK;
public List<ItemStack> getContents() {
+ // Scissors start - Account for items inside containers
+ long total = 0;
+
+ for (ItemStack item : this.items) {
+ total += NbtUtility.getTagSize(item.getOrCreateTag());
+ }
+
+ if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear();
+ }
+ // Scissors end
return this.items;
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
index 881379681c39230a00b3a1f11cd87498984396c7..d0513b72cdaec3b67b9341d251367b193bafa40c 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
@@ -1,5 +1,6 @@
package net.minecraft.world.level.block.entity;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
@@ -28,6 +29,17 @@ public class DispenserBlockEntity extends RandomizableContainerBlockEntity {
private int maxStack = MAX_STACK;
public List<ItemStack> getContents() {
+ // Scissors start - Account for items inside containers
+ long total = 0;
+
+ for (ItemStack item : this.items) {
+ total += NbtUtility.getTagSize(item.getOrCreateTag());
+ }
+
+ if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear();
+ }
+ // Scissors end
return this.items;
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index d4dcf7fe26474ae07374e7761d823bc5c8b54f97..7352183f7eaa1ddcd028e53f4b66a1c34e32b988 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -6,6 +6,7 @@ import java.util.function.BooleanSupplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
@@ -56,6 +57,17 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
private int maxStack = MAX_STACK;
public List<ItemStack> getContents() {
+ // Scissors start - Account for items inside containers
+ long total = 0;
+
+ for (ItemStack item : this.items) {
+ total += NbtUtility.getTagSize(item.getOrCreateTag());
+ }
+
+ if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear();
+ }
+ // Scissors end
return this.items;
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
index 1fa22445a4ecc8c08dbcf0cc6bd39dc5003604c4..9f12fbcd8d0c75de1d8c06bed2c64a0acdc877c9 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
@@ -4,6 +4,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.stream.IntStream;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
@@ -61,6 +62,17 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl
public boolean opened;
public List<ItemStack> getContents() {
+ // Scissors start - Account for items inside containers
+ long total = 0;
+
+ for (ItemStack item : this.itemStacks) {
+ total += NbtUtility.getTagSize(item.getOrCreateTag());
+ }
+
+ if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.itemStacks.clear();
+ }
+ // Scissors end
return this.itemStacks;
}

View File

@@ -1,15 +1,15 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Sat, 11 May 2024 12:24:26 -0500 Date: Tue, 17 May 2022 05:57:52 +0100
Subject: [PATCH] Don't log invalid teams to console Subject: [PATCH] Don't log invalid teams to console
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 8ff815b1bb77eab735c65fa9c6bf469dca8562c4..8768ab338836569d53e0a70cc5f097b5a6d721ec 100644 index 8c81cd6a6563e4eb46a26c30baa3dfd9df3ecf1f..b01c443746f0c4c8c37fb5955351eff1689be1c4 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -901,7 +901,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -860,7 +860,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
boolean flag = scoreboardteam != null && scoreboard.addPlayerToTeam(this.getStringUUID(), scoreboardteam); boolean flag = scoreboardteam != null && this.level().getScoreboard().addPlayerToTeam(this.getStringUUID(), scoreboardteam);
if (!flag) { if (!flag) {
- LivingEntity.LOGGER.warn("Unable to add mob to team \"{}\" (that team probably doesn't exist)", s); - LivingEntity.LOGGER.warn("Unable to add mob to team \"{}\" (that team probably doesn't exist)", s);

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Fixes out of bounds HangingEntity crash exploit
diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java
index bf2d91bbb4bf401696f5f5d14a67e3920a179084..e31102bb56fac4ffc1e114cc8ea2075af0f92e7f 100644 index 5f4c42c4ba44923cabb873bfad33abc2b1362e73..6608c98d1a517c307e16669e536dda6eb9f1e082 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java --- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java
@@ -279,6 +279,13 @@ public abstract class HangingEntity extends Entity { @@ -279,6 +279,13 @@ public abstract class HangingEntity extends Entity {

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Sat, 11 May 2024 12:31:03 -0500 Date: Sun, 10 Dec 2023 18:11:55 -0600
Subject: [PATCH] Add MasterBlockFireEvent Subject: [PATCH] Add MasterBlockFireEvent
diff --git a/src/main/java/net/minecraft/world/level/block/CommandBlock.java b/src/main/java/net/minecraft/world/level/block/CommandBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/CommandBlock.java b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
index ec1a8c60ccac50e5131f937c4262128fd2768331..385c73cc952caea21f6ebf5512fdf72bf121b953 100644 index 7ef14e4441a329c680a5dfe4bfb5033ffcb8f9d5..eff5bdf00b0aa7a9925ff59a62ead72509dc67b8 100644
--- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java --- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
@@ -4,6 +4,7 @@ import com.mojang.logging.LogUtils; @@ -4,6 +4,7 @@ import com.mojang.logging.LogUtils;
@@ -15,8 +15,8 @@ index ec1a8c60ccac50e5131f937c4262128fd2768331..385c73cc952caea21f6ebf5512fdf72b
+import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; +import me.totalfreedom.scissors.event.block.MasterBlockFireEvent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerLevel;
@@ -27,6 +28,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -28,6 +29,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
@@ -24,13 +24,14 @@ index ec1a8c60ccac50e5131f937c4262128fd2768331..385c73cc952caea21f6ebf5512fdf72b
import org.slf4j.Logger; import org.slf4j.Logger;
import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit
@@ -128,6 +130,13 @@ public class CommandBlock extends BaseEntityBlock implements GameMasterBlock { @@ -130,6 +132,14 @@ public class CommandBlock extends BaseEntityBlock implements GameMasterBlock {
} }
private void execute(BlockState state, Level world, BlockPos pos, BaseCommandBlock executor, boolean hasCommand) { private void execute(BlockState state, Level world, BlockPos pos, BaseCommandBlock executor, boolean hasCommand) {
+ // Scissors start - Add master block fire event + // Scissors start - Add master block fire event
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()));
+ if (!event.callEvent()) { + if (!event.callEvent())
+ {
+ return; + return;
+ } + }
+ // Scissors end + // Scissors end
@@ -39,7 +40,7 @@ index ec1a8c60ccac50e5131f937c4262128fd2768331..385c73cc952caea21f6ebf5512fdf72b
executor.performCommand(world); executor.performCommand(world);
} else { } else {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
index 922592f2073eaea8ca361a3a1efcda8b18bea21c..7fec97a00f271eca29beca0ec0862de4036dd546 100644 index 3a210e138b6ae065fd32e1b1e0e49999e20c4667..183c47a6fbf5201c38d5eb182049643862ca0964 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
@@ -2,6 +2,8 @@ package net.minecraft.world.level.block.entity; @@ -2,6 +2,8 @@ package net.minecraft.world.level.block.entity;
@@ -50,8 +51,8 @@ index 922592f2073eaea8ca361a3a1efcda8b18bea21c..7fec97a00f271eca29beca0ec0862de4
+import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; +import me.totalfreedom.scissors.event.block.MasterBlockFireEvent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup; import net.minecraft.core.Registry;
@@ -18,6 +20,7 @@ import net.minecraft.world.level.block.JigsawBlock; @@ -17,6 +19,7 @@ import net.minecraft.world.level.block.JigsawBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement; import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement;
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
@@ -59,14 +60,16 @@ index 922592f2073eaea8ca361a3a1efcda8b18bea21c..7fec97a00f271eca29beca0ec0862de4
public class JigsawBlockEntity extends BlockEntity { public class JigsawBlockEntity extends BlockEntity {
public static final String TARGET = "target"; public static final String TARGET = "target";
@@ -135,6 +138,14 @@ public class JigsawBlockEntity extends BlockEntity { @@ -131,6 +134,16 @@ public class JigsawBlockEntity extends BlockEntity {
} }
public void generate(ServerLevel world, int maxDepth, boolean keepJigsaws) { public void generate(ServerLevel world, int maxDepth, boolean keepJigsaws) {
+ // Scissors start - Add master block fire event + // Scissors start - Add master block fire event
+ final BlockPos pos = this.getBlockPos(); + final BlockPos pos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ()));
+ if (!event.callEvent()) { +
+ if (!event.callEvent())
+ {
+ return; + return;
+ } + }
+ // Scissors end + // Scissors end
@@ -75,7 +78,7 @@ index 922592f2073eaea8ca361a3a1efcda8b18bea21c..7fec97a00f271eca29beca0ec0862de4
Registry<StructureTemplatePool> registry = world.registryAccess().registryOrThrow(Registries.TEMPLATE_POOL); Registry<StructureTemplatePool> registry = world.registryAccess().registryOrThrow(Registries.TEMPLATE_POOL);
// Paper start - Replace getHolderOrThrow with a null check // Paper start - Replace getHolderOrThrow with a null check
diff --git a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
index ab3e35069a069040f72900a9581f41848e4c4653..d390b05486dcaa563269500b350aecd9dfa3bc28 100644 index 60c941bd67dc899ea923f8ee49412de01ce199db..9bcd07f8b5d266c39034e5c021da9ffb7262b474 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
@@ -5,6 +5,8 @@ import java.util.Objects; @@ -5,6 +5,8 @@ import java.util.Objects;
@@ -87,7 +90,7 @@ index ab3e35069a069040f72900a9581f41848e4c4653..d390b05486dcaa563269500b350aecd9
import net.minecraft.ResourceLocationException; import net.minecraft.ResourceLocationException;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@@ -30,6 +32,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.BlockRotProce @@ -29,6 +31,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.BlockRotProce
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
@@ -95,14 +98,25 @@ index ab3e35069a069040f72900a9581f41848e4c4653..d390b05486dcaa563269500b350aecd9
public class StructureBlockEntity extends BlockEntity { public class StructureBlockEntity extends BlockEntity {
private static final int SCAN_CORNER_BLOCKS_RANGE = 5; private static final int SCAN_CORNER_BLOCKS_RANGE = 5;
@@ -317,6 +320,14 @@ public class StructureBlockEntity extends BlockEntity { @@ -261,7 +264,7 @@ public class StructureBlockEntity extends BlockEntity {
return false;
} else {
BlockPos blockPos = this.getBlockPos();
- int i = 80;
+ // Scissors - Obfuscation fixes
BlockPos blockPos2 = new BlockPos(blockPos.getX() - 80, this.level.getMinBuildHeight(), blockPos.getZ() - 80);
BlockPos blockPos3 = new BlockPos(blockPos.getX() + 80, this.level.getMaxBuildHeight() - 1, blockPos.getZ() + 80);
Stream<BlockPos> stream = this.getRelatedCorners(blockPos2, blockPos3);
@@ -320,6 +323,16 @@ public class StructureBlockEntity extends BlockEntity {
if (this.structureName == null) { if (this.structureName == null) {
return false; return false;
} else { } else {
+ // Scissors start - Add master block fire event + // Scissors start - Add master block fire event
+ final BlockPos pos = this.getBlockPos(); + final BlockPos pos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ()));
+ if (!event.callEvent()) { +
+ if (!event.callEvent())
+ {
+ return false; + return false;
+ } + }
+ // Scissors end + // Scissors end
@@ -110,21 +124,24 @@ index ab3e35069a069040f72900a9581f41848e4c4653..d390b05486dcaa563269500b350aecd9
BlockPos blockPos = this.getBlockPos().offset(this.structurePos); BlockPos blockPos = this.getBlockPos().offset(this.structurePos);
ServerLevel serverLevel = (ServerLevel)this.level; ServerLevel serverLevel = (ServerLevel)this.level;
StructureTemplateManager structureTemplateManager = serverLevel.getStructureManager(); StructureTemplateManager structureTemplateManager = serverLevel.getStructureManager();
@@ -368,6 +379,13 @@ public class StructureBlockEntity extends BlockEntity { @@ -371,6 +384,16 @@ public class StructureBlockEntity extends BlockEntity {
if (structureTemplate == null) { if (structureTemplate == null) {
return false; return false;
} else { } else {
+ // Scissors start - Add master block fire event + // Scissors start - Add master block fire event
+ final BlockPos blockPos = this.getBlockPos(); + final BlockPos blockPos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
+ if (!event.callEvent()) { +
+ if (!event.callEvent())
+ {
+ return false; + return false;
+ } + }
+ // Scissors end + // Scissors end
+
this.loadStructureInfo(structureTemplate); this.loadStructureInfo(structureTemplate);
return true; return true;
} }
@@ -408,6 +426,14 @@ public class StructureBlockEntity extends BlockEntity { @@ -407,6 +430,15 @@ public class StructureBlockEntity extends BlockEntity {
} }
public void unloadStructure() { public void unloadStructure() {
@@ -132,7 +149,8 @@ index ab3e35069a069040f72900a9581f41848e4c4653..d390b05486dcaa563269500b350aecd9
+ final BlockPos blockPos = this.getBlockPos(); + final BlockPos blockPos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
+ +
+ if (!event.callEvent()) { + if (!event.callEvent())
+ {
+ return; + return;
+ } + }
+ // Scissors end + // Scissors end

View File

@@ -1,23 +1,21 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Sat, 11 May 2024 13:02:20 -0500 Date: Tue, 5 Jul 2022 04:12:31 +0100
Subject: [PATCH] Add spectator teleport event Subject: [PATCH] Add spectator teleport event
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 5e9202bc7fc649764568b55d66ba0d684118c00c..31a6be18075723eb53fd1cbb664429e49909cf66 100644 index 64255f7db85886421d5029766e8a6d1eadb94cff..2a3f4e6bfc6b122bb2102163381de8c78f06f1b5 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -29,6 +29,8 @@ import java.util.function.Consumer; @@ -1,5 +1,6 @@
import java.util.stream.Collectors; package net.minecraft.server.network;
import java.util.stream.Stream;
import javax.annotation.Nullable; +import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors
+ import com.google.common.collect.Lists;
+import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; import com.google.common.primitives.Floats;
import net.minecraft.ChatFormatting; import com.mojang.authlib.GameProfile;
import net.minecraft.Util; @@ -2037,6 +2038,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
import net.minecraft.advancements.AdvancementHolder;
@@ -2033,6 +2035,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
Entity entity = packet.getEntity(worldserver); Entity entity = packet.getEntity(worldserver);
if (entity != null) { if (entity != null) {

View File

@@ -1,22 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 18:20:01 -0500
Subject: [PATCH] Limit map decorations
diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
index cf8ae635fce7ea66d4e1ab1dc05575f035fa95ef..6983cf8ecf299285db200ce519c781882c0d2a9b 100644
--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
+++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
@@ -366,6 +366,11 @@ public class MapItemSavedData extends SavedData {
}
private void addDecoration(Holder<MapDecorationType> type, @Nullable LevelAccessor world, String key, double x, double z, double rotation, @Nullable Component text) {
+ // Scissors start - Limit decoration count
+ if (this.decorations.size() > 32) {
+ return;
+ }
+ // Scissors end
int i = 1 << this.scale;
float f = (float) (x - (double) this.centerX) / (float) i;
float f1 = (float) (z - (double) this.centerZ) / (float) i;

View File

@@ -1,22 +1,22 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Sat, 11 May 2024 13:04:21 -0500 Date: Sun, 10 Jul 2022 02:55:01 +0100
Subject: [PATCH] Prevent invalid container events Subject: [PATCH] Prevent invalid container events
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 2b93d90da92559da021bac81bb3bc0a4e556ffb6..f8c6d5e2e384e3cf549c68b71c77b0f376cf32f0 100644 index 2a3f4e6bfc6b122bb2102163381de8c78f06f1b5..2ac044f9e4c4c80263a34f9294cb69829bca132e 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -31,6 +31,7 @@ import java.util.stream.Stream; @@ -29,6 +29,7 @@ import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable; import javax.annotation.Nullable;
+import net.kyori.adventure.text.format.NamedTextColor; // Scissors
import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent;
+import net.kyori.adventure.text.format.NamedTextColor;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.SharedConstants;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.advancements.AdvancementHolder; @@ -2909,6 +2910,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2964,6 +2965,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
return; return;
} }

View File

@@ -0,0 +1,73 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 10:29:03 +0100
Subject: [PATCH] Disable running commands in books by default
diff --git a/src/main/java/net/minecraft/world/item/WrittenBookItem.java b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
index 31911c09fe15753ae32fa39417bdc9e9de552a88..b810a5afcb2343174e37efb7dd8a36b968b07c3a 100644
--- a/src/main/java/net/minecraft/world/item/WrittenBookItem.java
+++ b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
@@ -2,6 +2,7 @@ package net.minecraft.world.item;
import java.util.List;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.BlockPos;
@@ -9,8 +10,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.ComponentUtils;
+import net.minecraft.network.chat.*; // Scissors
import net.minecraft.stats.Stats;
import net.minecraft.util.StringUtil;
import net.minecraft.world.InteractionHand;
@@ -161,9 +161,43 @@ public class WrittenBookItem extends Item {
component2 = Component.literal(text);
}
- return Component.Serializer.toJson(component2);
+ return Component.Serializer.toJson(!ScissorsConfig.runCommandsInBooks ? sanitize(component2, 0) : component2); // Scissors - Allow server owners to disable run command in books
}
+ // Scissors start - Allow server owners to disable run command in books
+ public static Component sanitize(Component component, int depth)
+ {
+ if (depth > 128)
+ {
+ return Component.nullToEmpty("Sanitization function depth limit exceeded");
+ }
+
+ MutableComponent component2 = component.copy();
+
+ final Style style = component2.getStyle();
+ final ClickEvent clickEvent = style.getClickEvent();
+
+ if (clickEvent != null && clickEvent.getAction().equals(ClickEvent.Action.RUN_COMMAND))
+ {
+ final String clickEventValue = clickEvent.getValue();
+
+ component2 = component2.copy().setStyle(style
+ .withClickEvent(null)
+ .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.nullToEmpty("Would've " + (clickEventValue.startsWith("/") ? "ran" : "said") + ": " + clickEvent.getValue())))
+ );
+ }
+
+ final List<Component> processedExtra = component2.getSiblings()
+ .stream()
+ .map(comp -> sanitize(comp, depth + 1))
+ .toList();
+ component2.getSiblings().clear();
+ component2.getSiblings().addAll(processedExtra);
+
+ return component2;
+ }
+ // Scissors end
+
@Override
public boolean isFoil(ItemStack stack) {
return true;

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Luna <lunahatesgogle@gmail.com>
Date: Sat, 11 May 2024 13:08:40 -0500 Date: Mon, 11 Jul 2022 17:29:12 -0300
Subject: [PATCH] Validate block entity/entity tag query positions Subject: [PATCH] Validate block entity/entity tag query positions
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 65284355b6fc97eb1967e5c6fd51bc5b018e3e29..26eb85c9be17fcac00a5f31c2ede3111319c4044 100644 index 2ac044f9e4c4c80263a34f9294cb69829bca132e..889f142b6f87d4ccf4c1d2ffd379c96fbbfddd44 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1266,7 +1266,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -1265,7 +1265,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
if (this.player.hasPermissions(2)) { if (this.player.hasPermissions(2)) {
Entity entity = this.player.level().getEntity(packet.getEntityId()); Entity entity = this.player.level().getEntity(packet.getEntityId());
@@ -17,9 +17,9 @@ index 65284355b6fc97eb1967e5c6fd51bc5b018e3e29..26eb85c9be17fcac00a5f31c2ede3111
CompoundTag nbttagcompound = entity.saveWithoutId(new CompoundTag()); CompoundTag nbttagcompound = entity.saveWithoutId(new CompoundTag());
this.player.connection.send(new ClientboundTagQueryPacket(packet.getTransactionId(), nbttagcompound)); this.player.connection.send(new ClientboundTagQueryPacket(packet.getTransactionId(), nbttagcompound));
@@ -1298,7 +1298,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -1297,7 +1297,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override @Override
public void handleBlockEntityTagQuery(ServerboundBlockEntityTagQueryPacket packet) { public void handleBlockEntityTagQuery(ServerboundBlockEntityTagQuery packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.hasPermissions(2)) { - if (this.player.hasPermissions(2)) {
+ // Scissors start - Validate block entity tag query positions + // Scissors start - Validate block entity tag query positions
@@ -27,5 +27,5 @@ index 65284355b6fc97eb1967e5c6fd51bc5b018e3e29..26eb85c9be17fcac00a5f31c2ede3111
+ && this.player.distanceToSqr(packet.getPos().getX(), packet.getPos().getY(), packet.getPos().getZ()) < 32 * 32) { + && this.player.distanceToSqr(packet.getPos().getX(), packet.getPos().getY(), packet.getPos().getZ()) < 32 * 32) {
+ // Scissors end + // Scissors end
BlockEntity tileentity = this.player.level().getBlockEntity(packet.getPos()); BlockEntity tileentity = this.player.level().getBlockEntity(packet.getPos());
CompoundTag nbttagcompound = tileentity != null ? tileentity.saveWithoutMetadata(this.player.registryAccess()) : null; CompoundTag nbttagcompound = tileentity != null ? tileentity.saveWithoutMetadata() : null;

View File

@@ -1,56 +1,64 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Sat, 11 May 2024 13:11:20 -0500 Date: Wed, 13 Jul 2022 12:13:22 +0100
Subject: [PATCH] Fix ClickEvents on Signs bypassing permissions Subject: [PATCH] Fix ClickEvents on Signs bypassing permissions
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
index a28be7a332659be655f419d969e0c64e659b6c21..7867f88fdb7ed0b644ab7c4e3c971d1164feea7a 100644 index a3ec2f522be2d02b9e37810799cecc2ba14f58f3..97d4d9f85ee20aa1dd894d24deefe33478fe1cee 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
@@ -9,8 +9,11 @@ import java.util.Objects; @@ -8,8 +8,10 @@ import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import javax.annotation.Nullable; import javax.annotation.Nullable;
+ +import me.totalfreedom.scissors.ScissorsConfig; // Scissors
+import me.totalfreedom.scissors.ScissorsConfig;
import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.CommandSourceStack;
+import net.minecraft.commands.Commands; +import net.minecraft.commands.Commands; // Scissors
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@@ -21,6 +24,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.nbt.NbtOps;
@@ -19,6 +21,7 @@ import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.ComponentUtils; import net.minecraft.network.chat.ComponentUtils;
import net.minecraft.network.chat.Style; import net.minecraft.network.chat.Style;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.server.MinecraftServer; +import net.minecraft.server.MinecraftServer; // Scissors
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.FilteredText; import net.minecraft.server.network.FilteredText;
@@ -34,6 +38,8 @@ import net.minecraft.world.level.block.SignBlock; @@ -32,6 +35,7 @@ import net.minecraft.world.level.block.SignBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec2; import net.minecraft.world.phys.Vec2;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
+import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftHumanEntity; // Scissors
+import org.bukkit.craftbukkit.entity.CraftHumanEntity;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.bukkit.block.sign.Side; import org.bukkit.block.sign.Side;
import org.bukkit.craftbukkit.block.CraftBlock; import org.bukkit.craftbukkit.block.CraftBlock;
@@ -290,6 +296,19 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C @@ -39,6 +43,7 @@ import org.bukkit.craftbukkit.util.CraftChatMessage;
import org.bukkit.entity.Player;
import org.bukkit.event.block.SignChangeEvent;
// CraftBukkit end
+import org.bukkit.craftbukkit.CraftServer; // Scissors
public class SignBlockEntity extends BlockEntity implements CommandSource { // CraftBukkit - implements
@@ -289,6 +294,21 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
} }
player.getServer().getCommands().performPrefixedCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle(), world, pos), event.getMessage()); player.getServer().getCommands().performPrefixedCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle(), world, pos), event.getMessage());
// Paper end - Fix commands from signs not firing command events // Paper end
+ // Scissors start - Add optional permissions to command signs + // Scissors start - Add optional permissions to command signs
+ final MinecraftServer vanillaServer = player.getServer(); + final MinecraftServer vanillaServer = player.getServer();
+ final CraftServer craftServer = vanillaServer.server; + final CraftServer craftServer = vanillaServer.server;
+ final CraftHumanEntity craftPlayer = player.getBukkitEntity(); + final CraftHumanEntity craftPlayer = player.getBukkitEntity();
+ final Commands commands = vanillaServer.getCommands(); + final Commands commands = vanillaServer.getCommands();
+ +
+ if (ScissorsConfig.commandSignsBypassPermissions) { + if (ScissorsConfig.commandSignsBypassPermissions)
+ {
+ commands.performPrefixedCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle(), world, pos), event.getMessage()); + commands.performPrefixedCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle(), world, pos), event.getMessage());
+ } + }
+ else { + else
+ {
+ craftServer.dispatchCommand(craftPlayer, command.substring(1)); + craftServer.dispatchCommand(craftPlayer, command.substring(1));
+ } + }
+ // Scissors end + // Scissors end

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Sat, 11 May 2024 13:09:44 -0500 Date: Tue, 16 Aug 2022 17:13:02 +0100
Subject: [PATCH] Refuse to convert legacy messages over 1k characters Subject: [PATCH] Refuse to convert legacy messages over 1k characters
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
index 70f207f016959402ff3cba9de924f906fea28110..f4751469d925f350a7eda9ae6a1f340d41636b2c 100644 index 730d8e3cf2d9ca05b2d6219cf1856b8721871a37..63e71c5cb4ac4d17d2cfa5324fd842a0d3c61eb5 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java --- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
@@ -216,6 +216,7 @@ public final class CraftChatMessage { @@ -198,6 +198,7 @@ public final class CraftChatMessage {
} }
public static Component[] fromString(String message, boolean keepNewlines, boolean plain) { public static Component[] fromString(String message, boolean keepNewlines, boolean plain) {

View File

@@ -0,0 +1,100 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 10 Dec 2023 18:41:18 -0600
Subject: [PATCH] Prevent velocity freeze
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java
index c4ecc5faa4f61e7974e8c475762924a89615b377..1c14b87f84b678b36adede9d2aa9a18453ce4278 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java
@@ -1,6 +1,8 @@
package net.minecraft.world.entity.projectile;
import javax.annotation.Nullable;
+
+import me.totalfreedom.scissors.MathUtility;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
@@ -47,12 +49,15 @@ public abstract class AbstractHurtingProjectile extends Projectile {
// CraftBukkit end
double d6 = Math.sqrt(d3 * d3 + d4 * d4 + d5 * d5);
- if (d6 != 0.0D) {
- this.xPower = d3 / d6 * 0.1D;
- this.yPower = d4 / d6 * 0.1D;
- this.zPower = d5 / d6 * 0.1D;
+ if (d6 != 0.0D)
+ {
+ // Scissors start - Prevent projectile velocity freeze
+ //this.xPower = d3 / d6 * 0.1D;
+ //this.yPower = d4 / d6 * 0.1D;
+ //this.zPower = d5 / d6 * 0.1D;
+ setPower(d3 / d6 * .1d, d4 / d6 * .1d, d5 / d6 * .1d);
}
-
+ // Scissors end
}
public AbstractHurtingProjectile(EntityType<? extends AbstractHurtingProjectile> type, LivingEntity owner, double directionX, double directionY, double directionZ, Level world) {
@@ -164,6 +169,25 @@ public abstract class AbstractHurtingProjectile extends Projectile {
nbt.put("power", this.newDoubleList(new double[]{this.xPower, this.yPower, this.zPower}));
}
+ // Scissors start - Prevent projectile velocity freeze
+ public void setPower(double xPower, double yPower, double zPower)
+ {
+ if (Double.isInfinite(xPower) || Double.isInfinite(yPower) || Double.isInfinite(zPower))
+ {
+ return;
+ }
+
+ if (Double.isNaN(xPower) || Double.isNaN(yPower) || Double.isNaN(zPower))
+ {
+ return;
+ }
+
+ this.xPower = MathUtility.clampDouble(xPower, -1024, 1024);
+ this.yPower = MathUtility.clampDouble(yPower, -1024, 1024);
+ this.zPower = MathUtility.clampDouble(zPower, -1024, 1024);
+ }
+ // Scissors end
+
@Override
public void readAdditionalSaveData(CompoundTag nbt) {
super.readAdditionalSaveData(nbt);
@@ -171,9 +195,13 @@ public abstract class AbstractHurtingProjectile extends Projectile {
ListTag nbttaglist = nbt.getList("power", 6);
if (nbttaglist.size() == 3) {
- this.xPower = nbttaglist.getDouble(0);
- this.yPower = nbttaglist.getDouble(1);
- this.zPower = nbttaglist.getDouble(2);
+ // Scissors start - Prevent projectile velocity freeze
+ //this.xPower = nbttaglist.getDouble(0);
+ //this.yPower = nbttaglist.getDouble(1);
+ //this.zPower = nbttaglist.getDouble(2);
+
+ setPower(nbttaglist.getDouble(0), nbttaglist.getDouble(1), nbttaglist.getDouble(2));
+ // Scissors end
}
}
@@ -207,9 +235,13 @@ public abstract class AbstractHurtingProjectile extends Projectile {
Vec3 vec3d = entity.getLookAngle();
this.setDeltaMovement(vec3d);
- this.xPower = vec3d.x * 0.1D;
- this.yPower = vec3d.y * 0.1D;
- this.zPower = vec3d.z * 0.1D;
+ // Scissors start - Prevent projectile velocity freeze
+ //this.xPower = vec3d.x * 0.1D;
+ //this.yPower = vec3d.y * 0.1D;
+ //this.zPower = vec3d.z * 0.1D;
+
+ setPower(vec3d.x * 0.1D, vec3d.y * 0.1D, vec3d.z * 0.1D);
+ // Scissors end
this.setOwner(entity);
}

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 18:12:12 -0500 Date: Sun, 10 Dec 2023 18:48:55 -0600
Subject: [PATCH] Add configuration option to disable chat signatures Subject: [PATCH] Add configuration option to disable chat signatures
diff --git a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java diff --git a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java
index c87b708c368713a23a10ad97704575ee4df27891..72b22821165efaecf9e2fa243d0ce3e45931d00c 100644 index 74cf1c043beef03cfd5adf481414a5ee78bef2a6..939f4a0639c847b94cfc9acf1409a7a3fc5ae58f 100644
--- a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java --- a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java
+++ b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java +++ b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
@@ -15,29 +15,32 @@ index c87b708c368713a23a10ad97704575ee4df27891..72b22821165efaecf9e2fa243d0ce3e4
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
public interface OutgoingChatMessage { public interface OutgoingChatMessage {
@@ -46,9 +47,19 @@ public interface OutgoingChatMessage { @@ -44,10 +45,22 @@ public interface OutgoingChatMessage {
// Paper end // Paper end
PlayerChatMessage playerChatMessage = this.message.filter(filterMaskEnabled); PlayerChatMessage playerChatMessage = this.message.filter(filterMaskEnabled);
playerChatMessage = unsigned != null ? playerChatMessage.withUnsignedContent(unsigned) : playerChatMessage; // Paper playerChatMessage = unsigned != null ? playerChatMessage.withUnsignedContent(unsigned) : playerChatMessage; // Paper
- if (!playerChatMessage.isFullyFiltered()) { - if (!playerChatMessage.isFullyFiltered()) {
+ // Scissors start + // Sccissors start
+ if (!playerChatMessage.isFullyFiltered() && ScissorsConfig.chatSignaturesEnabled) { + if (!playerChatMessage.isFullyFiltered() && ScissorsConfig.chatSignaturesEnabled) {
sender.connection.sendPlayerChatMessage(playerChatMessage, params); sender.connection.sendPlayerChatMessage(playerChatMessage, params);
+ return; + return;
} }
+ sender.connection.sendPlayerChatMessage(new PlayerChatMessage( + sender.connection.sendPlayerChatMessage(new PlayerChatMessage(
+ SignedMessageLink.unsigned(playerChatMessage.sender()), + SignedMessageLink.unsigned(playerChatMessage.sender()),
+ null, + null,
+ SignedMessageBody.unsigned(playerChatMessage.signedContent()), + SignedMessageBody.unsigned(playerChatMessage.signedContent()),
+ unsigned, + unsigned,
+ playerChatMessage.filterMask() + playerChatMessage.filterMask(),
+ playerChatMessage.result()
+ ), params); + ), params);
+ // Scissors end + // Scissors end
+
} }
} }
} }
diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
index 300929a406905f5ff1ede664d5b99fb0938d4d2e..769da86c130354f8c31642f5d87196b68ccd2dd5 100644 index 85a8a687b1568a56e3e646b37ef78b562c1b8a82..68e2edd39dcbcc9199aeaecff9b3280914ba9270 100644
--- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java --- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
+++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java +++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
@@ -5,6 +5,8 @@ import java.time.Instant; @@ -5,6 +5,8 @@ import java.time.Instant;
@@ -46,39 +49,39 @@ index 300929a406905f5ff1ede664d5b99fb0938d4d2e..769da86c130354f8c31642f5d87196b6
import javax.annotation.Nullable; import javax.annotation.Nullable;
+ +
+import me.totalfreedom.scissors.ScissorsConfig; +import me.totalfreedom.scissors.ScissorsConfig;
import net.minecraft.util.SignatureUpdater;
import net.minecraft.util.SignatureValidator; import net.minecraft.util.SignatureValidator;
import net.minecraft.util.Signer; import net.minecraft.util.Signer;
import net.minecraft.world.entity.player.ProfilePublicKey; @@ -46,7 +48,7 @@ public class SignedMessageChain {
@@ -55,7 +57,7 @@ public class SignedMessageChain { if (!playerChatMessage.verify(signatureValidator)) {
this.setChainBroken(); throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.unsigned_chat"), true, org.bukkit.event.player.PlayerKickEvent.Cause.UNSIGNED_CHAT); // Paper - kick event causes
throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.INVALID_SIGNATURE);
} else { } else {
- if (playerChatMessage.hasExpiredServer(Instant.now())) { - if (playerChatMessage.hasExpiredServer(Instant.now())) {
+ if (playerChatMessage.hasExpiredServer(Instant.now()) && ScissorsConfig.chatSignaturesEnabled) { // Scissors + if (playerChatMessage.hasExpiredServer(Instant.now()) && ScissorsConfig.chatSignaturesEnabled) { // Scissors
SignedMessageChain.LOGGER.warn("Received expired chat: '{}'. Is the client/server system time unsynchronized?", body.content()); LOGGER.warn("Received expired chat: '{}'. Is the client/server system time unsynchronized?", (Object)body.content());
} }
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 703a4ea4c303b28d9cebb0bec86777529ef970da..779d44f878e3ae48f1808d1f48bf2b3120cc97ed 100644 index 889f142b6f87d4ccf4c1d2ffd379c96fbbfddd44..4bdd2e731102c7e3a312ad3144537042dce46923 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -30,6 +30,7 @@ import java.util.stream.Collectors; @@ -1,5 +1,6 @@
import java.util.stream.Stream; package net.minecraft.server.network;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.ScissorsConfig; +import me.totalfreedom.scissors.ScissorsConfig;
import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors
import net.kyori.adventure.text.format.NamedTextColor; import com.google.common.collect.Lists;
import net.minecraft.ChatFormatting; import com.google.common.primitives.Floats;
@@ -2268,6 +2269,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -2247,7 +2248,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
private void handleMessageDecodeFailure(SignedMessageChain.DecodeException exception) { private void handleMessageDecodeFailure(SignedMessageChain.DecodeException exception) {
+ if (!ScissorsConfig.chatSignaturesEnabled) return; // Scissors
ServerGamePacketListenerImpl.LOGGER.warn("Failed to update secure chat state for {}: '{}'", this.player.getGameProfile().getName(), exception.getComponent().getString()); ServerGamePacketListenerImpl.LOGGER.warn("Failed to update secure chat state for {}: '{}'", this.player.getGameProfile().getName(), exception.getComponent().getString());
- if (exception.shouldDisconnect()) {
+ if (exception.shouldDisconnect() && ScissorsConfig.chatSignaturesEnabled) { // Scissors - Do not kick when chat signatures are disabled
this.disconnect(exception.getComponent(), exception.kickCause); // Paper - kick event causes
} else {
this.player.sendSystemMessage(exception.getComponent().copy().withStyle(ChatFormatting.RED)); this.player.sendSystemMessage(exception.getComponent().copy().withStyle(ChatFormatting.RED));
} @@ -2295,6 +2296,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2364,6 +2366,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
Optional<LastSeenMessages> optional = this.lastSeenMessages.applyUpdate(acknowledgment); Optional<LastSeenMessages> optional = this.lastSeenMessages.applyUpdate(acknowledgment);
if (optional.isEmpty()) { if (optional.isEmpty()) {
@@ -86,7 +89,7 @@ index 703a4ea4c303b28d9cebb0bec86777529ef970da..779d44f878e3ae48f1808d1f48bf2b31
ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString()); ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString());
this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes
} }
@@ -2549,6 +2552,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -2493,6 +2495,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
synchronized (this.lastSeenMessages) { synchronized (this.lastSeenMessages) {
if (!this.lastSeenMessages.applyOffset(packet.offset())) { if (!this.lastSeenMessages.applyOffset(packet.offset())) {
@@ -94,7 +97,7 @@ index 703a4ea4c303b28d9cebb0bec86777529ef970da..779d44f878e3ae48f1808d1f48bf2b31
ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString()); ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString());
this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes
} }
@@ -3532,6 +3536,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -3471,6 +3474,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override @Override
public void handleChatSessionUpdate(ServerboundChatSessionUpdatePacket packet) { public void handleChatSessionUpdate(ServerboundChatSessionUpdatePacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
@@ -102,15 +105,3 @@ index 703a4ea4c303b28d9cebb0bec86777529ef970da..779d44f878e3ae48f1808d1f48bf2b31
RemoteChatSession.Data remotechatsession_a = packet.chatSession(); RemoteChatSession.Data remotechatsession_a = packet.chatSession();
ProfilePublicKey.Data profilepublickey_a = this.chatSession != null ? this.chatSession.profilePublicKey().data() : null; ProfilePublicKey.Data profilepublickey_a = this.chatSession != null ? this.chatSession.profilePublicKey().data() : null;
ProfilePublicKey.Data profilepublickey_a1 = remotechatsession_a.profilePublicKey(); ProfilePublicKey.Data profilepublickey_a1 = remotechatsession_a.profilePublicKey();
diff --git a/src/main/java/net/minecraft/world/level/block/SculkSpreader.java b/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
index dbdd9cb76f9e2d0962001d9a1e82896c907d7aea..1a3417361960f470faafe0d28aa08b49b463bba4 100644
--- a/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
+++ b/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
@@ -182,6 +182,7 @@ public class SculkSpreader {
while (iterator.hasNext()) {
SculkSpreader.ChargeCursor sculkspreader_a = (SculkSpreader.ChargeCursor) iterator.next();
+ if (!world.getMinecraftWorld().isLoadedAndInBounds(sculkspreader_a.getPos())) continue; // Scissors
sculkspreader_a.update(world, pos, random, this, shouldConvertToBlock);
if (sculkspreader_a.charge <= 0) {
world.levelEvent(3006, sculkspreader_a.getPos(), 0);

View File

@@ -1,16 +1,16 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Sat, 11 May 2024 13:18:03 -0500 Date: Sun, 10 Dec 2023 18:57:50 -0600
Subject: [PATCH] Patch large selector distance crash Subject: [PATCH] Patch large selector distance crash
diff --git a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java diff --git a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java
index 060c0ffe57a4648598870c6168be203bf3a8634d..5c697e5d85c5c65af0ec969dbd68c38e876fc02f 100644 index d87ffb5ed4550757016c2fabaa2845a6aaac74d7..7e8cf65ac53f595292d161da0735bf97081e832a 100644
--- a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java --- a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java
+++ b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java +++ b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java
@@ -121,11 +121,11 @@ public interface MinMaxBounds<T extends Number> { @@ -123,11 +123,11 @@ public interface MinMaxBounds<T extends Number> {
public static record Doubles(@Override Optional<Double> min, @Override Optional<Double> max, Optional<Double> minSq, Optional<Double> maxSq)
implements MinMaxBounds<Double> { public static record Doubles(Optional<Double> min, Optional<Double> max, Optional<Double> minSq, Optional<Double> maxSq) implements MinMaxBounds<Double> {
public static final MinMaxBounds.Doubles ANY = new MinMaxBounds.Doubles(Optional.empty(), Optional.empty()); public static final MinMaxBounds.Doubles ANY = new MinMaxBounds.Doubles(Optional.empty(), Optional.empty());
- public static final Codec<MinMaxBounds.Doubles> CODEC = MinMaxBounds.createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new); - public static final Codec<MinMaxBounds.Doubles> CODEC = MinMaxBounds.createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new);
+ public static final Codec<MinMaxBounds.Doubles> CODEC = MinMaxBounds.<Double, MinMaxBounds.Doubles>createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new); // Scissors - compile fixes + public static final Codec<MinMaxBounds.Doubles> CODEC = MinMaxBounds.<Double, MinMaxBounds.Doubles>createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new); // Scissors - compile fixes
@@ -23,17 +23,17 @@ index 060c0ffe57a4648598870c6168be203bf3a8634d..5c697e5d85c5c65af0ec969dbd68c38e
private static MinMaxBounds.Doubles create(StringReader reader, Optional<Double> min, Optional<Double> max) throws CommandSyntaxException { private static MinMaxBounds.Doubles create(StringReader reader, Optional<Double> min, Optional<Double> max) throws CommandSyntaxException {
if (min.isPresent() && max.isPresent() && min.get() > max.get()) { if (min.isPresent() && max.isPresent() && min.get() > max.get()) {
@@ -177,7 +177,7 @@ public interface MinMaxBounds<T extends Number> { @@ -188,7 +188,7 @@ public interface MinMaxBounds<T extends Number> {
public static record Ints(@Override Optional<Integer> min, @Override Optional<Integer> max, Optional<Long> minSq, Optional<Long> maxSq)
implements MinMaxBounds<Integer> { public static record Ints(Optional<Integer> min, Optional<Integer> max, Optional<Long> minSq, Optional<Long> maxSq) implements MinMaxBounds<Integer> {
public static final MinMaxBounds.Ints ANY = new MinMaxBounds.Ints(Optional.empty(), Optional.empty()); public static final MinMaxBounds.Ints ANY = new MinMaxBounds.Ints(Optional.empty(), Optional.empty());
- public static final Codec<MinMaxBounds.Ints> CODEC = MinMaxBounds.createCodec(Codec.INT, MinMaxBounds.Ints::new); - public static final Codec<MinMaxBounds.Ints> CODEC = MinMaxBounds.createCodec(Codec.INT, MinMaxBounds.Ints::new);
+ public static final Codec<MinMaxBounds.Ints> CODEC = MinMaxBounds.<Integer, MinMaxBounds.Ints>createCodec(Codec.INT, MinMaxBounds.Ints::new); // Scissors - compile fixes + public static final Codec<MinMaxBounds.Ints> CODEC = MinMaxBounds.<Integer, MinMaxBounds.Ints>createCodec(Codec.INT, MinMaxBounds.Ints::new); // Scissors - compile fixes
private Ints(Optional<Integer> min, Optional<Integer> max) { private Ints(Optional<Integer> min, Optional<Integer> max) {
this(min, max, min.map(i -> i.longValue() * i.longValue()), squareOpt(max)); this(min, max, min.map((i) -> {
diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
index 676a1499747b071515479130875157263d3a8352..6a65850101b8ea348a4bfeaeca805a39987b06fc 100644 index 73c15a0c56a103ba4e62f0a51af8d42566b07245..f0a84efe86407ab3d7a9f064140c12df43265adc 100644
--- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
+++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
@@ -10,6 +10,8 @@ import java.util.function.BiConsumer; @@ -10,6 +10,8 @@ import java.util.function.BiConsumer;

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Fri, 14 Jun 2024 18:07:11 -0500 Date: Mon, 20 Mar 2023 07:04:50 +0000
Subject: [PATCH] Patch invalid entity rotation log spam Subject: [PATCH] Patch invalid entity rotation log spam
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 6ee2d11e4f3fbc8424a2ffbe6a7ebd1832a25503..6bfe06748df9e36c20dc276471f209c1072ad3e4 100644 index 2e11d0f17fc8fa4ed84c40dd9747e136675030a4..acd0dcf69a23ec6dda8e58621b8634076ba8eec1 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -4812,7 +4812,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -4745,7 +4745,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
public void setXRot(float pitch) { public void setXRot(float pitch) {
if (!Float.isFinite(pitch)) { if (!Float.isFinite(pitch)) {

View File

@@ -1,76 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 18:56:18 -0500
Subject: [PATCH] Change version fetcher to AMG
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..1cdba130f6224ba0eb5e958d3328b1c476520efe 100644
--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
@@ -18,10 +18,14 @@ import java.net.URI;
import java.util.Optional;
import java.util.OptionalInt;
import java.util.stream.StreamSupport;
+
+import io.papermc.paper.util.JarManifests;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
+import org.bukkit.Bukkit;
+import org.bukkit.Server;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.framework.qual.DefaultQualifier;
@@ -35,7 +39,7 @@ public class PaperVersionFetcher implements VersionFetcher {
private static final Logger LOGGER = LogUtils.getClassLogger();
private static final int DISTANCE_ERROR = -1;
private static final int DISTANCE_UNKNOWN = -2;
- private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads/paper";
+ private static final String DOWNLOAD_PAGE = "https://ci.plex.us.org/job/Scissors/job/" + ServerBuildInfo.buildInfo().gitBranch(); // Scissors
@Override
public long getCacheTime() {
@@ -49,7 +53,7 @@ public class PaperVersionFetcher implements VersionFetcher {
if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) {
updateMessage = text("You are running a development version without access to version information", color(0xFF5300));
} else {
- updateMessage = getUpdateStatusMessage("PaperMC/Paper", build);
+ updateMessage = getUpdateStatusMessage("AtlasMediaGroup/Scissors", build);
}
final @Nullable Component history = this.getHistory();
@@ -59,15 +63,10 @@ public class PaperVersionFetcher implements VersionFetcher {
private static Component getUpdateStatusMessage(final String repo, final ServerBuildInfo build) {
int distance = DISTANCE_ERROR;
- final OptionalInt buildNumber = build.buildNumber();
- if (buildNumber.isPresent()) {
- distance = fetchDistanceFromSiteApi(build, buildNumber.getAsInt());
- } else {
- final Optional<String> gitBranch = build.gitBranch();
- final Optional<String> gitCommit = build.gitCommit();
- if (gitBranch.isPresent() && gitCommit.isPresent()) {
- distance = fetchDistanceFromGitHub(repo, gitBranch.get(), gitCommit.get());
- }
+ final Optional<String> gitBranch = build.gitBranch();
+ final Optional<String> gitCommit = build.gitCommit();
+ if (gitBranch.isPresent() && gitCommit.isPresent()) {
+ distance = fetchDistanceFromGitHub(repo, gitBranch.get(), gitCommit.get());
}
return switch (distance) {
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 6101ff98022e7c1ad253edb112a0bf87b139e62b..4338714a0bc8c3618a88b915b575e8b17a77dbd8 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -316,7 +316,7 @@ public class Main {
if (buildDate.before(deadline.getTime())) {
// Paper start - This is some stupid bullshit
System.err.println("*** Warning, you've not updated in a while! ***");
- System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads/paper ***"); // Paper
+ System.err.println("*** Please download a new build as per instructions from https://ci.plex.us.org/job/Scissors ***"); // Paper
//System.err.println("*** Server will start in 20 seconds ***");
//Thread.sleep(TimeUnit.SECONDS.toMillis(20));
// Paper end

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Mon, 10 Apr 2023 13:56:18 -0300
Subject: [PATCH] Limit sculk catalyst cursor positions
diff --git a/src/main/java/net/minecraft/world/level/block/SculkSpreader.java b/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
index 01e13e6d3ebd84cff0019f56efff16747420dc95..d4058bc31ca291cbc95eeef594fc35e1ff6a3dde 100644
--- a/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
+++ b/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
@@ -181,7 +181,7 @@ public class SculkSpreader {
while (iterator.hasNext()) {
SculkSpreader.ChargeCursor sculkspreader_a = (SculkSpreader.ChargeCursor) iterator.next();
-
+ if (!world.getMinecraftWorld().isLoadedAndInBounds(sculkspreader_a.getPos())) continue; // Scissors
sculkspreader_a.update(world, pos, random, this, shouldConvertToBlock);
if (sculkspreader_a.charge <= 0) {
world.levelEvent(3006, sculkspreader_a.getPos(), 0);

View File

@@ -1,117 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 19:01:14 -0500
Subject: [PATCH] Add depth limit to Component deserialization
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index 3b075dcb6bda40b278296fc8750f2af90c13acc4..a0c3c4faa8c80c880340e0150e16223ac0b5e5a0 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java
+++ b/src/main/java/net/minecraft/network/chat/Component.java
@@ -1,15 +1,7 @@
package net.minecraft.network.chat;
import com.google.common.collect.Lists;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
+import com.google.gson.*;
import com.google.gson.stream.JsonReader;
import com.mojang.brigadier.Message;
import com.mojang.serialization.JsonOps;
@@ -24,6 +16,7 @@ import java.util.Optional;
import java.util.UUID;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.ScissorsConfig;
import net.minecraft.ChatFormatting;
import net.minecraft.core.HolderLookup;
import net.minecraft.network.chat.contents.DataSource;
@@ -35,8 +28,10 @@ import net.minecraft.network.chat.contents.SelectorContents;
import net.minecraft.network.chat.contents.TranslatableContents;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.FormattedCharSequence;
+import net.minecraft.util.GsonHelper;
import net.minecraft.world.level.ChunkPos;
// CraftBukkit start
+import java.util.regex.Pattern;
import java.util.stream.Stream;
// CraftBukkit end
@@ -286,10 +281,70 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
public static class Serializer {
private static final Gson GSON = (new GsonBuilder()).disableHtmlEscaping().create();
+ private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("%[0-9]+\\$s"); // Scissors
private Serializer() {}
+ // Scissors start
+ static int depthChecker(int depth) {
+ depth = depth + 1;
+ if (depth > ScissorsConfig.componentDepthLimit) {
+ throw new JsonParseException("Depth limit exceeded");
+ }
+ return depth;
+ }
+
+ static int getPenalty(String string) {
+ if (PLACEHOLDER_PATTERN.matcher(string).find()) {
+ long translate_placeholders = PLACEHOLDER_PATTERN.matcher(string).results().count();
+ return (int) translate_placeholders * 12;
+ }
+ return 0;
+ }
+
static MutableComponent deserialize(JsonElement json, HolderLookup.Provider registries) {
+ int depth = 1;
+ if (!json.isJsonPrimitive()) {
+ if (!json.isJsonObject()) {
+ if (json.isJsonArray()) {
+ JsonArray jsonArray = json.getAsJsonArray();
+ if (jsonArray.size() <= 0) {
+ throw new JsonParseException("Unexpected empty array of components");
+ }
+
+ for (JsonElement ignored : jsonArray) {
+ depth = depthChecker(depth);
+ }
+ }
+ }
+ else
+ {
+ JsonObject jsonObject = json.getAsJsonObject();
+ if (jsonObject.has("translate")) {
+ String s = GsonHelper.getAsString(jsonObject, "translate");
+ int penalty = getPenalty(s);
+ depth = depthChecker(depth + penalty);
+
+ if (jsonObject.has("with")) {
+ String s1 = GsonHelper.getAsJsonArray(jsonObject, "with").toString();
+ penalty = getPenalty(s1);
+ depth = depthChecker(depth + penalty);
+ }
+ }
+
+ if (jsonObject.has("extra")) {
+ JsonArray jsonArray = GsonHelper.getAsJsonArray(jsonObject, "extra");
+ if (jsonArray.size() <= 0) {
+ throw new JsonParseException("Unexpected empty array of components");
+ }
+
+ for (JsonElement ignored : jsonArray) {
+ depth = depthChecker(depth);
+ }
+ }
+ }
+ }
+ // Scissors end
return (MutableComponent) ComponentSerialization.CODEC.parse(registries.createSerializationContext(JsonOps.INSTANCE), json).getOrThrow(JsonParseException::new);
}

View File

@@ -0,0 +1,36 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Apr 2023 16:29:23 -0300
Subject: [PATCH] Limit map decorations
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
index 17343d515044f3678b4edf070ee7ca244adc4228..8ade519114bec879bed8e8e23707a85327da131b 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
@@ -65,7 +65,8 @@ public class ClientboundMapItemDataPacket implements Packet<ClientGamePacketList
b.writeByte(icon.x());
b.writeByte(icon.y());
b.writeByte(icon.rot() & 15);
- b.writeNullable(icon.name(), FriendlyByteBuf::writeComponent);
+ final boolean passedNameCap = icon.name() == null || icon.name().getString().length() <= 32; // Scissors
+ b.writeNullable(passedNameCap ? icon.name() : null, FriendlyByteBuf::writeComponent); // Scissors
});
});
if (this.colorPatch != null) {
diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
index e4c4948e076cd64686dfd16ae0568fafc1437140..eff53c21b18574750b691b784fb1688885d4ace7 100644
--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
+++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
@@ -361,6 +361,11 @@ public class MapItemSavedData extends SavedData {
}
private void addDecoration(MapDecoration.Type type, @Nullable LevelAccessor world, String key, double x, double z, double rotation, @Nullable Component text) {
+ // Scissors start - Limit decoration count
+ if (this.decorations.size() > 32) {
+ return;
+ }
+ // Scissors end
int i = 1 << this.scale;
float f = (float) (x - (double) this.centerX) / (float) i;
float f1 = (float) (z - (double) this.centerZ) / (float) i;

View File

@@ -1,65 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 19:05:44 -0500
Subject: [PATCH] Add depth limit to updateCustomBlockEntityTag
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index 96fb69ec6db2e7c8c728435f0c537b076259b2fb..b27a5f2251012f256652bcb50caf317c31378b63 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -2,12 +2,18 @@ package net.minecraft.world.item;
import java.util.List;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.annotation.Nullable;
+
+import me.totalfreedom.scissors.ScissorsConfig;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.component.DataComponents;
import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag;
+import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
@@ -217,6 +223,35 @@ public class BlockItem extends Item {
if (!customdata.isEmpty()) {
BlockEntity tileentity = world.getBlockEntity(pos);
+ // Scissors start
+ if (customdata.contains("CustomName")) {
+ String customName = customdata.getUnsafe().getString("CustomName");
+ Pattern EXTRA_PATTERN = Pattern.compile("\"extra\":(\\[(.*?)\\{|\\[\\{)");
+ Matcher matcher = EXTRA_PATTERN.matcher(customName);
+ if (matcher.find()) {
+ String matcherString = matcher.group();
+ int penalty = (matcherString.startsWith("\"extra\":[{") ? (int) matcher.results().count() : matcher.group().replace("\"extra\":", "").replace("{", "").length()) * 12;
+ if (penalty > ScissorsConfig.componentDepthLimit) {
+ return false;
+ }
+ }
+ }
+
+ for (Tag tag : customdata.getUnsafe().tags.values()) {
+ if (tag instanceof CompoundTag compoundTag && compoundTag.contains("messages")) {
+ ListTag messagesList = compoundTag.getList("messages", 8);
+ Pattern TRANSLATE_PLACEHOLDER_PATTERN = Pattern.compile("%[0-9]+\\$s");
+ Matcher matcher = TRANSLATE_PLACEHOLDER_PATTERN.matcher(messagesList.toString());
+ if (matcher.find()) {
+ int penalty = (int) matcher.results().count() * 12;
+ if (penalty > ScissorsConfig.componentDepthLimit) {
+ return false;
+ }
+ }
+ }
+ }
+ // Scissors end
+
if (tileentity != null) {
if (!world.isClientSide && tileentity.onlyOpCanSetNbt() && (player == null || !(player.canUseGameMasterBlocks() || (player.getAbilities().instabuild && player.getBukkitEntity().hasPermission("minecraft.nbt.place"))))) { // Spigot - add permission
return false;

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 14 Jun 2024 18:21:25 -0500 Date: Fri, 28 Apr 2023 16:44:50 -0300
Subject: [PATCH] Prevent player banning using duplicate UUIDs Subject: [PATCH] Prevent player banning using duplicate UUIDs
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index ca56a0b596976448da6bb2a0e82b3d5cd4133e12..f8198f99244b4a635fa6fc68757acb38008c4564 100644 index ca309311928654ca7e971e98114d7c16d8341a55..4d3faab706e04c1ad495a59e6523524730a48f70 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1673,7 +1673,13 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1693,7 +1693,13 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (entity != null) { if (entity != null) {
ServerLevel.LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID()); ServerLevel.LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID());
entity.unRide(); entity.unRide();
@@ -17,7 +17,7 @@ index ca56a0b596976448da6bb2a0e82b3d5cd4133e12..f8198f99244b4a635fa6fc68757acb38
+ if (entity instanceof ServerPlayer serverPlayer) { + if (entity instanceof ServerPlayer serverPlayer) {
+ this.removePlayerImmediately(serverPlayer, Entity.RemovalReason.DISCARDED); + this.removePlayerImmediately(serverPlayer, Entity.RemovalReason.DISCARDED);
+ } else { + } else {
+ entity.discard(null); + entity.discard();
+ } + }
+ // Scissors end + // Scissors end
} }

View File

@@ -1,157 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sun, 16 Jun 2024 15:38:49 -0500
Subject: [PATCH] Add more fallback code for chunk bans
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
index 5d3e739d28d394ed59fe0003245cc55ac62e6087..e721aa95e0e11455df2fb337978cefdd1bbcf018 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
@@ -1,6 +1,8 @@
package net.minecraft.network.protocol.game;
import java.util.function.BiFunction;
+
+import me.totalfreedom.scissors.NbtUtility;
import net.minecraft.core.BlockPos;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.registries.Registries;
@@ -36,6 +38,23 @@ public class ClientboundBlockEntityDataPacket implements Packet<ClientGamePacket
return create(blockEntity, BlockEntity::getUpdateTag);
}
+ // Scissors start - Handle large packets disconnecting client
+ @Override
+ public boolean hasLargePacketFallback() {
+ return true;
+ }
+
+ @Override
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
+ if (NbtUtility.isTooLarge(this.tag))
+ {
+ this.tag.getAllKeys().forEach(tag::remove);
+ }
+ manager.send(new ClientboundBlockEntityDataPacket(pos, this.type, this.tag));
+ return true;
+ }
+ // Scissors end - Handle large packets disconnecting client
+
public ClientboundBlockEntityDataPacket(BlockPos pos, BlockEntityType<?> blockEntityType, CompoundTag nbt) {
this.pos = pos;
this.type = blockEntityType;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java
index 63f6a2437da9363786b55af0a7cbc5373232d35b..38e8e3e58821da896851a42d6088bc70857ae7e1 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java
@@ -43,6 +43,19 @@ public class ClientboundContainerSetSlotPacket implements Packet<ClientGamePacke
return GamePacketTypes.CLIENTBOUND_CONTAINER_SET_SLOT;
}
+ // Scissors start - Handle large packets disconnecting client
+ @Override
+ public boolean hasLargePacketFallback() {
+ return true;
+ }
+
+ @Override
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
+ manager.send(new ClientboundContainerSetSlotPacket(this.containerId, this.stateId, this.slot, ItemStack.EMPTY));
+ return true;
+ }
+ // Scissors end - Handle large packets disconnecting client
+
@Override
public void handle(ClientGamePacketListener listener) {
listener.handleContainerSetSlot(this);
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
index 466dc69d8c06766733a6164fa5c911e902493a23..84f05afd07c23ffd34492b4c45344ccbfb66c2a9 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
@@ -36,6 +36,19 @@ public record ClientboundMapItemDataPacket(
this(mapId, scale, locked, decorations != null ? Optional.of(List.copyOf(decorations)) : Optional.empty(), Optional.ofNullable(updateData));
}
+ // Scissors start - Handle large packets disconnecting client
+ @Override
+ public boolean hasLargePacketFallback() {
+ return true;
+ }
+
+ @Override
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
+ manager.send(new ClientboundMapItemDataPacket(mapId, scale, locked, Optional.empty(), Optional.empty()));
+ return true;
+ }
+ // Scissors end - Handle large packets disconnecting client
+
@Override
public PacketType<ClientboundMapItemDataPacket> type() {
return GamePacketTypes.CLIENTBOUND_MAP_ITEM_DATA;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java
index 37ab438ab37b9235666ae69376509bdde7722d87..b6cdadfbfe8756a3fd10b7a2d93da31701bc44e1 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java
@@ -2,6 +2,8 @@ package net.minecraft.network.protocol.game;
import java.util.UUID;
import javax.annotation.Nullable;
+
+import net.minecraft.ChatFormatting;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.chat.ChatType;
@@ -39,6 +41,19 @@ public record ClientboundPlayerChatPacket(
);
}
+ // Scissors start - Handle large packets disconnecting client
+ @Override
+ public boolean hasLargePacketFallback() {
+ return true;
+ }
+
+ @Override
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
+ manager.send(new ClientboundPlayerChatPacket(sender, index, signature, body, Component.empty().append("** Message too large **").withStyle(ChatFormatting.RED), filterMask, chatType));
+ return true;
+ }
+ // Scissors end - Handle large packets disconnecting client
+
private void write(RegistryFriendlyByteBuf buf) {
buf.writeUUID(this.sender);
buf.writeVarInt(this.index);
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
index 3945ca04ede578121b370592482ac917f2d4cf96..f05678ab6fc598da0416c6e0c68bc30a1beef139 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
@@ -2,6 +2,8 @@ package net.minecraft.network.protocol.game;
import com.google.common.collect.Lists;
import com.mojang.datafixers.util.Pair;
+
+import java.util.Collections;
import java.util.List;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
@@ -44,6 +46,19 @@ public class ClientboundSetEquipmentPacket implements Packet<ClientGamePacketLis
} while ((i & -128) != 0);
}
+ // Scissors start - Handle large packets disconnecting client
+ @Override
+ public boolean hasLargePacketFallback() {
+ return true;
+ }
+
+ @Override
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
+ manager.send(new ClientboundSetEquipmentPacket(entity, Collections.emptyList()));
+ return true;
+ }
+ // Scissors end - Handle large packets disconnecting client
+
private void write(RegistryFriendlyByteBuf buf) {
buf.writeVarInt(this.entity);
int i = this.slots.size();

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 14 Jun 2024 18:22:22 -0500 Date: Fri, 28 Apr 2023 16:46:00 -0300
Subject: [PATCH] Don't warn on duplicate entity UUIDs Subject: [PATCH] Don't warn on duplicate entity UUIDs

View File

@@ -1,37 +1,36 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Telesphoreo <me@telesphoreo.me>
Date: Fri, 14 Jun 2024 18:34:17 -0500 Date: Mon, 11 Dec 2023 12:27:44 -0600
Subject: [PATCH] Implement command block events Subject: [PATCH] Implement command block events
diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java
index 5cee02970241caafd151cadf08fc8d7092ec13d9..81e16e36b1950d4ae81cb09c39b36d7d4ba91d31 100644 index c99fc118013cb3d4043638e2001a8297e79ddf9c..cdaa81e1f2167b29ec01cc25e51a8400deb533d2 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java
@@ -14,7 +14,7 @@ public class ServerboundSetCommandMinecartPacket implements Packet<ServerGamePac @@ -9,7 +9,7 @@ import net.minecraft.world.level.BaseCommandBlock;
public static final StreamCodec<FriendlyByteBuf, ServerboundSetCommandMinecartPacket> STREAM_CODEC = Packet.codec( import net.minecraft.world.level.Level;
ServerboundSetCommandMinecartPacket::write, ServerboundSetCommandMinecartPacket::new
); public class ServerboundSetCommandMinecartPacket implements Packet<ServerGamePacketListener> {
- private final int entity; - private final int entity;
+ public final int entity; // Scissors - private -> public + public final int entity; // Scissors - private -> public
private final String command; private final String command;
private final boolean trackOutput; private final boolean trackOutput;
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 779d44f878e3ae48f1808d1f48bf2b3120cc97ed..87d0dc96d8592612cefa25c378805aeea131b99e 100644 index 4bdd2e731102c7e3a312ad3144537042dce46923..1f7dc235f8cf848d740ef6a8cf879d253b56c1c8 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -31,6 +31,9 @@ import java.util.stream.Stream; @@ -1,6 +1,8 @@
import javax.annotation.Nullable; package net.minecraft.server.network;
import me.totalfreedom.scissors.ScissorsConfig; import me.totalfreedom.scissors.ScissorsConfig;
+import me.totalfreedom.scissors.event.block.CommandBlockPlayerEditEvent; +import me.totalfreedom.scissors.event.block.CommandBlockPlayerEditEvent;
+import me.totalfreedom.scissors.event.block.CommandMinecartPlayerEditEvent; +import me.totalfreedom.scissors.event.block.CommandMinecartPlayerEditEvent;
+import me.totalfreedom.scissors.event.block.CommandBlockPlayerEditEvent; import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors
import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; import com.google.common.collect.Lists;
import net.kyori.adventure.text.format.NamedTextColor; import com.google.common.primitives.Floats;
import net.minecraft.ChatFormatting; @@ -155,6 +157,7 @@ import net.minecraft.world.entity.player.Inventory;
@@ -160,6 +163,7 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.ProfilePublicKey; import net.minecraft.world.entity.player.ProfilePublicKey;
import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.entity.vehicle.Boat; import net.minecraft.world.entity.vehicle.Boat;
@@ -39,7 +38,7 @@ index 779d44f878e3ae48f1808d1f48bf2b3120cc97ed..87d0dc96d8592612cefa25c378805aee
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.AnvilMenu;
import net.minecraft.world.inventory.BeaconMenu; import net.minecraft.world.inventory.BeaconMenu;
@@ -197,6 +201,8 @@ import net.minecraft.world.phys.Vec3; @@ -189,6 +192,8 @@ import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.BooleanOp;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
@@ -48,12 +47,13 @@ index 779d44f878e3ae48f1808d1f48bf2b3120cc97ed..87d0dc96d8592612cefa25c378805aee
import org.slf4j.Logger; import org.slf4j.Logger;
// CraftBukkit start // CraftBukkit start
@@ -931,6 +937,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -894,6 +899,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.player.level().getChunkAt(blockposition).setBlockEntity(tileentity); this.player.level().getChunkAt(blockposition).setBlockEntity(tileentity);
} }
+ // Scissors start + // Scissors start
+ CommandBlockPlayerEditEvent event = new CommandBlockPlayerEditEvent(this.getCraftPlayer(), commandblocklistenerabstract.getCommand(), s, new CraftCommandBlock(this.player.level().getWorld(), tileentitycommand)); + CommandBlockPlayerEditEvent event = new CommandBlockPlayerEditEvent(this.getCraftPlayer(), commandblocklistenerabstract.getCommand(), s, new CraftCommandBlock(this.player.level().getWorld(), tileentitycommand));
+
+ if (!event.callEvent()) { + if (!event.callEvent()) {
+ return; + return;
+ } + }
@@ -64,7 +64,7 @@ index 779d44f878e3ae48f1808d1f48bf2b3120cc97ed..87d0dc96d8592612cefa25c378805aee
commandblocklistenerabstract.setCommand(s); commandblocklistenerabstract.setCommand(s);
commandblocklistenerabstract.setTrackOutput(flag); commandblocklistenerabstract.setTrackOutput(flag);
if (!flag) { if (!flag) {
@@ -962,7 +977,17 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -925,7 +940,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
BaseCommandBlock commandblocklistenerabstract = packet.getCommandBlock(this.player.level()); BaseCommandBlock commandblocklistenerabstract = packet.getCommandBlock(this.player.level());
if (commandblocklistenerabstract != null) { if (commandblocklistenerabstract != null) {
@@ -79,6 +79,7 @@ index 779d44f878e3ae48f1808d1f48bf2b3120cc97ed..87d0dc96d8592612cefa25c378805aee
+ +
+ command = event.getNewCommand(); + command = event.getNewCommand();
+ commandblocklistenerabstract.setCommand(command); + commandblocklistenerabstract.setCommand(command);
+
+ // Scissors end + // Scissors end
commandblocklistenerabstract.setTrackOutput(packet.isTrackOutput()); commandblocklistenerabstract.setTrackOutput(packet.isTrackOutput());
if (!packet.isTrackOutput()) { if (!packet.isTrackOutput()) {

View File

@@ -0,0 +1,110 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Fri, 2 Jun 2023 22:13:54 +0100
Subject: [PATCH] Add depth limit to SNBT
diff --git a/src/main/java/net/minecraft/nbt/TagParser.java b/src/main/java/net/minecraft/nbt/TagParser.java
index 5bec54239a2b185284c10d58854e5a13e33daae5..f112d82b0a9e5513395fa7c1b05d1fe9e28c64ca 100644
--- a/src/main/java/net/minecraft/nbt/TagParser.java
+++ b/src/main/java/net/minecraft/nbt/TagParser.java
@@ -179,9 +179,56 @@ public class TagParser {
}
this.expect('}');
- return compoundTag;
+ return exceedsDepthLimit(compoundTag) ? new CompoundTag() : compoundTag; // Scissors - Add depth limit to SNBT
}
+ // Scissors start - Add depth limit to SNBT
+ private boolean exceedsDepthLimit(Tag tag) {
+ return this.exceedsDepthLimit(0, tag);
+ }
+
+ private boolean exceedsDepthLimit(long depth, Tag tag)
+ {
+ if (depth > 256)
+ {
+ return true;
+ }
+
+ if (tag instanceof ListTag listTag)
+ {
+ for (Tag childTag : listTag)
+ {
+ boolean returnValue = this.exceedsDepthLimit(depth + 1, childTag);
+
+ if (returnValue)
+ {
+ return true;
+ }
+ }
+ } else if (tag instanceof CompoundTag compoundTag)
+ {
+ for (String key: compoundTag.getAllKeys())
+ {
+ Tag childTag = compoundTag.get(key);
+
+ if (childTag == null)
+ {
+ continue;
+ }
+
+ boolean returnValue = this.exceedsDepthLimit(depth + 1, childTag);
+
+ if (returnValue)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+ // Scissors end
+
private Tag readListTag() throws CommandSyntaxException {
this.expect('[');
this.reader.skipWhitespace();
@@ -213,7 +260,7 @@ public class TagParser {
}
this.expect(']');
- return listTag;
+ return exceedsDepthLimit(listTag) ? new ListTag() : listTag; // Scissors - Add depth limit to SNBT
}
}
@@ -238,7 +285,7 @@ public class TagParser {
}
private <T extends Number> List<T> readArray(TagType<?> arrayTypeReader, TagType<?> typeReader) throws CommandSyntaxException {
- List<T> list = Lists.newArrayList();
+ List<Number> list = Lists.newArrayList(); // Scissors - List<T> -> List<Number>
while(true) {
if (this.reader.peek() != ']') {
@@ -251,11 +298,11 @@ public class TagParser {
}
if (typeReader == ByteTag.TYPE) {
- list.add((T)((NumericTag)tag).getAsByte());
+ list.add(((NumericTag)tag).getAsByte()); // Scissors - Remove (T) cast
} else if (typeReader == LongTag.TYPE) {
- list.add((T)((NumericTag)tag).getAsLong());
+ list.add(((NumericTag)tag).getAsLong()); // Scissors - Remove (T) cast
} else {
- list.add((T)((NumericTag)tag).getAsInt());
+ list.add(((NumericTag)tag).getAsInt()); // Scissors - Remove (T) cast
}
if (this.hasElementSeparator()) {
@@ -267,7 +314,7 @@ public class TagParser {
}
this.expect(']');
- return list;
+ return (List<T>) list; // Scissors - Cast to List<T>
}
}

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 14 Jun 2024 18:23:46 -0500 Date: Wed, 7 Jun 2023 16:50:35 -0300
Subject: [PATCH] Limit beacon effectRange Subject: [PATCH] Limit beacon effectRange
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
index a6ffbbc1b5021564864e42c0756342352c2b8290..724edea5d4399fef2ddadbe631adef3d22513894 100644 index f13943db6f2fb923c52dcf9e8bf7000041d0a362..2fdcc47dd6a813d5f7a32dc58ca67b6b965c8749 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
@@ -91,7 +91,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name @@ -87,7 +87,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
private double effectRange = -1; private double effectRange = -1;
public double getEffectRange() { public double getEffectRange() {
@@ -17,10 +17,10 @@ index a6ffbbc1b5021564864e42c0756342352c2b8290..724edea5d4399fef2ddadbe631adef3d
return this.levels * 10 + 10; return this.levels * 10 + 10;
} else { } else {
return effectRange; return effectRange;
@@ -458,6 +458,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name @@ -456,6 +456,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
this.lockKey = LockCode.fromTag(nbt); this.lockKey = LockCode.fromTag(nbt);
this.effectRange = nbt.contains(PAPER_RANGE_TAG, 6) ? nbt.getDouble(PAPER_RANGE_TAG) : -1; // Paper - Custom beacon ranges this.effectRange = nbt.contains(PAPER_RANGE_TAG, 6) ? nbt.getDouble(PAPER_RANGE_TAG) : -1; // Paper
+ if (this.effectRange > 256) this.effectRange = 256; // Scissors + if (this.effectRange > 256) this.effectRange = 256; // Scissors
} }

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 14 Jun 2024 18:24:35 -0500 Date: Tue, 13 Jun 2023 18:29:18 -0300
Subject: [PATCH] Improve validation of ResourceLocations Subject: [PATCH] Improve validation of ResourceLocations

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 14 Jun 2024 18:25:43 -0500 Date: Sat, 1 Jul 2023 21:22:29 -0300
Subject: [PATCH] Don't log on too many chained updates Subject: [PATCH] Don't log on too many chained updates
diff --git a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java diff --git a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
index 106af2b2c7ff72c7549975aef75cdcff8d9a7d97..ecdcf4cf8650270ce7595905ce9d498eee520dcd 100644 index 598dc0d3a2b9387e76d7e4e19e54c4573a24bc54..9eed28bf8bc7e2fa528729cde01a535bc7040815 100644
--- a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java --- a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
+++ b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java +++ b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
@@ -58,7 +58,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater { @@ -56,7 +56,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
this.stack.push(entry); this.stack.push(entry);
} }
} else if (this.count - 1 == this.maxChainedNeighborUpdates) { } else if (this.count - 1 == this.maxChainedNeighborUpdates) {

View File

@@ -0,0 +1,46 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Tue, 4 Jul 2023 18:49:34 -0300
Subject: [PATCH] Fix packet-related lag exploits
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 1f7dc235f8cf848d740ef6a8cf879d253b56c1c8..2ef6fd0fadaf6b912c4f242210c1ce2756ccddd7 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -859,7 +859,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.player.sendSystemMessage(Component.translatable("advMode.notEnabled"));
} else if (!this.player.canUseGameMasterBlocks() && (!this.player.isCreative() || !this.player.getBukkitEntity().hasPermission("minecraft.commandblock"))) { // Paper - command block permission
this.player.sendSystemMessage(Component.translatable("advMode.notAllowed"));
- } else {
+ } else if (this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BaseCommandBlock commandblocklistenerabstract = null;
CommandBlockEntity tileentitycommand = null;
BlockPos blockposition = packet.getPos();
@@ -1026,7 +1026,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override
public void handleSetStructureBlock(ServerboundSetStructureBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (this.player.canUseGameMasterBlocks() && this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level().getBlockState(blockposition);
BlockEntity tileentity = this.player.level().getBlockEntity(blockposition);
@@ -1084,7 +1084,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override
public void handleSetJigsawBlock(ServerboundSetJigsawBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (this.player.canUseGameMasterBlocks() && this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level().getBlockState(blockposition);
BlockEntity tileentity = this.player.level().getBlockEntity(blockposition);
@@ -1109,7 +1109,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override
public void handleJigsawGenerate(ServerboundJigsawGeneratePacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (this.player.canUseGameMasterBlocks() && this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockEntity tileentity = this.player.level().getBlockEntity(blockposition);

View File

@@ -1,37 +1,40 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Fri, 14 Jun 2024 18:39:39 -0500 Date: Wed, 5 Jul 2023 22:58:24 +0100
Subject: [PATCH] Limit save data for Bees and Vexes Subject: [PATCH] Limit save data for Bees and Vexes
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..fdfe3ca7c2a1d34567651e64933392c4a17bd751 100644 index a87a34b0c4c8e5d0cf079025c230b1434c919b54..7cbcbbed6ec45a32bbfe8118bf186c6580f065ca 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -231,7 +231,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -234,8 +234,12 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@Override @Override
public void readAdditionalSaveData(CompoundTag nbt) { public void readAdditionalSaveData(CompoundTag nbt) {
- this.hivePos = (BlockPos) NbtUtils.readBlockPos(nbt, "hive_pos").orElse(null); // CraftBukkit - decompile error this.hivePos = null;
+ // Scissors start - limit hive_pos - if (nbt.contains("HivePos")) {
+ if (nbt.contains("hive_pos")) - this.hivePos = NbtUtils.readBlockPos(nbt.getCompound("HivePos"));
+ if (nbt.contains("HivePos"))
+ { + {
+ final BlockPos savedHivePos = NbtUtils.readBlockPos(nbt, "hive_pos").orElse(null); // CraftBukkit - decompile error + // Scissors start - Limit HivePos
+ final BlockPos savedHivePos = NbtUtils.readBlockPos(nbt.getCompound("HivePos"));
+ this.hivePos = this.level().isLoadedAndInBounds(savedHivePos) ? savedHivePos : null; + this.hivePos = this.level().isLoadedAndInBounds(savedHivePos) ? savedHivePos : null;
+ } + // Scissors end - Limit HivePos
+ // Scissors end }
this.savedFlowerPos = (BlockPos) NbtUtils.readBlockPos(nbt, "flower_pos").orElse(null); // CraftBukkit - decompile error
super.readAdditionalSaveData(nbt); this.savedFlowerPos = null;
this.setHasNectar(nbt.getBoolean("HasNectar"));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
index fd3b37dde54623ba38186efb2a64d364c86b81d2..ae1051a7ebc2b2bf6d5bf5582443fedeb307ee01 100644 index 30ea3f64234fd1fda8dada3c7fb12be0730322a8..b621b9a50047c5283b259d67019989ec823576e0 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
@@ -111,7 +111,10 @@ public class Vex extends Monster implements TraceableEntity { @@ -118,8 +118,12 @@ public class Vex extends Monster implements TraceableEntity {
@Override
public void readAdditionalSaveData(CompoundTag nbt) { public void readAdditionalSaveData(CompoundTag nbt) {
super.readAdditionalSaveData(nbt); super.readAdditionalSaveData(nbt);
if (nbt.contains("BoundX")) { - if (nbt.contains("BoundX")) {
- this.boundOrigin = new BlockPos(nbt.getInt("BoundX"), nbt.getInt("BoundY"), nbt.getInt("BoundZ")); - this.boundOrigin = new BlockPos(nbt.getInt("BoundX"), nbt.getInt("BoundY"), nbt.getInt("BoundZ"));
+ if (nbt.contains("BoundX"))
+ {
+ // Scissors start - Limit Vex bound origin + // Scissors start - Limit Vex bound origin
+ final BlockPos savedBoundOrigin = new BlockPos(nbt.getInt("BoundX"), nbt.getInt("BoundY"), nbt.getInt("BoundZ")); + final BlockPos savedBoundOrigin = new BlockPos(nbt.getInt("BoundX"), nbt.getInt("BoundY"), nbt.getInt("BoundZ"));
+ this.boundOrigin = this.level().isLoadedAndInBounds(savedBoundOrigin) ? savedBoundOrigin : null; + this.boundOrigin = this.level().isLoadedAndInBounds(savedBoundOrigin) ? savedBoundOrigin : null;

View File

@@ -0,0 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Thu, 6 Jul 2023 23:01:12 +0100
Subject: [PATCH] Mute invalid attributes
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
index 7204b973c3ad9239e82355513f6d538107102e48..2463444778f19f937b18173798c04d9d9788a824 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
@@ -147,7 +147,7 @@ public class AttributeMap {
}
}, () -> {
- LOGGER.warn("Ignoring unknown attribute '{}'", (Object)string);
+ // LOGGER.warn("Ignoring unknown attribute '{}'", (Object)string); // Scissors - Mute invalid attributes
});
}
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java
index 1b0db545f93b51368c2d384dd1ba45b93d9eff87..5c3633aa6a256a197502c8139cbf61c2f493bda7 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java
@@ -86,7 +86,7 @@ public class AttributeModifier {
AttributeModifier.Operation operation = AttributeModifier.Operation.fromValue(nbt.getInt("Operation"));
return new AttributeModifier(uUID, nbt.getString("Name"), nbt.getDouble("Amount"), operation);
} catch (Exception var3) {
- LOGGER.warn("Unable to create attribute: {}", (Object)var3.getMessage());
+ // LOGGER.warn("Unable to create attribute: {}", (Object)var3.getMessage()); // Scissors - Mute invalid attributes
return null;
}
}

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Fri, 14 Jun 2024 18:49:11 -0500 Date: Thu, 6 Jul 2023 23:34:46 +0100
Subject: [PATCH] Mute invalid Enderdragon phases Subject: [PATCH] Mute invalid Enderdragon phases
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java
index 1b1a210a86121049e507a497649727a99452c0a2..5501d94f3b39665a94062ae97b3739ae197dadb1 100644 index bca131e9c428e2cb073ae2ef517dda12f73a5dcd..b9d603c82b12299e94c31928b36c9517834cff62 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java
@@ -20,7 +20,7 @@ public class DragonChargePlayerPhase extends AbstractDragonPhaseInstance { @@ -20,7 +20,7 @@ public class DragonChargePlayerPhase extends AbstractDragonPhaseInstance {
@@ -13,20 +13,20 @@ index 1b1a210a86121049e507a497649727a99452c0a2..5501d94f3b39665a94062ae97b3739ae
public void doServerTick() { public void doServerTick() {
if (this.targetLocation == null) { if (this.targetLocation == null) {
- LOGGER.warn("Aborting charge player as no target was set."); - LOGGER.warn("Aborting charge player as no target was set.");
+ // Scissors - Mute invalid Enderdragon phases + // LOGGER.warn("Aborting charge player as no target was set."); // Scissors - Mute invalid Enderdragon phases
this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN); this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN);
} else if (this.timeSinceCharge > 0 && this.timeSinceCharge++ >= 10) { } else if (this.timeSinceCharge > 0 && this.timeSinceCharge++ >= 10) {
this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN); this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN);
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
index c5269c3117901b8521720d1b32689d7f600f20a3..02dd6f72aa16e6b3edec700b7bc82a84b5ca8dd9 100644 index a3456b35db4e938f91d6bc32d4d202a011bf13c4..aad0b066e4fd63195aa117c5a03f64846bf46fbd 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
@@ -31,7 +31,7 @@ public class DragonStrafePlayerPhase extends AbstractDragonPhaseInstance { @@ -32,7 +32,7 @@ public class DragonStrafePlayerPhase extends AbstractDragonPhaseInstance {
@Override @Override
public void doServerTick() { public void doServerTick() {
if (this.attackTarget == null) { if (this.attackTarget == null) {
- LOGGER.warn("Skipping player strafe phase because no player was found"); - LOGGER.warn("Skipping player strafe phase because no player was found");
+ // Scissors - Mute invalid Enderdragon phases + // LOGGER.warn("Skipping player strafe phase because no player was found"); // Scissors - Mute invalid Enderdragon phases
this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN); this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN);
} else { } else {
if (this.currentPath != null && this.currentPath.isDone()) { if (this.currentPath != null && this.currentPath.isDone()) {

View File

@@ -1,19 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me> From: Allink <arclicious@vivaldi.net>
Date: Fri, 14 Jun 2024 18:50:32 -0500 Date: Fri, 25 Aug 2023 11:51:47 +0100
Subject: [PATCH] Add length limit to note block sound Subject: [PATCH] Add length limit to note block sound
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
index e79b1ccbdf12006d72401b5be1ac25187033ec59..a7b1a44de0689f7d07bd3e69048b04c28c272159 100644 index 4430520d32024d897c93c1d9f8652ccb2c202c01..ceef1a7fd41751f553f21784217f95a210bd24d9 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
@@ -147,7 +147,7 @@ public class SkullBlockEntity extends BlockEntity { @@ -113,7 +113,7 @@ public class SkullBlockEntity extends BlockEntity {
} }
if (nbt.contains("note_block_sound", 8)) { if (nbt.contains("note_block_sound", 8)) {
- this.noteBlockSound = ResourceLocation.tryParse(nbt.getString("note_block_sound")); - this.noteBlockSound = ResourceLocation.tryParse(nbt.getString("note_block_sound"));
+ this.noteBlockSound = ResourceLocation.tryParse(StringUtil.truncateStringIfNecessary(nbt.getString("note_block_sound"), 32767, false)); + this.noteBlockSound = ResourceLocation.tryParse(StringUtil.truncateStringIfNecessary(nbt.getString("note_block_sound"), 32767, false)); // Scissors - Add length limit to note block sound
} }
if (nbt.contains("custom_name", 8)) { }

View File

@@ -7,4 +7,4 @@ pluginManagement {
rootProject.name = "Scissors" rootProject.name = "Scissors"
include("Scissors-API", "Scissors-Server") include("aswm-api", "aswm-core", "Scissors-API", "Scissors-Server")