diff --git a/build.gradle b/build.gradle
index 8c6cf1a58a..51176fa337 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,8 +20,8 @@ plugins {
id 'net.minecraftforge.gradleutils' version '2.+'
id 'eclipse'
id 'de.undercouch.download' version '4.1.2'
- id 'net.minecraftforge.gradle.patcher' version '[5.1.43,)' apply false
- id 'net.minecraftforge.gradle.mcp' version '[5.1.43,)' apply false
+ id 'net.minecraftforge.gradle.patcher' version '[5.1.50,5.2.0)' apply false
+ id 'net.minecraftforge.gradle.mcp' version '[5.1.50,5.2.0)' apply false
}
Util.init() //Init all our extension methods!
@@ -36,9 +36,10 @@ ext {
]
}
MAPPING_CHANNEL = 'official'
- MAPPING_VERSION = '1.19'
- MC_VERSION = '1.19'
- MCP_VERSION = '20220607.102129'
+ MAPPING_VERSION = '1.19.1'
+ MC_VERSION = '1.19.1'
+ MC_NEXT_VERSION = '1.20'
+ MCP_VERSION = '20220727.212338'
SPI_VERSION = '6.0.0'
ACCESSTRANSFORMERS_VERSION = '8.0.4'
COREMODS_VERSION = '5.0.1'
@@ -95,7 +96,7 @@ def extraTxts = [
]
task downloadVersionManifest(type: Download) {
- src 'https://launchermeta.mojang.com/mc/game/version_manifest_v2.json'
+ src 'https://piston-meta.mojang.com/mc/game/version_manifest_v2.json'
dest file('build/versions/version_manifest.json')
useETag 'all'
onlyIfModified true
@@ -377,7 +378,8 @@ def sharedFmlonlyForge = { Project prj ->
environment 'MOD_CLASSES', '{source_roots}'
environment 'MCP_MAPPINGS', '{mcp_mappings}'
- property 'nativesDirectory', '{natives}'
+ // Natives are loaded from the classpath now in all cases
+ // property 'nativesDirectory', '{natives}'
if (prj.name == 'forge') {
property 'forge.enableGameTest', 'true'
}
@@ -442,7 +444,7 @@ def sharedFmlonlyForge = { Project prj ->
// SecureJarHandler bootstrap values.
run.property 'ignoreList', prj.configurations.moduleonly.files.collect {it.name.replaceAll(/([-_]([.\d]*\d+)|\.jar$)/, '') }.join(',') + ",client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,${prj.name}-"
// FIXME: Without this jna doesn't work at runtime. Someone figure out why please?
- run.property 'mergeModules', 'jna-5.10.0.jar,jna-platform-5.10.0.jar,java-objc-bridge-1.0.0.jar'
+ run.property 'mergeModules', 'jna-5.10.0.jar,jna-platform-5.10.0.jar'
if (userdevRuns.contains(run)) {
run.property 'legacyClassPath.file', '{minecraft_classpath_file}'
run.jvmArgs '-p', '{modules}'
@@ -462,7 +464,8 @@ def sharedFmlonlyForge = { Project prj ->
run.workingDirectory prj.file('run')
if (run.name.contains('client') || run.name.contains('data')) {
- run.property 'nativesDirectory', prj.extractNatives.output.get().asFile
+ // Natives are loaded from the classpath now in all cases
+ // run.property 'nativesDirectory', prj.extractNatives.output.get().asFile
run.args '--assetsDir', prj.downloadAssets.output
run.args '--assetIndex', "{asset_index}"
}
@@ -637,8 +640,7 @@ project(':fmlonly') {
'--fml.mcVersion', MC_VERSION,
'--fml.forgeGroup', project.group,
'--fml.mcpVersion', MCP_VERSION],
- jvm: ['-Djava.net.preferIPv6Addresses=system',
- "-DignoreList=${fmlonly_client.properties.ignoreList},\${version_name}.jar",
+ jvm: ["-DignoreList=${fmlonly_client.properties.ignoreList},\${version_name}.jar",
"-DmergeModules=${fmlonly_client.properties.mergeModules}",
'-DlibraryDirectory=${library_directory}',
'-p', Util.getArtifacts(project, configurations.moduleonly, false).values().collect{"\${library_directory}/${it.downloads.artifact.path}"}.join('${classpath_separator}'),
@@ -1200,8 +1202,7 @@ project(':forge') {
def baseForgeVersion = System.getProperty("forge.compatibility_check_version")
if (baseForgeVersion == null)
- // FIXME: Restore commented out portion when next tagged (41.1 or 42.0), assuming that a .0 build is published
- baseForgeVersion = "1.19-41.0.1" // "${MC_VERSION}-${GIT_INFO.tag}.0"
+ baseForgeVersion = "${MC_VERSION}-${GIT_INFO.tag}.0"
if (baseForgeVersion == "null")
baseForgeVersion = null // Allow disabling from system property if not wanted
def baseForgeUniversal = null
@@ -1561,7 +1562,7 @@ project(':forge') {
MAPPING_CHANNEL: MAPPING_CHANNEL,
MAPPING_VERSION: MAPPING_VERSION,
FORGE_SPEC_VERSION: SPEC_VERSION.split("\\.")[0],
- MC_NEXT_VERSION: "1."+((MC_VERSION.split("[\\.-]")[1] as int)+1)
+ MC_NEXT_VERSION: MC_NEXT_VERSION
])
rename 'gitignore\\.txt', '.gitignore'
rename 'gitattributes\\.txt', '.gitattributes'
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonDevLaunchHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonDevLaunchHandler.java
index 29991886c1..d6a27282f7 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonDevLaunchHandler.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonDevLaunchHandler.java
@@ -5,7 +5,6 @@
package net.minecraftforge.fml.loading.targets;
-import com.google.common.base.Strings;
import cpw.mods.jarhandling.SecureJar;
import java.io.File;
@@ -50,8 +49,6 @@ public abstract class CommonDevLaunchHandler extends CommonLaunchHandler {
if (getDist().isDedicatedServer())
return arguments;
- fixNatives();
-
if (isData())
return arguments;
@@ -119,18 +116,4 @@ public abstract class CommonDevLaunchHandler extends CommonLaunchHandler {
// Generate a time-based random number, to mimic how n.m.client.Main works
return Long.toString(System.nanoTime() % (int) Math.pow(10, length));
}
-
- private static void fixNatives() {
- String paths = System.getProperty("java.library.path");
- String nativesDir = System.getProperty("nativesDirectory");
- if (nativesDir == null)
- return;
-
- if (Strings.isNullOrEmpty(paths))
- paths = nativesDir;
- else
- paths += File.pathSeparator + nativesDir;
-
- System.setProperty("java.library.path", paths);
- }
}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 41d9927a4d..249e5832f0 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index aa991fceae..8049c684f0 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 1b6c787337..a69d9cb6c2 100755
--- a/gradlew
+++ b/gradlew
@@ -205,6 +205,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \
"$@"
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/gradlew.bat b/gradlew.bat
index 107acd32c4..f127cfd49d 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -14,7 +14,7 @@
@rem limitations under the License.
@rem
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,7 +25,7 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
diff --git a/lowcodelanguage/build.gradle b/lowcodelanguage/build.gradle
index 3191e8f2e2..4fa108ece3 100644
--- a/lowcodelanguage/build.gradle
+++ b/lowcodelanguage/build.gradle
@@ -12,7 +12,8 @@ dependencyUpdates.rejectVersionIf { isNonStable(it.candidate.version) }
java.withSourcesJar()
dependencies {
- compileOnly('org.jetbrains:annotations:21.0.1')
+ compileOnly("org.jetbrains:annotations:${JETBRAINS_ANNOTATIONS_VERSION}")
+
implementation(project(':fmlloader'))
implementation(project(':fmlcore'))
}
diff --git a/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch b/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch
index e84ad62200..e3f1563820 100644
--- a/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch
+++ b/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch
@@ -1,6 +1,6 @@
--- a/com/mojang/blaze3d/platform/Window.java
+++ b/com/mojang/blaze3d/platform/Window.java
-@@ -80,7 +_,7 @@
+@@ -82,7 +_,7 @@
GLFW.glfwWindowHint(139267, 2);
GLFW.glfwWindowHint(139272, 204801);
GLFW.glfwWindowHint(139270, 1);
@@ -9,7 +9,7 @@
if (monitor != null) {
VideoMode videomode = monitor.m_84948_(this.f_85355_ ? this.f_85354_ : Optional.empty());
this.f_85350_ = this.f_85357_ = monitor.m_84951_() + videomode.m_85332_() / 2 - this.f_85359_ / 2;
-@@ -298,6 +_,7 @@
+@@ -303,6 +_,7 @@
GLFW.glfwGetFramebufferSize(this.f_85349_, aint, aint1);
this.f_85361_ = aint[0] > 0 ? aint[0] : 1;
this.f_85362_ = aint1[0] > 0 ? aint1[0] : 1;
diff --git a/patches/minecraft/net/minecraft/CrashReport.java.patch b/patches/minecraft/net/minecraft/CrashReport.java.patch
index 03b8b4fb76..d2c20ae3e0 100644
--- a/patches/minecraft/net/minecraft/CrashReport.java.patch
+++ b/patches/minecraft/net/minecraft/CrashReport.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/CrashReport.java
+++ b/net/minecraft/CrashReport.java
-@@ -55,14 +_,8 @@
+@@ -57,14 +_,8 @@
if (this.f_127506_ != null && this.f_127506_.length > 0) {
p_127520_.append("-- Head --\n");
p_127520_.append("Thread: ").append(Thread.currentThread().getName()).append("\n");
@@ -17,7 +17,7 @@
}
for(CrashReportCategory crashreportcategory : this.f_127503_) {
-@@ -70,6 +_,7 @@
+@@ -72,6 +_,7 @@
p_127520_.append("\n\n");
}
@@ -25,7 +25,7 @@
this.f_178624_.m_143525_(p_127520_);
}
-@@ -89,23 +_,13 @@
+@@ -91,23 +_,13 @@
throwable.setStackTrace(this.f_127501_.getStackTrace());
}
diff --git a/patches/minecraft/net/minecraft/SharedConstants.java.patch b/patches/minecraft/net/minecraft/SharedConstants.java.patch
index 6076fa4557..80d721fc0b 100644
--- a/patches/minecraft/net/minecraft/SharedConstants.java.patch
+++ b/patches/minecraft/net/minecraft/SharedConstants.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/SharedConstants.java
+++ b/net/minecraft/SharedConstants.java
-@@ -203,6 +_,7 @@
+@@ -211,6 +_,7 @@
}
static {
diff --git a/patches/minecraft/net/minecraft/Util.java.patch b/patches/minecraft/net/minecraft/Util.java.patch
index e0dcf5e793..703501f8af 100644
--- a/patches/minecraft/net/minecraft/Util.java.patch
+++ b/patches/minecraft/net/minecraft/Util.java.patch
@@ -1,18 +1,18 @@
--- a/net/minecraft/Util.java
+++ b/net/minecraft/Util.java
-@@ -164,6 +_,11 @@
+@@ -170,6 +_,11 @@
return 255;
}
+ // We add these inner classes to compensate for Mojang's missing inner classes and shift the anonymous class index.
+ // This allows us to obfuscate subsequent anonymous inner classes correctly.
-+ @SuppressWarnings("unused") private static LongSupplier INNER_CLASS_SHIFT1 = new LongSupplier() { public long getAsLong() { return 0; } };
-+ @SuppressWarnings("unused") private static LongSupplier INNER_CLASS_SHIFT2 = new LongSupplier() { public long getAsLong() { return 0; } };
++ @SuppressWarnings("unused") private static java.util.function.LongSupplier INNER_CLASS_SHIFT1 = new java.util.function.LongSupplier() { public long getAsLong() { return 0; } };
++ @SuppressWarnings("unused") private static java.util.function.LongSupplier INNER_CLASS_SHIFT2 = new java.util.function.LongSupplier() { public long getAsLong() { return 0; } };
+
public static ExecutorService m_183988_() {
return f_137443_;
}
-@@ -242,7 +_,7 @@
+@@ -248,7 +_,7 @@
try {
type = DataFixers.m_14512_().getSchema(DataFixUtils.makeKey(SharedConstants.m_183709_().getWorldVersion())).getChoiceType(p_137552_, p_137553_);
} catch (IllegalArgumentException illegalargumentexception) {
diff --git a/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch b/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch
index 9ed330c09b..8e7870365a 100644
--- a/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch
+++ b/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/KeyboardHandler.java
+++ b/net/minecraft/client/KeyboardHandler.java
-@@ -300,7 +_,9 @@
+@@ -299,7 +_,9 @@
}
Screen screen = this.f_90867_.f_91080_;
@@ -11,7 +11,7 @@
if (this.f_90867_.f_91066_.f_92105_.m_90832_(p_90895_, p_90896_)) {
this.f_90867_.m_91268_().m_85438_();
this.f_90867_.f_91066_.m_231829_().m_231514_(this.f_90867_.m_91268_().m_85440_());
-@@ -318,6 +_,8 @@
+@@ -317,6 +_,8 @@
});
return;
}
@@ -19,8 +19,8 @@
+ ((KeyBindsScreen)this.f_90867_.f_91080_).f_193975_ = null; //Forge: Unset pure modifiers.
}
- if (NarratorChatListener.f_93311_.m_93316_()) {
-@@ -340,11 +_,15 @@
+ if (this.f_90867_.m_240477_().m_93316_()) {
+@@ -339,11 +_,15 @@
Screen.m_96579_(() -> {
if (p_90897_ != 1 && (p_90897_ != 2 || !this.f_90868_)) {
if (p_90897_ == 0) {
@@ -38,7 +38,7 @@
}
}, "keyPressed event handler", screen.getClass().getCanonicalName());
-@@ -397,22 +_,26 @@
+@@ -396,22 +_,26 @@
}
}
}
diff --git a/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/patches/minecraft/net/minecraft/client/Minecraft.java.patch
index 34a7e99d01..ceead3239b 100644
--- a/patches/minecraft/net/minecraft/client/Minecraft.java.patch
+++ b/patches/minecraft/net/minecraft/client/Minecraft.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/Minecraft.java
+++ b/net/minecraft/client/Minecraft.java
-@@ -236,7 +_,7 @@
+@@ -243,7 +_,7 @@
import org.slf4j.Logger;
@OnlyIn(Dist.CLIENT)
@@ -9,7 +9,7 @@
static Minecraft f_90981_;
private static final Logger f_90982_ = LogUtils.getLogger();
public static final boolean f_91002_ = Util.m_137581_() == Util.OS.OSX;
-@@ -385,7 +_,7 @@
+@@ -397,7 +_,7 @@
this.f_91029_ = p_91084_.f_101908_.f_101928_;
this.f_90986_ = p_91084_.f_101905_.f_101944_;
this.f_91037_ = new ClientPackSource(new File(this.f_91069_, "server-resource-packs"), p_91084_.f_101907_.m_101925_());
@@ -18,7 +18,7 @@
this.f_91030_ = p_91084_.f_101905_.f_101945_;
this.f_231338_ = new YggdrasilAuthenticationService(this.f_91030_);
this.f_91048_ = this.f_231338_.createMinecraftSessionService();
-@@ -393,7 +_,6 @@
+@@ -405,7 +_,6 @@
this.f_231339_ = SignatureValidator.m_216358_(this.f_231338_.getServicesKey());
this.f_90998_ = p_91084_.f_101905_.f_101942_;
f_90982_.info("Setting user: {}", (Object)this.f_90998_.m_92546_());
@@ -26,15 +26,16 @@
this.f_91033_ = p_91084_.f_101908_.f_101926_;
this.f_91034_ = !p_91084_.f_101908_.f_101929_;
this.f_91035_ = !p_91084_.f_101908_.f_101930_;
-@@ -445,7 +_,6 @@
+@@ -457,7 +_,7 @@
this.f_90990_.m_85380_(this.f_91066_.m_232035_().m_231551_());
this.f_91067_ = new MouseHandler(this);
- this.f_91067_.m_91524_(this.f_90990_.m_85439_());
++ // FORGE: Move mouse handler setup further below
this.f_91068_ = new KeyboardHandler(this);
this.f_91068_.m_90887_(this.f_90990_.m_85439_());
RenderSystem.m_69580_(this.f_91066_.f_92035_, false);
-@@ -453,6 +_,7 @@
+@@ -465,6 +_,7 @@
this.f_91042_.m_83931_(0.0F, 0.0F, 0.0F, 0.0F);
this.f_91042_.m_83954_(f_91002_);
this.f_91036_ = new ReloadableResourceManager(PackType.CLIENT_RESOURCES);
@@ -42,7 +43,7 @@
this.f_91038_.m_10506_();
this.f_91066_.m_92145_(this.f_91038_);
this.f_91039_ = new LanguageManager(this.f_91066_.f_92075_);
-@@ -496,10 +_,12 @@
+@@ -509,10 +_,12 @@
this.f_91063_ = new GameRenderer(this, this.f_90994_.m_234586_(), this.f_91036_, this.f_90993_);
this.f_91036_.m_7217_(this.f_91063_);
this.f_91060_ = new LevelRenderer(this, this.f_90994_, this.f_167845_, this.f_90993_);
@@ -55,17 +56,18 @@
this.f_91036_.m_7217_(this.f_91061_);
this.f_91053_ = new PaintingTextureManager(this.f_90987_);
this.f_91036_.m_7217_(this.f_91053_);
-@@ -508,7 +_,8 @@
+@@ -521,7 +_,9 @@
this.f_91047_ = new GpuWarnlistManager();
this.f_91036_.m_7217_(this.f_91047_);
this.f_91036_.m_7217_(this.f_205120_);
- this.f_91065_ = new Gui(this, this.f_90995_);
+ this.f_91065_ = new net.minecraftforge.client.gui.overlay.ForgeGui(this);
-+ this.f_91067_.m_91524_(this.f_90990_.m_85439_()); //Forge: Moved below ingameGUI setting to prevent NPEs in handeler.
++ // FORGE: Moved mouse handler setup below ingame gui creation to prevent NPEs in mouse handler.
++ this.f_91067_.m_91524_(this.f_90990_.m_85439_());
this.f_91064_ = new DebugRenderer(this);
+ this.f_238717_ = new RealmsDataFetcher(RealmsClient.m_239151_(this));
RenderSystem.m_69900_(this::m_91113_);
- if (this.f_91042_.f_83915_ == this.f_90990_.m_85441_() && this.f_91042_.f_83916_ == this.f_90990_.m_85442_()) {
-@@ -526,6 +_,19 @@
+@@ -540,6 +_,19 @@
TinyFileDialogs.tinyfd_messageBox("Minecraft", stringbuilder.toString(), "ok", "error", false);
}
@@ -85,29 +87,46 @@
this.f_90990_.m_85409_(this.f_91066_.m_231817_().m_231551_());
this.f_90990_.m_85424_(this.f_91066_.m_232123_().m_231551_());
this.f_90990_.m_85426_();
-@@ -543,13 +_,16 @@
+@@ -562,23 +_,23 @@
}
this.f_167847_.m_168556_();
+ if (net.minecraftforge.client.loading.ClientModLoader.completeModLoading()) return; // Do not overwrite the error screen
+ // FORGE: Move opening initial screen to after startup and events are enabled.
-+ // Also Fixes MC-145102
+ if (s != null) {
-+ ConnectScreen.m_169267_(new TitleScreen(), this, new ServerAddress(s, i), (ServerData)null);
++ ConnectScreen.m_169267_(new TitleScreen(), this, new ServerAddress(s, i), (ServerData)null);
++ } else if (this.m_239929_()) {
++ this.m_91152_(BanNoticeScreen.m_239967_((p_238185_) -> {
++ if (p_238185_) {
++ Util.m_137581_().m_137646_("https://aka.ms/mcjavamoderation");
++ }
++
++ this.m_91152_(new TitleScreen(true));
++ }, this.m_239210_()));
+ } else {
-+ this.m_91152_(new TitleScreen(true));
++ this.m_91152_(new TitleScreen(true));
+ }
});
}, false));
- if (s != null) {
-- ConnectScreen.m_169267_(new TitleScreen(), this, new ServerAddress(s, i), (ServerData)null);
+- reloadinstance.m_7237_().thenRunAsync(() -> {
+- ConnectScreen.m_169267_(new TitleScreen(), this, new ServerAddress(s, i), (ServerData)null);
+- }, this);
+- } else if (this.m_239929_()) {
+- this.m_91152_(BanNoticeScreen.m_239967_((p_238185_) -> {
+- if (p_238185_) {
+- Util.m_137581_().m_137646_("https://aka.ms/mcjavamoderation");
+- }
+-
+- this.m_91152_(new TitleScreen(true));
+- }, this.m_239210_()));
- } else {
- this.m_91152_(new TitleScreen(true));
- }
}
-@@ -592,6 +_,8 @@
+@@ -621,6 +_,8 @@
private UserApiService m_193585_(YggdrasilAuthenticationService p_193586_, GameConfig p_193587_) {
try {
@@ -116,7 +135,7 @@
return p_193586_.createUserApiService(p_193587_.f_101905_.f_101942_.m_92547_());
} catch (AuthenticationException authenticationexception) {
f_90982_.error("Failed to verify authentication", (Throwable)authenticationexception);
-@@ -604,7 +_,7 @@
+@@ -633,7 +_,7 @@
}
private void m_91239_(Throwable p_91240_) {
@@ -125,7 +144,7 @@
this.m_91241_(p_91240_, (Component)null);
} else {
Util.m_137559_(p_91240_);
-@@ -762,13 +_,13 @@
+@@ -791,13 +_,13 @@
Bootstrap.m_135875_(p_91333_.m_127526_());
if (p_91333_.m_127527_() != null) {
Bootstrap.m_135875_("#@!@# Game crashed! Crash report saved to: #@!@# " + p_91333_.m_127527_());
@@ -142,7 +161,7 @@
}
}
-@@ -892,10 +_,6 @@
+@@ -921,10 +_,6 @@
f_90982_.error("setScreen called from non-game thread");
}
@@ -153,7 +172,7 @@
if (p_91153_ == null && this.f_91073_ == null) {
p_91153_ = new TitleScreen();
} else if (p_91153_ == null && this.f_91074_.m_21224_()) {
-@@ -906,6 +_,19 @@
+@@ -935,6 +_,19 @@
}
}
@@ -173,7 +192,7 @@
this.f_91080_ = p_91153_;
BufferUploader.m_166835_();
if (p_91153_ != null) {
-@@ -1049,11 +_,14 @@
+@@ -1078,11 +_,14 @@
RenderSystem.m_69481_();
this.f_91026_.m_7238_();
if (!this.f_91079_) {
@@ -188,7 +207,7 @@
}
if (this.f_91056_ != null) {
-@@ -1180,10 +_,12 @@
+@@ -1209,10 +_,12 @@
this.f_90990_.m_85378_((double)i);
if (this.f_91080_ != null) {
this.f_91080_.m_6574_(this, this.f_90990_.m_85445_(), this.f_90990_.m_85446_());
@@ -201,7 +220,7 @@
this.f_91063_.m_109097_(this.f_90990_.m_85441_(), this.f_90990_.m_85442_());
this.f_91067_.m_91599_();
}
-@@ -1461,6 +_,7 @@
+@@ -1490,6 +_,7 @@
}
public void m_91395_() {
@@ -209,7 +228,7 @@
this.f_91019_ = false;
}
-@@ -1490,10 +_,18 @@
+@@ -1519,10 +_,18 @@
if (p_91387_ && this.f_91077_ != null && this.f_91077_.m_6662_() == HitResult.Type.BLOCK) {
BlockHitResult blockhitresult = (BlockHitResult)this.f_91077_;
BlockPos blockpos = blockhitresult.m_82425_();
@@ -231,7 +250,7 @@
this.f_91074_.m_6674_(InteractionHand.MAIN_HAND);
}
}
-@@ -1518,14 +_,20 @@
+@@ -1547,14 +_,20 @@
return false;
} else {
boolean flag = false;
@@ -254,7 +273,7 @@
this.f_91072_.m_105269_(blockpos, blockhitresult.m_82434_());
if (this.f_91073_.m_8055_(blockpos).m_60795_()) {
flag = true;
-@@ -1538,8 +_,10 @@
+@@ -1567,8 +_,10 @@
}
this.f_91074_.m_36334_();
@@ -265,7 +284,7 @@
this.f_91074_.m_6674_(InteractionHand.MAIN_HAND);
return flag;
}
-@@ -1554,6 +_,11 @@
+@@ -1583,6 +_,11 @@
}
for(InteractionHand interactionhand : InteractionHand.values()) {
@@ -277,7 +296,7 @@
ItemStack itemstack = this.f_91074_.m_21120_(interactionhand);
if (this.f_91077_ != null) {
switch (this.f_91077_.m_6662_()) {
-@@ -1564,6 +_,7 @@
+@@ -1593,6 +_,7 @@
return;
}
@@ -285,7 +304,7 @@
InteractionResult interactionresult = this.f_91072_.m_105230_(this.f_91074_, entity, entityhitresult, interactionhand);
if (!interactionresult.m_19077_()) {
interactionresult = this.f_91072_.m_105226_(this.f_91074_, entity, interactionhand);
-@@ -1571,6 +_,7 @@
+@@ -1600,6 +_,7 @@
if (interactionresult.m_19077_()) {
if (interactionresult.m_19080_()) {
@@ -293,7 +312,7 @@
this.f_91074_.m_6674_(interactionhand);
}
-@@ -1583,6 +_,7 @@
+@@ -1612,6 +_,7 @@
InteractionResult interactionresult1 = this.f_91072_.m_233732_(this.f_91074_, interactionhand, blockhitresult);
if (interactionresult1.m_19077_()) {
if (interactionresult1.m_19080_()) {
@@ -301,7 +320,7 @@
this.f_91074_.m_6674_(interactionhand);
if (!itemstack.m_41619_() && (itemstack.m_41613_() != i || this.f_91072_.m_105290_())) {
this.f_91063_.f_109055_.m_109320_(interactionhand);
-@@ -1598,6 +_,9 @@
+@@ -1627,6 +_,9 @@
}
}
@@ -311,16 +330,16 @@
if (!itemstack.m_41619_()) {
InteractionResult interactionresult2 = this.f_91072_.m_233721_(this.f_91074_, interactionhand);
if (interactionresult2.m_19077_()) {
-@@ -1624,6 +_,8 @@
+@@ -1653,6 +_,8 @@
--this.f_91011_;
}
+ net.minecraftforge.event.ForgeEventFactory.onPreClientTick();
+
this.f_91026_.m_6180_("gui");
+ this.f_240378_.m_240688_();
this.f_91065_.m_193832_(this.f_91012_);
- this.f_91026_.m_7238_();
-@@ -1752,6 +_,8 @@
+@@ -1782,6 +_,8 @@
this.f_91026_.m_6182_("keyboard");
this.f_91068_.m_90931_();
this.f_91026_.m_7238_();
@@ -329,18 +348,7 @@
}
private boolean m_91278_() {
-@@ -1894,8 +_,8 @@
- SkullBlockEntity.m_222885_(services, this);
- GameProfileCache.m_11004_(false);
- this.f_91007_ = MinecraftServer.m_129872_((p_231361_) -> {
-- return new IntegratedServer(p_231361_, this, p_231382_, p_231383_, p_231384_, services, (p_231447_) -> {
-- StoringChunkProgressListener storingchunkprogresslistener = new StoringChunkProgressListener(p_231447_ + 0);
-+ return new IntegratedServer(p_231361_, this, p_231382_, p_231383_, p_231384_, services, (p_210795_) -> { //TODO-PATCHING: Handle the registry freeze delay again.
-+ StoringChunkProgressListener storingchunkprogresslistener = new StoringChunkProgressListener(p_210795_ + 0);
- this.f_90999_.set(storingchunkprogresslistener);
- return ProcessorChunkProgressListener.m_143583_(storingchunkprogresslistener, this.f_91023_::add);
- });
-@@ -1945,6 +_,7 @@
+@@ -1976,6 +_,7 @@
}
public void m_91156_(ClientLevel p_91157_) {
@@ -348,20 +356,20 @@
ProgressScreen progressscreen = new ProgressScreen(true);
progressscreen.m_6309_(Component.m_237115_("connect.joining"));
this.m_91362_(progressscreen);
-@@ -1978,10 +_,12 @@
+@@ -2009,10 +_,12 @@
IntegratedServer integratedserver = this.f_91007_;
this.f_91007_ = null;
this.f_91063_.m_109150_();
+ net.minecraftforge.client.ForgeHooksClient.firePlayerLogout(this.f_91072_, this.f_91074_);
this.f_91072_ = null;
- NarratorChatListener.f_93311_.m_93328_();
+ this.f_240365_.m_93328_();
this.m_91362_(p_91321_);
if (this.f_91073_ != null) {
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.level.LevelEvent.Unload(f_91073_));
if (integratedserver != null) {
this.f_91026_.m_6180_("waitForServer");
-@@ -1996,6 +_,7 @@
+@@ -2027,6 +_,7 @@
this.f_91065_.m_93089_();
this.f_91008_ = null;
this.f_91010_ = false;
@@ -369,7 +377,7 @@
this.f_91004_.m_90740_();
}
-@@ -2082,6 +_,7 @@
+@@ -2122,6 +_,7 @@
private void m_91280_() {
if (this.f_91077_ != null && this.f_91077_.m_6662_() != HitResult.Type.MISS) {
@@ -377,7 +385,7 @@
boolean flag = this.f_91074_.m_150110_().f_35937_;
BlockEntity blockentity = null;
HitResult.Type hitresult$type = this.f_91077_.m_6662_();
-@@ -2094,10 +_,7 @@
+@@ -2134,10 +_,7 @@
}
Block block = blockstate.m_60734_();
@@ -389,7 +397,7 @@
if (flag && Screen.m_96637_() && blockstate.m_155947_()) {
blockentity = this.f_91073_.m_7702_(blockpos);
-@@ -2108,7 +_,7 @@
+@@ -2148,7 +_,7 @@
}
Entity entity = ((EntityHitResult)this.f_91077_).m_82443_();
@@ -398,7 +406,7 @@
if (itemstack == null) {
return;
}
-@@ -2632,8 +_,8 @@
+@@ -2686,8 +_,8 @@
return this.f_90993_;
}
@@ -409,7 +417,7 @@
Supplier supplier = p_167937_;
if (i <= 3) {
supplier = m_91330_(p_167937_);
-@@ -2643,7 +_,7 @@
+@@ -2697,7 +_,7 @@
supplier = m_91352_(supplier);
}
@@ -418,7 +426,7 @@
}
private static Supplier m_91330_(Supplier p_91331_) {
-@@ -2662,6 +_,14 @@
+@@ -2716,6 +_,14 @@
this.f_91051_.m_119410_(p_91313_);
}
@@ -433,7 +441,7 @@
public EntityModelSet m_167973_() {
return this.f_167844_;
}
-@@ -2719,4 +_,11 @@
+@@ -2789,4 +_,11 @@
public abstract boolean m_142594_(boolean p_168035_);
}
diff --git a/patches/minecraft/net/minecraft/client/Options.java.patch b/patches/minecraft/net/minecraft/client/Options.java.patch
index 497aebea92..f2c738c4fc 100644
--- a/patches/minecraft/net/minecraft/client/Options.java.patch
+++ b/patches/minecraft/net/minecraft/client/Options.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/Options.java
+++ b/net/minecraft/client/Options.java
-@@ -515,7 +_,8 @@
+@@ -539,7 +_,8 @@
}, new OptionInstance.LazyEnum<>(() -> {
return Stream.concat(Stream.of(""), Minecraft.m_91087_().m_91106_().m_194525_().stream()).toList();
}, (p_232011_) -> {
@@ -10,7 +10,7 @@
}, Codec.STRING), "", (p_231994_) -> {
SoundManager soundmanager = Minecraft.m_91087_().m_91106_();
soundmanager.m_194526_();
-@@ -772,6 +_,7 @@
+@@ -796,6 +_,7 @@
}
public Options(Minecraft p_92138_, File p_92139_) {
@@ -18,7 +18,7 @@
this.f_92060_ = p_92138_;
this.f_92110_ = new File(p_92139_, "options.txt");
boolean flag = p_92138_.m_91103_();
-@@ -886,11 +_,20 @@
+@@ -910,11 +_,20 @@
p_168428_.m_213982_("chatPreview", this.f_231796_);
p_168428_.m_213982_("onlyShowSecureChat", this.f_231798_);
@@ -41,7 +41,7 @@
}
}
-@@ -911,6 +_,9 @@
+@@ -935,6 +_,9 @@
}
public void m_92140_() {
@@ -51,7 +51,7 @@
try {
if (!this.f_92110_.exists()) {
return;
-@@ -955,7 +_,8 @@
+@@ -979,7 +_,8 @@
}
}
@@ -61,7 +61,7 @@
@Nullable
private String m_168458_(String p_168459_) {
return compoundtag1.m_128441_(p_168459_) ? compoundtag1.m_128461_(p_168459_) : null;
-@@ -1058,6 +_,7 @@
+@@ -1082,6 +_,7 @@
}
public void m_92169_() {
@@ -69,7 +69,7 @@
try {
final PrintWriter printwriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(this.f_92110_), StandardCharsets.UTF_8));
-@@ -1205,6 +_,23 @@
+@@ -1229,6 +_,23 @@
}
p_92146_.m_10509_(set);
diff --git a/patches/minecraft/net/minecraft/client/Screenshot.java.patch b/patches/minecraft/net/minecraft/client/Screenshot.java.patch
index f940cee473..75a7c23c8d 100644
--- a/patches/minecraft/net/minecraft/client/Screenshot.java.patch
+++ b/patches/minecraft/net/minecraft/client/Screenshot.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/Screenshot.java
+++ b/net/minecraft/client/Screenshot.java
-@@ -59,13 +_,23 @@
+@@ -55,13 +_,23 @@
file2 = new File(file1, p_92307_);
}
diff --git a/patches/minecraft/net/minecraft/client/User.java.patch b/patches/minecraft/net/minecraft/client/User.java.patch
index c0856fcae9..ea069ae3cb 100644
--- a/patches/minecraft/net/minecraft/client/User.java.patch
+++ b/patches/minecraft/net/minecraft/client/User.java.patch
@@ -23,19 +23,10 @@
this.f_92535_ = p_193799_;
this.f_92536_ = p_193800_;
this.f_92537_ = p_193801_;
-@@ -58,10 +_,22 @@
- public GameProfile m_92548_() {
- try {
- UUID uuid = UUIDTypeAdapter.fromString(this.m_92545_());
-- return new GameProfile(uuid, this.m_92546_());
-+ GameProfile ret = new GameProfile(uuid, this.m_92546_()); //Forge: Adds cached GameProfile properties to returned GameProfile.
-+ if (properties != null) ret.getProperties().putAll(properties); // Helps to cut down on calls to the session service,
-+ return ret; // which helps to fix MC-52974.
- } catch (IllegalArgumentException illegalargumentexception) {
- return new GameProfile((UUID)null, this.m_92546_());
+@@ -64,8 +_,22 @@
}
-+ }
-+
+ }
+
+ //For internal use only. Modders should never need to use this.
+ public void setProperties(com.mojang.authlib.properties.PropertyMap properties) {
+ if (this.properties == null)
@@ -44,6 +35,15 @@
+
+ public boolean hasCachedProperties() {
+ return properties != null;
++ }
++
+ public GameProfile m_92548_() {
+- return new GameProfile(this.m_240411_(), this.m_92546_());
++ // FORGE: Add cached GameProfile properties to returned GameProfile. This helps to cut down on calls to the session service.
++ GameProfile ret = new GameProfile(this.m_240411_(), this.m_92546_());
++ if (this.properties != null)
++ ret.getProperties().putAll(this.properties);
++ return ret;
}
public User.Type m_168638_() {
diff --git a/patches/minecraft/net/minecraft/client/gui/Gui.java.patch b/patches/minecraft/net/minecraft/client/gui/Gui.java.patch
index c5dbf80e84..f2a7cdc534 100644
--- a/patches/minecraft/net/minecraft/client/gui/Gui.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/Gui.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/Gui.java
+++ b/net/minecraft/client/gui/Gui.java
-@@ -400,6 +_,7 @@
+@@ -389,6 +_,7 @@
if (this.f_92986_.f_91076_ != null && this.f_92986_.f_91076_ instanceof LivingEntity && f >= 1.0F) {
flag = this.f_92986_.f_91074_.m_36333_() > 5.0F;
flag &= this.f_92986_.f_91076_.m_6084_();
@@ -8,7 +8,7 @@
}
int j = this.f_92978_ / 2 - 7 + 16;
-@@ -452,6 +_,10 @@
+@@ -441,6 +_,10 @@
for(MobEffectInstance mobeffectinstance : Ordering.natural().reverse().sortedCopy(collection)) {
MobEffect mobeffect = mobeffectinstance.m_19544_();
@@ -19,7 +19,7 @@
if (mobeffectinstance.m_19575_()) {
int i = this.f_92977_;
int j = 1;
-@@ -480,6 +_,7 @@
+@@ -469,6 +_,7 @@
}
}
@@ -27,7 +27,7 @@
TextureAtlasSprite textureatlassprite = mobeffecttexturemanager.m_118732_(mobeffect);
int l = i;
int i1 = j;
-@@ -609,12 +_,13 @@
+@@ -598,12 +_,13 @@
public void m_93069_(PoseStack p_93070_) {
this.f_92986_.m_91307_().m_6180_("selectedItemName");
if (this.f_92993_ > 0 && !this.f_92994_.m_41619_()) {
@@ -43,7 +43,7 @@
int j = (this.f_92977_ - i) / 2;
int k = this.f_92978_ - 59;
if (!this.f_92986_.f_91072_.m_105205_()) {
-@@ -630,7 +_,13 @@
+@@ -619,7 +_,13 @@
RenderSystem.m_69478_();
RenderSystem.m_69453_();
m_93172_(p_93070_, j - 2, k - 2, j + i + 2, k + 9 + 2, this.f_92986_.f_91066_.m_92143_(0));
@@ -58,7 +58,7 @@
RenderSystem.m_69461_();
}
}
-@@ -1144,7 +_,7 @@
+@@ -1133,7 +_,7 @@
ItemStack itemstack = this.f_92986_.f_91074_.m_150109_().m_36056_();
if (itemstack.m_41619_()) {
this.f_92993_ = 0;
diff --git a/patches/minecraft/net/minecraft/client/gui/components/AbstractSelectionList.java.patch b/patches/minecraft/net/minecraft/client/gui/components/AbstractSelectionList.java.patch
index 2f20e136d8..058d0ec6ad 100644
--- a/patches/minecraft/net/minecraft/client/gui/components/AbstractSelectionList.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/components/AbstractSelectionList.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/components/AbstractSelectionList.java
+++ b/net/minecraft/client/gui/components/AbstractSelectionList.java
-@@ -532,6 +_,13 @@
+@@ -536,6 +_,13 @@
}
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch
index b177b4d2c7..767cfbea47 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch
@@ -101,7 +101,7 @@
if (j2 + i > this.f_96543_) {
j2 -= 28 + i;
}
-@@ -231,15 +_,16 @@
+@@ -227,15 +_,16 @@
RenderSystem.m_157427_(GameRenderer::m_172811_);
bufferbuilder.m_166779_(VertexFormat.Mode.QUADS, DefaultVertexFormat.f_85815_);
Matrix4f matrix4f = p_169384_.m_85850_().m_85861_();
@@ -127,7 +127,7 @@
RenderSystem.m_69482_();
RenderSystem.m_69472_();
RenderSystem.m_69478_();
-@@ -253,7 +_,7 @@
+@@ -249,7 +_,7 @@
for(int i2 = 0; i2 < p_169385_.size(); ++i2) {
ClientTooltipComponent clienttooltipcomponent1 = p_169385_.get(i2);
@@ -136,7 +136,7 @@
l1 += clienttooltipcomponent1.m_142103_() + (i2 == 0 ? 2 : 0);
}
-@@ -263,7 +_,7 @@
+@@ -259,7 +_,7 @@
for(int l2 = 0; l2 < p_169385_.size(); ++l2) {
ClientTooltipComponent clienttooltipcomponent2 = p_169385_.get(l2);
@@ -145,7 +145,7 @@
l1 += clienttooltipcomponent2.m_142103_() + (l2 == 0 ? 2 : 0);
}
-@@ -363,9 +_,19 @@
+@@ -361,9 +_,19 @@
this.f_96547_ = p_96607_.f_91062_;
this.f_96543_ = p_96608_;
this.f_96544_ = p_96609_;
@@ -165,7 +165,7 @@
}
protected void m_232761_() {
-@@ -394,6 +_,7 @@
+@@ -392,6 +_,7 @@
public void m_96558_(PoseStack p_96559_, int p_96560_) {
if (this.f_96541_.f_91073_ != null) {
this.m_93179_(p_96559_, 0, 0, this.f_96543_, this.f_96544_, -1072689136, -804253680);
@@ -173,7 +173,7 @@
} else {
this.m_96626_(p_96560_);
}
-@@ -413,6 +_,7 @@
+@@ -411,6 +_,7 @@
bufferbuilder.m_5483_((double)this.f_96543_, 0.0D, 0.0D).m_7421_((float)this.f_96543_ / 32.0F, (float)p_96627_).m_6122_(64, 64, 64, 255).m_5752_();
bufferbuilder.m_5483_(0.0D, 0.0D, 0.0D).m_7421_(0.0F, (float)p_96627_).m_6122_(64, 64, 64, 255).m_5752_();
tesselator.m_85914_();
@@ -181,7 +181,7 @@
}
public boolean m_7043_() {
-@@ -498,6 +_,10 @@
+@@ -496,6 +_,10 @@
}
public void m_7400_(List p_96591_) {
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch
index 6bf2e36458..9ba643ff96 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/TitleScreen.java
+++ b/net/minecraft/client/gui/screens/TitleScreen.java
-@@ -66,6 +_,7 @@
+@@ -68,6 +_,7 @@
private long f_96715_;
@Nullable
private TitleScreen.WarningLabel f_232768_;
@@ -8,7 +8,7 @@
public TitleScreen() {
this(false);
-@@ -110,11 +_,16 @@
+@@ -112,11 +_,16 @@
int j = this.f_96543_ - i - 2;
int k = 24;
int l = this.f_96544_ / 4 + 48;
@@ -25,7 +25,7 @@
this.m_142416_(new ImageButton(this.f_96543_ / 2 - 124, l + 72 + 12, 20, 20, 0, 106, 20, Button.f_93617_, 256, 256, (p_96791_) -> {
this.f_96541_.m_91152_(new LanguageSelectScreen(this, this.f_96541_.f_91066_, this.f_96541_.m_91102_()));
-@@ -169,7 +_,7 @@
+@@ -167,7 +_,7 @@
Screen screen = (Screen)(this.f_96541_.f_91066_.f_92083_ ? new JoinMultiplayerScreen(this) : new SafetyScreen(this));
this.f_96541_.m_91152_(screen);
}, button$ontooltip))).f_93623_ = flag;
@@ -34,7 +34,7 @@
this.m_96793_();
}, button$ontooltip))).f_93623_ = flag;
}
-@@ -298,6 +_,7 @@
+@@ -310,6 +_,7 @@
this.f_232768_.m_232790_(p_96739_, l);
}
@@ -42,7 +42,7 @@
if (this.f_96721_ != null) {
p_96739_.m_85836_();
p_96739_.m_85837_((double)(this.f_96543_ / 2 + 90), 70.0D, 0.0D);
-@@ -320,7 +_,14 @@
+@@ -332,7 +_,14 @@
s = s + I18n.m_118938_("menu.modded");
}
@@ -58,8 +58,8 @@
for(GuiEventListener guieventlistener : this.m_6702_()) {
if (guieventlistener instanceof AbstractWidget) {
-@@ -332,6 +_,7 @@
- if (this.m_96789_() && f1 >= 1.0F) {
+@@ -345,6 +_,7 @@
+ RenderSystem.m_69482_();
this.f_96726_.m_6305_(p_96739_, p_96740_, p_96741_, p_96742_);
}
+ if (f1 >= 1.0f) modUpdateNotification.m_6305_(p_96739_, p_96740_, p_96741_, p_96742_);
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch
index 25193d29fd..8412f7b554 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch
@@ -7,7 +7,7 @@
+ private static int tabPage, maxPages;
public AdvancementsScreen(ClientAdvancements p_97340_) {
- super(NarratorChatListener.f_93310_);
+ super(GameNarrator.f_93310_);
@@ -57,7 +_,13 @@
} else {
this.f_97334_.m_104401_(this.f_97336_ == null ? null : this.f_97336_.m_97182_(), true);
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch
index 4e18a7ff4f..45f04894d5 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch
@@ -251,7 +251,7 @@
this.m_93228_(p_98582_, l, i1, j, k, 28, 32);
this.f_96542_.f_115093_ = 100.0F;
l += 6;
-@@ -907,6 +_,22 @@
+@@ -909,6 +_,22 @@
public boolean m_8010_(Player p_98665_) {
return this.f_98655_.m_8010_(p_98665_);
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch
index 62959cc46d..7e675f87e7 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java
+++ b/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java
-@@ -68,6 +_,7 @@
+@@ -65,6 +_,7 @@
static final DateFormat f_101646_ = new SimpleDateFormat();
static final ResourceLocation f_101647_ = new ResourceLocation("textures/misc/unknown_server.png");
static final ResourceLocation f_101648_ = new ResourceLocation("textures/gui/world_selection.png");
@@ -8,7 +8,7 @@
static final Component f_101649_ = Component.m_237115_("selectWorld.tooltip.fromNewerVersion1").m_130940_(ChatFormatting.RED);
static final Component f_101650_ = Component.m_237115_("selectWorld.tooltip.fromNewerVersion2").m_130940_(ChatFormatting.RED);
static final Component f_101651_ = Component.m_237115_("selectWorld.tooltip.snapshot1").m_130940_(ChatFormatting.GOLD);
-@@ -326,6 +_,7 @@
+@@ -325,6 +_,7 @@
RenderSystem.m_69478_();
GuiComponent.m_93133_(p_101721_, p_101724_, p_101723_, 0.0F, 0.0F, 32, 32, 32, 32);
RenderSystem.m_69461_();
@@ -16,17 +16,19 @@
if (this.f_101693_.f_91066_.m_231828_().m_231551_() || p_101729_) {
RenderSystem.m_157456_(0, WorldSelectionList.f_101648_);
GuiComponent.m_93172_(p_101721_, p_101724_, p_101723_, p_101724_ + 32, p_101723_ + 32, -1601138544);
-@@ -647,6 +_,19 @@
+@@ -646,6 +_,21 @@
public boolean m_214209_() {
return !this.f_101695_.m_164916_();
+ }
++
++ // FORGE: Patch in experimental warning icon for worlds in the world selection screen
+ private void renderExperimentalWarning(PoseStack stack, int mouseX, int mouseY, int top, int left) {
+ if (this.f_101695_.isExperimental()) {
+ int leftStart = left + WorldSelectionList.this.m_5759_();
+ RenderSystem.m_157456_(0, WorldSelectionList.FORGE_EXPERIMENTAL_WARNING_ICON);
+ GuiComponent.m_93133_(stack, leftStart - 36, top, 0.0F, 0.0F, 32, 32, 32, 32);
-+ //Reset texture to what it was before
++ // Reset texture to what it was before
+ RenderSystem.m_157456_(0, this.f_101698_ != null ? this.f_101696_ : WorldSelectionList.f_101647_);
+ if (WorldSelectionList.this.m_93412_(mouseX, mouseY) == this && mouseX > leftStart - 36 && mouseX < leftStart) {
+ List tooltip = Minecraft.m_91087_().f_91062_.m_92923_(Component.m_237115_("forge.experimentalsettings.tooltip"), 200);
diff --git a/patches/minecraft/net/minecraft/client/main/Main.java.patch b/patches/minecraft/net/minecraft/client/main/Main.java.patch
index 638b539d3b..ef087553e5 100644
--- a/patches/minecraft/net/minecraft/client/main/Main.java.patch
+++ b/patches/minecraft/net/minecraft/client/main/Main.java.patch
@@ -1,14 +1,15 @@
--- a/net/minecraft/client/main/Main.java
+++ b/net/minecraft/client/main/Main.java
-@@ -49,6 +_,7 @@
+@@ -48,7 +_,7 @@
+
@DontObfuscate
public static void main(String[] p_129642_) {
- SharedConstants.m_142977_();
-+ if (!net.minecraftforge.fml.loading.FMLConfig.isOptimizedDFUDisabled())
- SharedConstants.m_214358_();
- OptionParser optionparser = new OptionParser();
- optionparser.allowsUnrecognizedOptions();
-@@ -135,7 +_,7 @@
+- m_239872_(p_129642_, true);
++ m_239872_(p_129642_, !net.minecraftforge.fml.loading.FMLConfig.isOptimizedDFUDisabled());
+ }
+
+ public static void m_239872_(String[] p_239873_, boolean p_239874_) {
+@@ -142,7 +_,7 @@
}
CrashReport.m_127529_();
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch
index 6c1d569bae..9daf3432a2 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java
+++ b/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java
-@@ -126,6 +_,7 @@
+@@ -130,6 +_,7 @@
this.f_104521_.accept(Component.m_237115_("connect.joining"));
this.f_104523_ = p_104547_.m_134774_();
this.f_104522_.m_129498_(ConnectionProtocol.PLAY);
@@ -8,7 +8,7 @@
this.f_104522_.m_129505_(new ClientPacketListener(this.f_104519_, this.f_104520_, this.f_104522_, this.f_104523_, this.f_104519_.m_193590_()));
}
-@@ -133,7 +_,7 @@
+@@ -137,7 +_,7 @@
if (this.f_104520_ != null && this.f_104520_ instanceof RealmsScreen) {
this.f_104519_.m_91152_(new DisconnectedRealmsScreen(this.f_104520_, CommonComponents.f_130661_, p_104543_));
} else {
@@ -17,7 +17,7 @@
}
}
-@@ -154,6 +_,7 @@
+@@ -158,6 +_,7 @@
}
public void m_7254_(ClientboundCustomQueryPacket p_104545_) {
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch
index 6f00762acc..bb7dc7f331 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/multiplayer/ClientPacketListener.java
+++ b/net/minecraft/client/multiplayer/ClientPacketListener.java
-@@ -361,6 +_,7 @@
+@@ -375,6 +_,7 @@
this.f_104888_.f_91064_.m_113434_();
this.f_104888_.f_91074_.m_172530_();
@@ -8,7 +8,7 @@
int i = p_105030_.f_132360_();
this.f_104888_.f_91074_.m_20234_(i);
this.f_104889_.m_104630_(i, this.f_104888_.f_91074_);
-@@ -373,6 +_,7 @@
+@@ -387,6 +_,7 @@
this.f_104888_.f_91074_.m_219749_(p_105030_.f_238174_());
this.f_104888_.f_91072_.m_171805_(p_105030_.f_132363_(), p_105030_.f_132364_());
this.f_104888_.f_91066_.m_193770_(p_105030_.f_132370_());
@@ -16,16 +16,7 @@
this.f_104888_.f_91066_.m_92172_();
this.f_104885_.m_129512_(new ServerboundCustomPayloadPacket(ServerboundCustomPayloadPacket.f_133979_, (new FriendlyByteBuf(Unpooled.buffer())).m_130070_(ClientBrandRetriever.m_129629_())));
this.f_104888_.m_91309_().m_90739_();
-@@ -768,6 +_,8 @@
- }
-
- Component component = flag ? p_233693_.f_237213_() : p_233693_.m_237220_();
-+ component = net.minecraftforge.client.ForgeHooksClient.onClientChat(p_233692_, component, p_233694_);
-+ if (component == null) return;
- this.f_104888_.f_91065_.m_232360_(p_233692_, component, p_233694_);
- }
-
-@@ -931,8 +_,10 @@
+@@ -941,8 +_,10 @@
localplayer1.m_21204_().m_22159_(localplayer.m_21204_());
}
@@ -36,7 +27,7 @@
this.f_104889_.m_104630_(i, localplayer1);
localplayer1.m_146922_(-180.0F);
localplayer1.f_108618_ = new KeyboardInput(this.f_104888_.f_91066_);
-@@ -1036,10 +_,7 @@
+@@ -1046,10 +_,7 @@
PacketUtils.m_131363_(p_104976_, this, this.f_104888_);
BlockPos blockpos = p_104976_.m_131704_();
this.f_104888_.f_91073_.m_141902_(blockpos, p_104976_.m_195645_()).ifPresent((p_205557_) -> {
@@ -48,7 +39,7 @@
if (p_205557_ instanceof CommandBlockEntity && this.f_104888_.f_91080_ instanceof CommandBlockEditScreen) {
((CommandBlockEditScreen)this.f_104888_.f_91080_).m_98398_();
-@@ -1184,7 +_,9 @@
+@@ -1194,7 +_,9 @@
public void m_7443_(ClientboundCommandsPacket p_104990_) {
PacketUtils.m_131363_(p_104990_, this, this.f_104888_);
@@ -59,7 +50,7 @@
}
public void m_7183_(ClientboundStopSoundPacket p_105116_) {
-@@ -1203,6 +_,7 @@
+@@ -1213,6 +_,7 @@
ClientRecipeBook clientrecipebook = this.f_104888_.f_91074_.m_108631_();
clientrecipebook.m_90625_(this.f_104900_.m_44051_());
this.f_104888_.m_231374_(SearchRegistry.f_119943_, clientrecipebook.m_90639_());
@@ -67,7 +58,7 @@
}
public void m_7244_(ClientboundPlayerLookAtPacket p_105054_) {
-@@ -1304,6 +_,7 @@
+@@ -1314,6 +_,7 @@
this.f_104888_.m_231374_(SearchRegistry.f_119941_, nonnulllist);
this.f_104888_.m_231374_(SearchRegistry.f_119942_, nonnulllist);
@@ -75,7 +66,7 @@
}
private void m_205560_(ResourceKey extends Registry extends T>> p_205561_, TagNetworkSerialization.NetworkPayload p_205562_) {
-@@ -1646,6 +_,7 @@
+@@ -1666,6 +_,7 @@
}
public void m_7413_(ClientboundCustomPayloadPacket p_105004_) {
@@ -83,7 +74,7 @@
PacketUtils.m_131363_(p_105004_, this, this.f_104888_);
ResourceLocation resourcelocation = p_105004_.m_132042_();
FriendlyByteBuf friendlybytebuf = null;
-@@ -1843,7 +_,7 @@
+@@ -1863,7 +_,7 @@
int j5 = friendlybytebuf.m_130242_();
this.f_104888_.f_91064_.f_173815_.m_173830_(positionsource, j5);
} else {
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch
index a125f09110..927b68db21 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/multiplayer/PlayerInfo.java
+++ b/net/minecraft/client/multiplayer/PlayerInfo.java
-@@ -77,6 +_,7 @@
+@@ -84,6 +_,7 @@
}
protected void m_105317_(GameType p_105318_) {
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ProfileKeyPairManager.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ProfileKeyPairManager.java.patch
index cd3c2d838d..03e2b6dc5d 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/ProfileKeyPairManager.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ProfileKeyPairManager.java.patch
@@ -1,11 +1,11 @@
--- a/net/minecraft/client/multiplayer/ProfileKeyPairManager.java
+++ b/net/minecraft/client/multiplayer/ProfileKeyPairManager.java
-@@ -64,6 +_,8 @@
- this.m_233776_(profilekeypair);
- return Optional.of(profilekeypair);
- } catch (CryptException | MinecraftClientException | IOException ioexception) {
-+ // Forge: The offline user api service always returns a null profile key pair, so let's hide this useless exception if in dev
-+ if (net.minecraftforge.fml.loading.FMLLoader.isProduction() || p_233781_ != UserApiService.OFFLINE)
- f_233765_.error("Failed to retrieve profile key pair", (Throwable)ioexception);
- this.m_233776_((ProfileKeyPair)null);
- return optional;
+@@ -70,6 +_,8 @@
+ this.m_233776_(profilekeypair);
+ return Optional.of(profilekeypair);
+ } catch (CryptException | MinecraftClientException | IOException ioexception) {
++ // Forge: The offline user api service always returns a null profile key pair, so let's hide this useless exception if in dev
++ if (net.minecraftforge.fml.loading.FMLLoader.isProduction() || p_233781_ != UserApiService.OFFLINE)
+ f_233765_.error("Failed to retrieve profile key pair", (Throwable)ioexception);
+ this.m_233776_((ProfileKeyPair)null);
+ return optional;
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch
index cbd5759ac0..983b0d6d02 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch
@@ -1,9 +1,9 @@
--- a/net/minecraft/client/multiplayer/ServerData.java
+++ b/net/minecraft/client/multiplayer/ServerData.java
-@@ -35,6 +_,7 @@
- @Nullable
+@@ -36,6 +_,7 @@
private ServerData.ChatPreview f_233800_;
private boolean f_233801_ = true;
+ private boolean f_242950_;
+ public net.minecraftforge.client.ExtendedServerListData forgeData = null;
public ServerData(String p_105375_, String p_105376_, boolean p_105377_) {
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/chat/ChatListener.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/chat/ChatListener.java.patch
new file mode 100644
index 0000000000..f522c6da7c
--- /dev/null
+++ b/patches/minecraft/net/minecraft/client/multiplayer/chat/ChatListener.java.patch
@@ -0,0 +1,21 @@
+--- a/net/minecraft/client/multiplayer/chat/ChatListener.java
++++ b/net/minecraft/client/multiplayer/chat/ChatListener.java
+@@ -175,12 +_,16 @@
+ MessageSignature messagesignature = p_242317_.f_240893_();
+ FilterMask filtermask = p_242317_.f_242992_();
+ if (filtermask.m_243095_()) {
+- this.f_240348_.f_91065_.m_93076_().m_240964_(p_243337_, messagesignature, guimessagetag);
++ Component forgeComponent = net.minecraftforge.client.ForgeHooksClient.onClientChat(p_242290_, p_243337_, p_242317_, p_242317_.m_241067_());
++ if (forgeComponent == null) return false;
++ this.f_240348_.f_91065_.m_93076_().m_240964_(forgeComponent, messagesignature, guimessagetag);
+ this.m_241119_(p_242290_, p_242317_.m_237220_());
+ } else {
+ Component component = filtermask.m_243081_(p_242317_.m_241775_());
+ if (component != null) {
+- this.f_240348_.f_91065_.m_93076_().m_240964_(p_242290_.m_240977_(component), messagesignature, guimessagetag);
++ Component forgeComponent = net.minecraftforge.client.ForgeHooksClient.onClientChat(p_242290_, p_242290_.m_240977_(component), p_242317_, p_242317_.m_241067_());
++ if (forgeComponent == null) return false;
++ this.f_240348_.f_91065_.m_93076_().m_240964_(forgeComponent, messagesignature, guimessagetag);
+ this.m_241119_(p_242290_, component);
+ }
+ }
diff --git a/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch b/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch
index aeb8d98921..eed30bb817 100644
--- a/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch
+++ b/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/player/AbstractClientPlayer.java
+++ b/net/minecraft/client/player/AbstractClientPlayer.java
-@@ -146,6 +_,6 @@
+@@ -137,6 +_,6 @@
}
}
diff --git a/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch b/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch
index a5559cc441..ae563b8489 100644
--- a/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch
+++ b/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/player/LocalPlayer.java
+++ b/net/minecraft/client/player/LocalPlayer.java
-@@ -159,6 +_,7 @@
+@@ -162,6 +_,7 @@
}
public boolean m_6469_(DamageSource p_108662_, float p_108663_) {
@@ -8,25 +8,24 @@
return false;
}
-@@ -290,6 +_,9 @@
+@@ -289,6 +_,8 @@
}
- public void m_234125_(String p_234126_, @Nullable Component p_234127_) {
-+ // TODO-PATCHING: If the chat preview component is not null and the message is changed by this event, it looks like the signatures will de-sync and the server will skip the message. Fix? -SS
-+ p_234126_ = net.minecraftforge.client.ForgeHooksClient.onClientSendMessage(p_234126_);
-+ if (p_234126_.isEmpty()) return;
- MessageSigner messagesigner = MessageSigner.m_237183_(this.m_20148_());
- this.m_234141_(messagesigner, p_234126_, p_234127_);
- }
-@@ -328,6 +_,7 @@
+ public void m_240287_(String p_240288_, @Nullable Component p_240289_) {
++ p_240288_ = net.minecraftforge.client.ForgeHooksClient.onClientSendMessage(p_240288_);
++ if (p_240288_.isEmpty()) return;
+ this.m_240966_(p_240288_, p_240289_);
}
- private void m_234151_(MessageSigner p_234152_, String p_234153_, @Nullable Component p_234154_) {
-+ if (net.minecraftforge.client.ClientCommandHandler.runCommand(p_234153_)) return;
- ParseResults parseresults = this.f_108617_.m_105146_().parse(p_234153_, this.f_108617_.m_105137_());
- ArgumentSignatures argumentsignatures = this.m_234137_(p_234152_, parseresults, p_234154_);
- this.f_108617_.m_104955_(new ServerboundChatCommandPacket(p_234153_, p_234152_.f_237170_(), argumentsignatures, p_234154_ != null));
-@@ -544,7 +_,13 @@
+@@ -333,6 +_,7 @@
+ }
+
+ private void m_241110_(String p_241331_, @Nullable Component p_241563_) {
++ if (net.minecraftforge.client.ClientCommandHandler.runCommand(p_241331_)) return;
+ ParseResults parseresults = this.f_108617_.m_105146_().parse(p_241331_, this.f_108617_.m_105137_());
+ MessageSigner messagesigner = this.m_241001_();
+ LastSeenMessages.Update lastseenmessages$update = this.f_108617_.m_241918_();
+@@ -547,7 +_,13 @@
}
public void m_5496_(SoundEvent p_108651_, float p_108652_, float p_108653_) {
@@ -41,7 +40,7 @@
}
public void m_6330_(SoundEvent p_108655_, SoundSource p_108656_, float p_108657_, float p_108658_) {
-@@ -700,6 +_,7 @@
+@@ -703,6 +_,7 @@
this.f_108601_ = !this.m_150110_().f_35935_ && !this.m_6069_() && this.m_20175_(Pose.CROUCHING) && (this.m_6144_() || !this.m_5803_() && !this.m_20175_(Pose.STANDING));
float f = Mth.m_14036_(0.3F + EnchantmentHelper.m_220302_(this), 0.0F, 1.0F);
this.f_108618_.m_214106_(this.m_108635_(), f);
@@ -49,7 +48,7 @@
this.f_108619_.m_91301_().m_120586_(this.f_108618_);
if (this.m_6117_() && !this.m_20159_()) {
this.f_108618_.f_108566_ *= 0.2F;
-@@ -726,7 +_,7 @@
+@@ -729,7 +_,7 @@
}
boolean flag4 = (float)this.m_36324_().m_38702_() > 6.0F || this.m_150110_().f_35936_;
@@ -58,7 +57,7 @@
if (this.f_108583_ <= 0 && !this.f_108619_.f_91066_.f_92091_.m_90857_()) {
this.f_108583_ = 7;
} else {
-@@ -734,15 +_,15 @@
+@@ -737,15 +_,15 @@
}
}
@@ -77,7 +76,7 @@
this.m_6858_(false);
}
} else if (flag6) {
-@@ -772,14 +_,15 @@
+@@ -775,14 +_,15 @@
if (this.f_108618_.f_108572_ && !flag7 && !flag && !this.m_150110_().f_35935_ && !this.m_20159_() && !this.m_6147_()) {
ItemStack itemstack = this.m_6844_(EquipmentSlot.CHEST);
@@ -96,7 +95,7 @@
}
if (this.m_204029_(FluidTags.f_13131_)) {
-@@ -890,6 +_,7 @@
+@@ -893,6 +_,7 @@
public void m_6083_() {
super.m_6083_();
@@ -104,7 +103,7 @@
this.f_108611_ = false;
if (this.m_20202_() instanceof Boat) {
Boat boat = (Boat)this.m_20202_();
-@@ -1103,6 +_,18 @@
+@@ -1106,6 +_,18 @@
} else {
return super.m_7398_(p_108758_);
}
diff --git a/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch
index 75f0cddf1e..4407169e19 100644
--- a/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/FogRenderer.java
+++ b/net/minecraft/client/renderer/FogRenderer.java
-@@ -182,6 +_,12 @@
+@@ -190,6 +_,12 @@
f_109012_ = f_109012_ * (1.0F - f7) + f_109012_ * f9 * f7;
}
@@ -13,7 +13,7 @@
RenderSystem.m_69424_(f_109010_, f_109011_, f_109012_, 0.0F);
}
-@@ -263,6 +_,7 @@
+@@ -271,6 +_,7 @@
RenderSystem.m_157445_(fogrenderer$fogdata.f_234200_);
RenderSystem.m_157443_(fogrenderer$fogdata.f_234201_);
RenderSystem.m_202160_(fogrenderer$fogdata.f_234202_);
diff --git a/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch
index d43d238126..f03e744df1 100644
--- a/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/LevelRenderer.java
+++ b/net/minecraft/client/renderer/LevelRenderer.java
-@@ -263,6 +_,8 @@
+@@ -264,6 +_,8 @@
}
private void m_109703_(LightTexture p_109704_, float p_109705_, double p_109706_, double p_109707_, double p_109708_) {
@@ -9,7 +9,7 @@
float f = this.f_109461_.f_91073_.m_46722_(p_109705_);
if (!(f <= 0.0F)) {
p_109704_.m_109896_();
-@@ -383,6 +_,8 @@
+@@ -384,6 +_,8 @@
}
public void m_109693_(Camera p_109694_) {
@@ -18,7 +18,7 @@
float f = this.f_109461_.f_91073_.m_46722_(1.0F) / (Minecraft.m_91405_() ? 1.0F : 2.0F);
if (!(f <= 0.0F)) {
RandomSource randomsource = RandomSource.m_216335_((long)this.f_109477_ * 312987231L);
-@@ -1140,11 +_,13 @@
+@@ -1141,11 +_,13 @@
RenderSystem.m_69421_(16640, Minecraft.f_91002_);
float f = p_109605_.m_109152_();
boolean flag2 = this.f_109461_.f_91073_.m_104583_().m_5781_(Mth.m_14107_(d0), Mth.m_14107_(d1)) || this.f_109461_.f_91065_.m_93090_().m_93715_();
@@ -32,7 +32,7 @@
profilerfiller.m_6182_("fog");
FogRenderer.m_234172_(p_109604_, FogRenderer.FogMode.FOG_TERRAIN, Math.max(f, 32.0F), flag2, p_109601_);
profilerfiller.m_6182_("terrain_setup");
-@@ -1153,7 +_,9 @@
+@@ -1154,7 +_,9 @@
this.m_194370_(p_109604_);
profilerfiller.m_6182_("terrain");
this.m_172993_(RenderType.m_110451_(), p_109600_, d0, d1, d2, p_109607_);
@@ -42,7 +42,7 @@
this.m_172993_(RenderType.m_110463_(), p_109600_, d0, d1, d2, p_109607_);
if (this.f_109465_.m_104583_().m_108885_()) {
Lighting.m_84925_(p_109600_.m_85850_().m_85861_());
-@@ -1185,7 +_,7 @@
+@@ -1186,7 +_,7 @@
for(Entity entity : this.f_109465_.m_104735_()) {
if (this.f_109463_.m_114397_(entity, frustum, d0, d1, d2) || entity.m_20367_(this.f_109461_.f_91074_)) {
BlockPos blockpos = entity.m_20183_();
@@ -51,7 +51,7 @@
++this.f_109439_;
if (entity.f_19797_ == 0) {
entity.f_19790_ = entity.m_20185_();
-@@ -1225,6 +_,7 @@
+@@ -1226,6 +_,7 @@
List list = levelrenderer$renderchunkinfo.f_109839_.m_112835_().m_112773_();
if (!list.isEmpty()) {
for(BlockEntity blockentity1 : list) {
@@ -59,7 +59,7 @@
BlockPos blockpos4 = blockentity1.m_58899_();
MultiBufferSource multibuffersource1 = multibuffersource$buffersource;
p_109600_.m_85836_();
-@@ -1250,6 +_,7 @@
+@@ -1251,6 +_,7 @@
synchronized(this.f_109468_) {
for(BlockEntity blockentity : this.f_109468_) {
@@ -67,7 +67,7 @@
BlockPos blockpos3 = blockentity.m_58899_();
p_109600_.m_85836_();
p_109600_.m_85837_((double)blockpos3.m_123341_() - d0, (double)blockpos3.m_123342_() - d1, (double)blockpos3.m_123343_() - d2);
-@@ -1289,7 +_,8 @@
+@@ -1290,7 +_,8 @@
p_109600_.m_85837_((double)blockpos2.m_123341_() - d0, (double)blockpos2.m_123342_() - d1, (double)blockpos2.m_123343_() - d2);
PoseStack.Pose posestack$pose = p_109600_.m_85850_();
VertexConsumer vertexconsumer1 = new SheetedDecalTextureGenerator(this.f_109464_.m_110108_().m_6299_(ModelBakery.f_119229_.get(k1)), posestack$pose.m_85861_(), posestack$pose.m_85864_());
@@ -77,7 +77,7 @@
p_109600_.m_85849_();
}
}
-@@ -1301,10 +_,13 @@
+@@ -1302,10 +_,13 @@
profilerfiller.m_6182_("outline");
BlockPos blockpos1 = ((BlockHitResult)hitresult).m_82425_();
BlockState blockstate = this.f_109465_.m_8055_(blockpos1);
@@ -91,7 +91,7 @@
}
PoseStack posestack = RenderSystem.m_157191_();
-@@ -1339,7 +_,8 @@
+@@ -1340,7 +_,8 @@
this.f_109415_.m_83945_(this.f_109461_.m_91385_());
RenderStateShard.f_110126_.m_110185_();
profilerfiller.m_6182_("particles");
@@ -101,7 +101,7 @@
RenderStateShard.f_110126_.m_110188_();
} else {
profilerfiller.m_6182_("translucent");
-@@ -1353,7 +_,8 @@
+@@ -1354,7 +_,8 @@
profilerfiller.m_6182_("string");
this.m_172993_(RenderType.m_110503_(), p_109600_, d0, d1, d2, p_109607_);
profilerfiller.m_6182_("particles");
@@ -111,7 +111,7 @@
}
posestack.m_85836_();
-@@ -1377,6 +_,7 @@
+@@ -1378,6 +_,7 @@
RenderStateShard.f_110127_.m_110185_();
profilerfiller.m_6182_("weather");
this.m_109703_(p_109606_, p_109601_, d0, d1, d2);
@@ -119,7 +119,7 @@
this.m_173012_(p_109604_);
RenderStateShard.f_110127_.m_110188_();
this.f_109418_.m_110023_(p_109601_);
-@@ -1385,6 +_,7 @@
+@@ -1386,6 +_,7 @@
RenderSystem.m_69458_(false);
profilerfiller.m_6182_("weather");
this.m_109703_(p_109606_, p_109601_, d0, d1, d2);
@@ -127,7 +127,7 @@
this.m_173012_(p_109604_);
RenderSystem.m_69458_(true);
}
-@@ -1519,6 +_,7 @@
+@@ -1520,6 +_,7 @@
shaderinstance.m_173362_();
VertexBuffer.m_85931_();
this.f_109461_.m_91307_().m_7238_();
@@ -135,7 +135,7 @@
p_172994_.m_110188_();
}
-@@ -1780,6 +_,8 @@
+@@ -1781,6 +_,8 @@
}
public void m_202423_(PoseStack p_202424_, Matrix4f p_202425_, float p_202426_, Camera p_202427_, boolean p_202428_, Runnable p_202429_) {
@@ -144,7 +144,7 @@
p_202429_.run();
if (!p_202428_) {
FogType fogtype = p_202427_.m_167685_();
-@@ -1912,6 +_,8 @@
+@@ -1913,6 +_,8 @@
}
public void m_172954_(PoseStack p_172955_, Matrix4f p_172956_, float p_172957_, double p_172958_, double p_172959_, double p_172960_) {
@@ -153,7 +153,7 @@
float f = this.f_109465_.m_104583_().m_108871_();
if (!Float.isNaN(f)) {
RenderSystem.m_69464_();
-@@ -2102,7 +_,7 @@
+@@ -2103,7 +_,7 @@
}
} else {
BlockPos blockpos1 = chunkrenderdispatcher$renderchunk.m_112839_().m_7918_(8, 8, 8);
@@ -162,7 +162,7 @@
}
if (flag) {
-@@ -2399,7 +_,12 @@
+@@ -2400,7 +_,12 @@
this.f_109469_.m_110859_(p_109502_, p_109503_, p_109504_, p_109505_);
}
@@ -175,7 +175,7 @@
SoundInstance soundinstance = this.f_109410_.get(p_109516_);
if (soundinstance != null) {
this.f_109461_.m_91106_().m_120399_(soundinstance);
-@@ -2407,7 +_,7 @@
+@@ -2408,7 +_,7 @@
}
if (p_109515_ != null) {
@@ -184,7 +184,7 @@
if (recorditem != null) {
this.f_109461_.f_91065_.m_93055_(recorditem.m_43050_());
}
-@@ -2559,7 +_,7 @@
+@@ -2560,7 +_,7 @@
break;
case 1010:
if (Item.m_41445_(p_234307_) instanceof RecordItem) {
@@ -193,7 +193,7 @@
} else {
this.m_109514_((SoundEvent)null, p_234306_);
}
-@@ -2729,7 +_,7 @@
+@@ -2730,7 +_,7 @@
case 2001:
BlockState blockstate = Block.m_49803_(p_234307_);
if (!blockstate.m_60795_()) {
@@ -202,7 +202,7 @@
this.f_109465_.m_104677_(p_234306_, soundtype.m_56775_(), SoundSource.BLOCKS, (soundtype.m_56773_() + 1.0F) / 2.0F, soundtype.m_56774_() * 0.8F, false);
}
-@@ -2944,7 +_,7 @@
+@@ -2945,7 +_,7 @@
} else {
int i = p_109538_.m_45517_(LightLayer.SKY, p_109540_);
int j = p_109538_.m_45517_(LightLayer.BLOCK, p_109540_);
diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java.patch
index 68844d532d..51bff0e220 100644
--- a/patches/minecraft/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java
+++ b/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java
-@@ -77,12 +_,15 @@
+@@ -78,12 +_,15 @@
private Vec3 f_112683_ = Vec3.f_82478_;
public ChunkRenderDispatcher(ClientLevel p_194405_, LevelRenderer p_194406_, Executor p_194407_, boolean p_194408_, ChunkBufferBuilderPack p_194409_) {
@@ -17,7 +17,7 @@
this.f_112678_ = p_194409_;
List list = Lists.newArrayListWithExpectedSize(l);
-@@ -418,7 +_,7 @@
+@@ -419,7 +_,7 @@
if (!chunkrenderdispatcher$compiledchunk.f_112749_.contains(p_112810_)) {
return false;
} else {
@@ -26,7 +26,7 @@
p_112811_.m_112709_(this.f_112788_);
return true;
}
-@@ -450,7 +_,7 @@
+@@ -451,7 +_,7 @@
this.f_202433_.incrementAndGet();
}
@@ -35,7 +35,7 @@
return this.f_112787_;
}
-@@ -483,10 +_,20 @@
+@@ -484,10 +_,20 @@
protected final double f_112847_;
protected final AtomicBoolean f_112848_ = new AtomicBoolean(false);
protected final boolean f_194420_;
@@ -56,7 +56,7 @@
}
public abstract CompletableFuture m_5869_(ChunkBufferBuilderPack p_112853_);
-@@ -498,6 +_,10 @@
+@@ -499,6 +_,10 @@
public int compareTo(ChunkRenderDispatcher.RenderChunk.ChunkCompileTask p_112855_) {
return Doubles.compare(this.f_112847_, p_112855_.f_112847_);
}
@@ -67,7 +67,7 @@
}
@OnlyIn(Dist.CLIENT)
-@@ -505,8 +_,13 @@
+@@ -506,8 +_,13 @@
@Nullable
protected RenderChunkRegion f_112858_;
@@ -82,7 +82,7 @@
this.f_112858_ = p_194428_;
}
-@@ -603,7 +_,10 @@
+@@ -604,7 +_,10 @@
}
if (blockstate.m_60799_() != RenderShape.INVISIBLE) {
@@ -94,7 +94,7 @@
BufferBuilder bufferbuilder2 = p_234471_.m_108839_(rendertype2);
if (set.add(rendertype2)) {
RenderChunk.this.m_112805_(bufferbuilder2);
-@@ -611,8 +_,9 @@
+@@ -612,8 +_,9 @@
posestack.m_85836_();
posestack.m_85837_((double)(blockpos2.m_123341_() & 15), (double)(blockpos2.m_123342_() & 15), (double)(blockpos2.m_123343_() & 15));
@@ -105,7 +105,7 @@
}
}
-@@ -641,10 +_,10 @@
+@@ -642,10 +_,10 @@
private void m_234476_(ChunkRenderDispatcher.RenderChunk.RebuildTask.CompileResults p_234477_, E p_234478_) {
BlockEntityRenderer blockentityrenderer = Minecraft.m_91087_().m_167982_().m_112265_(p_234478_);
if (blockentityrenderer != null) {
@@ -117,7 +117,7 @@
}
}
-@@ -672,8 +_,13 @@
+@@ -673,8 +_,13 @@
class ResortTransparencyTask extends ChunkRenderDispatcher.RenderChunk.ChunkCompileTask {
private final ChunkRenderDispatcher.CompiledChunk f_112886_;
diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlas.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlas.java.patch
index f474c718e8..9be8a7b20a 100644
--- a/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlas.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlas.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/texture/TextureAtlas.java
+++ b/net/minecraft/client/renderer/texture/TextureAtlas.java
-@@ -87,6 +_,7 @@
+@@ -88,6 +_,7 @@
}
}
@@ -8,7 +8,7 @@
}
public TextureAtlas.Preparations m_118307_(ResourceManager p_118308_, Stream p_118309_, ProfilerFiller p_118310_, int p_118311_) {
-@@ -101,6 +_,7 @@
+@@ -102,6 +_,7 @@
int j = Integer.MAX_VALUE;
int k = 1 << p_118311_;
p_118310_.m_6182_("extracting_frames");
@@ -16,7 +16,7 @@
for(TextureAtlasSprite.Info textureatlassprite$info : this.m_118304_(p_118308_, set)) {
j = Math.min(j, Math.min(textureatlassprite$info.m_118434_(), textureatlassprite$info.m_118437_()));
-@@ -115,7 +_,8 @@
+@@ -116,7 +_,8 @@
int i1 = Math.min(j, k);
int j1 = Mth.m_14173_(i1);
@@ -26,7 +26,7 @@
if (j1 < p_118311_) {
f_118261_.warn("{}: dropping miplevel from {} to {}, because of minimum power of two: {}", this.f_118265_, p_118311_, j1, i1);
k1 = j1;
-@@ -232,11 +_,14 @@
+@@ -233,11 +_,14 @@
ResourceLocation resourcelocation = this.m_118324_(p_118289_.m_118431_());
try {
diff --git a/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch b/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch
index 265077f05c..09faaacf22 100644
--- a/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch
+++ b/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/resources/language/ClientLanguage.java
+++ b/net/minecraft/client/resources/language/ClientLanguage.java
-@@ -94,4 +_,9 @@
+@@ -95,4 +_,9 @@
public FormattedCharSequence m_5536_(FormattedText p_118925_) {
return FormattedBidiReorder.m_118931_(p_118925_, this.f_118911_);
}
diff --git a/patches/minecraft/net/minecraft/client/resources/language/LanguageInfo.java.patch b/patches/minecraft/net/minecraft/client/resources/language/LanguageInfo.java.patch
index a3ad670591..d443cbc236 100644
--- a/patches/minecraft/net/minecraft/client/resources/language/LanguageInfo.java.patch
+++ b/patches/minecraft/net/minecraft/client/resources/language/LanguageInfo.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/resources/language/LanguageInfo.java
+++ b/net/minecraft/client/resources/language/LanguageInfo.java
-@@ -16,6 +_,12 @@
+@@ -17,6 +_,12 @@
this.f_118944_ = p_118949_;
this.f_118945_ = p_118950_;
this.f_118946_ = p_118951_;
@@ -13,7 +13,7 @@
}
public String getCode() {
-@@ -53,4 +_,8 @@
+@@ -54,4 +_,8 @@
public int compareTo(LanguageInfo p_118954_) {
return this.f_118943_.compareTo(p_118954_.f_118943_);
}
diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch
index 4edd252929..58e5dfc4d1 100644
--- a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch
+++ b/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/resources/model/ModelBakery.java
+++ b/net/minecraft/client/resources/model/ModelBakery.java
-@@ -151,6 +_,8 @@
+@@ -152,6 +_,8 @@
public ModelBakery(ResourceManager p_119247_, BlockColors p_119248_, ProfilerFiller p_119249_, int p_119250_) {
this.f_119243_ = p_119247_;
this.f_119209_ = p_119248_;
@@ -9,7 +9,7 @@
p_119249_.m_6180_("missing_model");
try {
-@@ -184,12 +_,20 @@
+@@ -185,12 +_,20 @@
p_119249_.m_6182_("special");
this.m_119306_(new ModelResourceLocation("minecraft:trident_in_hand#inventory"));
this.m_119306_(new ModelResourceLocation("minecraft:spyglass_in_hand#inventory"));
@@ -30,7 +30,7 @@
set.stream().filter((p_119357_) -> {
return !p_119357_.getSecond().equals(f_119236_);
}).forEach((p_119292_) -> {
-@@ -228,6 +_,7 @@
+@@ -229,6 +_,7 @@
try {
bakedmodel = this.m_119349_(p_119369_, BlockModelRotation.X0_Y0);
} catch (Exception exception) {
@@ -38,7 +38,7 @@
f_119235_.warn("Unable to bake model: '{}': {}", p_119369_, exception);
}
-@@ -472,7 +_,13 @@
+@@ -473,7 +_,13 @@
}
@Nullable
@@ -52,7 +52,7 @@
Triple triple = Triple.of(p_119350_, p_119351_.m_6189_(), p_119351_.m_7538_());
if (this.f_119213_.containsKey(triple)) {
return this.f_119213_.get(triple);
-@@ -483,11 +_,11 @@
+@@ -484,11 +_,11 @@
if (unbakedmodel instanceof BlockModel) {
BlockModel blockmodel = (BlockModel)unbakedmodel;
if (blockmodel.m_111490_() == f_119232_) {
@@ -66,7 +66,7 @@
this.f_119213_.put(triple, bakedmodel);
return bakedmodel;
}
-@@ -542,6 +_,10 @@
+@@ -543,6 +_,10 @@
public BlockStateDefinitionException(String p_119373_) {
super(p_119373_);
}
diff --git a/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch b/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch
index d1b5c2f072..c96aa628d3 100644
--- a/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch
+++ b/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/commands/CommandSourceStack.java
+++ b/net/minecraft/commands/CommandSourceStack.java
-@@ -33,7 +_,7 @@
+@@ -36,7 +_,7 @@
import net.minecraft.world.phys.Vec2;
import net.minecraft.world.phys.Vec3;
diff --git a/patches/minecraft/net/minecraft/commands/Commands.java.patch b/patches/minecraft/net/minecraft/commands/Commands.java.patch
index 04290bd7cb..fb861c557e 100644
--- a/patches/minecraft/net/minecraft/commands/Commands.java.patch
+++ b/patches/minecraft/net/minecraft/commands/Commands.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
-@@ -175,7 +_,7 @@
+@@ -178,7 +_,7 @@
JfrCommand.m_183645_(this.f_82090_);
}
@@ -9,7 +9,7 @@
TestCommand.m_127946_(this.f_82090_);
}
-@@ -199,6 +_,7 @@
+@@ -202,6 +_,7 @@
if (p_230943_.f_82144_) {
PublishCommand.m_138184_(this.f_82090_);
}
@@ -17,13 +17,12 @@
this.f_82090_.setConsumer((p_230954_, p_230955_, p_230956_) -> {
p_230954_.getSource().m_81342_(p_230954_, p_230955_, p_230956_);
-@@ -217,7 +_,17 @@
+@@ -227,7 +_,16 @@
try {
try {
-- return this.f_82090_.execute(stringreader, p_82118_);
-+ ParseResults parse = this.f_82090_.parse(stringreader, p_82118_);
-+ net.minecraftforge.event.CommandEvent event = new net.minecraftforge.event.CommandEvent(parse);
+- return this.f_82090_.execute(p_242844_);
++ net.minecraftforge.event.CommandEvent event = new net.minecraftforge.event.CommandEvent(p_242844_);
+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) {
+ if (event.getException() instanceof Exception exception) {
+ throw exception;
@@ -34,9 +33,9 @@
+ }
+ return this.f_82090_.execute(event.getParseResults());
} catch (CommandRuntimeException commandruntimeexception) {
- p_82118_.m_81352_(commandruntimeexception.m_79226_());
+ commandsourcestack.m_81352_(commandruntimeexception.m_79226_());
return 0;
-@@ -273,7 +_,8 @@
+@@ -283,7 +_,8 @@
Map, CommandNode> map = Maps.newHashMap();
RootCommandNode rootcommandnode = new RootCommandNode<>();
map.put(this.f_82090_.getRoot(), rootcommandnode);
diff --git a/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch b/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch
index 10924ed715..719b65377c 100644
--- a/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch
+++ b/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/commands/synchronization/ArgumentTypeInfos.java
+++ b/net/minecraft/commands/synchronization/ArgumentTypeInfos.java
-@@ -63,6 +_,20 @@
+@@ -64,6 +_,20 @@
public class ArgumentTypeInfos {
private static final Map, ArgumentTypeInfo, ?>> f_235379_ = Maps.newHashMap();
@@ -21,12 +21,20 @@
private static , T extends ArgumentTypeInfo.Template > ArgumentTypeInfo m_235386_(Registry> p_235387_, String p_235388_, Class extends A> p_235389_, ArgumentTypeInfo p_235390_) {
f_235379_.put(p_235389_, p_235390_);
return Registry.m_122961_(p_235387_, p_235388_, p_235390_);
-@@ -116,7 +_,7 @@
+@@ -117,12 +_,14 @@
m_235386_(p_235385_, "resource", m_235395_(ResourceKeyArgument.class), new ResourceKeyArgument.Info());
m_235386_(p_235385_, "template_mirror", TemplateMirrorArgument.class, SingletonArgumentInfo.m_235451_(TemplateMirrorArgument::m_234343_));
m_235386_(p_235385_, "template_rotation", TemplateRotationArgument.class, SingletonArgumentInfo.m_235451_(TemplateRotationArgument::m_234414_));
- if (SharedConstants.f_136183_) {
-+ if (net.minecraftforge.gametest.ForgeGameTestHooks.isGametestEnabled()) {
++ // Forge: Register before gametest arguments to provide forge server <-> vanilla client interop and matching int ids
++ var uuidInfo = m_235386_(p_235385_, "uuid", UuidArgument.class, SingletonArgumentInfo.m_235451_(UuidArgument::m_113850_));
++ if (true) { // Forge: Always register gametest arguments to prevent issues when connecting from gametest-enabled client/server to non-gametest-enabled client/server
m_235386_(p_235385_, "test_argument", TestFunctionArgument.class, SingletonArgumentInfo.m_235451_(TestFunctionArgument::m_128088_));
m_235386_(p_235385_, "test_class", TestClassNameArgument.class, SingletonArgumentInfo.m_235451_(TestClassNameArgument::m_127917_));
}
+
+- return m_235386_(p_235385_, "uuid", UuidArgument.class, SingletonArgumentInfo.m_235451_(UuidArgument::m_113850_));
++ return uuidInfo;
+ }
+
+ private static > Class m_235395_(Class super T> p_235396_) {
diff --git a/patches/minecraft/net/minecraft/core/Registry.java.patch b/patches/minecraft/net/minecraft/core/Registry.java.patch
index 78ba4c2f07..53248adcb4 100644
--- a/patches/minecraft/net/minecraft/core/Registry.java.patch
+++ b/patches/minecraft/net/minecraft/core/Registry.java.patch
@@ -88,8 +88,9 @@
public static final Registry> f_175420_ = m_206008_(f_175408_, (p_235761_) -> {
return PositionSourceType.f_157871_;
});
- public static final Registry> f_235729_ = m_206008_(f_235724_, (RegistryBootstrap)ArgumentTypeInfos::m_235384_);
+- public static final Registry> f_235729_ = m_206008_(f_235724_, (RegistryBootstrap)ArgumentTypeInfos::m_235384_);
- public static final Registry> f_122867_ = m_206008_(f_122917_, (p_235759_) -> {
++ @Deprecated public static final Registry> f_235729_ = forge(f_235724_, (RegistryBootstrap)ArgumentTypeInfos::m_235384_);
+ @Deprecated public static final Registry> f_122867_ = forge(f_122917_, (registry) -> {
return Stats.f_12982_;
});
diff --git a/patches/minecraft/net/minecraft/data/loot/BlockLoot.java.patch b/patches/minecraft/net/minecraft/data/loot/BlockLoot.java.patch
index 9d0aac049a..cf18842bb2 100644
--- a/patches/minecraft/net/minecraft/data/loot/BlockLoot.java.patch
+++ b/patches/minecraft/net/minecraft/data/loot/BlockLoot.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/data/loot/BlockLoot.java
+++ b/net/minecraft/data/loot/BlockLoot.java
-@@ -264,7 +_,7 @@
+@@ -265,7 +_,7 @@
return LootTable.m_79147_();
}
@@ -9,7 +9,7 @@
this.m_124288_(Blocks.f_50122_);
this.m_124288_(Blocks.f_50175_);
this.m_124288_(Blocks.f_50228_);
-@@ -1311,9 +_,13 @@
+@@ -1312,9 +_,13 @@
this.m_124165_(Blocks.f_152499_, m_124125_());
this.m_124165_(Blocks.f_220862_, m_124125_());
this.m_124165_(Blocks.f_220863_, m_124125_());
@@ -24,7 +24,7 @@
ResourceLocation resourcelocation = block.m_60589_();
if (resourcelocation != BuiltInLootTables.f_78712_ && set.add(resourcelocation)) {
LootTable.Builder loottable$builder = this.f_124070_.remove(resourcelocation);
-@@ -1338,6 +_,10 @@
+@@ -1339,6 +_,10 @@
public static LootTable.Builder m_124137_(Block p_124138_) {
return m_124161_(p_124138_, DoorBlock.f_52730_, DoubleBlockHalf.LOWER);
diff --git a/patches/minecraft/net/minecraft/data/loot/EntityLoot.java.patch b/patches/minecraft/net/minecraft/data/loot/EntityLoot.java.patch
index 273823f5a0..7405ae5905 100644
--- a/patches/minecraft/net/minecraft/data/loot/EntityLoot.java.patch
+++ b/patches/minecraft/net/minecraft/data/loot/EntityLoot.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/data/loot/EntityLoot.java
+++ b/net/minecraft/data/loot/EntityLoot.java
-@@ -54,7 +_,7 @@
+@@ -55,7 +_,7 @@
return LootTable.m_79147_().m_79161_(LootPool.m_79043_().m_165133_(ConstantValue.m_165692_(1.0F)).m_79076_(LootItem.m_79579_(p_124375_))).m_79161_(LootPool.m_79043_().m_165133_(ConstantValue.m_165692_(1.0F)).m_79076_(LootTableReference.m_79776_(EntityType.f_20520_.m_20677_())));
}
@@ -9,7 +9,7 @@
this.m_124371_(EntityType.f_217014_, LootTable.m_79147_());
this.m_124371_(EntityType.f_20529_, LootTable.m_79147_());
this.m_124371_(EntityType.f_147039_, LootTable.m_79147_());
-@@ -150,11 +_,15 @@
+@@ -151,11 +_,15 @@
this.m_124371_(EntityType.f_20511_, LootTable.m_79147_());
this.m_124371_(EntityType.f_20512_, LootTable.m_79147_());
this.m_124371_(EntityType.f_20530_, LootTable.m_79147_().m_79161_(LootPool.m_79043_().m_165133_(ConstantValue.m_165692_(1.0F)).m_79076_(LootItem.m_79579_(Items.f_42583_).m_79078_(SetItemCountFunction.m_165412_(UniformGenerator.m_165780_(0.0F, 2.0F))).m_79078_(LootingEnchantFunction.m_165229_(UniformGenerator.m_165780_(0.0F, 1.0F))))).m_79161_(LootPool.m_79043_().m_165133_(ConstantValue.m_165692_(1.0F)).m_79076_(LootItem.m_79579_(Items.f_42416_)).m_79076_(LootItem.m_79579_(Items.f_42619_)).m_79076_(LootItem.m_79579_(Items.f_42620_).m_79078_(SmeltItemFunction.m_81271_().m_79080_(LootItemEntityPropertyCondition.m_81864_(LootContext.EntityTarget.THIS, f_124366_)))).m_79080_(LootItemKilledByPlayerCondition.m_81901_()).m_79080_(LootItemRandomChanceWithLootingCondition.m_81963_(0.025F, 0.01F))));
@@ -25,9 +25,9 @@
- if (!f_124367_.contains(entitytype) && entitytype.m_20674_() == MobCategory.MISC) {
+ if (isNonLiving(entitytype)) {
if (resourcelocation != BuiltInLootTables.f_78712_ && this.f_124368_.remove(resourcelocation) != null) {
- throw new IllegalStateException(String.format("Weird loottable '%s' for '%s', not a LivingEntity so should not have loot", resourcelocation, Registry.f_122826_.m_7981_(entitytype)));
+ throw new IllegalStateException(String.format(Locale.ROOT, "Weird loottable '%s' for '%s', not a LivingEntity so should not have loot", resourcelocation, Registry.f_122826_.m_7981_(entitytype)));
}
-@@ -169,6 +_,14 @@
+@@ -170,6 +_,14 @@
}
this.f_124368_.forEach(p_124377_);
diff --git a/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch
index 3e0fdedea6..61fa2f5b4b 100644
--- a/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch
+++ b/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch
@@ -1,8 +1,8 @@
--- a/net/minecraft/data/tags/GameEventTagsProvider.java
+++ b/net/minecraft/data/tags/GameEventTagsProvider.java
-@@ -8,8 +_,13 @@
- public class GameEventTagsProvider extends TagsProvider {
- private static final GameEvent[] f_236425_ = new GameEvent[]{GameEvent.f_157791_, GameEvent.f_157792_, GameEvent.f_157793_, GameEvent.f_157794_, GameEvent.f_157795_, GameEvent.f_157796_, GameEvent.f_157797_, GameEvent.f_223702_, GameEvent.f_223703_, GameEvent.f_157802_, GameEvent.f_157803_, GameEvent.f_157804_, GameEvent.f_223704_, GameEvent.f_157806_, GameEvent.f_223705_, GameEvent.f_223706_, GameEvent.f_223707_, GameEvent.f_223708_, GameEvent.f_157810_, GameEvent.f_223709_, GameEvent.f_223710_, GameEvent.f_157811_, GameEvent.f_157812_, GameEvent.f_157816_, GameEvent.f_157769_, GameEvent.f_157770_, GameEvent.f_223696_, GameEvent.f_223697_, GameEvent.f_157772_, GameEvent.f_223699_, GameEvent.f_157774_, GameEvent.f_157775_, GameEvent.f_157776_, GameEvent.f_157777_, GameEvent.f_157778_, GameEvent.f_157781_, GameEvent.f_157784_, GameEvent.f_157785_, GameEvent.f_157786_, GameEvent.f_238175_};
+@@ -10,8 +_,13 @@
+ @VisibleForTesting
+ static final GameEvent[] f_236425_ = new GameEvent[]{GameEvent.f_157791_, GameEvent.f_157792_, GameEvent.f_157793_, GameEvent.f_157794_, GameEvent.f_157795_, GameEvent.f_157796_, GameEvent.f_157797_, GameEvent.f_223702_, GameEvent.f_223703_, GameEvent.f_157802_, GameEvent.f_157803_, GameEvent.f_157804_, GameEvent.f_223704_, GameEvent.f_157806_, GameEvent.f_223705_, GameEvent.f_223706_, GameEvent.f_223707_, GameEvent.f_223708_, GameEvent.f_157810_, GameEvent.f_223709_, GameEvent.f_223710_, GameEvent.f_157811_, GameEvent.f_157812_, GameEvent.f_157816_, GameEvent.f_157769_, GameEvent.f_157770_, GameEvent.f_223696_, GameEvent.f_223697_, GameEvent.f_157772_, GameEvent.f_223699_, GameEvent.f_157774_, GameEvent.f_157775_, GameEvent.f_157776_, GameEvent.f_157777_, GameEvent.f_157778_, GameEvent.f_157781_, GameEvent.f_157784_, GameEvent.f_157785_, GameEvent.f_157786_, GameEvent.f_238175_};
+ /** @deprecated Forge: Use the {@link #GameEventTagsProvider(DataGenerator, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
+ @Deprecated
diff --git a/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch
index 034177e310..507963e6f9 100644
--- a/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch
+++ b/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/data/tags/TagsProvider.java
+++ b/net/minecraft/data/tags/TagsProvider.java
-@@ -29,10 +_,32 @@
+@@ -30,10 +_,32 @@
protected final DataGenerator.PathProvider f_236439_;
protected final Registry f_126540_;
protected final Map f_126543_ = Maps.newLinkedHashMap();
@@ -33,14 +33,14 @@
}
public String m_6055_() {
-@@ -48,12 +_,13 @@
+@@ -49,12 +_,13 @@
List list = p_236450_.m_215904_();
List list1 = list.stream().filter((p_236444_) -> {
return !p_236444_.m_215940_(this.f_126540_::m_7804_, this.f_126543_::containsKey);
- }).toList();
+ }).filter(this::missing).collect(Collectors.toList()); // Forge: Add validation via existing resources
if (!list1.isEmpty()) {
- throw new IllegalArgumentException(String.format("Couldn't define tag %s as it is missing following references: %s", p_236449_, list1.stream().map(Objects::toString).collect(Collectors.joining(","))));
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "Couldn't define tag %s as it is missing following references: %s", p_236449_, list1.stream().map(Objects::toString).collect(Collectors.joining(","))));
} else {
JsonElement jsonelement = TagFile.f_215958_.encodeStart(JsonOps.INSTANCE, new TagFile(list, false)).getOrThrow(false, f_126541_::error);
- Path path = this.f_236439_.m_236048_(p_236449_);
@@ -49,7 +49,7 @@
try {
DataProvider.m_236072_(p_236446_, jsonelement, path);
-@@ -65,24 +_,36 @@
+@@ -66,24 +_,36 @@
});
}
@@ -89,7 +89,7 @@
}
public TagsProvider.TagAppender m_126582_(T p_126583_) {
-@@ -120,6 +_,19 @@
+@@ -121,6 +_,19 @@
this.f_126568_.m_215900_(p_126587_);
});
return this;
diff --git a/patches/minecraft/net/minecraft/network/Connection.java.patch b/patches/minecraft/net/minecraft/network/Connection.java.patch
index 8b0709eb92..0f2888997e 100644
--- a/patches/minecraft/net/minecraft/network/Connection.java.patch
+++ b/patches/minecraft/net/minecraft/network/Connection.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/network/Connection.java
+++ b/net/minecraft/network/Connection.java
-@@ -86,6 +_,7 @@
+@@ -82,6 +_,7 @@
private float f_129477_;
private int f_129478_;
private boolean f_129479_;
@@ -8,7 +8,7 @@
public Connection(PacketFlow p_129482_) {
this.f_129466_ = p_129482_;
-@@ -95,6 +_,7 @@
+@@ -91,6 +_,7 @@
super.channelActive(p_129525_);
this.f_129468_ = p_129525_.channel();
this.f_129469_ = this.f_129468_.remoteAddress();
@@ -16,7 +16,7 @@
try {
this.m_129498_(ConnectionProtocol.HANDSHAKING);
-@@ -190,7 +_,7 @@
+@@ -186,7 +_,7 @@
++this.f_129475_;
if (connectionprotocol1 != connectionprotocol) {
f_129465_.debug("Disabled auto read");
@@ -25,7 +25,7 @@
}
if (this.f_129468_.eventLoop().inEventLoop()) {
-@@ -288,7 +_,9 @@
+@@ -292,7 +_,9 @@
}
public static Connection m_178300_(InetSocketAddress p_178301_, boolean p_178302_) {
@@ -35,7 +35,7 @@
Class extends SocketChannel> oclass;
LazyLoadedValue extends EventLoopGroup> lazyloadedvalue;
if (Epoll.isAvailable() && p_178302_) {
-@@ -314,6 +_,7 @@
+@@ -318,6 +_,7 @@
public static Connection m_129493_(SocketAddress p_129494_) {
final Connection connection = new Connection(PacketFlow.CLIENTBOUND);
@@ -43,7 +43,7 @@
(new Bootstrap()).group(f_129464_.m_13971_()).handler(new ChannelInitializer() {
protected void initChannel(Channel p_129557_) {
p_129557_.pipeline().addLast("packet_handler", connection);
-@@ -400,6 +_,14 @@
+@@ -404,6 +_,14 @@
public float m_129543_() {
return this.f_129477_;
diff --git a/patches/minecraft/net/minecraft/network/chat/ChatDecorator.java.patch b/patches/minecraft/net/minecraft/network/chat/ChatDecorator.java.patch
deleted file mode 100644
index 1b1a569216..0000000000
--- a/patches/minecraft/net/minecraft/network/chat/ChatDecorator.java.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/net/minecraft/network/chat/ChatDecorator.java
-+++ b/net/minecraft/network/chat/ChatDecorator.java
-@@ -29,7 +_,7 @@
-
- default CompletableFuture> m_236964_(@Nullable ServerPlayer p_236965_, FilteredText p_236966_, MessageSignature p_236967_, boolean p_236968_) {
- return this.m_236969_(p_236965_, p_236966_).thenApply((p_236956_) -> {
-- return PlayerChatMessage.m_237223_(p_236966_, p_236956_, p_236967_, p_236968_);
-+ return PlayerChatMessage.filteredSigned(p_236966_, p_236956_, p_236967_, p_236968_, p_236965_);
- });
- }
- }
diff --git a/patches/minecraft/net/minecraft/network/chat/PlayerChatMessage.java.patch b/patches/minecraft/net/minecraft/network/chat/PlayerChatMessage.java.patch
deleted file mode 100644
index 777c5f7a98..0000000000
--- a/patches/minecraft/net/minecraft/network/chat/PlayerChatMessage.java.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/net/minecraft/network/chat/PlayerChatMessage.java
-+++ b/net/minecraft/network/chat/PlayerChatMessage.java
-@@ -24,10 +_,17 @@
- }
- }
-
-+ // Forge: Bouncer for the version with player context
- public static FilteredText m_237223_(FilteredText p_237224_, FilteredText p_237225_, MessageSignature p_237226_, boolean p_237227_) {
-+ return filteredSigned(p_237224_, p_237225_, p_237226_, p_237227_, null);
-+ }
-+
-+ public static FilteredText filteredSigned(FilteredText p_237224_, FilteredText p_237225_, MessageSignature p_237226_, boolean p_237227_, @org.jetbrains.annotations.Nullable ServerPlayer player) {
- Component component = p_237224_.f_215168_();
- Component component1 = p_237225_.f_215168_();
-- PlayerChatMessage playerchatmessage = m_237237_(component, component1, p_237226_, p_237227_);
-+ Component forgeComponent = net.minecraftforge.common.ForgeHooks.onServerChatEvent(player, p_237224_.f_215168_().getString(), component);
-+ // TODO: this overrides the signed ("normal") component from the player, but ignores the unsigned component. What do we do here? This is a mess. -C
-+ PlayerChatMessage playerchatmessage = m_237237_(forgeComponent, component1, p_237226_, p_237227_);
- if (p_237225_.m_215174_()) {
- PlayerChatMessage playerchatmessage1 = Util.m_214614_(p_237225_.f_215169_(), PlayerChatMessage::m_237235_);
- return new FilteredText<>(playerchatmessage, playerchatmessage1);
diff --git a/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch b/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch
index 4ab29d268e..8f0c04cfa0 100644
--- a/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch
+++ b/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch
@@ -1,23 +1,24 @@
--- a/net/minecraft/network/protocol/status/ServerStatus.java
+++ b/net/minecraft/network/protocol/status/ServerStatus.java
-@@ -27,6 +_,16 @@
- @Nullable
+@@ -28,6 +_,17 @@
private String f_134903_;
private boolean f_238077_;
+ private boolean f_242955_;
+ private transient net.minecraftforge.network.ServerStatusPing forgeData;
+
++ @Nullable
+ public net.minecraftforge.network.ServerStatusPing getForgeData() {
+ return this.forgeData;
+ }
+
-+ public void setForgeData(net.minecraftforge.network.ServerStatusPing data){
++ public void setForgeData(net.minecraftforge.network.ServerStatusPing data) {
+ this.forgeData = data;
+ invalidateJson();
+ }
@Nullable
public Component m_134905_() {
-@@ -35,6 +_,7 @@
+@@ -36,6 +_,7 @@
public void m_134908_(Component p_134909_) {
this.f_134900_ = p_134909_;
@@ -25,7 +26,7 @@
}
@Nullable
-@@ -44,6 +_,7 @@
+@@ -45,6 +_,7 @@
public void m_134910_(ServerStatus.Players p_134911_) {
this.f_134901_ = p_134911_;
@@ -33,7 +34,7 @@
}
@Nullable
-@@ -53,10 +_,12 @@
+@@ -54,10 +_,12 @@
public void m_134912_(ServerStatus.Version p_134913_) {
this.f_134902_ = p_134913_;
@@ -46,8 +47,23 @@
}
@Nullable
-@@ -72,6 +_,39 @@
- return this.f_238077_;
+@@ -67,6 +_,7 @@
+
+ public void m_238078_(boolean p_238079_) {
+ this.f_238077_ = p_238079_;
++ invalidateJson();
+ }
+
+ public boolean m_238080_() {
+@@ -75,12 +_,46 @@
+
+ public void m_242958_(boolean p_242968_) {
+ this.f_242955_ = p_242968_;
++ invalidateJson();
+ }
+
+ public boolean m_242963_() {
+ return this.f_242955_;
}
+ private java.util.concurrent.Semaphore mutex = new java.util.concurrent.Semaphore(1);
@@ -86,8 +102,8 @@
public static class Players {
private final int f_134917_;
private final int f_134918_;
-@@ -170,6 +_,10 @@
- serverstatus.m_238078_(GsonHelper.m_13912_(jsonobject, "previewsChat"));
+@@ -183,6 +_,10 @@
+ serverstatus.m_242958_(GsonHelper.m_13912_(jsonobject, "enforcesSecureChat"));
}
+ if (jsonobject.has("forgeData")) {
@@ -97,13 +113,13 @@
return serverstatus;
}
-@@ -190,6 +_,10 @@
+@@ -204,6 +_,10 @@
if (p_134951_.m_134916_() != null) {
jsonobject.addProperty("favicon", p_134951_.m_134916_());
+ }
+
-+ if(p_134951_.getForgeData() != null){
++ if (p_134951_.getForgeData() != null) {
+ jsonobject.add("forgeData", net.minecraftforge.network.ServerStatusPing.Serializer.serialize(p_134951_.getForgeData()));
}
diff --git a/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch b/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch
index 02b30fbfc6..aeb50c2f12 100644
--- a/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch
+++ b/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/network/syncher/SynchedEntityData.java
+++ b/net/minecraft/network/syncher/SynchedEntityData.java
-@@ -37,11 +_,13 @@
+@@ -38,11 +_,13 @@
}
public static EntityDataAccessor m_135353_(Class extends Entity> p_135354_, EntityDataSerializer p_135355_) {
diff --git a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch
index 7105bf261e..c6cc897bcc 100644
--- a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch
+++ b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
-@@ -241,7 +_,7 @@
+@@ -240,7 +_,7 @@
public static S m_129872_(Function p_129873_) {
AtomicReference atomicreference = new AtomicReference<>();
@@ -9,7 +9,7 @@
atomicreference.get().m_130011_();
}, "Server thread");
thread.setUncaughtExceptionHandler((p_177909_, p_177910_) -> {
-@@ -333,6 +_,7 @@
+@@ -332,6 +_,7 @@
this.m_129841_(dimensiondatastorage);
this.f_129732_ = new CommandStorage(dimensiondatastorage);
WorldBorder worldborder = serverlevel.m_6857_();
@@ -17,7 +17,7 @@
if (!serverleveldata.m_6535_()) {
try {
m_177896_(serverlevel, serverleveldata, worldgensettings.m_64660_(), flag);
-@@ -367,6 +_,7 @@
+@@ -366,6 +_,7 @@
ServerLevel serverlevel1 = new ServerLevel(this, this.f_129738_, this.f_129744_, derivedleveldata, resourcekey1, entry.getValue(), p_129816_, flag, j, ImmutableList.of(), false);
worldborder.m_61929_(new BorderChangeListener.DelegateBorderChangeListener(serverlevel1.m_6857_()));
this.f_129762_.put(resourcekey1, serverlevel1);
@@ -25,7 +25,7 @@
}
}
-@@ -378,6 +_,7 @@
+@@ -377,6 +_,7 @@
p_177898_.m_7250_(BlockPos.f_121853_.m_6630_(80), 0.0F);
} else {
ServerChunkCache serverchunkcache = p_177897_.m_7726_();
@@ -33,7 +33,7 @@
ChunkPos chunkpos = new ChunkPos(serverchunkcache.m_214994_().m_224579_().m_183230_());
int i = serverchunkcache.m_8481_().m_142051_(p_177897_);
if (i < p_177897_.m_141937_()) {
-@@ -458,6 +_,7 @@
+@@ -457,6 +_,7 @@
ChunkPos chunkpos = new ChunkPos(i);
serverlevel1.m_7726_().m_6692_(chunkpos, true);
}
@@ -41,7 +41,7 @@
}
}
-@@ -528,6 +_,8 @@
+@@ -527,6 +_,8 @@
}
public void m_7041_() {
@@ -50,7 +50,7 @@
if (this.f_177872_.m_142763_()) {
this.m_236737_();
}
-@@ -572,6 +_,7 @@
+@@ -571,6 +_,7 @@
for(ServerLevel serverlevel2 : this.m_129785_()) {
if (serverlevel2 != null) {
try {
@@ -58,7 +58,7 @@
serverlevel2.close();
} catch (IOException ioexception1) {
f_129750_.error("Exception closing the level", (Throwable)ioexception1);
-@@ -620,6 +_,7 @@
+@@ -619,6 +_,7 @@
throw new IllegalStateException("Failed to initialize server");
}
@@ -162,6 +162,15 @@
}
public SystemReport m_177935_(SystemReport p_177936_) {
+@@ -1121,7 +_,7 @@
+ }
+
+ public boolean m_214000_() {
+- return false;
++ return net.minecraftforge.common.ForgeMod.isServerChatPreviewEnabled();
+ }
+
+ public boolean m_129918_() {
@@ -1287,6 +_,7 @@
this.m_6846_().m_11315_();
this.f_129734_.m_136120_(this.f_129740_.f_206585_.m_206860_());
diff --git a/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch b/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch
index c2a10aefed..11a72f7b22 100644
--- a/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch
+++ b/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/PlayerAdvancements.java
+++ b/net/minecraft/server/PlayerAdvancements.java
-@@ -179,6 +_,10 @@
+@@ -178,6 +_,10 @@
}
this.m_136002_(p_136007_);
@@ -11,7 +11,7 @@
this.m_136001_();
this.m_135994_(p_136007_);
}
-@@ -237,6 +_,8 @@
+@@ -236,6 +_,8 @@
}
public boolean m_135988_(Advancement p_135989_, String p_135990_) {
@@ -20,9 +20,9 @@
boolean flag = false;
AdvancementProgress advancementprogress = this.m_135996_(p_135989_);
boolean flag1 = advancementprogress.m_8193_();
-@@ -249,6 +_,7 @@
+@@ -248,6 +_,7 @@
if (p_135989_.m_138320_() != null && p_135989_.m_138320_().m_14996_() && this.f_135968_.f_19853_.m_46469_().m_46207_(GameRules.f_46153_)) {
- this.f_135962_.m_215627_(Component.m_237110_("chat.type.advancement." + p_135989_.m_138320_().m_14992_().m_15548_(), this.f_135968_.m_5446_(), p_135989_.m_138330_()), ChatType.f_130599_);
+ this.f_135962_.m_240416_(Component.m_237110_("chat.type.advancement." + p_135989_.m_138320_().m_14992_().m_15548_(), this.f_135968_.m_5446_(), p_135989_.m_138330_()), false);
}
+ net.minecraftforge.common.ForgeHooks.onAdvancement(this.f_135968_, p_135989_);
}
diff --git a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch
index dc71a8cf3e..3ec7212e80 100644
--- a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch
+++ b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch
@@ -37,3 +37,12 @@
}
}
+@@ -318,7 +_,7 @@
+ }
+
+ public boolean m_214000_() {
+- return this.m_7913_().f_214803_;
++ return super.m_214000_() || this.m_7913_().f_214803_;
+ }
+
+ public DedicatedPlayerList m_6846_() {
diff --git a/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch b/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch
index 3a281a2d6f..7a28068e71 100644
--- a/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch
+++ b/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/dedicated/ServerWatchdog.java
+++ b/net/minecraft/server/dedicated/ServerWatchdog.java
-@@ -42,7 +_,7 @@
+@@ -40,7 +_,7 @@
ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean();
ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true);
StringBuilder stringbuilder = new StringBuilder();
diff --git a/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch b/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch
index 373280aa99..95b6c6afdd 100644
--- a/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch
+++ b/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/level/ChunkMap.java
+++ b/net/minecraft/server/level/ChunkMap.java
-@@ -489,6 +_,7 @@
+@@ -490,6 +_,7 @@
if (this.f_140131_.remove(p_140182_, p_140183_) && p_203002_ != null) {
if (p_203002_ instanceof LevelChunk) {
((LevelChunk)p_203002_).m_62913_(false);
@@ -8,7 +8,7 @@
}
this.m_140258_(p_203002_);
-@@ -688,8 +_,14 @@
+@@ -689,8 +_,14 @@
levelchunk.m_62952_();
if (this.f_140132_.add(chunkpos.m_45588_())) {
levelchunk.m_62913_(true);
@@ -23,7 +23,7 @@
}
return levelchunk;
-@@ -792,6 +_,7 @@
+@@ -793,6 +_,7 @@
this.f_140133_.m_46473_().m_6174_("chunkSave");
CompoundTag compoundtag = ChunkSerializer.m_63454_(this.f_140133_, p_140259_);
@@ -31,7 +31,7 @@
this.m_63502_(chunkpos, compoundtag);
this.m_140229_(chunkpos, chunkstatus.m_62494_());
return true;
-@@ -862,6 +_,7 @@
+@@ -863,6 +_,7 @@
if (!p_183759_ && p_183758_) {
p_183755_.m_9088_(p_183756_);
@@ -39,7 +39,7 @@
}
}
-@@ -1104,7 +_,7 @@
+@@ -1105,7 +_,7 @@
}
protected void m_140199_(Entity p_140200_) {
@@ -48,7 +48,7 @@
EntityType> entitytype = p_140200_.m_6095_();
int i = entitytype.m_20681_() * 16;
if (i != 0) {
-@@ -1230,6 +_,7 @@
+@@ -1231,6 +_,7 @@
}
}
diff --git a/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch b/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch
index 15b5a81119..c8fffae38f 100644
--- a/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch
+++ b/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
-@@ -183,10 +_,11 @@
+@@ -184,10 +_,11 @@
private final List f_8558_;
@Nullable
private final EndDragonFight f_8559_;
@@ -13,7 +13,7 @@
public ServerLevel(MinecraftServer p_214999_, Executor p_215000_, LevelStorageSource.LevelStorageAccess p_215001_, ServerLevelData p_215002_, ResourceKey p_215003_, LevelStem p_215004_, ChunkProgressListener p_215005_, boolean p_215006_, long p_215007_, List p_215008_, boolean p_215009_) {
super(p_215002_, p_215003_, p_215004_.m_204521_(), p_214999_::m_129905_, false, p_215006_, p_215007_, p_214999_.m_213994_());
-@@ -226,6 +_,7 @@
+@@ -227,6 +_,7 @@
}
this.f_143245_ = new SleepStatus();
@@ -21,7 +21,7 @@
}
public void m_8606_(int p_8607_, int p_8608_, boolean p_8609_, boolean p_8610_) {
-@@ -254,8 +_,8 @@
+@@ -255,8 +_,8 @@
int i = this.m_46469_().m_46215_(GameRules.f_151486_);
if (this.f_143245_.m_144002_(i) && this.f_143245_.m_144004_(i, this.f_8546_)) {
if (this.m_46469_().m_46207_(GameRules.f_46140_)) {
@@ -32,7 +32,7 @@
}
this.m_8804_();
-@@ -284,7 +_,7 @@
+@@ -285,7 +_,7 @@
this.m_8807_();
this.f_8557_ = false;
profilerfiller.m_7238_();
@@ -41,7 +41,7 @@
if (flag) {
this.m_8886_();
}
-@@ -316,7 +_,9 @@
+@@ -317,7 +_,9 @@
}
profilerfiller.m_6180_("tick");
@@ -52,7 +52,7 @@
profilerfiller.m_7238_();
}
}
-@@ -407,6 +_,7 @@
+@@ -408,6 +_,7 @@
BlockPos blockpos2 = this.m_5452_(Heightmap.Types.MOTION_BLOCKING, this.m_46496_(i, 0, j, 15));
BlockPos blockpos3 = blockpos2.m_7495_();
Biome biome = this.m_204166_(blockpos2).m_203334_();
@@ -60,7 +60,7 @@
if (biome.m_47477_(this, blockpos3)) {
this.m_46597_(blockpos3, Blocks.f_50126_.m_49966_());
}
-@@ -597,15 +_,19 @@
+@@ -598,15 +_,19 @@
this.f_8548_.m_6846_().m_11270_(new ClientboundGameEventPacket(ClientboundGameEventPacket.f_132161_, this.f_46440_), this.m_46472_());
}
@@ -84,7 +84,7 @@
}
}
-@@ -664,6 +_,7 @@
+@@ -665,6 +_,7 @@
return Registry.f_122826_.m_7981_(p_8664_.m_6095_()).toString();
});
profilerfiller.m_6174_("tickPassenger");
@@ -92,7 +92,7 @@
p_8664_.m_6083_();
profilerfiller.m_7238_();
-@@ -700,6 +_,7 @@
+@@ -701,6 +_,7 @@
this.f_143244_.m_157554_();
}
@@ -100,7 +100,7 @@
}
}
-@@ -773,6 +_,7 @@
+@@ -774,6 +_,7 @@
}
private void m_8853_(ServerPlayer p_8854_) {
@@ -108,7 +108,7 @@
Entity entity = this.m_142646_().m_142694_(p_8854_.m_20148_());
if (entity != null) {
f_8566_.warn("Force-added player with duplicate UUID {}", (Object)p_8854_.m_20148_().toString());
-@@ -780,7 +_,8 @@
+@@ -781,7 +_,8 @@
this.m_143261_((ServerPlayer)entity, Entity.RemovalReason.DISCARDED);
}
@@ -118,7 +118,7 @@
}
private boolean m_8872_(Entity p_8873_) {
-@@ -788,7 +_,12 @@
+@@ -789,7 +_,12 @@
f_8566_.warn("Tried to add entity {} but it was marked as removed already", (Object)EntityType.m_20613_(p_8873_.m_6095_()));
return false;
} else {
@@ -132,7 +132,7 @@
}
}
-@@ -825,10 +_,22 @@
+@@ -826,10 +_,22 @@
}
public void m_214150_(@Nullable Player p_215017_, double p_215018_, double p_215019_, double p_215020_, SoundEvent p_215021_, SoundSource p_215022_, float p_215023_, float p_215024_, long p_215025_) {
@@ -155,7 +155,7 @@
this.f_8548_.m_6846_().m_11241_(p_215027_, p_215028_.m_20185_(), p_215028_.m_20186_(), p_215028_.m_20189_(), (double)p_215029_.m_215668_(p_215031_), this.m_46472_(), new ClientboundSoundEntityPacket(p_215029_, p_215030_, p_215028_, p_215031_, p_215032_, p_215033_));
}
-@@ -845,6 +_,7 @@
+@@ -846,6 +_,7 @@
}
public void m_214171_(GameEvent p_215041_, Vec3 p_215042_, GameEvent.Context p_215043_) {
@@ -163,7 +163,7 @@
int i = p_215041_.m_157827_();
BlockPos blockpos = new BlockPos(p_215042_);
int j = SectionPos.m_123171_(blockpos.m_123341_() - i);
-@@ -930,10 +_,15 @@
+@@ -931,10 +_,15 @@
}
public void m_46672_(BlockPos p_215045_, Block p_215046_) {
@@ -179,7 +179,7 @@
this.f_220350_.m_214152_(p_215052_, p_215053_, p_215054_);
}
-@@ -955,6 +_,7 @@
+@@ -956,6 +_,7 @@
public Explosion m_7703_(@Nullable Entity p_8653_, @Nullable DamageSource p_8654_, @Nullable ExplosionDamageCalculator p_8655_, double p_8656_, double p_8657_, double p_8658_, float p_8659_, boolean p_8660_, Explosion.BlockInteraction p_8661_) {
Explosion explosion = new Explosion(this, p_8653_, p_8654_, p_8655_, p_8656_, p_8657_, p_8658_, p_8659_, p_8660_, p_8661_);
@@ -187,7 +187,7 @@
explosion.m_46061_();
explosion.m_46075_(false);
if (p_8661_ == Explosion.BlockInteraction.NONE) {
-@@ -1461,6 +_,12 @@
+@@ -1462,6 +_,12 @@
});
}
@@ -200,7 +200,7 @@
public LevelEntityGetter m_142646_() {
return this.f_143244_.m_157567_();
}
-@@ -1544,8 +_,8 @@
+@@ -1545,8 +_,8 @@
ServerLevel.this.f_143246_.add(mob);
}
@@ -211,7 +211,7 @@
ServerLevel.this.f_143247_.put(enderdragonpart.m_19879_(), enderdragonpart);
}
}
-@@ -1569,17 +_,26 @@
+@@ -1570,17 +_,25 @@
ServerLevel.this.f_143246_.remove(mob);
}
@@ -229,7 +229,6 @@
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityLeaveLevelEvent(p_143375_, ServerLevel.this));
}
-+ @Override
public void m_214006_(Entity p_215086_) {
p_215086_.m_213651_(DynamicGameEventListener::m_223641_);
}
diff --git a/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch b/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch
index fb4e31ed4c..4da287afb9 100644
--- a/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch
+++ b/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
-@@ -549,6 +_,7 @@
+@@ -550,6 +_,7 @@
public void m_6667_(DamageSource p_9035_) {
this.m_146850_(GameEvent.f_223707_);
@@ -8,7 +8,7 @@
boolean flag = this.f_19853_.m_46469_().m_46207_(GameRules.f_46142_);
if (flag) {
Component component = this.m_21231_().m_19293_();
-@@ -694,11 +_,12 @@
+@@ -692,11 +_,12 @@
}
@Nullable
@@ -23,7 +23,7 @@
this.m_19877_();
this.m_9236_().m_143261_(this, Entity.RemovalReason.CHANGED_DIMENSION);
if (!this.f_8944_) {
-@@ -715,13 +_,14 @@
+@@ -713,13 +_,14 @@
PlayerList playerlist = this.f_8924_.m_6846_();
playerlist.m_11289_(this);
serverlevel.m_143261_(this, Entity.RemovalReason.CHANGED_DIMENSION);
@@ -41,7 +41,7 @@
this.m_9006_(p_9180_, new BlockPos(portalinfo.f_77676_));
}
-@@ -733,6 +_,9 @@
+@@ -731,6 +_,9 @@
this.m_6027_(portalinfo.f_77676_.f_82479_, portalinfo.f_77676_.f_82480_, portalinfo.f_77676_.f_82481_);
serverlevel.m_46473_().m_7238_();
this.m_9209_(serverlevel);
@@ -51,7 +51,7 @@
this.f_8906_.m_9829_(new ClientboundPlayerAbilitiesPacket(this.m_150110_()));
playerlist.m_11229_(this, p_9180_);
playerlist.m_11292_(this);
-@@ -741,10 +_,12 @@
+@@ -739,10 +_,12 @@
this.f_8906_.m_9829_(new ClientboundUpdateMobEffectPacket(this.m_19879_(), mobeffectinstance));
}
@@ -64,7 +64,7 @@
}
return this;
-@@ -808,6 +_,9 @@
+@@ -806,6 +_,9 @@
}
public Either m_7720_(BlockPos p_9115_) {
@@ -74,7 +74,7 @@
Direction direction = this.f_19853_.m_8055_(p_9115_).m_61143_(HorizontalDirectionalBlock.f_54117_);
if (!this.m_5803_() && this.m_6084_()) {
if (!this.f_19853_.m_6042_().f_63858_()) {
-@@ -818,7 +_,7 @@
+@@ -816,7 +_,7 @@
return Either.left(Player.BedSleepingProblem.OBSTRUCTED);
} else {
this.m_9158_(this.f_19853_.m_46472_(), p_9115_, this.m_146908_(), false, true);
@@ -83,7 +83,7 @@
return Either.left(Player.BedSleepingProblem.NOT_POSSIBLE_NOW);
} else {
if (!this.m_7500_()) {
-@@ -856,6 +_,7 @@
+@@ -854,6 +_,7 @@
}
private boolean m_9116_(BlockPos p_9117_, Direction p_9118_) {
@@ -91,7 +91,7 @@
return this.m_9222_(p_9117_) || this.m_9222_(p_9117_.m_121945_(p_9118_.m_122424_()));
}
-@@ -964,6 +_,7 @@
+@@ -962,6 +_,7 @@
this.f_8906_.m_9829_(new ClientboundOpenScreenPacket(abstractcontainermenu.f_38840_, abstractcontainermenu.m_6772_(), p_9033_.m_5446_()));
this.m_143399_(abstractcontainermenu);
this.f_36096_ = abstractcontainermenu;
@@ -99,7 +99,7 @@
return OptionalInt.of(this.f_8940_);
}
}
-@@ -982,6 +_,7 @@
+@@ -980,6 +_,7 @@
this.f_8906_.m_9829_(new ClientboundHorseScreenOpenPacket(this.f_8940_, p_9060_.m_6643_(), p_9059_.m_19879_()));
this.f_36096_ = new HorseInventoryMenu(this.f_8940_, this.m_150109_(), p_9060_, p_9059_);
this.m_143399_(this.f_36096_);
@@ -107,7 +107,7 @@
}
public void m_6986_(ItemStack p_9082_, InteractionHand p_9083_) {
-@@ -1007,6 +_,7 @@
+@@ -1005,6 +_,7 @@
public void m_9230_() {
this.f_36096_.m_6877_(this);
this.f_36095_.m_150414_(this.f_36096_);
@@ -115,7 +115,7 @@
this.f_36096_ = this.f_36095_;
}
-@@ -1133,6 +_,15 @@
+@@ -1131,6 +_,15 @@
this.m_36362_(p_9016_.m_36331_());
this.m_36364_(p_9016_.m_36332_());
this.m_219749_(p_9016_.m_219759_());
@@ -131,7 +131,7 @@
}
protected void m_142540_(MobEffectInstance p_143393_, @Nullable Entity p_143394_) {
-@@ -1191,6 +_,8 @@
+@@ -1189,6 +_,8 @@
}
public boolean m_143403_(GameType p_143404_) {
@@ -140,7 +140,7 @@
if (!this.f_8941_.m_143473_(p_143404_)) {
return false;
} else {
-@@ -1266,6 +_,7 @@
+@@ -1260,6 +_,7 @@
this.f_184127_ = p_9157_.f_195812_();
this.m_20088_().m_135381_(f_36089_, (byte)p_9157_.f_133867_());
this.m_20088_().m_135381_(f_36090_, (byte)(p_9157_.f_133868_() == HumanoidArm.LEFT ? 0 : 1));
@@ -148,7 +148,7 @@
}
public boolean m_143432_() {
-@@ -1329,6 +_,7 @@
+@@ -1319,6 +_,7 @@
public void m_9213_(@Nullable Entity p_9214_) {
Entity entity = this.m_8954_();
this.f_8926_ = (Entity)(p_9214_ == null ? this : p_9214_);
@@ -156,7 +156,7 @@
if (entity != this.f_8926_) {
this.f_8906_.m_9829_(new ClientboundSetCameraPacket(this.f_8926_));
this.m_6021_(this.f_8926_.m_20185_(), this.f_8926_.m_20186_(), this.f_8926_.m_20189_());
-@@ -1358,7 +_,11 @@
+@@ -1348,7 +_,11 @@
@Nullable
public Component m_8957_() {
@@ -169,7 +169,7 @@
}
public void m_6674_(InteractionHand p_9031_) {
-@@ -1383,21 +_,23 @@
+@@ -1373,21 +_,23 @@
this.m_8127_();
if (p_9000_ == this.f_19853_) {
this.f_8906_.m_9774_(p_9001_, p_9002_, p_9003_, p_9004_, p_9005_);
@@ -195,7 +195,7 @@
}
}
-@@ -1420,6 +_,7 @@
+@@ -1410,6 +_,7 @@
}
public void m_9158_(ResourceKey p_9159_, @Nullable BlockPos p_9160_, float p_9161_, boolean p_9162_, boolean p_9163_) {
@@ -203,7 +203,7 @@
if (p_9160_ != null) {
boolean flag = p_9160_.equals(this.f_8936_) && p_9159_.equals(this.f_8935_);
if (p_9163_ && !flag) {
-@@ -1471,6 +_,8 @@
+@@ -1461,6 +_,8 @@
if (itementity == null) {
return null;
} else {
@@ -212,7 +212,7 @@
this.f_19853_.m_7967_(itementity);
ItemStack itemstack = itementity.m_32055_();
if (p_9087_) {
-@@ -1485,6 +_,76 @@
+@@ -1475,6 +_,76 @@
}
}
@@ -289,7 +289,7 @@
public TextFilter m_8967_() {
return this.f_8939_;
}
-@@ -1544,11 +_,13 @@
+@@ -1534,11 +_,13 @@
public boolean m_182294_(boolean p_182295_) {
Inventory inventory = this.m_150109_();
diff --git a/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch b/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch
index a789f7b057..793b891964 100644
--- a/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch
+++ b/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/network/ServerConnectionListener.java
+++ b/net/minecraft/server/network/ServerConnectionListener.java
-@@ -49,11 +_,12 @@
+@@ -50,11 +_,12 @@
public class ServerConnectionListener {
private static final Logger f_9701_ = LogUtils.getLogger();
@@ -15,7 +15,7 @@
});
final MinecraftServer f_9702_;
public volatile boolean f_9700_;
-@@ -66,6 +_,8 @@
+@@ -67,6 +_,8 @@
}
public void m_9711_(@Nullable InetAddress p_9712_, int p_9713_) throws IOException {
@@ -24,7 +24,7 @@
synchronized(this.f_9703_) {
Class extends ServerSocketChannel> oclass;
LazyLoadedValue extends EventLoopGroup> lazyloadedvalue;
-@@ -86,7 +_,7 @@
+@@ -87,7 +_,7 @@
} catch (ChannelException channelexception) {
}
diff --git a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch
index d154c50f53..c7a9393161 100644
--- a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch
+++ b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch
@@ -1,7 +1,7 @@
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -171,6 +_,12 @@
- public class ServerGamePacketListenerImpl implements ServerPlayerConnection, ServerGamePacketListener {
+@@ -183,6 +_,12 @@
+ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, TickablePacketListener, ServerGamePacketListener {
static final Logger f_9744_ = LogUtils.getLogger();
private static final int f_143608_ = 15000;
+ /**
@@ -12,8 +12,8 @@
+ @Deprecated
public static final double f_215198_ = Mth.m_144952_(6.0D);
private static final int f_215199_ = -1;
- public final Connection f_9742_;
-@@ -413,9 +_,11 @@
+ private static final int f_241635_ = 4096;
+@@ -432,9 +_,11 @@
}
entity.m_19890_(d3, d4, d5, f, f1);
@@ -25,7 +25,7 @@
this.f_9742_.m_129512_(new ClientboundMoveVehiclePacket(entity));
return;
}
-@@ -432,7 +_,7 @@
+@@ -451,7 +_,7 @@
}
private boolean m_9793_(Entity p_9794_) {
@@ -34,7 +34,7 @@
}
public void m_7376_(ServerboundAcceptTeleportationPacket p_9835_) {
-@@ -1004,7 +_,7 @@
+@@ -1040,7 +_,7 @@
Vec3 vec3 = blockhitresult.m_82450_();
BlockPos blockpos = blockhitresult.m_82425_();
Vec3 vec31 = Vec3.m_82512_(blockpos);
@@ -43,7 +43,7 @@
Vec3 vec32 = vec3.m_82546_(vec31);
double d0 = 1.0000001D;
if (Math.abs(vec32.m_7096_()) < 1.0000001D && Math.abs(vec32.m_7098_()) < 1.0000001D && Math.abs(vec32.m_7094_()) < 1.0000001D) {
-@@ -1012,7 +_,7 @@
+@@ -1048,7 +_,7 @@
this.f_9743_.m_9243_();
int i = this.f_9743_.f_19853_.m_151558_();
if (blockpos.m_123342_() < i) {
@@ -52,7 +52,31 @@
InteractionResult interactionresult = this.f_9743_.f_8941_.m_7179_(this.f_9743_, serverlevel, itemstack, interactionhand, blockhitresult);
if (direction == Direction.UP && !interactionresult.m_19077_() && blockpos.m_123342_() >= i - 1 && m_9790_(this.f_9743_, itemstack)) {
Component component = Component.m_237110_("build.tooHigh", i - 1).m_130940_(ChatFormatting.RED);
-@@ -1383,11 +_,13 @@
+@@ -1184,10 +_,12 @@
+ if (this.m_242598_(playerchatmessage)) {
+ this.f_241681_.m_241849_(() -> {
+ CompletableFuture completablefuture = this.m_243132_(playerchatmessage.m_241775_().f_241656_());
+- CompletableFuture completablefuture1 = this.f_9745_.m_236742_().m_243107_(this.f_9743_, playerchatmessage);
++ CompletableFuture completablefuture1 = net.minecraftforge.common.ForgeHooks.getServerChatSubmittedDecorator().m_243107_(this.f_9743_, playerchatmessage);
+ return CompletableFuture.allOf(completablefuture, completablefuture1).thenAcceptAsync((p_243197_) -> {
+ FilterMask filtermask = completablefuture.join().f_243010_();
+- PlayerChatMessage playerchatmessage1 = completablefuture1.join().m_243072_(filtermask);
++ PlayerChatMessage playerchatmessage1 = completablefuture1.join();
++ if (playerchatmessage1 == null) return; // Forge: ServerChatEvent was canceled if this is null.
++ playerchatmessage1 = playerchatmessage1.m_243072_(filtermask);
+ this.m_243086_(playerchatmessage1);
+ }, this.f_9745_);
+ });
+@@ -1375,7 +_,7 @@
+
+ private CompletableFuture m_215246_(String p_215247_) {
+ Component component = Component.m_237113_(p_215247_);
+- CompletableFuture completablefuture = this.f_9745_.m_236742_().m_236961_(this.f_9743_, component).thenApply((p_238202_) -> {
++ CompletableFuture completablefuture = net.minecraftforge.common.ForgeHooks.getServerChatPreviewDecorator().m_236961_(this.f_9743_, component).thenApply((p_238202_) -> {
+ return !component.equals(p_238202_) ? p_238202_ : null;
+ });
+ completablefuture.thenAcceptAsync((p_242747_) -> {
+@@ -1524,11 +_,13 @@
return;
}
@@ -67,7 +91,7 @@
if (interactionresult.m_19077_()) {
CriteriaTriggers.f_10565_.m_61494_(ServerGamePacketListenerImpl.this.f_9743_, itemstack, entity);
if (interactionresult.m_19080_()) {
-@@ -1409,7 +_,7 @@
+@@ -1550,7 +_,7 @@
public void m_141994_() {
if (!(entity instanceof ItemEntity) && !(entity instanceof ExperienceOrb) && !(entity instanceof AbstractArrow) && entity != ServerGamePacketListenerImpl.this.f_9743_) {
@@ -76,7 +100,7 @@
} else {
ServerGamePacketListenerImpl.this.m_9942_(Component.m_237115_("multiplayer.disconnect.invalid_entity_attacked"));
ServerGamePacketListenerImpl.f_9744_.warn("Player {} tried to attack an invalid entity", (Object)ServerGamePacketListenerImpl.this.f_9743_.m_7755_().getString());
-@@ -1596,6 +_,7 @@
+@@ -1749,6 +_,7 @@
}
public void m_7423_(ServerboundCustomPayloadPacket p_9860_) {
diff --git a/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch
index aed18079cf..e68e7309eb 100644
--- a/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch
+++ b/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch
@@ -1,9 +1,9 @@
--- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
-@@ -68,7 +_,13 @@
+@@ -69,7 +_,13 @@
}
- public void m_10050_() {
+ public void m_9933_() {
- if (this.f_10019_ == ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT) {
+ if (this.f_10019_ == State.NEGOTIATING) {
+ // We force the state into "NEGOTIATING" which is otherwise unused. Once we're completed we move the negotiation onto "READY_TO_ACCEPT"
@@ -15,7 +15,7 @@
this.m_10055_();
} else if (this.f_10019_ == ServerLoginPacketListenerImpl.State.DELAY_ACCEPT) {
ServerPlayer serverplayer = this.f_10018_.m_6846_().m_11259_(this.f_10021_.getId());
-@@ -192,14 +_,14 @@
+@@ -194,14 +_,14 @@
GameProfile gameprofile = this.f_10018_.m_236731_();
if (gameprofile != null && p_10047_.f_238040_().equalsIgnoreCase(gameprofile.getName())) {
this.f_10021_ = gameprofile;
@@ -32,7 +32,7 @@
}
}
-@@ -235,7 +_,7 @@
+@@ -238,7 +_,7 @@
throw new IllegalStateException("Protocol error", cryptexception);
}
@@ -41,7 +41,7 @@
public void run() {
GameProfile gameprofile = ServerLoginPacketListenerImpl.this.f_10021_;
-@@ -243,11 +_,11 @@
+@@ -246,11 +_,11 @@
ServerLoginPacketListenerImpl.this.f_10021_ = ServerLoginPacketListenerImpl.this.f_10018_.m_129925_().hasJoinedServer(new GameProfile((UUID)null, gameprofile.getName()), s, this.m_10064_());
if (ServerLoginPacketListenerImpl.this.f_10021_ != null) {
ServerLoginPacketListenerImpl.f_10015_.info("UUID of player {} is {}", ServerLoginPacketListenerImpl.this.f_10021_.getName(), ServerLoginPacketListenerImpl.this.f_10021_.getId());
@@ -49,22 +49,22 @@
+ ServerLoginPacketListenerImpl.this.f_10019_ = ServerLoginPacketListenerImpl.State.NEGOTIATING; // FORGE: continue NEGOTIATING, we move to READY_TO_ACCEPT after Forge is ready
} else if (ServerLoginPacketListenerImpl.this.f_10018_.m_129792_()) {
ServerLoginPacketListenerImpl.f_10015_.warn("Failed to verify username but will let them in anyway!");
- ServerLoginPacketListenerImpl.this.f_10021_ = ServerLoginPacketListenerImpl.this.m_10038_(gameprofile);
+ ServerLoginPacketListenerImpl.this.f_10021_ = gameprofile;
- ServerLoginPacketListenerImpl.this.f_10019_ = ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT;
+ ServerLoginPacketListenerImpl.this.f_10019_ = ServerLoginPacketListenerImpl.State.NEGOTIATING; // FORGE: continue NEGOTIATING, we move to READY_TO_ACCEPT after Forge is ready
} else {
ServerLoginPacketListenerImpl.this.m_10053_(Component.m_237115_("multiplayer.disconnect.unverified_username"));
ServerLoginPacketListenerImpl.f_10015_.error("Username '{}' tried to join with an invalid session", (Object)gameprofile.getName());
-@@ -256,7 +_,7 @@
+@@ -259,7 +_,7 @@
if (ServerLoginPacketListenerImpl.this.f_10018_.m_129792_()) {
ServerLoginPacketListenerImpl.f_10015_.warn("Authentication servers are down but will let them in anyway!");
- ServerLoginPacketListenerImpl.this.f_10021_ = ServerLoginPacketListenerImpl.this.m_10038_(gameprofile);
+ ServerLoginPacketListenerImpl.this.f_10021_ = gameprofile;
- ServerLoginPacketListenerImpl.this.f_10019_ = ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT;
+ ServerLoginPacketListenerImpl.this.f_10019_ = ServerLoginPacketListenerImpl.State.NEGOTIATING; // FORGE: continue NEGOTIATING, we move to READY_TO_ACCEPT after Forge is ready
} else {
ServerLoginPacketListenerImpl.this.m_10053_(Component.m_237115_("multiplayer.disconnect.authservers_down"));
ServerLoginPacketListenerImpl.f_10015_.error("Couldn't verify username because servers are unavailable");
-@@ -276,6 +_,7 @@
+@@ -279,6 +_,7 @@
}
public void m_7223_(ServerboundCustomQueryPacket p_10045_) {
diff --git a/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch b/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch
index 7748e21569..71910403b7 100644
--- a/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch
+++ b/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/packs/AbstractPackResources.java
+++ b/net/minecraft/server/packs/AbstractPackResources.java
-@@ -119,4 +_,10 @@
+@@ -120,4 +_,10 @@
public String m_8017_() {
return this.f_10203_.getName();
}
diff --git a/patches/minecraft/net/minecraft/server/packs/VanillaPackResources.java.patch b/patches/minecraft/net/minecraft/server/packs/VanillaPackResources.java.patch
index 02eb76dae5..6c3a11bc93 100644
--- a/patches/minecraft/net/minecraft/server/packs/VanillaPackResources.java.patch
+++ b/patches/minecraft/net/minecraft/server/packs/VanillaPackResources.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/packs/VanillaPackResources.java
+++ b/net/minecraft/server/packs/VanillaPackResources.java
-@@ -147,6 +_,9 @@
+@@ -148,6 +_,9 @@
try {
Path path = f_182296_.get(p_215346_);
if (path != null) {
@@ -10,7 +10,7 @@
m_215357_(set, p_215347_, path, p_215348_, p_215349_);
} else {
f_10315_.error("Can't access assets root for type: {}", (Object)p_215346_);
-@@ -209,7 +_,7 @@
+@@ -210,7 +_,7 @@
try {
URL url = VanillaPackResources.class.getResource(s);
@@ -19,7 +19,7 @@
} catch (IOException ioexception) {
return VanillaPackResources.class.getResourceAsStream(s);
}
-@@ -225,7 +_,7 @@
+@@ -226,7 +_,7 @@
@Nullable
protected InputStream m_5539_(String p_10334_) {
@@ -28,7 +28,7 @@
}
public boolean m_7211_(PackType p_10355_, ResourceLocation p_10356_) {
-@@ -300,11 +_,39 @@
+@@ -301,11 +_,39 @@
public void close() {
}
diff --git a/patches/minecraft/net/minecraft/server/packs/resources/MultiPackResourceManager.java.patch b/patches/minecraft/net/minecraft/server/packs/resources/MultiPackResourceManager.java.patch
index 9d9f724485..a61cdc96cf 100644
--- a/patches/minecraft/net/minecraft/server/packs/resources/MultiPackResourceManager.java.patch
+++ b/patches/minecraft/net/minecraft/server/packs/resources/MultiPackResourceManager.java.patch
@@ -7,4 +7,4 @@
+ p_203798_.forEach(resourcePack -> resourcePack.init(p_203797_));
List list = p_203798_.stream().flatMap((p_215471_) -> {
return p_215471_.m_5698_(p_203797_).stream();
- }).toList();
+ }).distinct().toList();
diff --git a/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch b/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch
index c15d2c0140..83c53122a9 100644
--- a/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch
+++ b/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
-@@ -122,6 +_,7 @@
+@@ -125,6 +_,7 @@
private boolean f_11209_;
private static final boolean f_143988_ = false;
private int f_11210_;
@@ -8,7 +8,7 @@
public PlayerList(MinecraftServer p_203842_, RegistryAccess.Frozen p_203843_, PlayerDataStorage p_203844_, int p_203845_) {
this.f_11195_ = p_203842_;
-@@ -157,6 +_,7 @@
+@@ -160,6 +_,7 @@
LevelData leveldata = serverlevel1.m_6106_();
p_11263_.m_143427_(compoundtag);
ServerGamePacketListenerImpl servergamepacketlistenerimpl = new ServerGamePacketListenerImpl(this.f_11195_, p_11262_, p_11263_);
@@ -16,7 +16,7 @@
GameRules gamerules = serverlevel1.m_46469_();
boolean flag = gamerules.m_46207_(GameRules.f_46156_);
boolean flag1 = gamerules.m_46207_(GameRules.f_46145_);
-@@ -165,6 +_,7 @@
+@@ -168,6 +_,7 @@
servergamepacketlistenerimpl.m_9829_(new ClientboundChangeDifficultyPacket(leveldata.m_5472_(), leveldata.m_5474_()));
servergamepacketlistenerimpl.m_9829_(new ClientboundPlayerAbilitiesPacket(p_11263_.m_150110_()));
servergamepacketlistenerimpl.m_9829_(new ClientboundSetCarriedItemPacket(p_11263_.m_150109_().f_35977_));
@@ -24,16 +24,7 @@
servergamepacketlistenerimpl.m_9829_(new ClientboundUpdateRecipesPacket(this.f_11195_.m_129894_().m_44051_()));
servergamepacketlistenerimpl.m_9829_(new ClientboundUpdateTagsPacket(TagNetworkSerialization.m_203950_(this.f_11206_)));
this.m_11289_(p_11263_);
-@@ -181,7 +_,7 @@
-
- this.m_215627_(mutablecomponent.m_130940_(ChatFormatting.YELLOW), ChatType.f_130599_);
- servergamepacketlistenerimpl.m_9774_(p_11263_.m_20185_(), p_11263_.m_20186_(), p_11263_.m_20189_(), p_11263_.m_146908_(), p_11263_.m_146909_());
-- this.f_11196_.add(p_11263_);
-+ this.addPlayer(p_11263_);
- this.f_11197_.put(p_11263_.m_20148_(), p_11263_);
- this.m_11268_(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, p_11263_));
-
-@@ -237,6 +_,7 @@
+@@ -240,6 +_,7 @@
}
p_11263_.m_143429_();
@@ -41,7 +32,7 @@
}
protected void m_11273_(ServerScoreboard p_11274_, ServerPlayer p_11275_) {
-@@ -297,6 +_,7 @@
+@@ -300,6 +_,7 @@
compoundtag1 = compoundtag;
p_11225_.m_20258_(compoundtag);
f_11188_.debug("loading single player");
@@ -49,7 +40,7 @@
} else {
compoundtag1 = this.f_11204_.m_78435_(p_11225_);
}
-@@ -305,6 +_,7 @@
+@@ -308,6 +_,7 @@
}
protected void m_6765_(ServerPlayer p_11277_) {
@@ -57,7 +48,7 @@
this.f_11204_.m_78433_(p_11277_);
ServerStatsCounter serverstatscounter = this.f_11202_.get(p_11277_.m_20148_());
if (serverstatscounter != null) {
-@@ -319,6 +_,7 @@
+@@ -322,6 +_,7 @@
}
public void m_11286_(ServerPlayer p_11287_) {
@@ -65,12 +56,7 @@
ServerLevel serverlevel = p_11287_.m_9236_();
p_11287_.m_36220_(Stats.f_12989_);
this.m_6765_(p_11287_);
-@@ -455,10 +_,11 @@
- this.m_11229_(serverplayer, serverlevel1);
- this.m_11289_(serverplayer);
- serverlevel1.m_8845_(serverplayer);
-- this.f_11196_.add(serverplayer);
-+ this.addPlayer(serverplayer);
+@@ -462,6 +_,7 @@
this.f_11197_.put(serverplayer.m_20148_(), serverplayer);
serverplayer.m_143429_();
serverplayer.m_21153_(serverplayer.m_21223_());
@@ -78,7 +64,7 @@
if (flag2) {
serverplayer.f_8906_.m_9829_(new ClientboundSoundPacket(SoundEvents.f_12377_, SoundSource.BLOCKS, (double)blockpos.m_123341_(), (double)blockpos.m_123342_(), (double)blockpos.m_123343_(), 1.0F, 1.0F, serverlevel1.m_213780_().m_188505_()));
}
-@@ -543,6 +_,7 @@
+@@ -546,6 +_,7 @@
}
public void m_5749_(GameProfile p_11254_) {
@@ -86,7 +72,7 @@
this.f_11200_.m_11381_(new ServerOpListEntry(p_11254_, this.f_11195_.m_7022_(), this.f_11200_.m_11351_(p_11254_)));
ServerPlayer serverplayer = this.m_11259_(p_11254_.getId());
if (serverplayer != null) {
-@@ -552,6 +_,7 @@
+@@ -555,6 +_,7 @@
}
public void m_5750_(GameProfile p_11281_) {
@@ -94,7 +80,7 @@
this.f_11200_.m_11393_(p_11281_);
ServerPlayer serverplayer = this.m_11259_(p_11281_.getId());
if (serverplayer != null) {
-@@ -770,13 +_,6 @@
+@@ -784,13 +_,6 @@
if (serverstatscounter == null) {
File file1 = this.f_11195_.m_129843_(LevelResource.f_78175_).toFile();
File file2 = new File(file1, uuid + ".json");
@@ -108,7 +94,7 @@
serverstatscounter = new ServerStatsCounter(this.f_11195_, file2);
this.f_11202_.put(uuid, serverstatscounter);
-@@ -795,6 +_,8 @@
+@@ -809,6 +_,8 @@
this.f_11203_.put(uuid, playeradvancements);
}
@@ -117,7 +103,7 @@
playeradvancements.m_135979_(p_11297_);
return playeradvancements;
}
-@@ -824,7 +_,7 @@
+@@ -838,7 +_,7 @@
}
public List m_11314_() {
@@ -126,7 +112,7 @@
}
@Nullable
-@@ -841,6 +_,7 @@
+@@ -855,6 +_,7 @@
playeradvancements.m_135981_(this.f_11195_.m_129889_());
}
@@ -134,17 +120,3 @@
this.m_11268_(new ClientboundUpdateTagsPacket(TagNetworkSerialization.m_203950_(this.f_11206_)));
ClientboundUpdateRecipesPacket clientboundupdaterecipespacket = new ClientboundUpdateRecipesPacket(this.f_11195_.m_129894_().m_44051_());
-@@ -853,5 +_,13 @@
-
- public boolean m_11316_() {
- return this.f_11209_;
-+ }
-+
-+ public boolean addPlayer(ServerPlayer player) {
-+ return f_11196_.add(player);
-+ }
-+
-+ public boolean removePlayer(ServerPlayer player) {
-+ return this.f_11196_.remove(player);
- }
- }
diff --git a/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch b/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch
index 5970637789..90684bf9a7 100644
--- a/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch
+++ b/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/server/rcon/thread/RconClient.java
+++ b/net/minecraft/server/rcon/thread/RconClient.java
-@@ -125,13 +_,14 @@
+@@ -126,13 +_,14 @@
}
private void m_11594_(int p_11595_, String p_11596_) throws IOException {
diff --git a/patches/minecraft/net/minecraft/world/entity/Entity.java.patch b/patches/minecraft/net/minecraft/world/entity/Entity.java.patch
index bab45c4ad0..b60b1df2a8 100644
--- a/patches/minecraft/net/minecraft/world/entity/Entity.java.patch
+++ b/patches/minecraft/net/minecraft/world/entity/Entity.java.patch
@@ -160,7 +160,7 @@
this.m_5496_(soundtype.m_56776_(), soundtype.m_56773_() * 0.15F, soundtype.m_56774_());
}
}
-@@ -1068,19 +_,22 @@
+@@ -1063,19 +_,22 @@
public void m_5844_() {
if (this.m_6069_()) {
@@ -188,7 +188,7 @@
}
void m_20074_() {
-@@ -1103,6 +_,7 @@
+@@ -1098,6 +_,7 @@
private void m_20323_() {
this.f_19800_ = this.m_204029_(FluidTags.f_13131_);
this.f_19801_.clear();
@@ -196,7 +196,7 @@
double d0 = this.m_20188_() - (double)0.11111111F;
Entity entity = this.m_20202_();
if (entity instanceof Boat boat) {
-@@ -1115,7 +_,7 @@
+@@ -1110,7 +_,7 @@
FluidState fluidstate = this.f_19853_.m_6425_(blockpos);
double d1 = (double)((float)blockpos.m_123342_() + fluidstate.m_76155_(this.f_19853_, blockpos));
if (d1 > d0) {
@@ -205,7 +205,7 @@
}
}
-@@ -1159,7 +_,7 @@
+@@ -1154,7 +_,7 @@
}
public boolean m_5843_() {
@@ -214,7 +214,7 @@
}
protected void m_20076_() {
-@@ -1168,19 +_,23 @@
+@@ -1163,19 +_,23 @@
int k = Mth.m_14107_(this.m_20189_());
BlockPos blockpos = new BlockPos(i, j, k);
BlockState blockstate = this.f_19853_.m_8055_(blockpos);
@@ -240,7 +240,7 @@
}
public void m_19920_(float p_19921_, Vec3 p_19922_) {
-@@ -1494,6 +_,8 @@
+@@ -1489,6 +_,8 @@
p_20241_.m_128379_("HasVisualFire", this.f_146813_);
}
@@ -249,7 +249,7 @@
if (!this.f_19841_.isEmpty()) {
ListTag listtag = new ListTag();
-@@ -1504,6 +_,10 @@
+@@ -1499,6 +_,10 @@
p_20241_.m_128365_("Tags", listtag);
}
@@ -260,7 +260,7 @@
this.m_7380_(p_20241_);
if (this.m_20160_()) {
ListTag listtag1 = new ListTag();
-@@ -1578,6 +_,9 @@
+@@ -1574,6 +_,9 @@
this.m_146915_(p_20259_.m_128471_("Glowing"));
this.m_146917_(p_20259_.m_128451_("TicksFrozen"));
this.f_146813_ = p_20259_.m_128471_("HasVisualFire");
@@ -270,7 +270,7 @@
if (p_20259_.m_128425_("Tags", 9)) {
this.f_19841_.clear();
ListTag listtag3 = p_20259_.m_128437_("Tags", 8);
-@@ -1666,6 +_,8 @@
+@@ -1662,6 +_,8 @@
} else {
ItemEntity itementity = new ItemEntity(this.f_19853_, this.m_20185_(), this.m_20186_() + (double)p_19986_, this.m_20189_(), p_19985_);
itementity.m_32060_();
@@ -279,7 +279,7 @@
this.f_19853_.m_7967_(itementity);
return itementity;
}
-@@ -1702,6 +_,7 @@
+@@ -1698,6 +_,7 @@
public void m_6083_() {
this.m_20256_(Vec3.f_82478_);
@@ -287,7 +287,7 @@
this.m_8119_();
if (this.m_20159_()) {
this.m_20202_().m_7332_(this);
-@@ -1748,6 +_,7 @@
+@@ -1744,6 +_,7 @@
}
}
@@ -295,7 +295,7 @@
if (p_19967_ || this.m_7341_(p_19966_) && p_19966_.m_7310_(this)) {
if (this.m_20159_()) {
this.m_8127_();
-@@ -1786,6 +_,7 @@
+@@ -1782,6 +_,7 @@
public void m_6038_() {
if (this.f_19824_ != null) {
Entity entity = this.f_19824_;
@@ -303,7 +303,7 @@
this.f_19824_ = null;
entity.m_20351_(this);
}
-@@ -1961,6 +_,8 @@
+@@ -1957,6 +_,8 @@
return !this.f_19823_.isEmpty();
}
@@ -312,7 +312,7 @@
public boolean m_6146_() {
return true;
}
-@@ -2010,7 +_,7 @@
+@@ -2006,7 +_,7 @@
}
public boolean m_20143_() {
@@ -321,7 +321,7 @@
}
public void m_20282_(boolean p_20283_) {
-@@ -2116,7 +_,7 @@
+@@ -2112,7 +_,7 @@
this.m_20254_(8);
}
@@ -330,7 +330,7 @@
}
public void m_6845_(boolean p_20313_) {
-@@ -2205,7 +_,7 @@
+@@ -2201,7 +_,7 @@
}
protected Component m_5677_() {
@@ -339,7 +339,7 @@
}
public boolean m_7306_(Entity p_20356_) {
-@@ -2261,14 +_,20 @@
+@@ -2257,14 +_,20 @@
@Nullable
public Entity m_5489_(ServerLevel p_20118_) {
@@ -361,7 +361,7 @@
this.f_19853_.m_46473_().m_6182_("reloading");
Entity entity = this.m_6095_().m_20615_(p_20118_);
if (entity != null) {
-@@ -2276,17 +_,19 @@
+@@ -2272,17 +_,19 @@
entity.m_7678_(portalinfo.f_77676_.f_82479_, portalinfo.f_77676_.f_82480_, portalinfo.f_77676_.f_82481_, portalinfo.f_77678_, entity.m_146909_());
entity.m_20256_(portalinfo.f_77677_);
p_20118_.m_143334_(entity);
@@ -383,7 +383,7 @@
}
} else {
return null;
-@@ -2408,6 +_,7 @@
+@@ -2404,6 +_,7 @@
return this.f_19821_;
}
@@ -391,7 +391,7 @@
public boolean m_6063_() {
return true;
}
-@@ -2487,8 +_,10 @@
+@@ -2483,8 +_,10 @@
EntityDimensions entitydimensions = this.f_19815_;
Pose pose = this.m_20089_();
EntityDimensions entitydimensions1 = this.m_6972_(pose);
@@ -403,7 +403,7 @@
this.m_20090_();
boolean flag = (double)entitydimensions1.f_20377_ <= 4.0D && (double)entitydimensions1.f_20378_ <= 4.0D;
if (!this.f_19853_.f_46443_ && !this.f_19803_ && !this.f_19794_ && flag && (entitydimensions1.f_20377_ > entitydimensions.f_20377_ || entitydimensions1.f_20378_ > entitydimensions.f_20378_) && !(this instanceof Player)) {
-@@ -2496,8 +_,9 @@
+@@ -2492,8 +_,9 @@
double d0 = (double)Math.max(0.0F, entitydimensions1.f_20377_ - entitydimensions.f_20377_) + 1.0E-6D;
double d1 = (double)Math.max(0.0F, entitydimensions1.f_20378_ - entitydimensions.f_20378_) + 1.0E-6D;
VoxelShape voxelshape = Shapes.m_83064_(AABB.m_165882_(vec3, d0, d1, d0));
@@ -414,7 +414,7 @@
});
}
-@@ -2772,9 +_,17 @@
+@@ -2768,9 +_,17 @@
this.f_19859_ = this.m_146908_();
}
@@ -433,7 +433,7 @@
} else {
AABB aabb = this.m_20191_().m_82406_(0.001D);
int i = Mth.m_14107_(aabb.f_82288_);
-@@ -2789,25 +_,28 @@
+@@ -2785,25 +_,28 @@
Vec3 vec3 = Vec3.f_82478_;
int k1 = 0;
BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();
@@ -469,7 +469,7 @@
}
}
}
-@@ -2815,27 +_,28 @@
+@@ -2811,27 +_,28 @@
}
}
@@ -508,7 +508,7 @@
}
}
-@@ -2848,7 +_,10 @@
+@@ -2844,7 +_,10 @@
return !this.f_19853_.m_151572_(i, k, j, l);
}
@@ -519,7 +519,7 @@
return this.f_19799_.getDouble(p_204037_);
}
-@@ -2974,6 +_,7 @@
+@@ -2970,6 +_,7 @@
this.f_146801_.m_142044_();
}
@@ -527,7 +527,7 @@
}
-@@ -3089,6 +_,103 @@
+@@ -3085,6 +_,103 @@
public boolean m_142265_(Level p_146843_, BlockPos p_146844_) {
return true;
}
diff --git a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch
index 188ce3dfde..d820dfa396 100644
--- a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch
+++ b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch
@@ -472,7 +472,7 @@
super.m_8119_();
this.m_21329_();
this.m_21333_();
-@@ -2352,6 +_,7 @@
+@@ -2355,6 +_,7 @@
ItemStack itemstack1 = this.m_6844_(equipmentslot);
if (!ItemStack.m_41728_(itemstack1, itemstack)) {
@@ -480,7 +480,7 @@
if (map == null) {
map = Maps.newEnumMap(EquipmentSlot.class);
}
-@@ -2502,6 +_,8 @@
+@@ -2505,6 +_,8 @@
this.f_19853_.m_46473_().m_6180_("jump");
if (this.f_20899_ && this.m_6129_()) {
double d7;
@@ -489,7 +489,7 @@
if (this.m_20077_()) {
d7 = this.m_204036_(FluidTags.f_13132_);
} else {
-@@ -2512,15 +_,17 @@
+@@ -2515,15 +_,17 @@
double d8 = this.m_20204_();
if (!flag1 || this.f_19861_ && !(d7 > d8)) {
if (!this.m_20077_() || this.f_19861_ && !(d7 > d8)) {
@@ -509,7 +509,7 @@
}
} else {
this.f_20954_ = 0;
-@@ -2575,6 +_,8 @@
+@@ -2578,6 +_,8 @@
boolean flag = this.m_20291_(7);
if (flag && !this.f_19861_ && !this.m_20159_() && !this.m_21023_(MobEffects.f_19620_)) {
ItemStack itemstack = this.m_6844_(EquipmentSlot.CHEST);
@@ -518,7 +518,7 @@
if (itemstack.m_150930_(Items.f_42741_) && ElytraItem.m_41140_(itemstack)) {
flag = true;
int i = this.f_20937_ + 1;
-@@ -2806,8 +_,16 @@
+@@ -2809,8 +_,16 @@
private void m_21329_() {
if (this.m_6117_()) {
@@ -537,7 +537,7 @@
this.m_142106_(this.f_20935_);
} else {
this.m_5810_();
-@@ -2830,7 +_,7 @@
+@@ -2833,7 +_,7 @@
private boolean m_21332_() {
int i = this.m_21212_();
@@ -546,7 +546,7 @@
boolean flag = foodproperties != null && foodproperties.m_38748_();
flag |= i <= this.f_20935_.m_41779_() - 7;
return flag && i % 4 == 0;
-@@ -2860,8 +_,10 @@
+@@ -2863,8 +_,10 @@
public void m_6672_(InteractionHand p_21159_) {
ItemStack itemstack = this.m_21120_(p_21159_);
if (!itemstack.m_41619_() && !this.m_6117_()) {
@@ -558,7 +558,7 @@
if (!this.f_19853_.f_46443_) {
this.m_21155_(1, true);
this.m_21155_(2, p_21159_ == InteractionHand.OFF_HAND);
-@@ -2922,6 +_,9 @@
+@@ -2925,6 +_,9 @@
vec31 = vec31.m_82496_(-this.m_146909_() * ((float)Math.PI / 180F));
vec31 = vec31.m_82524_(-this.m_146908_() * ((float)Math.PI / 180F));
vec31 = vec31.m_82520_(this.m_20185_(), this.m_20188_(), this.m_20189_());
@@ -568,7 +568,7 @@
this.f_19853_.m_7106_(new ItemParticleOption(ParticleTypes.f_123752_, p_21061_), vec31.f_82479_, vec31.f_82480_, vec31.f_82481_, vec3.f_82479_, vec3.f_82480_ + 0.05D, vec3.f_82481_);
}
-@@ -2935,7 +_,8 @@
+@@ -2938,7 +_,8 @@
} else {
if (!this.f_20935_.m_41619_() && this.m_6117_()) {
this.m_21137_(this.f_20935_, 16);
@@ -578,7 +578,7 @@
if (itemstack != this.f_20935_) {
this.m_21008_(interactionhand, itemstack);
}
-@@ -2961,7 +_,11 @@
+@@ -2964,7 +_,11 @@
public void m_21253_() {
if (!this.f_20935_.m_41619_()) {
@@ -590,7 +590,7 @@
if (this.f_20935_.m_41781_()) {
this.m_21329_();
}
-@@ -3112,8 +_,8 @@
+@@ -3115,8 +_,8 @@
}
BlockState blockstate = this.f_19853_.m_8055_(p_21141_);
@@ -601,7 +601,7 @@
}
this.m_20124_(Pose.SLEEPING);
-@@ -3129,15 +_,15 @@
+@@ -3132,15 +_,15 @@
private boolean m_21334_() {
return this.m_21257_().map((p_147236_) -> {
@@ -620,7 +620,7 @@
Vec3 vec31 = BedBlock.m_49458_(this.m_6095_(), this.f_19853_, p_147228_, this.m_146908_()).orElseGet(() -> {
BlockPos blockpos = p_147228_.m_7494_();
return new Vec3((double)blockpos.m_123341_() + 0.5D, (double)blockpos.m_123342_() + 0.1D, (double)blockpos.m_123343_() + 0.5D);
-@@ -3159,7 +_,9 @@
+@@ -3162,7 +_,9 @@
@Nullable
public Direction m_21259_() {
BlockPos blockpos = this.m_21257_().orElse((BlockPos)null);
@@ -631,7 +631,7 @@
}
public boolean m_5830_() {
-@@ -3175,7 +_,7 @@
+@@ -3178,7 +_,7 @@
}
public ItemStack m_6298_(ItemStack p_21272_) {
@@ -640,7 +640,7 @@
}
public ItemStack m_5584_(Level p_21067_, ItemStack p_21068_) {
-@@ -3195,7 +_,7 @@
+@@ -3198,7 +_,7 @@
private void m_21063_(ItemStack p_21064_, Level p_21065_, LivingEntity p_21066_) {
Item item = p_21064_.m_41720_();
if (item.m_41472_()) {
@@ -649,7 +649,7 @@
if (!p_21065_.f_46443_ && pair.getFirst() != null && p_21065_.f_46441_.m_188501_() < pair.getSecond()) {
p_21066_.m_7292_(new MobEffectInstance(pair.getFirst()));
}
-@@ -3231,6 +_,64 @@
+@@ -3234,6 +_,64 @@
this.m_21166_(p_21191_ == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND);
}
@@ -714,7 +714,7 @@
public AABB m_6921_() {
if (this.m_6844_(EquipmentSlot.HEAD).m_150930_(Items.f_42683_)) {
float f = 0.5F;
-@@ -3241,6 +_,8 @@
+@@ -3244,6 +_,8 @@
}
public static EquipmentSlot m_147233_(ItemStack p_147234_) {
@@ -723,7 +723,7 @@
Item item = p_147234_.m_41720_();
if (!p_147234_.m_150930_(Items.f_42047_) && (!(item instanceof BlockItem) || !(((BlockItem)item).m_40614_() instanceof AbstractSkullBlock))) {
if (item instanceof ArmorItem) {
-@@ -3248,7 +_,7 @@
+@@ -3251,7 +_,7 @@
} else if (p_147234_.m_150930_(Items.f_42741_)) {
return EquipmentSlot.CHEST;
} else {
diff --git a/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch
index dd004d319c..1f67333325 100644
--- a/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch
+++ b/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch
@@ -1,7 +1,7 @@
--- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
+++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
@@ -81,11 +_,12 @@
- private static final Map, AttributeSupplier> f_22294_ = ImmutableMap., AttributeSupplier>builder().put(EntityType.f_217014_, Allay.m_218388_().m_22265_()).put(EntityType.f_20529_, LivingEntity.m_21183_().m_22265_()).put(EntityType.f_147039_, Axolotl.m_149176_().m_22265_()).put(EntityType.f_20549_, Bat.m_27455_().m_22265_()).put(EntityType.f_20550_, Bee.m_27858_().m_22265_()).put(EntityType.f_20551_, Blaze.m_32238_().m_22265_()).put(EntityType.f_20553_, Cat.m_28168_().m_22265_()).put(EntityType.f_20554_, CaveSpider.m_32267_().m_22265_()).put(EntityType.f_20555_, Chicken.m_28263_().m_22265_()).put(EntityType.f_20556_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20557_, Cow.m_28307_().m_22265_()).put(EntityType.f_20558_, Creeper.m_32318_().m_22265_()).put(EntityType.f_20559_, Dolphin.m_28379_().m_22265_()).put(EntityType.f_20560_, AbstractChestedHorse.m_30501_().m_22265_()).put(EntityType.f_20562_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20563_, ElderGuardian.m_32471_().m_22265_()).put(EntityType.f_20566_, EnderMan.m_32541_().m_22265_()).put(EntityType.f_20567_, Endermite.m_32619_().m_22265_()).put(EntityType.f_20565_, EnderDragon.m_31167_().m_22265_()).put(EntityType.f_20568_, Evoker.m_32657_().m_22265_()).put(EntityType.f_20452_, Fox.m_28553_().m_22265_()).put(EntityType.f_217012_, Frog.m_218525_().m_22265_()).put(EntityType.f_20453_, Ghast.m_32752_().m_22265_()).put(EntityType.f_20454_, Giant.m_32796_().m_22265_()).put(EntityType.f_147034_, GlowSquid.m_29988_().m_22265_()).put(EntityType.f_147035_, Goat.m_149401_().m_22265_()).put(EntityType.f_20455_, Guardian.m_32471_().m_22265_()).put(EntityType.f_20456_, Hoglin.m_34551_().m_22265_()).put(EntityType.f_20457_, AbstractHorse.m_30627_().m_22265_()).put(EntityType.f_20458_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20459_, Illusioner.m_32931_().m_22265_()).put(EntityType.f_20460_, IronGolem.m_28883_().m_22265_()).put(EntityType.f_20466_, Llama.m_30824_().m_22265_()).put(EntityType.f_20468_, MagmaCube.m_33000_().m_22265_()).put(EntityType.f_20504_, Cow.m_28307_().m_22265_()).put(EntityType.f_20503_, AbstractChestedHorse.m_30501_().m_22265_()).put(EntityType.f_20505_, Ocelot.m_29036_().m_22265_()).put(EntityType.f_20507_, Panda.m_29157_().m_22265_()).put(EntityType.f_20508_, Parrot.m_29438_().m_22265_()).put(EntityType.f_20509_, Monster.m_33035_().m_22265_()).put(EntityType.f_20510_, Pig.m_29503_().m_22265_()).put(EntityType.f_20511_, Piglin.m_34770_().m_22265_()).put(EntityType.f_20512_, PiglinBrute.m_35075_().m_22265_()).put(EntityType.f_20513_, Pillager.m_33307_().m_22265_()).put(EntityType.f_20532_, Player.m_36340_().m_22265_()).put(EntityType.f_20514_, PolarBear.m_29560_().m_22265_()).put(EntityType.f_20516_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20517_, Rabbit.m_29717_().m_22265_()).put(EntityType.f_20518_, Ravager.m_33371_().m_22265_()).put(EntityType.f_20519_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20520_, Sheep.m_29873_().m_22265_()).put(EntityType.f_20521_, Shulker.m_33477_().m_22265_()).put(EntityType.f_20523_, Silverfish.m_33551_().m_22265_()).put(EntityType.f_20524_, AbstractSkeleton.m_32166_().m_22265_()).put(EntityType.f_20525_, SkeletonHorse.m_30918_().m_22265_()).put(EntityType.f_20526_, Monster.m_33035_().m_22265_()).put(EntityType.f_20528_, SnowGolem.m_29934_().m_22265_()).put(EntityType.f_20479_, Spider.m_33815_().m_22265_()).put(EntityType.f_20480_, Squid.m_29988_().m_22265_()).put(EntityType.f_20481_, AbstractSkeleton.m_32166_().m_22265_()).put(EntityType.f_20482_, Strider.m_33937_().m_22265_()).put(EntityType.f_217013_, Tadpole.m_27495_().m_22265_()).put(EntityType.f_20488_, Llama.m_30824_().m_22265_()).put(EntityType.f_20489_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20490_, Turtle.m_30207_().m_22265_()).put(EntityType.f_20491_, Vex.m_34040_().m_22265_()).put(EntityType.f_20492_, Villager.m_35503_().m_22265_()).put(EntityType.f_20493_, Vindicator.m_34104_().m_22265_()).put(EntityType.f_217015_, Warden.m_219463_().m_22265_()).put(EntityType.f_20494_, Mob.m_21552_().m_22265_()).put(EntityType.f_20495_, Witch.m_34155_().m_22265_()).put(EntityType.f_20496_, WitherBoss.m_31501_().m_22265_()).put(EntityType.f_20497_, AbstractSkeleton.m_32166_().m_22265_()).put(EntityType.f_20499_, Wolf.m_30425_().m_22265_()).put(EntityType.f_20500_, Zoglin.m_34257_().m_22265_()).put(EntityType.f_20501_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20502_, ZombieHorse.m_31008_().m_22265_()).put(EntityType.f_20530_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20531_, ZombifiedPiglin.m_34328_().m_22265_()).build();
+ private static final Map, AttributeSupplier> f_22294_ = ImmutableMap., AttributeSupplier>builder().put(EntityType.f_217014_, Allay.m_218388_().m_22265_()).put(EntityType.f_20529_, LivingEntity.m_21183_().m_22265_()).put(EntityType.f_147039_, Axolotl.m_149176_().m_22265_()).put(EntityType.f_20549_, Bat.m_27455_().m_22265_()).put(EntityType.f_20550_, Bee.m_27858_().m_22265_()).put(EntityType.f_20551_, Blaze.m_32238_().m_22265_()).put(EntityType.f_20553_, Cat.m_28168_().m_22265_()).put(EntityType.f_20554_, CaveSpider.m_32267_().m_22265_()).put(EntityType.f_20555_, Chicken.m_28263_().m_22265_()).put(EntityType.f_20556_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20557_, Cow.m_28307_().m_22265_()).put(EntityType.f_20558_, Creeper.m_32318_().m_22265_()).put(EntityType.f_20559_, Dolphin.m_28379_().m_22265_()).put(EntityType.f_20560_, AbstractChestedHorse.m_30501_().m_22265_()).put(EntityType.f_20562_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20563_, ElderGuardian.m_32471_().m_22265_()).put(EntityType.f_20566_, EnderMan.m_32541_().m_22265_()).put(EntityType.f_20567_, Endermite.m_32619_().m_22265_()).put(EntityType.f_20565_, EnderDragon.m_31167_().m_22265_()).put(EntityType.f_20568_, Evoker.m_32657_().m_22265_()).put(EntityType.f_20452_, Fox.m_28553_().m_22265_()).put(EntityType.f_217012_, Frog.m_218525_().m_22265_()).put(EntityType.f_20453_, Ghast.m_32752_().m_22265_()).put(EntityType.f_20454_, Giant.m_32796_().m_22265_()).put(EntityType.f_147034_, GlowSquid.m_29988_().m_22265_()).put(EntityType.f_147035_, Goat.m_149401_().m_22265_()).put(EntityType.f_20455_, Guardian.m_32853_().m_22265_()).put(EntityType.f_20456_, Hoglin.m_34551_().m_22265_()).put(EntityType.f_20457_, AbstractHorse.m_30627_().m_22265_()).put(EntityType.f_20458_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20459_, Illusioner.m_32931_().m_22265_()).put(EntityType.f_20460_, IronGolem.m_28883_().m_22265_()).put(EntityType.f_20466_, Llama.m_30824_().m_22265_()).put(EntityType.f_20468_, MagmaCube.m_33000_().m_22265_()).put(EntityType.f_20504_, Cow.m_28307_().m_22265_()).put(EntityType.f_20503_, AbstractChestedHorse.m_30501_().m_22265_()).put(EntityType.f_20505_, Ocelot.m_29036_().m_22265_()).put(EntityType.f_20507_, Panda.m_29157_().m_22265_()).put(EntityType.f_20508_, Parrot.m_29438_().m_22265_()).put(EntityType.f_20509_, Monster.m_33035_().m_22265_()).put(EntityType.f_20510_, Pig.m_29503_().m_22265_()).put(EntityType.f_20511_, Piglin.m_34770_().m_22265_()).put(EntityType.f_20512_, PiglinBrute.m_35075_().m_22265_()).put(EntityType.f_20513_, Pillager.m_33307_().m_22265_()).put(EntityType.f_20532_, Player.m_36340_().m_22265_()).put(EntityType.f_20514_, PolarBear.m_29560_().m_22265_()).put(EntityType.f_20516_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20517_, Rabbit.m_29717_().m_22265_()).put(EntityType.f_20518_, Ravager.m_33371_().m_22265_()).put(EntityType.f_20519_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20520_, Sheep.m_29873_().m_22265_()).put(EntityType.f_20521_, Shulker.m_33477_().m_22265_()).put(EntityType.f_20523_, Silverfish.m_33551_().m_22265_()).put(EntityType.f_20524_, AbstractSkeleton.m_32166_().m_22265_()).put(EntityType.f_20525_, SkeletonHorse.m_30918_().m_22265_()).put(EntityType.f_20526_, Monster.m_33035_().m_22265_()).put(EntityType.f_20528_, SnowGolem.m_29934_().m_22265_()).put(EntityType.f_20479_, Spider.m_33815_().m_22265_()).put(EntityType.f_20480_, Squid.m_29988_().m_22265_()).put(EntityType.f_20481_, AbstractSkeleton.m_32166_().m_22265_()).put(EntityType.f_20482_, Strider.m_33937_().m_22265_()).put(EntityType.f_217013_, Tadpole.m_218720_().m_22265_()).put(EntityType.f_20488_, Llama.m_30824_().m_22265_()).put(EntityType.f_20489_, AbstractFish.m_27495_().m_22265_()).put(EntityType.f_20490_, Turtle.m_30207_().m_22265_()).put(EntityType.f_20491_, Vex.m_34040_().m_22265_()).put(EntityType.f_20492_, Villager.m_35503_().m_22265_()).put(EntityType.f_20493_, Vindicator.m_34104_().m_22265_()).put(EntityType.f_217015_, Warden.m_219463_().m_22265_()).put(EntityType.f_20494_, Mob.m_21552_().m_22265_()).put(EntityType.f_20495_, Witch.m_34155_().m_22265_()).put(EntityType.f_20496_, WitherBoss.m_31501_().m_22265_()).put(EntityType.f_20497_, AbstractSkeleton.m_32166_().m_22265_()).put(EntityType.f_20499_, Wolf.m_30425_().m_22265_()).put(EntityType.f_20500_, Zoglin.m_34257_().m_22265_()).put(EntityType.f_20501_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20502_, ZombieHorse.m_31008_().m_22265_()).put(EntityType.f_20530_, Zombie.m_34328_().m_22265_()).put(EntityType.f_20531_, ZombifiedPiglin.m_34470_().m_22265_()).build();
public static AttributeSupplier m_22297_(EntityType extends LivingEntity> p_22298_) {
- return f_22294_.get(p_22298_);
diff --git a/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch
index 7eb4bffc00..cae00172c5 100644
--- a/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch
+++ b/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/world/entity/ai/village/poi/PoiTypes.java
+++ b/net/minecraft/world/entity/ai/village/poi/PoiTypes.java
-@@ -47,8 +_,9 @@
+@@ -48,8 +_,9 @@
private static final Set f_218069_ = ImmutableList.of(Blocks.f_50256_, Blocks.f_152477_, Blocks.f_152476_, Blocks.f_152478_).stream().flatMap((p_218093_) -> {
return p_218093_.m_49965_().m_61056_().stream();
}).collect(ImmutableSet.toImmutableSet());
@@ -12,14 +12,14 @@
private static Set m_218073_(Block p_218074_) {
return ImmutableSet.copyOf(p_218074_.m_49965_().m_61056_());
-@@ -66,16 +_,10 @@
+@@ -67,16 +_,10 @@
}
private static void m_218077_(Holder p_218078_) {
- p_218078_.m_203334_().f_27325_().forEach((p_218081_) -> {
- Holder holder = f_218070_.put(p_218081_, p_218078_);
- if (holder != null) {
-- throw (IllegalStateException)Util.m_137570_(new IllegalStateException(String.format("%s is defined in more than one PoI type", p_218081_)));
+- throw (IllegalStateException)Util.m_137570_(new IllegalStateException(String.format(Locale.ROOT, "%s is defined in more than one PoI type", p_218081_)));
- }
- });
}
diff --git a/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch
new file mode 100644
index 0000000000..857bb9b36b
--- /dev/null
+++ b/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch
@@ -0,0 +1,11 @@
+--- a/net/minecraft/world/entity/animal/allay/Allay.java
++++ b/net/minecraft/world/entity/animal/allay/Allay.java
+@@ -326,7 +_,7 @@
+
+ public boolean m_7243_(ItemStack p_218387_) {
+ ItemStack itemstack = this.m_21120_(InteractionHand.MAIN_HAND);
+- return !itemstack.m_41619_() && itemstack.m_41726_(p_218387_) && this.f_218303_.m_19183_(p_218387_) && this.f_19853_.m_46469_().m_46207_(GameRules.f_46132_);
++ return !itemstack.m_41619_() && itemstack.m_41726_(p_218387_) && this.f_218303_.m_19183_(p_218387_) && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.f_19853_, this);
+ }
+
+ protected void m_7581_(ItemEntity p_218359_) {
diff --git a/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch
index ac1ddc01a9..98535e8720 100644
--- a/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch
+++ b/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch
@@ -19,7 +19,7 @@
}
private ItemEntity(ItemEntity p_31994_) {
-@@ -87,6 +_,7 @@
+@@ -86,6 +_,7 @@
}
public void m_8119_() {
@@ -27,7 +27,7 @@
if (this.m_32055_().m_41619_()) {
this.m_146870_();
} else {
-@@ -100,6 +_,9 @@
+@@ -99,6 +_,9 @@
this.f_19856_ = this.m_20189_();
Vec3 vec3 = this.m_20184_();
float f = this.m_20192_() - 0.11111111F;
@@ -37,7 +37,7 @@
if (this.m_20069_() && this.m_204036_(FluidTags.f_13131_) > (double)f) {
this.m_32067_();
} else if (this.m_20077_() && this.m_204036_(FluidTags.f_13132_) > (double)f) {
-@@ -121,7 +_,7 @@
+@@ -120,7 +_,7 @@
this.m_6478_(MoverType.SELF, this.m_20184_());
float f1 = 0.98F;
if (this.f_19861_) {
@@ -46,7 +46,7 @@
}
this.m_20256_(this.m_20184_().m_82542_((double)f1, 0.98D, (double)f1));
-@@ -151,7 +_,14 @@
+@@ -150,7 +_,14 @@
}
}
@@ -62,7 +62,7 @@
this.m_146870_();
}
-@@ -209,6 +_,8 @@
+@@ -208,6 +_,8 @@
return false;
} else if (p_32028_.m_41782_() ^ p_32027_.m_41782_()) {
return false;
@@ -71,7 +71,7 @@
} else {
return !p_32028_.m_41782_() || p_32028_.m_41783_().equals(p_32027_.m_41783_());
}
-@@ -242,6 +_,7 @@
+@@ -241,6 +_,7 @@
}
public boolean m_6469_(DamageSource p_32013_, float p_32014_) {
@@ -79,7 +79,7 @@
if (this.m_6673_(p_32013_)) {
return false;
} else if (!this.m_32055_().m_41619_() && this.m_32055_().m_150930_(Items.f_42686_) && p_32013_.m_19372_()) {
-@@ -255,7 +_,7 @@
+@@ -254,7 +_,7 @@
this.f_31987_ = (int)((float)this.f_31987_ - p_32014_);
this.m_146852_(GameEvent.f_223706_, p_32013_.m_7639_());
if (this.f_31987_ <= 0) {
@@ -88,7 +88,7 @@
this.m_146870_();
}
-@@ -267,6 +_,7 @@
+@@ -266,6 +_,7 @@
p_32050_.m_128376_("Health", (short)this.f_31987_);
p_32050_.m_128376_("Age", (short)this.f_31985_);
p_32050_.m_128376_("PickupDelay", (short)this.f_31986_);
@@ -96,7 +96,7 @@
if (this.m_32057_() != null) {
p_32050_.m_128362_("Thrower", this.m_32057_());
}
-@@ -287,6 +_,7 @@
+@@ -286,6 +_,7 @@
if (p_32034_.m_128441_("PickupDelay")) {
this.f_31986_ = p_32034_.m_128448_("PickupDelay");
}
@@ -104,7 +104,7 @@
if (p_32034_.m_128403_("Owner")) {
this.f_31982_ = p_32034_.m_128342_("Owner");
-@@ -306,10 +_,18 @@
+@@ -305,10 +_,18 @@
public void m_6123_(Player p_32040_) {
if (!this.f_19853_.f_46443_) {
@@ -124,7 +124,7 @@
p_32040_.m_7938_(this, i);
if (itemstack.m_41619_()) {
this.m_146870_();
-@@ -333,8 +_,8 @@
+@@ -332,8 +_,8 @@
}
@Nullable
@@ -135,7 +135,7 @@
if (!this.f_19853_.f_46443_ && entity instanceof ItemEntity) {
((ItemEntity)entity).m_32069_();
}
-@@ -410,7 +_,7 @@
+@@ -409,7 +_,7 @@
public void m_32065_() {
this.m_32062_();
diff --git a/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch
index 85abc19d56..aff72237a2 100644
--- a/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch
+++ b/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch
@@ -9,7 +9,7 @@
this.m_34398_((ServerLevel)this.f_19853_);
}
}
-@@ -227,7 +_,7 @@
+@@ -228,7 +_,7 @@
if (!this.m_20067_()) {
p_34399_.m_5898_((Player)null, 1027, this.m_20183_(), 0);
}
diff --git a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch
index f926d2372e..40ed254716 100644
--- a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch
+++ b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
-@@ -113,7 +_,8 @@
+@@ -114,7 +_,8 @@
import net.minecraft.world.scores.Team;
import org.slf4j.Logger;
@@ -10,7 +10,7 @@
private static final Logger f_219722_ = LogUtils.getLogger();
public static final int f_150082_ = 16;
public static final int f_150083_ = 20;
-@@ -168,6 +_,9 @@
+@@ -169,6 +_,9 @@
private Optional f_238176_ = Optional.empty();
@Nullable
public FishingHook f_36083_;
@@ -20,7 +20,7 @@
public Player(Level p_219727_, BlockPos p_219728_, float p_219729_, GameProfile p_219730_, @Nullable ProfilePublicKey p_219731_) {
super(EntityType.f_20532_, p_219727_);
-@@ -194,7 +_,7 @@
+@@ -195,7 +_,7 @@
}
public static AttributeSupplier.Builder m_36340_() {
@@ -29,7 +29,7 @@
}
protected void m_8097_() {
-@@ -208,6 +_,7 @@
+@@ -209,6 +_,7 @@
}
public void m_8119_() {
@@ -37,7 +37,7 @@
this.f_19794_ = this.m_5833_();
if (this.m_5833_()) {
this.f_19861_ = false;
-@@ -223,7 +_,7 @@
+@@ -224,7 +_,7 @@
this.f_36110_ = 100;
}
@@ -46,7 +46,7 @@
this.m_6145_(false, true);
}
} else if (this.f_36110_ > 0) {
-@@ -279,6 +_,7 @@
+@@ -280,6 +_,7 @@
this.m_36372_();
this.f_36087_.m_41518_();
this.m_7594_();
@@ -54,7 +54,7 @@
}
public boolean m_36341_() {
-@@ -354,6 +_,10 @@
+@@ -355,6 +_,10 @@
}
protected void m_7594_() {
@@ -65,7 +65,7 @@
if (this.m_20175_(Pose.SWIMMING)) {
Pose pose;
if (this.m_21255_()) {
-@@ -577,6 +_,7 @@
+@@ -578,6 +_,7 @@
}
public void m_6667_(DamageSource p_36152_) {
@@ -73,7 +73,7 @@
super.m_6667_(p_36152_);
this.m_20090_();
if (!this.m_5833_()) {
-@@ -634,7 +_,7 @@
+@@ -635,7 +_,7 @@
@Nullable
public ItemEntity m_36176_(ItemStack p_36177_, boolean p_36178_) {
@@ -82,7 +82,7 @@
}
@Nullable
-@@ -672,7 +_,12 @@
+@@ -673,7 +_,12 @@
}
}
@@ -95,7 +95,7 @@
float f = this.f_36093_.m_36020_(p_36282_);
if (f > 1.0F) {
int i = EnchantmentHelper.m_44926_(this);
-@@ -714,11 +_,12 @@
+@@ -715,11 +_,12 @@
f /= 5.0F;
}
@@ -109,7 +109,7 @@
}
public void m_7378_(CompoundTag p_36215_) {
-@@ -813,6 +_,7 @@
+@@ -814,6 +_,7 @@
}
public boolean m_6469_(DamageSource p_36154_, float p_36155_) {
@@ -117,7 +117,7 @@
if (this.m_6673_(p_36154_)) {
return false;
} else if (this.f_36077_.f_35934_ && !p_36154_.m_19378_()) {
-@@ -847,7 +_,7 @@
+@@ -848,7 +_,7 @@
protected void m_6728_(LivingEntity p_36295_) {
super.m_6728_(p_36295_);
@@ -126,7 +126,7 @@
this.m_36384_(true);
}
-@@ -876,7 +_,7 @@
+@@ -877,7 +_,7 @@
}
protected void m_7909_(float p_36383_) {
@@ -135,7 +135,7 @@
if (!this.f_19853_.f_46443_) {
this.m_36246_(Stats.f_12982_.m_12902_(this.f_20935_.m_41720_()));
}
-@@ -886,6 +_,7 @@
+@@ -887,6 +_,7 @@
InteractionHand interactionhand = this.m_7655_();
this.f_20935_.m_41622_(i, this, (p_219739_) -> {
p_219739_.m_21190_(interactionhand);
@@ -143,7 +143,7 @@
});
if (this.f_20935_.m_41619_()) {
if (interactionhand == InteractionHand.MAIN_HAND) {
-@@ -904,10 +_,13 @@
+@@ -905,10 +_,13 @@
protected void m_6475_(DamageSource p_36312_, float p_36313_) {
if (!this.m_6673_(p_36312_)) {
@@ -157,7 +157,7 @@
float f = p_36313_ - f2;
if (f > 0.0F && f < 3.4028235E37F) {
this.m_36222_(Stats.f_12933_, Math.round(f * 10.0F));
-@@ -916,8 +_,8 @@
+@@ -917,8 +_,8 @@
if (f2 != 0.0F) {
this.m_36399_(p_36312_.m_19377_());
float f1 = this.m_21223_();
@@ -167,7 +167,7 @@
if (f2 < 3.4028235E37F) {
this.m_36222_(Stats.f_12931_, Math.round(f2 * 10.0F));
}
-@@ -966,6 +_,8 @@
+@@ -967,6 +_,8 @@
return InteractionResult.PASS;
} else {
@@ -176,7 +176,7 @@
ItemStack itemstack = this.m_21120_(p_36159_);
ItemStack itemstack1 = itemstack.m_41777_();
InteractionResult interactionresult = p_36158_.m_6096_(this, p_36159_);
-@@ -974,6 +_,9 @@
+@@ -975,6 +_,9 @@
itemstack.m_41764_(itemstack1.m_41613_());
}
@@ -186,7 +186,7 @@
return interactionresult;
} else {
if (!itemstack.m_41619_() && p_36158_ instanceof LivingEntity) {
-@@ -984,6 +_,7 @@
+@@ -985,6 +_,7 @@
InteractionResult interactionresult1 = itemstack.m_41647_(this, (LivingEntity)p_36158_, p_36159_);
if (interactionresult1.m_19077_()) {
if (itemstack.m_41619_() && !this.f_36077_.f_35937_) {
@@ -194,7 +194,7 @@
this.m_21008_(p_36159_, ItemStack.f_41583_);
}
-@@ -1019,7 +_,7 @@
+@@ -1020,7 +_,7 @@
double d1 = p_36201_.f_82481_;
double d2 = 0.05D;
@@ -203,7 +203,7 @@
if (d0 < 0.05D && d0 >= -0.05D) {
d0 = 0.0D;
} else if (d0 > 0.0D) {
-@@ -1029,7 +_,7 @@
+@@ -1030,7 +_,7 @@
}
}
@@ -212,7 +212,7 @@
if (d1 < 0.05D && d1 >= -0.05D) {
d1 = 0.0D;
} else if (d1 > 0.0D) {
-@@ -1039,7 +_,7 @@
+@@ -1040,7 +_,7 @@
}
}
@@ -221,7 +221,7 @@
if (d0 < 0.05D && d0 >= -0.05D) {
d0 = 0.0D;
} else if (d0 > 0.0D) {
-@@ -1064,10 +_,11 @@
+@@ -1065,10 +_,11 @@
}
private boolean m_36386_() {
@@ -234,7 +234,7 @@
if (p_36347_.m_6097_()) {
if (!p_36347_.m_7313_(this)) {
float f = (float)this.m_21133_(Attributes.f_22281_);
-@@ -1085,7 +_,7 @@
+@@ -1086,7 +_,7 @@
if (f > 0.0F || f1 > 0.0F) {
boolean flag = f2 > 0.9F;
boolean flag1 = false;
@@ -243,7 +243,7 @@
i += EnchantmentHelper.m_44894_(this);
if (this.m_20142_() && flag) {
this.f_19853_.m_6263_((Player)null, this.m_20185_(), this.m_20186_(), this.m_20189_(), SoundEvents.f_12314_, this.m_5720_(), 1.0F, 1.0F);
-@@ -1095,8 +_,10 @@
+@@ -1096,8 +_,10 @@
boolean flag2 = flag && this.f_19789_ > 0.0F && !this.f_19861_ && !this.m_6147_() && !this.m_20069_() && !this.m_21023_(MobEffects.f_19610_) && !this.m_20159_() && p_36347_ instanceof LivingEntity;
flag2 = flag2 && !this.m_20142_();
@@ -255,7 +255,7 @@
}
f += f1;
-@@ -1104,9 +_,7 @@
+@@ -1105,9 +_,7 @@
double d0 = (double)(this.f_19787_ - this.f_19867_);
if (flag && !flag2 && !flag1 && this.f_19861_ && d0 < (double)this.m_6113_()) {
ItemStack itemstack = this.m_21120_(InteractionHand.MAIN_HAND);
@@ -266,7 +266,7 @@
}
float f4 = 0.0F;
-@@ -1137,8 +_,8 @@
+@@ -1138,8 +_,8 @@
if (flag3) {
float f3 = 1.0F + EnchantmentHelper.m_44821_(this) * f;
@@ -277,7 +277,7 @@
livingentity.m_147240_((double)0.4F, (double)Mth.m_14031_(this.m_146908_() * ((float)Math.PI / 180F)), (double)(-Mth.m_14089_(this.m_146908_() * ((float)Math.PI / 180F))));
livingentity.m_6469_(DamageSource.m_19344_(this), f3);
}
-@@ -1179,13 +_,15 @@
+@@ -1180,13 +_,15 @@
EnchantmentHelper.m_44896_(this, p_36347_);
ItemStack itemstack1 = this.m_21205_();
Entity entity = p_36347_;
@@ -295,7 +295,7 @@
this.m_21008_(InteractionHand.MAIN_HAND, ItemStack.f_41583_);
}
}
-@@ -1227,7 +_,7 @@
+@@ -1228,7 +_,7 @@
}
if (this.f_19796_.m_188501_() < f) {
@@ -304,7 +304,7 @@
this.m_5810_();
this.f_19853_.m_7605_(this, (byte)30);
}
-@@ -1292,6 +_,7 @@
+@@ -1297,6 +_,7 @@
}
public void m_6145_(boolean p_36226_, boolean p_36227_) {
@@ -312,7 +312,7 @@
super.m_5796_();
if (this.f_19853_ instanceof ServerLevel && p_36227_) {
((ServerLevel)this.f_19853_).m_8878_();
-@@ -1317,7 +_,7 @@
+@@ -1322,7 +_,7 @@
} else if (block instanceof BedBlock && BedBlock.m_49488_(p_36131_)) {
return BedBlock.m_49458_(EntityType.f_20532_, p_36131_, p_36132_, p_36133_);
} else if (!p_36134_) {
@@ -321,7 +321,7 @@
} else {
boolean flag = block.m_5568_();
boolean flag1 = p_36131_.m_8055_(p_36132_.m_7494_()).m_60734_().m_5568_();
-@@ -1497,6 +_,7 @@
+@@ -1502,6 +_,7 @@
public boolean m_142535_(float p_150093_, float p_150094_, DamageSource p_150095_) {
if (this.f_36077_.f_35936_) {
@@ -329,7 +329,7 @@
return false;
} else {
if (p_150093_ >= 2.0F) {
-@@ -1510,7 +_,7 @@
+@@ -1519,7 +_,7 @@
public boolean m_36319_() {
if (!this.f_19861_ && !this.m_21255_() && !this.m_20069_() && !this.m_21023_(MobEffects.f_19620_)) {
ItemStack itemstack = this.m_6844_(EquipmentSlot.CHEST);
@@ -338,7 +338,7 @@
this.m_36320_();
return true;
}
-@@ -1552,6 +_,10 @@
+@@ -1561,6 +_,10 @@
}
public void m_6756_(int p_36291_) {
@@ -349,7 +349,7 @@
this.m_36401_(p_36291_);
this.f_36080_ += (float)p_36291_ / (float)this.m_36323_();
this.f_36079_ = Mth.m_14045_(this.f_36079_ + p_36291_, 0, Integer.MAX_VALUE);
-@@ -1580,7 +_,7 @@
+@@ -1589,7 +_,7 @@
}
public void m_7408_(ItemStack p_36172_, int p_36173_) {
@@ -358,7 +358,7 @@
if (this.f_36078_ < 0) {
this.f_36078_ = 0;
this.f_36080_ = 0.0F;
-@@ -1591,6 +_,10 @@
+@@ -1600,6 +_,10 @@
}
public void m_6749_(int p_36276_) {
@@ -369,7 +369,7 @@
this.f_36078_ += p_36276_;
if (this.f_36078_ < 0) {
this.f_36078_ = 0;
-@@ -1782,7 +_,11 @@
+@@ -1791,7 +_,11 @@
}
public Component m_5446_() {
@@ -382,7 +382,7 @@
return this.m_36218_(mutablecomponent);
}
-@@ -1919,24 +_,24 @@
+@@ -1928,24 +_,24 @@
Predicate predicate = ((ProjectileWeaponItem)p_36349_.m_41720_()).m_6442_();
ItemStack itemstack = ProjectileWeaponItem.m_43010_(this, predicate);
if (!itemstack.m_41619_()) {
@@ -411,7 +411,7 @@
this.m_36246_(Stats.f_12982_.m_12902_(p_36186_.m_41720_()));
p_36185_.m_6263_((Player)null, this.m_20185_(), this.m_20186_(), this.m_20189_(), SoundEvents.f_12321_, SoundSource.PLAYERS, 0.5F, p_36185_.f_46441_.m_188501_() * 0.1F + 0.9F);
if (this instanceof ServerPlayer) {
-@@ -2023,5 +_,63 @@
+@@ -2032,5 +_,63 @@
public Component m_36423_() {
return this.f_36413_;
}
diff --git a/patches/minecraft/net/minecraft/world/item/RecordItem.java.patch b/patches/minecraft/net/minecraft/world/item/RecordItem.java.patch
index 341fa23d3e..5a3299821d 100644
--- a/patches/minecraft/net/minecraft/world/item/RecordItem.java.patch
+++ b/patches/minecraft/net/minecraft/world/item/RecordItem.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/RecordItem.java
+++ b/net/minecraft/world/item/RecordItem.java
-@@ -19,15 +_,38 @@
+@@ -19,17 +_,42 @@
import net.minecraft.world.level.block.state.BlockState;
public class RecordItem extends Item {
@@ -9,13 +9,15 @@
private final int f_43033_;
+ @Deprecated // Forge: refer to soundSupplier
private final SoundEvent f_43034_;
+ private final int f_238749_;
+ private final java.util.function.Supplier soundSupplier;
+ @Deprecated // Forge: Use the constructor that takes a supplier instead
- public RecordItem(int p_43037_, SoundEvent p_43038_, Item.Properties p_43039_) {
- super(p_43039_);
- this.f_43033_ = p_43037_;
- this.f_43034_ = p_43038_;
+ public RecordItem(int p_239614_, SoundEvent p_239615_, Item.Properties p_239616_, int p_239617_) {
+ super(p_239616_);
+ this.f_43033_ = p_239614_;
+ this.f_43034_ = p_239615_;
+ this.f_238749_ = p_239617_ * 20;
f_43032_.put(this.f_43034_, this);
+ this.soundSupplier = net.minecraftforge.registries.ForgeRegistries.SOUND_EVENTS.getDelegateOrThrow(this.f_43034_);
+ }
@@ -29,21 +31,24 @@
+ * {@link net.minecraftforge.registries.RegistryObject} or a
+ * {@link net.minecraft.core.Holder} for this parameter.
+ * @param builder A set of {@link Item.Properties} that describe this item.
++ * @param lengthInTicks The length of the music disc track in ticks.
+ */
-+ public RecordItem(int comparatorValue, java.util.function.Supplier soundSupplier, Item.Properties builder)
++ public RecordItem(int comparatorValue, java.util.function.Supplier soundSupplier, Item.Properties builder, int lengthInTicks)
+ {
+ super(builder);
+ this.f_43033_ = comparatorValue;
+ this.f_43034_ = null;
+ this.soundSupplier = soundSupplier;
++ this.f_238749_ = lengthInTicks;
}
public InteractionResult m_6225_(UseOnContext p_43048_) {
-@@ -70,6 +_,6 @@
+@@ -72,7 +_,7 @@
}
public SoundEvent m_43051_() {
- return this.f_43034_;
+ return this.soundSupplier.get();
}
- }
+
+ public int m_43036_() {
diff --git a/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch b/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch
index deecc108be..49ef6da116 100644
--- a/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch
+++ b/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
-@@ -94,6 +_,17 @@
+@@ -95,6 +_,17 @@
this.f_60449_ = p_60452_.f_60893_;
this.f_60438_ = p_60452_.f_60903_;
this.f_60439_ = p_60452_;
@@ -18,7 +18,7 @@
}
/** @deprecated */
-@@ -142,7 +_,7 @@
+@@ -143,7 +_,7 @@
/** @deprecated */
@Deprecated
public void m_6810_(BlockState p_60515_, Level p_60516_, BlockPos p_60517_, BlockState p_60518_, boolean p_60519_) {
@@ -27,7 +27,7 @@
p_60516_.m_46747_(p_60517_);
}
-@@ -219,7 +_,7 @@
+@@ -220,7 +_,7 @@
/** @deprecated */
@Deprecated
public boolean m_6864_(BlockState p_60470_, BlockPlaceContext p_60471_) {
@@ -36,7 +36,7 @@
}
/** @deprecated */
-@@ -349,8 +_,8 @@
+@@ -350,8 +_,8 @@
if (f == -1.0F) {
return 0.0F;
} else {
@@ -47,7 +47,7 @@
}
}
-@@ -383,8 +_,7 @@
+@@ -384,8 +_,7 @@
public final ResourceLocation m_60589_() {
if (this.f_60440_ == null) {
@@ -57,7 +57,7 @@
}
return this.f_60440_;
-@@ -407,6 +_,14 @@
+@@ -408,6 +_,14 @@
return this.f_60439_.f_60888_;
}
@@ -72,7 +72,7 @@
public abstract static class BlockStateBase extends StateHolder {
private final int f_60594_;
private final boolean f_60595_;
-@@ -491,18 +_,22 @@
+@@ -492,18 +_,22 @@
return this.f_60595_;
}
@@ -97,7 +97,7 @@
public BlockState m_60717_(Rotation p_60718_) {
return this.m_60734_().m_6843_(this.m_7160_(), p_60718_);
}
-@@ -885,8 +_,9 @@
+@@ -886,8 +_,9 @@
ResourceLocation f_60894_;
boolean f_60895_ = true;
boolean f_60896_;
@@ -108,7 +108,7 @@
};
BlockBehaviour.StatePredicate f_60898_ = (p_60985_, p_60986_, p_60987_) -> {
return p_60985_.m_60767_().m_76337_() && p_60985_.m_60838_(p_60986_, p_60987_);
-@@ -1017,9 +_,15 @@
+@@ -1018,9 +_,15 @@
return this;
}
diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch
index b316a6307d..792df96bc7 100644
--- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch
+++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
+++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
-@@ -200,6 +_,10 @@
+@@ -201,6 +_,10 @@
return m_74593_(p_74565_, p_74564_.m_74401_(), p_74564_.m_74404_(), p_74564_.m_74407_());
}
@@ -11,7 +11,7 @@
public boolean m_230328_(ServerLevelAccessor p_230329_, BlockPos p_230330_, BlockPos p_230331_, StructurePlaceSettings p_230332_, RandomSource p_230333_, int p_230334_) {
if (this.f_74482_.isEmpty()) {
return false;
-@@ -217,7 +_,7 @@
+@@ -218,7 +_,7 @@
int i1 = Integer.MIN_VALUE;
int j1 = Integer.MIN_VALUE;
@@ -20,7 +20,7 @@
BlockPos blockpos = structuretemplate$structureblockinfo.f_74675_;
if (boundingbox == null || boundingbox.m_71051_(blockpos)) {
FluidState fluidstate = p_230332_.m_74413_() ? p_230329_.m_6425_(blockpos) : null;
-@@ -329,7 +_,7 @@
+@@ -330,7 +_,7 @@
}
if (!p_230332_.m_74408_()) {
@@ -29,7 +29,7 @@
}
return true;
-@@ -358,14 +_,19 @@
+@@ -359,14 +_,19 @@
});
}
@@ -50,7 +50,7 @@
}
if (structuretemplate$structureblockinfo1 != null) {
-@@ -376,13 +_,29 @@
+@@ -377,13 +_,29 @@
return list;
}
@@ -86,7 +86,7 @@
ListTag listtag = new ListTag();
listtag.add(DoubleTag.m_128500_(vec31.f_82479_));
listtag.add(DoubleTag.m_128500_(vec31.f_82480_));
-@@ -390,10 +_,10 @@
+@@ -391,10 +_,10 @@
compoundtag.m_128365_("Pos", listtag);
compoundtag.m_128473_("UUID");
m_74543_(p_74524_, compoundtag).ifPresent((p_205061_) -> {
diff --git a/patches/minecraft/net/minecraft/world/level/lighting/SkyLightEngine.java.patch b/patches/minecraft/net/minecraft/world/level/lighting/SkyLightEngine.java.patch
index 17283ca17d..953eac68a9 100644
--- a/patches/minecraft/net/minecraft/world/level/lighting/SkyLightEngine.java.patch
+++ b/patches/minecraft/net/minecraft/world/level/lighting/SkyLightEngine.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/lighting/SkyLightEngine.java
+++ b/net/minecraft/world/level/lighting/SkyLightEngine.java
-@@ -174,4 +_,9 @@
+@@ -175,4 +_,9 @@
public String m_6647_(long p_75853_) {
return super.m_6647_(p_75853_) + (this.f_75632_.m_75890_(p_75853_) ? "*" : "");
}
diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch
index 0854a50d0b..859e219584 100644
--- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch
+++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/storage/loot/LootContext.java
+++ b/net/minecraft/world/level/storage/loot/LootContext.java
-@@ -107,17 +_,47 @@
+@@ -108,17 +_,47 @@
return this.f_78909_;
}
@@ -48,7 +48,7 @@
public LootContext.Builder m_230911_(RandomSource p_230912_) {
this.f_78958_ = p_230912_;
return this;
-@@ -190,7 +_,7 @@
+@@ -191,7 +_,7 @@
public LootContext m_78975_(LootContextParamSet p_78976_) {
Set> set = Sets.difference(this.f_78956_.keySet(), p_78976_.m_81398_());
@@ -57,7 +57,7 @@
throw new IllegalArgumentException("Parameters not allowed in this parameter set: " + set);
} else {
Set> set1 = Sets.difference(p_78976_.m_81394_(), this.f_78956_.keySet());
-@@ -203,7 +_,7 @@
+@@ -204,7 +_,7 @@
}
MinecraftServer minecraftserver = this.f_78955_.m_7654_();
@@ -66,7 +66,7 @@
}
}
}
-@@ -230,6 +_,11 @@
+@@ -231,6 +_,11 @@
public LootContextParam extends Entity> m_79003_() {
return this.f_78995_;
diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java
index b9cc65595b..e6b743e48d 100755
--- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java
+++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java
@@ -26,7 +26,6 @@ import net.minecraft.client.color.block.BlockColors;
import net.minecraft.client.color.item.ItemColors;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiComponent;
-import net.minecraft.client.gui.chat.NarratorChatListener;
import net.minecraft.client.gui.components.LerpingBossEvent;
import net.minecraft.client.gui.screens.ConfirmScreen;
import net.minecraft.client.gui.screens.Screen;
@@ -74,6 +73,8 @@ import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
+import net.minecraft.network.chat.MessageSigner;
+import net.minecraft.network.chat.PlayerChatMessage;
import net.minecraft.network.protocol.status.ServerStatus;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource;
@@ -217,7 +218,7 @@ public class ForgeHooksClient
guiLayers.push(minecraft.screen);
minecraft.screen = Objects.requireNonNull(screen);
screen.init(minecraft, minecraft.getWindow().getGuiScaledWidth(), minecraft.getWindow().getGuiScaledHeight());
- NarratorChatListener.INSTANCE.sayNow(screen.getNarrationMessage());
+ minecraft.getNarrator().sayNow(screen.getNarrationMessage());
}
public static void popGuiLayer(Minecraft minecraft)
@@ -230,7 +231,7 @@ public class ForgeHooksClient
popGuiLayerInternal(minecraft);
if (minecraft.screen != null)
- NarratorChatListener.INSTANCE.sayNow(minecraft.screen.getNarrationMessage());
+ minecraft.getNarrator().sayNow(minecraft.screen.getNarrationMessage());
}
public static float getGuiFarPlane()
@@ -940,9 +941,9 @@ public class ForgeHooksClient
}
@Nullable
- public static Component onClientChat(ChatType type, Component message, ChatSender chatSender)
+ public static Component onClientChat(ChatType.Bound boundChatType, Component message, PlayerChatMessage playerChatMessage, MessageSigner messageSigner)
{
- ClientChatReceivedEvent event = new ClientChatReceivedEvent(type, message, chatSender);
+ ClientChatReceivedEvent event = new ClientChatReceivedEvent(boundChatType, message, playerChatMessage, messageSigner);
return MinecraftForge.EVENT_BUS.post(event) ? null : event.getMessage();
}
diff --git a/src/main/java/net/minecraftforge/client/event/ClientChatEvent.java b/src/main/java/net/minecraftforge/client/event/ClientChatEvent.java
index 1b5ac721c2..2104f29948 100644
--- a/src/main/java/net/minecraftforge/client/event/ClientChatEvent.java
+++ b/src/main/java/net/minecraftforge/client/event/ClientChatEvent.java
@@ -16,7 +16,7 @@ import org.jetbrains.annotations.ApiStatus;
* Fired when the client is about to send a chat message to the server.
*
* This event is {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}.
- * If the event is cancelled, the chat message or command will not be sent to the server.
+ * If the event is cancelled, the chat message will not be sent to the server.
*
* This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
* only on the {@linkplain LogicalSide#CLIENT logical client}.
@@ -24,13 +24,13 @@ import org.jetbrains.annotations.ApiStatus;
@Cancelable
public class ClientChatEvent extends Event
{
- private String message;
+ // private String message;
private final String originalMessage;
@ApiStatus.Internal
public ClientChatEvent(String message)
{
- this.setMessage(message);
+ // this.setMessage(message);
this.originalMessage = Strings.nullToEmpty(message);
}
@@ -39,24 +39,24 @@ public class ClientChatEvent extends Event
*/
public String getMessage()
{
- return message;
+ return this.originalMessage;
}
- /**
- * Sets the new message to be sent to the server, if the event is not cancelled.
- *
- * @param message the new message to be sent
- */
- public void setMessage(String message)
- {
- this.message = Strings.nullToEmpty(message);
- }
+ // /**
+ // * Sets the new message to be sent to the server, if the event is not cancelled.
+ // *
+ // * @param message the new message to be sent
+ // */
+ // public void setMessage(String message)
+ // {
+ // this.message = Strings.nullToEmpty(message);
+ // }
/**
* {@return the original message that was to be sent to the server}
*/
public String getOriginalMessage()
{
- return originalMessage;
+ return this.originalMessage;
}
}
diff --git a/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java b/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java
index 02888be61b..eb0bf7a1c7 100644
--- a/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java
+++ b/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java
@@ -6,9 +6,10 @@
package net.minecraftforge.client.event;
import net.minecraft.Util;
-import net.minecraft.network.chat.ChatSender;
import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.MessageSigner;
+import net.minecraft.network.chat.PlayerChatMessage;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.Cancelable;
import net.minecraftforge.eventbus.api.Event;
@@ -31,15 +32,17 @@ import org.jetbrains.annotations.ApiStatus;
public class ClientChatReceivedEvent extends Event
{
private Component message;
- private final ChatType type;
- private final ChatSender chatSender;
+ private final ChatType.Bound boundChatType;
+ private final PlayerChatMessage playerChatMessage;
+ private final MessageSigner messageSigner;
@ApiStatus.Internal
- public ClientChatReceivedEvent(ChatType type, Component message, ChatSender chatSender)
+ public ClientChatReceivedEvent(ChatType.Bound boundChatType, Component message, PlayerChatMessage playerChatMessage, MessageSigner messageSigner)
{
- this.type = type;
+ this.boundChatType = boundChatType;
this.message = message;
- this.chatSender = chatSender;
+ this.playerChatMessage = playerChatMessage;
+ this.messageSigner = messageSigner;
}
/**
@@ -53,7 +56,7 @@ public class ClientChatReceivedEvent extends Event
/**
* Sets the new message to be displayed in the chat message window, if the event is not cancelled.
*
- * @param message the new message to be sent
+ * @param message the new message to be displayed
*/
public void setMessage(Component message)
{
@@ -61,20 +64,38 @@ public class ClientChatReceivedEvent extends Event
}
/**
- * {@return the type of the chat message}
+ * {@return the bound chat type of the chat message}.
+ * This contains the chat type, display name of the sender, and nullable target name depending on the chat type.
*/
- public ChatType getType()
+ public ChatType.Bound getBoundChatType()
{
- return type;
+ return this.boundChatType;
}
/**
- * {@return the sender of this chat message} This contains the UUID, name, and (optionally) the team name of the
- * entity which sent the chat message. For system messages, {@link ChatSender#uuid()} will be equal to
- * {@link Util#NIL_UUID}.
+ * {@return the full player chat message}.
+ * This contains the sender UUID, various signing data, and the optional unsigned contents.
*/
- public ChatSender getChatSender()
+ public PlayerChatMessage getPlayerChatMessage()
{
- return chatSender;
+ return this.playerChatMessage;
+ }
+
+ /**
+ * {@return the message signer}.
+ * This contains the sender UUID, timestamp of message creation, and signature salt.
+ * The {@linkplain MessageSigner#profileId() sender UUID} will be {@link Util#NIL_UUID} if the message is a system message.
+ */
+ public MessageSigner getMessageSigner()
+ {
+ return this.messageSigner;
+ }
+
+ /**
+ * {@return {@code true} if the message was sent by the system, {@code false} otherwise}
+ */
+ public boolean isSystem()
+ {
+ return this.messageSigner.isSystem();
}
}
diff --git a/src/main/java/net/minecraftforge/client/gui/overlay/IGuiOverlay.java b/src/main/java/net/minecraftforge/client/gui/overlay/IGuiOverlay.java
index 03f02440a1..40ff6c9e85 100644
--- a/src/main/java/net/minecraftforge/client/gui/overlay/IGuiOverlay.java
+++ b/src/main/java/net/minecraftforge/client/gui/overlay/IGuiOverlay.java
@@ -16,5 +16,5 @@ import net.minecraftforge.client.event.RegisterGuiOverlaysEvent;
@FunctionalInterface
public interface IGuiOverlay
{
- void render(ForgeGui gui, PoseStack poseStack, float partialTick, int width, int height);
+ void render(ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight);
}
diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java
index b20312957f..6176e8d18e 100644
--- a/src/main/java/net/minecraftforge/common/ForgeHooks.java
+++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java
@@ -8,6 +8,7 @@ package net.minecraftforge.common;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
+import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.regex.Matcher;
@@ -32,6 +33,7 @@ import net.minecraft.ResourceLocationException;
import net.minecraft.advancements.Advancement;
import net.minecraft.core.*;
import net.minecraft.network.chat.*;
+import net.minecraft.network.chat.contents.LiteralContents;
import net.minecraft.server.packs.PackType;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.TagEntry;
@@ -395,15 +397,74 @@ public class ForgeHooks
return !MinecraftForge.EVENT_BUS.post(new VanillaGameEvent(level, vanillaEvent, pos, context));
}
- @Nullable
- public static Component onServerChatEvent(@Nullable ServerPlayer player, String raw, Component comp)
+ private static String getRawText(Component message)
{
- ServerChatEvent event = new ServerChatEvent(player, raw, comp);
- if (MinecraftForge.EVENT_BUS.post(event))
+ return message.getContents() instanceof LiteralContents literalContents ? literalContents.text() : "";
+ }
+
+ @Nullable
+ public static Component onServerChatSubmittedEvent(ServerPlayer player, String plain, Component decorated, boolean canChangeMessage)
+ {
+ ServerChatEvent.Submitted event = new ServerChatEvent.Submitted(player, plain, decorated, canChangeMessage);
+ return MinecraftForge.EVENT_BUS.post(event) ? null : event.getMessage();
+ }
+
+ private static final ChatDecorator SERVER_CHAT_SUBMITTED_DECORATOR = new ChatDecorator()
+ {
+ @NotNull
+ @Override
+ public CompletableFuture decorate(@Nullable ServerPlayer sender, Component message)
{
- return null;
+ return CompletableFuture.supplyAsync(() -> {
+ if (sender == null)
+ return message; // Vanilla should never get here with the patches we use, but let's be safe with dumb mods
+
+ return onServerChatSubmittedEvent(sender, getRawText(message), message, true);
+ });
}
- return event.getComponent();
+
+ @NotNull
+ @Override
+ public CompletableFuture decorate(@Nullable ServerPlayer sender, PlayerChatMessage message)
+ {
+ if (message.signedContent().isDecorated())
+ {
+ return CompletableFuture.supplyAsync(() -> {
+ if (sender != null)
+ return onServerChatSubmittedEvent(sender, message.signedContent().plain(), message.signedContent().decorated(), false) == null;
+
+ return false;
+ }).thenApply(canceled -> canceled == Boolean.TRUE ? null : message);
+ }
+
+ return this.decorate(sender, message.serverContent()).thenApply(component -> component == null ? null : message.withUnsignedContent(component));
+ }
+ };
+
+ @NotNull
+ public static ChatDecorator getServerChatSubmittedDecorator()
+ {
+ return SERVER_CHAT_SUBMITTED_DECORATOR;
+ }
+
+ @Nullable
+ public static Component onServerChatPreviewEvent(@NotNull ServerPlayer player, @NotNull Component message)
+ {
+ ServerChatEvent.Preview event = new ServerChatEvent.Preview(player, getRawText(message), message);
+ return MinecraftForge.EVENT_BUS.post(event) ? null : event.getMessage();
+ }
+
+ @NotNull
+ public static ChatDecorator getServerChatPreviewDecorator()
+ {
+ return (player, message) -> CompletableFuture.supplyAsync(() -> {
+ if (player == null)
+ return message; // Vanilla should never get here with the patches we use, but let's be safe with dumb mods
+
+ Component preview = onServerChatPreviewEvent(player, message);
+ // Send the input message back to the client if the event was cancelled
+ return preview == null ? message : preview;
+ });
}
diff --git a/src/main/java/net/minecraftforge/common/ForgeMod.java b/src/main/java/net/minecraftforge/common/ForgeMod.java
index a67d6ba9bf..59dd3cc8e7 100644
--- a/src/main/java/net/minecraftforge/common/ForgeMod.java
+++ b/src/main/java/net/minecraftforge/common/ForgeMod.java
@@ -53,6 +53,7 @@ import net.minecraftforge.common.world.ForgeBiomeModifiers.RemoveSpawnsBiomeModi
import net.minecraftforge.common.world.NoneBiomeModifier;
import net.minecraftforge.common.world.NoneStructureModifier;
import net.minecraftforge.common.world.StructureModifier;
+import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fluids.FluidType;
import net.minecraftforge.fluids.ForgeFlowingFluid;
@@ -351,6 +352,7 @@ public class ForgeMod
});
private static boolean enableMilkFluid = false;
+ private static boolean serverChatPreviewEnabled = false;
public static final RegistryObject MILK_TYPE = RegistryObject.createOptional(new ResourceLocation("milk"), ForgeRegistries.Keys.FLUID_TYPES.location(), "minecraft");
public static final RegistryObject MILK = RegistryObject.create(new ResourceLocation("milk"), ForgeRegistries.FLUIDS);
public static final RegistryObject FLOWING_MILK = RegistryObject.create(new ResourceLocation("flowing_milk"), ForgeRegistries.FLUIDS);
@@ -369,6 +371,25 @@ public class ForgeMod
enableMilkFluid = true;
}
+ /**
+ * Run this method during mod constructor to enable chat previews for the server.
+ * Recommended for mods which modify the chat message in {@link ServerChatEvent}.
+ *
+ * @see ServerChatEvent
+ */
+ public static void enableServerChatPreview()
+ {
+ serverChatPreviewEnabled = true;
+ }
+
+ /**
+ * @return {@code true} if server chat previews are enabled
+ */
+ public static boolean isServerChatPreviewEnabled()
+ {
+ return serverChatPreviewEnabled;
+ }
+
public ForgeMod()
{
LOGGER.info(FORGEMOD,"Forge mod loading, version {}, for MC {} with MCP {}", ForgeVersion.getVersion(), MCPVersion.getMCVersion(), MCPVersion.getMCPVersion());
diff --git a/src/main/java/net/minecraftforge/common/util/FakePlayer.java b/src/main/java/net/minecraftforge/common/util/FakePlayer.java
index 8a31efc2b4..7999adf3a3 100644
--- a/src/main/java/net/minecraftforge/common/util/FakePlayer.java
+++ b/src/main/java/net/minecraftforge/common/util/FakePlayer.java
@@ -6,10 +6,11 @@
package net.minecraftforge.common.util;
import com.mojang.authlib.GameProfile;
-import io.netty.util.concurrent.Future;
-import io.netty.util.concurrent.GenericFutureListener;
+import java.util.Set;
+import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.network.Connection;
+import net.minecraft.network.PacketSendListener;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow;
@@ -69,10 +70,9 @@ import net.minecraft.world.phys.Vec3;
import net.minecraftforge.server.ServerLifecycleHooks;
import org.jetbrains.annotations.Nullable;
-import javax.annotation.ParametersAreNonnullByDefault;
-import java.util.Set;
-
-//Preliminary, simple Fake Player class
+/**
+ * A basic fake server player implementation that can be used to simulate player actions.
+ */
public class FakePlayer extends ServerPlayer
{
public FakePlayer(ServerLevel level, GameProfile name)
@@ -81,16 +81,15 @@ public class FakePlayer extends ServerPlayer
this.connection = new FakePlayerNetHandler(level.getServer(), this);
}
- @Override public Vec3 position(){ return new Vec3(0, 0, 0); }
- @Override public BlockPos blockPosition(){ return BlockPos.ZERO; }
- @Override public void displayClientMessage(Component chatComponent, boolean actionBar){}
- @Override public void awardStat(Stat par1StatBase, int par2){}
- //@Override public void openGui(Object mod, int modGuiId, World world, int x, int y, int z){}
- @Override public boolean isInvulnerableTo(DamageSource source){ return true; }
- @Override public boolean canHarmPlayer(Player player){ return false; }
- @Override public void die(DamageSource source){ return; }
- @Override public void tick(){ return; }
- @Override public void updateOptions(ServerboundClientInformationPacket pkt){ return; }
+ @Override public Vec3 position() { return new Vec3(0, 0, 0); }
+ @Override public BlockPos blockPosition() { return BlockPos.ZERO; }
+ @Override public void displayClientMessage(Component chatComponent, boolean actionBar) { }
+ @Override public void awardStat(Stat stat, int amount) { }
+ @Override public boolean isInvulnerableTo(DamageSource source) { return true; }
+ @Override public boolean canHarmPlayer(Player player) { return false; }
+ @Override public void die(DamageSource source) { }
+ @Override public void tick() { }
+ @Override public void updateOptions(ServerboundClientInformationPacket packet) { }
@Override @Nullable public MinecraftServer getServer() { return ServerLifecycleHooks.getCurrentServer(); }
@ParametersAreNonnullByDefault
@@ -134,7 +133,7 @@ public class FakePlayer extends ServerPlayer
@Override public void handlePaddleBoat(ServerboundPaddleBoatPacket packet) { }
@Override public void onDisconnect(Component message) { }
@Override public void send(Packet> packet) { }
- @Override public void send(Packet> packet, @Nullable GenericFutureListener extends Future super Void>> listener) { }
+ @Override public void send(Packet> packet, @Nullable PacketSendListener sendListener) { }
@Override public void handleSetCarriedItem(ServerboundSetCarriedItemPacket packet) { }
@Override public void handleChat(ServerboundChatPacket packet) { }
@Override public void handleAnimate(ServerboundSwingPacket packet) { }
diff --git a/src/main/java/net/minecraftforge/event/CommandEvent.java b/src/main/java/net/minecraftforge/event/CommandEvent.java
index f490fe4f9f..8735aef857 100644
--- a/src/main/java/net/minecraftforge/event/CommandEvent.java
+++ b/src/main/java/net/minecraftforge/event/CommandEvent.java
@@ -11,25 +11,24 @@ import net.minecraft.commands.Commands;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.Cancelable;
import net.minecraftforge.eventbus.api.Event;
+import net.minecraftforge.fml.LogicalSide;
+import org.jetbrains.annotations.Nullable;
/**
* CommandEvent is fired after a command is parsed, but before it is executed.
- * This event is fired during the invocation of {@link Commands#performCommand(CommandSourceStack, String)}.
- *
- * {@link #parse} contains the instance of {@link ParseResults} for the parsed command.
- * {@link #exception} begins null, but can be populated with an exception to be thrown within the command.
- *
- * This event is {@link Cancelable}.
- * If the event is canceled, the execution of the command does not occur.
- *
- * This event does not have a result. {@link HasResult}
- *
- * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ * This event is fired during the invocation of {@link Commands#performCommand(ParseResults, String)}.
+ *
+ * This event is {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}.
+ * If the event is cancelled, the command will not be executed.
+ *
+ * This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
+ * only on the {@linkplain LogicalSide#SERVER logical server}.
**/
@Cancelable
public class CommandEvent extends Event
{
private ParseResults parse;
+ @Nullable
private Throwable exception;
public CommandEvent(ParseResults parse)
@@ -37,8 +36,30 @@ public class CommandEvent extends Event
this.parse = parse;
}
- public ParseResults getParseResults() { return parse; }
- public void setParseResults(ParseResults parse) { this.parse = parse; }
- public Throwable getException() { return exception; }
- public void setException(Throwable exception) { this.exception = exception; }
+ /**
+ * {@return the parsed command results}
+ */
+ public ParseResults getParseResults()
+ {
+ return this.parse;
+ }
+
+ public void setParseResults(ParseResults parse)
+ {
+ this.parse = parse;
+ }
+
+ /**
+ * {@return an exception to be thrown when performing the command, starts null}
+ */
+ @Nullable
+ public Throwable getException()
+ {
+ return this.exception;
+ }
+
+ public void setException(@Nullable Throwable exception)
+ {
+ this.exception = exception;
+ }
}
diff --git a/src/main/java/net/minecraftforge/event/ServerChatEvent.java b/src/main/java/net/minecraftforge/event/ServerChatEvent.java
index d7a8d0c22b..78098147d7 100644
--- a/src/main/java/net/minecraftforge/event/ServerChatEvent.java
+++ b/src/main/java/net/minecraftforge/event/ServerChatEvent.java
@@ -5,63 +5,170 @@
package net.minecraftforge.event;
-import net.minecraft.network.protocol.game.ServerboundChatPacket;
-import net.minecraft.server.level.ServerPlayer;
+import java.util.Objects;
+import net.minecraft.client.Options;
import net.minecraft.network.chat.Component;
-import net.minecraft.server.network.ServerGamePacketListenerImpl;
-import net.minecraftforge.common.ForgeHooks;
+import net.minecraft.network.protocol.game.ServerboundChatPacket;
+import net.minecraft.network.protocol.game.ServerboundChatPreviewPacket;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.Cancelable;
import net.minecraftforge.eventbus.api.Event;
-import org.jetbrains.annotations.Nullable;
+import net.minecraftforge.fml.LogicalSide;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
/**
- * ServerChatEvent is fired whenever a C01PacketChatMessage is processed.
- * This event is fired via {@link ForgeHooks#onServerChatEvent(ServerPlayer, String, Component)},
- * which is executed by the {@link ServerGamePacketListenerImpl#handleChat(ServerboundChatPacket)}
- *
- * {@link #username} contains the username of the player sending the chat message, unless fired from the server, where it is null.
- * {@link #message} contains the message being sent.
- * {@link #player} the instance of ServerPlayer for the player sending the chat message, or null when fired from the server.
- * {@link #component} contains the instance of Component for the sent message.
- *
- * This event is {@link Cancelable}.
- * If this event is canceled, the chat message is never distributed to all clients.
- *
- * This event does not have a result. {@link HasResult}
- *
- * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ * This event is fired whenever a {@link ServerboundChatPreviewPacket} or {@link ServerboundChatPacket} is received.
+ *
+ * Mods that modify chat messages from this event should call {@link ForgeMod#enableServerChatPreview()}
+ * from their mod constructor to enable the chat preview and allow signing by clients.
+ * It is recommended to listen to this event class when modifying chat messages
+ * rather than a subclass to ensure clients with {@link Options#onlyShowSecureChat()}
+ * enabled can see the modified messages.
+ *
+ * This event is {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}.
+ * If the event is cancelled, the message will not be sent to clients.
+ *
+ * This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
+ * only on the {@linkplain LogicalSide#SERVER logical server}.
+ *
+ * @see ForgeMod#enableServerChatPreview()
**/
@Cancelable
public class ServerChatEvent extends Event
{
- private final String message;
- @Nullable
- private final String username;
- @Nullable
private final ServerPlayer player;
- private Component component;
+ private final String username;
+ private final String rawText;
+ private final boolean canChangeMessage;
+ private Component message;
- public ServerChatEvent(@Nullable ServerPlayer player, String message, Component component)
+ @ApiStatus.Internal
+ protected ServerChatEvent(ServerPlayer player, String rawText, Component message, boolean canChangeMessage)
{
- super();
- this.message = message;
this.player = player;
- this.username = player != null ? player.getGameProfile().getName() : null;
- this.component = component;
+ this.username = player.getGameProfile().getName();
+ this.rawText = rawText;
+ this.canChangeMessage = canChangeMessage;
+ this.message = message;
}
- public void setComponent(Component e)
+ /**
+ * {@return the player who initiated the chat action}
+ */
+ public ServerPlayer getPlayer()
{
- this.component = e;
+ return this.player;
}
- public Component getComponent()
+ /**
+ * {@return the username of the player who initiated the chat action}
+ */
+ public String getUsername()
{
- return this.component;
+ return this.username;
}
- public String getMessage() { return this.message; }
- public @Nullable String getUsername() { return this.username; }
- public @Nullable ServerPlayer getPlayer() { return this.player; }
+ /**
+ * {@return the original raw text of the player chat message}
+ */
+ public String getRawText()
+ {
+ return this.rawText;
+ }
+
+ /**
+ * {@return whether the message can be changed or not}.
+ * In vanilla, this will be false if a {@link ServerboundChatPacket} is received
+ * with signed decorated content already included by the sending player.
+ * Players who submit a chat message with chat previews disabled will cause this to be true.
+ */
+ public boolean canChangeMessage()
+ {
+ return this.canChangeMessage;
+ }
+
+ /**
+ * Set the message to be sent to the relevant clients.
+ *
+ * If {@link #canChangeMessage()} is false, this call will be ignored.
+ *
+ * It is recommended to listen to {@link ServerChatEvent} when modifying chat messages
+ * rather than a subclass to ensure clients with {@link Options#onlyShowSecureChat()}
+ * enabled can see the modified messages.
+ *
+ * @see ForgeMod#enableServerChatPreview()
+ */
+ public void setMessage(Component message)
+ {
+ if (!this.canChangeMessage)
+ return;
+
+ this.message = Objects.requireNonNull(message);
+ }
+
+ /**
+ * {@return the message that will be sent to the relevant clients, if the event is not cancelled}
+ */
+ public Component getMessage()
+ {
+ return this.message;
+ }
+
+ /**
+ * This event is fired whenever a {@link ServerboundChatPreviewPacket} is received from a client typing a message.
+ *
+ * This event is {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}.
+ * If the event is cancelled, the chat preview sent back to the client will match the original message.
+ *
+ * This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
+ * only on the {@linkplain LogicalSide#SERVER logical server}.
+ **/
+ public static class Preview extends ServerChatEvent
+ {
+ @ApiStatus.Internal
+ public Preview(ServerPlayer player, String rawText, Component message)
+ {
+ super(player, rawText, message, true);
+ }
+
+ /**
+ * Set the chat preview to be sent back to the client.
+ */
+ @Override
+ public void setMessage(Component message)
+ {
+ super.setMessage(message);
+ }
+
+ /**
+ * {@return the chat preview that will be sent back to the client, if the event is not cancelled}
+ */
+ @Override
+ public Component getMessage()
+ {
+ return super.getMessage();
+ }
+ }
+
+ /**
+ * This event is fired whenever a {@link ServerboundChatPacket} is received from a client
+ * who has submitted their chat message.
+ *
+ * This event is {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}.
+ * If the event is cancelled, the message will not be sent to clients.
+ *
+ * This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
+ * only on the {@linkplain LogicalSide#SERVER logical server}.
+ **/
+ public static class Submitted extends ServerChatEvent
+ {
+ @ApiStatus.Internal
+ public Submitted(ServerPlayer player, String rawText, Component message, boolean canChangeMessage)
+ {
+ super(player, rawText, message, canChangeMessage);
+ }
+ }
}
diff --git a/src/main/java/net/minecraftforge/event/TagsUpdatedEvent.java b/src/main/java/net/minecraftforge/event/TagsUpdatedEvent.java
index c9e5c23ca5..f41e7ea46e 100644
--- a/src/main/java/net/minecraftforge/event/TagsUpdatedEvent.java
+++ b/src/main/java/net/minecraftforge/event/TagsUpdatedEvent.java
@@ -6,9 +6,7 @@
package net.minecraftforge.event;
import net.minecraft.core.RegistryAccess;
-import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraftforge.eventbus.api.Event;
-import net.minecraftforge.server.ServerLifecycleHooks;
/**
* Fired when tags are updated on either server or client. This event can be used to refresh data that depends on tags.
diff --git a/src/main/java/net/minecraftforge/network/filters/NetworkFilters.java b/src/main/java/net/minecraftforge/network/filters/NetworkFilters.java
index b76ab78901..509c98128b 100644
--- a/src/main/java/net/minecraftforge/network/filters/NetworkFilters.java
+++ b/src/main/java/net/minecraftforge/network/filters/NetworkFilters.java
@@ -8,6 +8,7 @@ package net.minecraftforge.network.filters;
import java.util.Map;
import java.util.function.Function;
+import io.netty.channel.ChannelPipeline;
import net.minecraft.network.Connection;
import org.apache.logging.log4j.LogManager;
@@ -27,11 +28,15 @@ public class NetworkFilters
public static void injectIfNecessary(Connection manager)
{
+ ChannelPipeline pipeline = manager.channel().pipeline();
+ if (pipeline.get("packet_handler") == null)
+ return; // Realistically this can only ever be null if the connection was prematurely closed due to an error. We return early here to reduce further log spam.
+
instances.forEach((key, filterFactory) -> {
VanillaPacketFilter filter = filterFactory.apply(manager);
if (filter.isNecessary(manager))
{
- manager.channel().pipeline().addBefore("packet_handler", key, filter);
+ pipeline.addBefore("packet_handler", key, filter);
LOGGER.debug("Injected {} into {}", filter, manager);
}
});
diff --git a/src/main/java/net/minecraftforge/network/filters/VanillaConnectionNetworkFilter.java b/src/main/java/net/minecraftforge/network/filters/VanillaConnectionNetworkFilter.java
index e1c01611fc..d98b7f256a 100644
--- a/src/main/java/net/minecraftforge/network/filters/VanillaConnectionNetworkFilter.java
+++ b/src/main/java/net/minecraftforge/network/filters/VanillaConnectionNetworkFilter.java
@@ -18,6 +18,8 @@ import net.minecraft.commands.synchronization.ArgumentTypeInfo;
import net.minecraft.commands.synchronization.ArgumentTypeInfos;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
+import net.minecraft.gametest.framework.TestClassNameArgument;
+import net.minecraft.gametest.framework.TestFunctionArgument;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.Connection;
import net.minecraft.network.protocol.game.ClientboundCommandsPacket;
@@ -91,6 +93,9 @@ public class VanillaConnectionNetworkFilter extends VanillaPacketFilter
commandBuildContext.missingTagAccessPolicy(CommandBuildContext.MissingTagAccessPolicy.RETURN_EMPTY);
RootCommandNode root = packet.getRoot(commandBuildContext);
RootCommandNode newRoot = CommandTreeCleaner.cleanArgumentTypes(root, argType -> {
+ if (argType instanceof TestFunctionArgument || argType instanceof TestClassNameArgument)
+ return false; // Vanilla connections should not have gametest on, so we should filter these out always
+
ArgumentTypeInfo, ?> info = ArgumentTypeInfos.byClass(argType);
ResourceLocation id = Registry.COMMAND_ARGUMENT_TYPE.getKey(info);
return id != null && (id.getNamespace().equals("minecraft") || id.getNamespace().equals("brigadier"));
diff --git a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java
index 0ef0f96619..411597d002 100644
--- a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java
+++ b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java
@@ -6,6 +6,7 @@
package net.minecraftforge.registries;
import com.mojang.serialization.Codec;
+import net.minecraft.commands.synchronization.ArgumentTypeInfo;
import net.minecraft.network.syncher.EntityDataSerializer;
import net.minecraft.world.entity.decoration.PaintingVariant;
import net.minecraft.world.item.crafting.RecipeType;
@@ -74,6 +75,7 @@ public class ForgeRegistries
public static final IForgeRegistry> RECIPE_SERIALIZERS = RegistryManager.ACTIVE.getRegistry(Keys.RECIPE_SERIALIZERS);
public static final IForgeRegistry ATTRIBUTES = RegistryManager.ACTIVE.getRegistry(Keys.ATTRIBUTES);
public static final IForgeRegistry> STAT_TYPES = RegistryManager.ACTIVE.getRegistry(Keys.STAT_TYPES);
+ public static final IForgeRegistry> COMMAND_ARGUMENT_TYPES = RegistryManager.ACTIVE.getRegistry(Keys.COMMAND_ARGUMENT_TYPES);
// Villages
public static final IForgeRegistry VILLAGER_PROFESSIONS = RegistryManager.ACTIVE.getRegistry(Keys.VILLAGER_PROFESSIONS);
@@ -112,13 +114,13 @@ public class ForgeRegistries
* Calling {@link Supplier#get()} before {@link NewRegistryEvent} is fired will result in a null registry returned.
* Use {@link Keys#BIOME_MODIFIER_SERIALIZERS} to create a {@link DeferredRegister}.
*/
- public static final Supplier>> BIOME_MODIFIER_SERIALIZERS = DEFERRED_BIOME_MODIFIER_SERIALIZERS.makeRegistry(() -> new RegistryBuilder>().disableSaving().disableSync());
+ public static final Supplier>> BIOME_MODIFIER_SERIALIZERS = DEFERRED_BIOME_MODIFIER_SERIALIZERS.makeRegistry(GameData::getBiomeModifierSerializersRegistryBuilder);
static final DeferredRegister> DEFERRED_STRUCTURE_MODIFIER_SERIALIZERS = DeferredRegister.create(Keys.STRUCTURE_MODIFIER_SERIALIZERS, Keys.STRUCTURE_MODIFIER_SERIALIZERS.location().getNamespace());
/**
* Calling {@link Supplier#get()} before {@link NewRegistryEvent} is fired will result in a null registry returned.
* Use {@link Keys#STRUCTURE_MODIFIER_SERIALIZERS} to create a {@link DeferredRegister}.
*/
- public static final Supplier>> STRUCTURE_MODIFIER_SERIALIZERS = DEFERRED_STRUCTURE_MODIFIER_SERIALIZERS.makeRegistry(() -> new RegistryBuilder>().disableSaving().disableSync());
+ public static final Supplier>> STRUCTURE_MODIFIER_SERIALIZERS = DEFERRED_STRUCTURE_MODIFIER_SERIALIZERS.makeRegistry(GameData::getStructureModifierSerializersRegistryBuilder);
static final DeferredRegister DEFERRED_FLUID_TYPES = DeferredRegister.create(Keys.FLUID_TYPES, Keys.FLUID_TYPES.location().getNamespace());
/**
* Calling {@link Supplier#get()} before {@link NewRegistryEvent} is fired will result in a null registry returned.
@@ -141,6 +143,7 @@ public class ForgeRegistries
public static final ResourceKey> POTIONS = key("potion");
public static final ResourceKey> ATTRIBUTES = key("attribute");
public static final ResourceKey>> STAT_TYPES = key("stat_type");
+ public static final ResourceKey>> COMMAND_ARGUMENT_TYPES = key("command_argument_type");
public static final ResourceKey> SOUND_EVENTS = key("sound_event");
public static final ResourceKey> ENCHANTMENTS = key("enchantment");
public static final ResourceKey>> ENTITY_TYPES = key("entity_type");
@@ -167,8 +170,8 @@ public class ForgeRegistries
public static final ResourceKey> BIOMES = key("worldgen/biome");
// Forge
- public static final ResourceKey>> ENTITY_DATA_SERIALIZERS = key("forge:data_serializers");
- public static final ResourceKey>> GLOBAL_LOOT_MODIFIER_SERIALIZERS = key("forge:loot_modifier_serializers");
+ public static final ResourceKey>> ENTITY_DATA_SERIALIZERS = key("forge:entity_data_serializers");
+ public static final ResourceKey>> GLOBAL_LOOT_MODIFIER_SERIALIZERS = key("forge:global_loot_modifier_serializers");
public static final ResourceKey>> BIOME_MODIFIER_SERIALIZERS = key("forge:biome_modifier_serializers");
public static final ResourceKey>> STRUCTURE_MODIFIER_SERIALIZERS = key("forge:structure_modifier_serializers");
public static final ResourceKey> FLUID_TYPES = key("forge:fluid_type");
diff --git a/src/main/java/net/minecraftforge/registries/GameData.java b/src/main/java/net/minecraftforge/registries/GameData.java
index 90007edf93..79799e81e8 100644
--- a/src/main/java/net/minecraftforge/registries/GameData.java
+++ b/src/main/java/net/minecraftforge/registries/GameData.java
@@ -40,6 +40,8 @@ import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.loot.IGlobalLootModifier;
import net.minecraftforge.common.util.LogMessageAdapter;
+import net.minecraftforge.common.world.BiomeModifier;
+import net.minecraftforge.common.world.StructureModifier;
import net.minecraftforge.fluids.FluidType;
import net.minecraftforge.fml.ModLoader;
import net.minecraftforge.fml.ModLoadingContext;
@@ -104,7 +106,6 @@ public class GameData
makeRegistry(FLUIDS, "empty").vanillaHolder(Fluid::builtInRegistryHolder).create();
makeRegistry(ITEMS, "air").addCallback(ItemCallbacks.INSTANCE).legacyName("items").vanillaHolder(Item::builtInRegistryHolder).create();
makeRegistry(MOB_EFFECTS).legacyName("potions").create();
- //makeRegistry(BIOMES, Biome.class).legacyName("biomes").create();
makeRegistry(SOUND_EVENTS).legacyName("soundevents").create();
makeRegistry(POTIONS, "empty").legacyName("potiontypes").create();
makeRegistry(ENCHANTMENTS).legacyName("enchantments").create();
@@ -117,6 +118,7 @@ public class GameData
makeRegistry(RECIPE_SERIALIZERS).disableSaving().create();
makeRegistry(ATTRIBUTES).onValidate(AttributeCallbacks.INSTANCE).disableSaving().disableSync().create();
makeRegistry(STAT_TYPES).create();
+ makeRegistry(COMMAND_ARGUMENT_TYPES).disableSaving().create();
// Villagers
makeRegistry(VILLAGER_PROFESSIONS, "none").create();
@@ -148,6 +150,16 @@ public class GameData
return makeRegistry(GLOBAL_LOOT_MODIFIER_SERIALIZERS).disableSaving().disableSync();
}
+ static RegistryBuilder> getBiomeModifierSerializersRegistryBuilder()
+ {
+ return new RegistryBuilder>().disableSaving().disableSync();
+ }
+
+ static RegistryBuilder> getStructureModifierSerializersRegistryBuilder()
+ {
+ return new RegistryBuilder>().disableSaving().disableSync();
+ }
+
static RegistryBuilder getFluidTypeRegistryBuilder()
{
return makeRegistry(FLUID_TYPES).disableSaving();
diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg
index 4c8184d32d..0455e9e41f 100644
--- a/src/main/resources/META-INF/accesstransformer.cfg
+++ b/src/main/resources/META-INF/accesstransformer.cfg
@@ -30,7 +30,6 @@ protected net.minecraft.client.gui.Gui f_92975_ # lastHealthTime
protected net.minecraft.client.gui.Gui f_92976_ # healthBlinkTime
protected net.minecraft.client.gui.Gui f_92977_ # screenWidth
protected net.minecraft.client.gui.Gui f_92978_ # screenHeight
-protected net.minecraft.client.gui.Gui f_92979_ # chatListeners
protected net.minecraft.client.gui.Gui f_92981_ # VIGNETTE_LOCATION
protected net.minecraft.client.gui.Gui f_92982_ # WIDGETS_LOCATION
protected net.minecraft.client.gui.Gui f_92983_ # PUMPKIN_BLUR_LOCATION
@@ -309,10 +308,12 @@ protected net.minecraft.world.entity.monster.AbstractSkeleton m_7878_()Lnet/mine
protected net.minecraft.world.entity.monster.Skeleton m_7878_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable
protected net.minecraft.world.entity.monster.Stray m_7878_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable
protected net.minecraft.world.entity.monster.WitherSkeleton m_7878_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable
+public net.minecraft.world.entity.npc.VillagerType (Ljava/lang/String;)V # constructor
public net.minecraft.world.entity.player.Player m_6915_()V # closeContainer
protected net.minecraft.world.entity.projectile.Projectile (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/level/Level;)V # constructor
private-f net.minecraft.world.entity.raid.Raid$RaiderType f_37813_ # VALUES
public net.minecraft.world.entity.schedule.Activity (Ljava/lang/String;)V # constructor
+protected net.minecraft.world.entity.vehicle.AbstractMinecart m_213728_()Lnet/minecraft/world/item/Item; # getDropItem - make AbstractMinecart implementable
public net.minecraft.world.inventory.AnvilMenu f_39000_ # repairItemCountCost
public net.minecraft.world.inventory.MenuType (Lnet/minecraft/world/inventory/MenuType$MenuSupplier;)V # constructor
public net.minecraft.world.inventory.MenuType$MenuSupplier
@@ -322,7 +323,7 @@ public net.minecraft.world.item.AxeItem (Lnet/minecraft/world/item/Tier;FF
public net.minecraft.world.item.DiggerItem (FFLnet/minecraft/world/item/Tier;Lnet/minecraft/tags/TagKey;Lnet/minecraft/world/item/Item$Properties;)V # constructor
public net.minecraft.world.item.HoeItem (Lnet/minecraft/world/item/Tier;IFLnet/minecraft/world/item/Item$Properties;)V # constructor
public net.minecraft.world.item.PickaxeItem (Lnet/minecraft/world/item/Tier;IFLnet/minecraft/world/item/Item$Properties;)V # constructor
-public net.minecraft.world.item.RecordItem (ILnet/minecraft/sounds/SoundEvent;Lnet/minecraft/world/item/Item$Properties;)V # constructor
+public net.minecraft.world.item.RecordItem (ILnet/minecraft/sounds/SoundEvent;Lnet/minecraft/world/item/Item$Properties;I)V # constructor
#endgroup
public net.minecraft.world.item.alchemy.PotionBrewing$Mix
public net.minecraft.world.item.alchemy.PotionBrewing$Mix f_43533_ # ingredient
@@ -507,9 +508,12 @@ public net.minecraft.world.level.levelgen.NoiseGeneratorSettings m_64474_(Lcom/m
#endgroup
public net.minecraft.world.level.levelgen.WorldGenSettings (JZZLnet/minecraft/core/Registry;Ljava/util/Optional;)V # constructor
public net.minecraft.world.level.levelgen.WorldGenSettings f_64606_ # legacyCustomOptions
+public net.minecraft.world.level.levelgen.feature.featuresize.FeatureSizeType (Lcom/mojang/serialization/Codec;)V # constructor
public net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacerType (Lcom/mojang/serialization/Codec;)V # constructor
+public net.minecraft.world.level.levelgen.feature.rootplacers.RootPlacerType (Lcom/mojang/serialization/Codec;)V # constructor
public net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProviderType (Lcom/mojang/serialization/Codec;)V # constructor
public net.minecraft.world.level.levelgen.feature.treedecorators.TreeDecoratorType (Lcom/mojang/serialization/Codec;)V # constructor
+public net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacerType (Lcom/mojang/serialization/Codec;)V # constructor
protected net.minecraft.world.level.portal.PortalForcer f_77648_ # level
public net.minecraft.world.level.storage.LevelResource (Ljava/lang/String;)V # constructor
private-f net.minecraft.world.level.storage.loot.LootPool f_79028_ # rolls
diff --git a/src/main/resources/forge.sas b/src/main/resources/forge.sas
index e82919839f..077f0c5b14 100644
--- a/src/main/resources/forge.sas
+++ b/src/main/resources/forge.sas
@@ -2,7 +2,6 @@
# Please keep this file organized. And use the forge:checkSAS task to generate/validate inheretance.
# So only add the root function that needs to have the annotation stripped.
# checkSAS will populate all overrides as nessasary. Prefixing added lines with \t
-# checkSAS also supports names using . so simplest way to find the correct line to add is to get the AT line from the bot
+# checkSAS also supports names using . so simplest way to find the correct line to add is to get the AT line from the bot
# and remove the access modifier.
-#==================================================================================================================================
-net/minecraft/client/resources/model/ModelResourceLocation # ModelResourceLocation class, TODO: Remove in 1.19
\ No newline at end of file
+#==================================================================================================================================
\ No newline at end of file
diff --git a/src/test/java/net/minecraftforge/debug/CapabilitiesTest.java b/src/test/java/net/minecraftforge/debug/CapabilitiesTest.java
index 1afe9d9027..798312ffaa 100644
--- a/src/test/java/net/minecraftforge/debug/CapabilitiesTest.java
+++ b/src/test/java/net/minecraftforge/debug/CapabilitiesTest.java
@@ -128,8 +128,7 @@ public class CapabilitiesTest
{
while(messages.size() > 0)
{
- final ChatType system = Minecraft.getInstance().level.registryAccess().registryOrThrow(Registry.CHAT_TYPE_REGISTRY).getOrThrow(ChatType.SYSTEM);
- Minecraft.getInstance().gui.handleSystemChat(system, Component.literal(Objects.requireNonNull(messages.poll())));
+ Minecraft.getInstance().getChatListener().handleSystemMessage(Component.literal(Objects.requireNonNull(messages.poll())), false);
}
}
}
diff --git a/src/test/java/net/minecraftforge/debug/item/MusicDiscTest.java b/src/test/java/net/minecraftforge/debug/item/MusicDiscTest.java
index 9a1dd53355..acd7cb5228 100644
--- a/src/test/java/net/minecraftforge/debug/item/MusicDiscTest.java
+++ b/src/test/java/net/minecraftforge/debug/item/MusicDiscTest.java
@@ -30,7 +30,7 @@ public class MusicDiscTest
() -> new SoundEvent(new ResourceLocation(MOD_ID, "test_sound_event")));
private static final RegistryObject- TEST_MUSIC_DISC = ITEMS.register("test_music_disc",
- () -> new RecordItem(1, TEST_SOUND_EVENT, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC)));
+ () -> new RecordItem(1, TEST_SOUND_EVENT, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC), 20));
public MusicDiscTest()
{