> postDispatchHook() {
+ return (t, f)-> CompletableFuture.completedFuture(null);
}
}
\ No newline at end of file
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/LogicalSide.java b/fmlcore/src/main/java/net/minecraftforge/fml/LogicalSide.java
index a21fee7a296..d492b6c7fa2 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/LogicalSide.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/LogicalSide.java
@@ -5,12 +5,41 @@
package net.minecraftforge.fml;
+import net.minecraftforge.api.distmarker.Dist;
+
+/**
+ * A logical side of the Minecraft game.
+ *
+ * The {@linkplain Dist#CLIENT client distribution} has a copy of the logical client and the logical server, while the
+ * {@linkplain Dist#DEDICATED_SERVER dedicated server distribution} only holds
+ * the logical server.
+ *
+ * @see Dist
+ */
public enum LogicalSide
{
- CLIENT, SERVER;
+ /**
+ * The logical client of the Minecraft game, which interfaces with the player's inputs and renders the player's
+ * viewpoint.
+ *
+ * The logical client is only shipped with the client distribution of the game.
+ *
+ * @see Dist#CLIENT
+ */
+ CLIENT,
+ /**
+ * The logical server of the Minecraft game, responsible for connecting to clients and running the simulation logic
+ * on the level.
+ *
+ * The logical server is shipped with both client and dedicated server distributions. The client distribution runs
+ * the logical server for singleplayer mode and LAN play.
+ *
+ * @see Dist#DEDICATED_SERVER
+ */
+ SERVER;
/**
- * @return if the logical side is a server.
+ * {@return if this logical side is the server}
*/
public boolean isServer()
{
@@ -18,7 +47,7 @@ public boolean isServer()
}
/**
- * @return if the logical side is a client.
+ * {@return if the logical side is the client}
*/
public boolean isClient()
{
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java
index 1638a2f1cce..d529ad2d379 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java
@@ -21,7 +21,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -111,7 +110,7 @@ public IModFileInfo getModFileById(String modid)
return this.fileById.get(modid);
}
- Function>> futureVisitor(
+ Function> futureVisitor(
final IModStateTransition.EventGenerator eventGenerator,
final BiFunction stateChange) {
return executor -> gather(
@@ -120,12 +119,12 @@ Function> completableFutureFromExceptionList(List extends Map.Entry, Throwable>> t) {
+ static CompletionStage completableFutureFromExceptionList(List extends Map.Entry, Throwable>> t) {
if (t.stream().noneMatch(e->e.getValue()!=null)) {
- return CompletableFuture.completedFuture(Collections.emptyList());
+ return CompletableFuture.completedFuture(null);
} else {
final List throwables = t.stream().filter(e -> e.getValue() != null).map(Map.Entry::getValue).collect(Collectors.toList());
- CompletableFuture> cf = new CompletableFuture<>();
+ CompletableFuture cf = new CompletableFuture<>();
final RuntimeException accumulator = new RuntimeException();
cf.completeExceptionally(accumulator);
throwables.forEach(exception -> {
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java
index 521ab8acb09..b2d4c43f2c9 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java
@@ -196,7 +196,7 @@ private void dispatchAndHandleError(IModLoadingState state, ModWorkManager.Drive
state.buildTransition(syncExecutor, parallelExecutor, preSyncTask, postSyncTask).ifPresent(t->waitForTransition(state, syncExecutor, ticker, t));
}
- private void waitForTransition(final IModLoadingState state, final ModWorkManager.DrivenExecutor syncExecutor, final Runnable ticker, final CompletableFuture> transition) {
+ private void waitForTransition(final IModLoadingState state, final ModWorkManager.DrivenExecutor syncExecutor, final Runnable ticker, final CompletableFuture transition) {
while (!transition.isDone()) {
syncExecutor.drive(ticker);
}
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingPhase.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingPhase.java
index 80017c66832..c04e20308f8 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingPhase.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingPhase.java
@@ -5,10 +5,34 @@
package net.minecraftforge.fml;
+/**
+ * Phases of mod loading, for grouping mod loading states.
+ */
public enum ModLoadingPhase {
+ /**
+ * Special phase for exceptional situations and error handling, where mod loading cannot continue normally.
+ *
+ * There is conventionally only one state with this phase.
+ */
ERROR, // Special state for error handling
+ /**
+ * Phase for discovering and gathering mods for loading.
+ */
GATHER,
+ /**
+ * Phase for the loading of mods found from mod discovery.
+ *
+ * @see #GATHER
+ */
LOAD,
+ /**
+ * Phase after mod loading has completed, for post-loading tasks.
+ *
+ * @see #LOAD
+ */
COMPLETE,
- DONE;
+ /**
+ * Marker phase for the last state in the full mod loading process.
+ */
+ DONE
}
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingStage.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingStage.java
index b5d8053631a..ece8b55cec3 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingStage.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingStage.java
@@ -5,16 +5,53 @@
package net.minecraftforge.fml;
+/**
+ * Mod loading stage of mod containers during the mod loading process. These will have a corresponding {@link ModLoadingState}
+ * in the basic mod loading process provided by FML.
+ *
+ * Each mod loading stage has a global {@link DeferredWorkQueue}, which is populated during the execution of the state
+ * associated with this stage and emptied at the end of the state's execution.
+ */
public enum ModLoadingStage
{
+ /**
+ * Special stage for exceptional situations and error handling.
+ */
ERROR,
+ /**
+ * Validation of the mod list.
+ * TODO: figure out where this is used and why this exists instead of CONSTRUCT being the first normal stage
+ */
VALIDATE,
+ /**
+ * Default stage of mod containers after construction.
+ */
CONSTRUCT,
+ /**
+ * Common (non-side-specific) setup and initialization.
+ */
COMMON_SETUP,
+ /**
+ * Side-specific setup and initialization.
+ *
+ * @see net.minecraftforge.api.distmarker.Dist
+ */
SIDED_SETUP,
+ /**
+ * Stage for enqueuing {@link net.minecraftforge.fml.InterModComms} messages for later processing.
+ */
ENQUEUE_IMC,
+ /**
+ * Stage for processing received messages though {@link net.minecraftforge.fml.InterModComms}.
+ */
PROCESS_IMC,
+ /**
+ * Marks the completion of mod loading for this container.
+ */
COMPLETE,
+ /**
+ * Marks the completion of the full mod loading process.
+ */
DONE;
private final DeferredWorkQueue deferredWorkQueue;
@@ -23,14 +60,27 @@ public enum ModLoadingStage
deferredWorkQueue = new DeferredWorkQueue(this);
}
+ /**
+ * {@return the next stage after this stage, or {@link #ERROR} if the exception is not {@code null}}
+ *
+ * @param exception the exception that occurred during this stage, may be {@code null}
+ */
ModLoadingStage nextState(Throwable exception) {
return exception != null ? ERROR : values()[this.ordinal()+1];
}
+ /**
+ * {@return this stage, or {@link #ERROR} if the exception is not {@code null}}
+ *
+ * @param exception the exception that occurred during this stage, may be {@code null}
+ */
public ModLoadingStage currentState(Throwable exception) {
return exception != null ? ERROR : this;
}
+ /**
+ * {@return the deferred work queue for this stage}
+ */
public DeferredWorkQueue getDeferredWorkQueue() {
return deferredWorkQueue;
}
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java
index aa604dde4d4..b68f182b5d9 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java
@@ -8,31 +8,91 @@
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.fml.event.IModBusEvent;
-import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.function.Function;
-public record ModLoadingState(String name, String previous, Function message, ModLoadingPhase phase, Optional> inlineRunnable, Optional transition) implements IModLoadingState {
+/**
+ * Implementation of the {@link IModLoadingState} interface.
+ *
+ * @param name the name of this state
+ * @param previous the name of the state immediately previous to this state
+ * @param message a function returning a human-friendly message for this state
+ * @param phase the mod loading phase this state belongs to
+ * @param inlineRunnable an optional runnable, which runs before starting the transition from this state to the next
+ * @param transition optional state transition information
+ */
+public record ModLoadingState(String name, String previous,
+ Function message,
+ ModLoadingPhase phase,
+ Optional> inlineRunnable,
+ Optional transition) implements IModLoadingState {
@Override
- public Optional>> buildTransition(final Executor syncExecutor, final Executor parallelExecutor, Function> preSyncTask, Function> postSyncTask) {
- return transition.map(t->t.build(syncExecutor, parallelExecutor, preSyncTask, postSyncTask));
+ public
+ Optional> buildTransition(final Executor syncExecutor,
+ final Executor parallelExecutor,
+ final Function> preSyncTask,
+ final Function> postSyncTask) {
+ return transition.map(t -> t.build(syncExecutor, parallelExecutor, preSyncTask, postSyncTask));
}
+ /**
+ * {@return an empty mod loading state} The mod loading state has a blank human-readable message, no inline runnable,
+ * and no state transition information.
+ *
+ * @param name the name of the state
+ * @param previous the name of the immediately previous state to this state
+ * @param phase the mod loading phase the state belongs to
+ */
public static ModLoadingState empty(final String name, final String previous, final ModLoadingPhase phase) {
- return new ModLoadingState(name, previous, ml->"", phase, Optional.empty(), Optional.empty());
+ return new ModLoadingState(name, previous, ml -> "", phase, Optional.empty(), Optional.empty());
}
- public static ModLoadingState withTransition(final String name, final String previous, final ModLoadingPhase phase, IModStateTransition transition) {
- return new ModLoadingState(name, previous, ml->"Processing transition "+name, phase, Optional.empty(), Optional.of(transition));
+ /**
+ * Returns a mod loading state with state transition information and a default human-friendly message of
+ * {@code Processing transition [name]}.
+ *
+ * @param name the name of the state
+ * @param previous the name of the immediately previous state to this state
+ * @param phase the mod loading phase the state belongs to
+ * @param transition the state transition information
+ * @return a mod loading state with state transition information and a default message
+ */
+ public static ModLoadingState withTransition(final String name, final String previous, final ModLoadingPhase phase,
+ final IModStateTransition transition) {
+ return new ModLoadingState(name, previous, ml -> "Processing transition " + name, phase, Optional.empty(), Optional.of(transition));
}
- public static ModLoadingState withTransition(final String name, final String previous, final Function message, final ModLoadingPhase phase, IModStateTransition transition) {
+ /**
+ * Returns a mod loading state with state transition information and a custom human-friendly message function.
+ *
+ * @param name the name of the state
+ * @param previous the name of the immediately previous state to this state
+ * @param message a function returning a human-friendly message for this state
+ * @param phase the mod loading phase the state belongs to
+ * @param transition the state transition information
+ * @return a mod loading state with state transition information and a custom message
+ */
+ public static ModLoadingState withTransition(final String name, final String previous,
+ final Function message, final ModLoadingPhase phase,
+ final IModStateTransition transition) {
return new ModLoadingState(name, previous, message, phase, Optional.empty(), Optional.of(transition));
}
- public static ModLoadingState withInline(final String name, final String previous, final ModLoadingPhase phase, Consumer inline) {
- return new ModLoadingState(name, previous, ml->"Processing work "+name, phase, Optional.of(inline), Optional.empty());
+
+ /**
+ * Returns a mod loading state with an inline runnable and a default human-friendly message of {@code Processing
+ * work [name]}.
+ *
+ * @param name the name of the state
+ * @param previous the name of the immediately previous state to this state
+ * @param phase the mod loading phase the state belongs to
+ * @param inline an optional runnable, which runs before starting the transition from this state to the next
+ * @return a mod loading state with an inline runnable and default message
+ */
+ public static ModLoadingState withInline(final String name, final String previous, final ModLoadingPhase phase,
+ final Consumer inline) {
+ return new ModLoadingState(name, previous, ml -> "Processing work " + name, phase, Optional.of(inline), Optional.empty());
}
}
\ No newline at end of file
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java b/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java
index 53a86807d59..8633d78049b 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigFileTypeHandler.java
@@ -10,11 +10,11 @@
import com.electronwill.nightconfig.core.file.FileWatcher;
import com.electronwill.nightconfig.core.io.ParsingException;
import com.electronwill.nightconfig.core.io.WritingMode;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.FMLConfig;
import net.minecraftforge.fml.loading.FMLPaths;
import org.apache.commons.io.FilenameUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.IOException;
import java.nio.file.Files;
@@ -24,7 +24,7 @@
import static net.minecraftforge.fml.config.ConfigTracker.CONFIG;
public class ConfigFileTypeHandler {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
static ConfigFileTypeHandler TOML = new ConfigFileTypeHandler();
private static final Path defaultConfigPath = FMLPaths.GAMEDIR.get().resolve(FMLConfig.defaultConfigPath());
diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java b/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java
index 32904ef5bfe..53107720fce 100644
--- a/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java
+++ b/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java
@@ -7,18 +7,18 @@
import com.electronwill.nightconfig.core.CommentedConfig;
import com.electronwill.nightconfig.core.file.CommentedFileConfig;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.Marker;
-import org.apache.logging.log4j.MarkerManager;
+import com.mojang.logging.LogUtils;
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
import java.nio.file.Path;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class ConfigTracker {
- private static final Logger LOGGER = LogManager.getLogger();
- static final Marker CONFIG = MarkerManager.getMarker("CONFIG");
+ private static final Logger LOGGER = LogUtils.getLogger();
+ static final Marker CONFIG = MarkerFactory.getMarker("CONFIG");
public static final ConfigTracker INSTANCE = new ConfigTracker();
private final ConcurrentHashMap fileMap;
private final EnumMap> configSets;
diff --git a/fmlloader/build.gradle b/fmlloader/build.gradle
index d32b45e915e..2b13f4e2f50 100644
--- a/fmlloader/build.gradle
+++ b/fmlloader/build.gradle
@@ -11,29 +11,34 @@ dependencyUpdates.rejectVersionIf { isNonStable(it.candidate.version) }
configurations.forEach{ it.transitive = false }
dependencies {
- implementation('net.sf.jopt-simple:jopt-simple:5.0.4')
- compileOnly('org.jetbrains:annotations:23.0.0')
+ compileOnly("org.jetbrains:annotations:${JETBRAINS_ANNOTATIONS_VERSION}")
+
api("org.ow2.asm:asm:${ASM_VERSION}")
api("org.ow2.asm:asm-tree:${ASM_VERSION}")
api("org.ow2.asm:asm-commons:${ASM_VERSION}")
- api('net.minecraftforge:forgespi:4.0.+')
- api('org.apache.logging.log4j:log4j-api:2.17.0')
- api('org.slf4j:slf4j-api:1.8.0-beta4')
- api('com.google.guava:guava:21.0')
- api('com.google.code.gson:gson:2.8.9')
- api('org.apache.maven:maven-artifact:3.8.1')
- api('org.apache.commons:commons-lang3:3.12.0')
- api('com.electronwill.night-config:core:3.6.4')
- api('com.electronwill.night-config:toml:3.6.4')
- api('cpw.mods:modlauncher:9.0.+')
- api('net.minecraftforge:coremods:5.0.+')
+ api("net.minecraftforge:forgespi:${SPI_VERSION}")
+ api("org.apache.logging.log4j:log4j-api:${LOG4J_VERSION}")
+ api("org.slf4j:slf4j-api:${SLF4J_API_VERSION}")
+ api("com.google.guava:guava:${GUAVA_VERSION}")
+ api("com.google.code.gson:gson:${GSON_VERSION}")
+ api("org.apache.maven:maven-artifact:${APACHE_MAVEN_ARTIFACT_VERSION}")
+ api("org.apache.commons:commons-lang3:${APACHE_COMMONS_LANG3_VERSION}")
+ api("com.electronwill.night-config:core:${NIGHTCONFIG_VERSION}")
+ api("com.electronwill.night-config:toml:${NIGHTCONFIG_VERSION}")
+ api("cpw.mods:modlauncher:${MODLAUNCHER_VERSION}")
+ api("net.minecraftforge:coremods:${COREMODS_VERSION}")
+ api("com.mojang:logging:${MOJANG_LOGGING_VERSION}")
+
+ implementation("net.sf.jopt-simple:jopt-simple:${JOPT_SIMPLE_VERSION}")
implementation("cpw.mods:securejarhandler:${SECUREJARHANDLER_VERSION}")
- implementation('org.apache.logging.log4j:log4j-core:2.17.0')
- annotationProcessor('org.apache.logging.log4j:log4j-core:2.17.0')
- implementation('net.minecraftforge:accesstransformers:8.0.4')
- implementation('net.minecrell:terminalconsoleappender:1.2.0')
-// implementation('org.jline:jline:3.12.+')
- testCompileOnly('org.jetbrains:annotations:21.0.0')
+ implementation("net.minecraftforge:accesstransformers:${ACCESSTRANSFORMERS_VERSION}")
+ implementation("net.minecrell:terminalconsoleappender:${TERMINALCONSOLEAPPENDER_VERSION}")
+ // implementation("org.jline:jline:${JLINE_VERSION}")
+
+ implementation("org.apache.logging.log4j:log4j-core:${LOG4J_VERSION}")
+ annotationProcessor("org.apache.logging.log4j:log4j-core:${LOG4J_VERSION}")
+
+ testCompileOnly("org.jetbrains:annotations:${JETBRAINS_ANNOTATIONS_VERSION}")
testRuntimeOnly("cpw.mods:bootstraplauncher:${BOOTSTRAPLAUNCHER_VERSION}")
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/ObjectHolderDefinalize.java b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/ObjectHolderDefinalize.java
index 776c8784cc6..1337ec2f468 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/ObjectHolderDefinalize.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/ObjectHolderDefinalize.java
@@ -7,7 +7,11 @@
import java.util.EnumSet;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
@@ -20,7 +24,17 @@
* Will also de-finalize all fields in on class level annotations.
*/
public class ObjectHolderDefinalize implements ILaunchPluginService {
-
+ // Hardcoded map of vanilla classes that should have object holders for each field of the given registry type.
+ // IMPORTANT: Updates to this collection must be reflected in ObjectHolderRegistry. Duplicated cuz classloaders, yay!
+ // Classnames are validated in ObjectHolderRegistry.
+ private static final Map VANILLA_OBJECT_HOLDERS = Stream.of(
+ new VanillaObjectHolderData("net.minecraft.world.level.block.Blocks", "block", "net.minecraft.world.level.block.Block"),
+ new VanillaObjectHolderData("net.minecraft.world.item.Items", "item", "net.minecraft.world.item.Item"),
+ new VanillaObjectHolderData("net.minecraft.world.item.enchantment.Enchantments", "enchantment", "net.minecraft.world.item.enchantment.Enchantment"),
+ new VanillaObjectHolderData("net.minecraft.world.effect.MobEffects", "mob_effect", "net.minecraft.world.effect.MobEffect"),
+ new VanillaObjectHolderData("net.minecraft.core.particles.ParticleTypes", "particle_type", "net.minecraft.core.particles.ParticleType"),
+ new VanillaObjectHolderData("net.minecraft.sounds.SoundEvents", "sound_event", "net.minecraft.sounds.SoundEvent")
+ ).collect(Collectors.toMap(VanillaObjectHolderData::holderClass, Function.identity()));
private final String OBJECT_HOLDER = "Lnet/minecraftforge/registries/ObjectHolder;"; //Don't directly reference this to prevent class loading.
@Override
@@ -28,7 +42,6 @@ public String name() {
return "object_holder_definalize";
}
-
private static final EnumSet YAY = EnumSet.of(Phase.AFTER);
private static final EnumSet NAY = EnumSet.noneOf(Phase.class);
@@ -73,10 +86,8 @@ public int processClassWithFlags(final Phase phase, final ClassNode classNode, f
changes.compareAndSet(false, prev != f.access);
});
- if (hasHolder(classNode.visibleAnnotations)) //Class level, de-finalize all fields and add @ObjectHolder to them!
+ if (VANILLA_OBJECT_HOLDERS.containsKey(classType.getClassName())) //Class level, de-finalize all fields and add @ObjectHolder to them!
{
- @SuppressWarnings("unused")
- String value = getValue(classNode.visibleAnnotations);
classNode.fields.stream().filter(f -> ((f.access & flags) == flags) && f.desc.startsWith("L")).forEach(f ->
{
int prev = f.access;
@@ -95,4 +106,5 @@ public int processClassWithFlags(final Phase phase, final ClassNode classNode, f
return changes.get() ? ComputeFlags.SIMPLE_REWRITE : ComputeFlags.NO_REWRITE;
}
+ private record VanillaObjectHolderData(String holderClass, String registryName, String registryType) {}
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java
index 41869e1ee1b..f92012eca74 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java
@@ -9,9 +9,7 @@
import java.util.List;
import java.util.stream.Collectors;
-import net.minecraftforge.fml.loading.AdvancedLogMessageAdapter;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.mojang.logging.LogUtils;
import org.objectweb.asm.Label;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
@@ -21,6 +19,9 @@
import org.objectweb.asm.tree.MethodNode;
import cpw.mods.modlauncher.serviceapi.ILaunchPluginService;
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
/**
* Modifies specified enums to allow runtime extension by making the $VALUES field non-final and
@@ -28,7 +29,7 @@
*/
public class RuntimeEnumExtender implements ILaunchPluginService {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final Type STRING = Type.getType(String.class);
private final Type ENUM = Type.getType(Enum.class);
private final Type MARKER_IFACE = Type.getType("Lnet/minecraftforge/common/IExtensibleEnum;");
@@ -63,43 +64,49 @@ public int processClassWithFlags(final Phase phase, final ClassNode classNode, f
final int flags = Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL | Opcodes.ACC_SYNTHETIC;
FieldNode values = classNode.fields.stream().filter(f -> f.desc.contentEquals(array.getDescriptor()) && ((f.access & flags) == flags)).findFirst().orElse(null);
-
+
if (!classNode.interfaces.contains(MARKER_IFACE.getInternalName())) {
return ComputeFlags.NO_REWRITE;
}
-
+
//Static methods named "create" with first argument as a string
List candidates = classNode.methods.stream()
.filter(m -> ((m.access & Opcodes.ACC_STATIC) != 0) && m.name.equals("create"))
.collect(Collectors.toList());
-
+
if (candidates.isEmpty()) {
throw new IllegalStateException("IExtensibleEnum has no candidate factory methods: " + classType.getClassName());
}
-
+
candidates.forEach(mtd ->
{
Type[] args = Type.getArgumentTypes(mtd.desc);
if (args.length == 0 || !args[0].equals(STRING)) {
- LOGGER.fatal(()->new AdvancedLogMessageAdapter(sb-> {
+ if (LOGGER.isErrorEnabled(LogUtils.FATAL_MARKER))
+ {
+ StringBuilder sb = new StringBuilder();
sb.append("Enum has create method without String as first parameter:\n");
sb.append(" Enum: ").append(classType.getDescriptor()).append("\n");
sb.append(" Target: ").append(mtd.name).append(mtd.desc).append("\n");
- }));
+ LOGGER.error(LogUtils.FATAL_MARKER, sb.toString());
+ }
throw new IllegalStateException("Enum has create method without String as first parameter: " + mtd.name + mtd.desc);
}
Type ret = Type.getReturnType(mtd.desc);
if (!ret.equals(classType)) {
- LOGGER.fatal(()->new AdvancedLogMessageAdapter(sb-> {
+ if (LOGGER.isErrorEnabled(LogUtils.FATAL_MARKER))
+ {
+ StringBuilder sb = new StringBuilder();
sb.append("Enum has create method with incorrect return type:\n");
sb.append(" Enum: ").append(classType.getDescriptor()).append("\n");
sb.append(" Target: ").append(mtd.name).append(mtd.desc).append("\n");
sb.append(" Found: ").append(ret.getClassName()).append(", Expected: ").append(classType.getClassName());
- }));
+ LOGGER.error(LogUtils.FATAL_MARKER, sb.toString());
+ }
throw new IllegalStateException("Enum has create method with incorrect return type: " + mtd.name + mtd.desc);
}
-
+
Type[] ctrArgs = new Type[args.length + 1];
ctrArgs[0] = STRING;
ctrArgs[1] = Type.INT_TYPE;
@@ -111,23 +118,29 @@ public int processClassWithFlags(final Phase phase, final ClassNode classNode, f
MethodNode ctr = classNode.methods.stream().filter(m -> m.name.equals("") && m.desc.equals(desc)).findFirst().orElse(null);
if (ctr == null)
{
- LOGGER.fatal(()->new AdvancedLogMessageAdapter(sb-> {
+ if (LOGGER.isErrorEnabled(LogUtils.FATAL_MARKER))
+ {
+ StringBuilder sb = new StringBuilder();
sb.append("Enum has create method with no matching constructor:\n");
sb.append(" Enum: ").append(classType.getDescriptor()).append("\n");
sb.append(" Candidate: ").append(mtd.desc).append("\n");
sb.append(" Target: ").append(desc).append("\n");
classNode.methods.stream().filter(m -> m.name.equals("")).forEach(m -> sb.append(" : ").append(m.desc).append("\n"));
- }));
+ LOGGER.error(LogUtils.FATAL_MARKER, sb.toString());
+ }
throw new IllegalStateException("Enum has create method with no matching constructor: " + desc);
}
if (values == null)
{
- LOGGER.fatal(()->new AdvancedLogMessageAdapter(sb-> {
+ if (LOGGER.isErrorEnabled(LogUtils.FATAL_MARKER))
+ {
+ StringBuilder sb = new StringBuilder();
sb.append("Enum has create method but we could not find $VALUES. Found:\n");
classNode.fields.stream().filter(f -> (f.access & Opcodes.ACC_STATIC) != 0).
forEach(m -> sb.append(" ").append(m.name).append(" ").append(m.desc).append("\n"));
- }));
+ LOGGER.error(LogUtils.FATAL_MARKER, sb.toString());
+ }
throw new IllegalStateException("Enum has create method but we could not find $VALUES");
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/AdvancedLogMessageAdapter.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/AdvancedLogMessageAdapter.java
deleted file mode 100644
index 97829ae940b..00000000000
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/AdvancedLogMessageAdapter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) Forge Development LLC and contributors
- * SPDX-License-Identifier: LGPL-2.1-only
- */
-
-package net.minecraftforge.fml.loading;
-
-import org.apache.logging.log4j.message.Message;
-import org.apache.logging.log4j.util.StringBuilderFormattable;
-
-import java.util.function.Consumer;
-
-public class AdvancedLogMessageAdapter implements Message, StringBuilderFormattable {
- private static final long serialVersionUID = -8291754833965087436L;
-
- private static final Object[] EMPTY = new Object[0];
-
- private final Consumer logMessageBuilder;
-
- public AdvancedLogMessageAdapter(final Consumer logMessageBuilder) {
- this.logMessageBuilder = logMessageBuilder;
- }
-
- @Override
- public String getFormattedMessage() {
- return "";
- }
-
- @Override
- public String getFormat() {
- return "";
- }
-
- @Override
- public Object[] getParameters() {
- return EMPTY;
- }
-
- @Override
- public Throwable getThrowable() {
- return null;
- }
-
- @Override
- public void formatTo(final StringBuilder buffer) {
- logMessageBuilder.accept(buffer);
- }
-}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLConfig.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLConfig.java
index 85c2069e68c..62a23d04dc9 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLConfig.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLConfig.java
@@ -10,8 +10,8 @@
import com.electronwill.nightconfig.core.file.FileNotFoundAction;
import com.electronwill.nightconfig.core.io.ParsingException;
import com.electronwill.nightconfig.core.io.WritingMode;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.mojang.logging.LogUtils;
+import org.slf4j.Logger;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -21,7 +21,7 @@
public class FMLConfig
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private static FMLConfig INSTANCE = new FMLConfig();
private static ConfigSpec configSpec = new ConfigSpec();
static {
@@ -60,11 +60,14 @@ public static void load()
{
final Path configFile = FMLPaths.FMLCONFIG.get();
INSTANCE.loadFrom(configFile);
- LOGGER.trace(CORE, "Loaded FML config from {}", FMLPaths.FMLCONFIG.get());
- LOGGER.trace(CORE, "Splash screen is {}", FMLConfig::splashScreenEnabled);
- LOGGER.trace(CORE, "Max threads for mod loading computed at {}", FMLConfig::loadingThreadCount);
- LOGGER.trace(CORE, "Version check is {}", FMLConfig::runVersionCheck);
- LOGGER.trace(CORE, "Default config paths at {}", FMLConfig::defaultConfigPath);
+ if (LOGGER.isTraceEnabled(CORE))
+ {
+ LOGGER.trace(CORE, "Loaded FML config from {}", FMLPaths.FMLCONFIG.get());
+ LOGGER.trace(CORE, "Splash screen is {}", FMLConfig.splashScreenEnabled());
+ LOGGER.trace(CORE, "Max threads for mod loading computed at {}", FMLConfig.loadingThreadCount());
+ LOGGER.trace(CORE, "Version check is {}", FMLConfig.runVersionCheck());
+ LOGGER.trace(CORE, "Default config paths at {}", FMLConfig.defaultConfigPath());
+ }
FMLPaths.getOrCreateGameRelativePath(Paths.get(FMLConfig.defaultConfigPath()), "default config directory");
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java
index 52939c4a3c2..7cf191366f3 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java
@@ -5,6 +5,7 @@
package net.minecraftforge.fml.loading;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.Launcher;
import cpw.mods.modlauncher.api.*;
import cpw.mods.modlauncher.serviceapi.ILaunchPluginService;
@@ -21,8 +22,7 @@
import net.minecraftforge.forgespi.Environment;
import net.minecraftforge.forgespi.coremod.ICoreModProvider;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -35,7 +35,7 @@
public class FMLLoader
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private static AccessTransformerService accessTransformer;
private static ModDiscoverer modDiscoverer;
private static ICoreModProvider coreModProvider;
@@ -62,47 +62,47 @@ static void onInitialLoad(IEnvironment environment, Set otherServices) t
final Package modLauncherPackage = ITransformationService.class.getPackage();
LOGGER.debug(CORE,"FML found ModLauncher version : {}", modLauncherPackage.getImplementationVersion());
if (!modLauncherPackage.isCompatibleWith("4.0")) {
- LOGGER.fatal(CORE,"Found incompatible ModLauncher specification : {}, version {} from {}", modLauncherPackage.getSpecificationVersion(), modLauncherPackage.getImplementationVersion(), modLauncherPackage.getImplementationVendor());
+ LOGGER.error(CORE, "Found incompatible ModLauncher specification : {}, version {} from {}", modLauncherPackage.getSpecificationVersion(), modLauncherPackage.getImplementationVersion(), modLauncherPackage.getImplementationVendor());
throw new IncompatibleEnvironmentException("Incompatible modlauncher found "+modLauncherPackage.getSpecificationVersion());
}
accessTransformer = (AccessTransformerService) environment.findLaunchPlugin("accesstransformer").orElseThrow(()-> {
- LOGGER.fatal(CORE,"Access Transformer library is missing, we need this to run");
+ LOGGER.error(CORE, "Access Transformer library is missing, we need this to run");
return new IncompatibleEnvironmentException("Missing AccessTransformer, cannot run");
});
final Package atPackage = accessTransformer.getClass().getPackage();
LOGGER.debug(CORE,"FML found AccessTransformer version : {}", atPackage.getImplementationVersion());
if (!atPackage.isCompatibleWith("1.0")) {
- LOGGER.fatal(CORE,"Found incompatible AccessTransformer specification : {}, version {} from {}", atPackage.getSpecificationVersion(), atPackage.getImplementationVersion(), atPackage.getImplementationVendor());
+ LOGGER.error(CORE, "Found incompatible AccessTransformer specification : {}, version {} from {}", atPackage.getSpecificationVersion(), atPackage.getImplementationVersion(), atPackage.getImplementationVendor());
throw new IncompatibleEnvironmentException("Incompatible accesstransformer found "+atPackage.getSpecificationVersion());
}
eventBus = environment.findLaunchPlugin("eventbus").orElseThrow(()-> {
- LOGGER.fatal(CORE,"Event Bus library is missing, we need this to run");
+ LOGGER.error(CORE, "Event Bus library is missing, we need this to run");
return new IncompatibleEnvironmentException("Missing EventBus, cannot run");
});
final Package eventBusPackage = eventBus.getClass().getPackage();
LOGGER.debug(CORE,"FML found EventBus version : {}", eventBusPackage.getImplementationVersion());
if (!eventBusPackage.isCompatibleWith("1.0")) {
- LOGGER.fatal(CORE,"Found incompatible EventBus specification : {}, version {} from {}", eventBusPackage.getSpecificationVersion(), eventBusPackage.getImplementationVersion(), eventBusPackage.getImplementationVendor());
+ LOGGER.error(CORE, "Found incompatible EventBus specification : {}, version {} from {}", eventBusPackage.getSpecificationVersion(), eventBusPackage.getImplementationVersion(), eventBusPackage.getImplementationVendor());
throw new IncompatibleEnvironmentException("Incompatible eventbus found "+eventBusPackage.getSpecificationVersion());
}
runtimeDistCleaner = (RuntimeDistCleaner)environment.findLaunchPlugin("runtimedistcleaner").orElseThrow(()-> {
- LOGGER.fatal(CORE,"Dist Cleaner is missing, we need this to run");
+ LOGGER.error(CORE, "Dist Cleaner is missing, we need this to run");
return new IncompatibleEnvironmentException("Missing DistCleaner, cannot run!");
});
LOGGER.debug(CORE, "Found Runtime Dist Cleaner");
- var coreModProviders = ServiceLoaderUtils.streamWithErrorHandling(ServiceLoader.load(FMLLoader.class.getModule().getLayer(), ICoreModProvider.class), sce -> LOGGER.fatal(CORE, "Failed to load a coremod library, expect problems", sce)).toList();
+ var coreModProviders = ServiceLoaderUtils.streamWithErrorHandling(ServiceLoader.load(FMLLoader.class.getModule().getLayer(), ICoreModProvider.class), sce -> LOGGER.error(CORE, "Failed to load a coremod library, expect problems", sce)).toList();
if (coreModProviders.isEmpty()) {
- LOGGER.fatal(CORE, "Found no coremod provider. Cannot run");
+ LOGGER.error(CORE, "Found no coremod provider. Cannot run");
throw new IncompatibleEnvironmentException("No coremod library found");
} else if (coreModProviders.size() > 1) {
- LOGGER.fatal(CORE, "Found multiple coremod providers : {}. Cannot run", coreModProviders.stream().map(p -> p.getClass().getName()).collect(Collectors.toList()));
+ LOGGER.error(CORE, "Found multiple coremod providers : {}. Cannot run", coreModProviders.stream().map(p -> p.getClass().getName()).collect(Collectors.toList()));
throw new IncompatibleEnvironmentException("Multiple coremod libraries found");
}
@@ -114,7 +114,7 @@ static void onInitialLoad(IEnvironment environment, Set otherServices) t
LOGGER.debug(CORE, "Found ForgeSPI package implementation version {}", Environment.class.getPackage().getImplementationVersion());
LOGGER.debug(CORE, "Found ForgeSPI package specification {}", Environment.class.getPackage().getSpecificationVersion());
if (Integer.parseInt(Environment.class.getPackage().getSpecificationVersion()) < 2) {
- LOGGER.fatal(CORE, "Found an out of date ForgeSPI implementation: {}, loading cannot continue", Environment.class.getPackage().getSpecificationVersion());
+ LOGGER.error(CORE, "Found an out of date ForgeSPI implementation: {}, loading cannot continue", Environment.class.getPackage().getSpecificationVersion());
throw new IncompatibleEnvironmentException("ForgeSPI is out of date, we cannot continue");
}
@@ -122,7 +122,7 @@ static void onInitialLoad(IEnvironment environment, Set otherServices) t
Class.forName("com.electronwill.nightconfig.core.Config", false, environment.getClass().getClassLoader());
Class.forName("com.electronwill.nightconfig.toml.TomlFormat", false, environment.getClass().getClassLoader());
} catch (ClassNotFoundException e) {
- LOGGER.fatal(CORE, "Failed to load NightConfig");
+ LOGGER.error(CORE, "Failed to load NightConfig");
throw new IncompatibleEnvironmentException("Missing NightConfig");
}
}
@@ -134,12 +134,12 @@ static void setupLaunchHandler(final IEnvironment environment, final Map launchHandler = environment.findLaunchHandler(launchTarget);
LOGGER.debug(CORE, "Using {} as launch service", launchTarget);
if (launchHandler.isEmpty()) {
- LOGGER.fatal(CORE,"Missing LaunchHandler {}, cannot continue", launchTarget);
+ LOGGER.error(CORE, "Missing LaunchHandler {}, cannot continue", launchTarget);
throw new RuntimeException("Missing launch handler: " + launchTarget);
}
if (!(launchHandler.get() instanceof CommonLaunchHandler)) {
- LOGGER.fatal(CORE, "Incompatible Launch handler found - type {}, cannot continue", launchHandler.get().getClass().getName());
+ LOGGER.error(CORE, "Incompatible Launch handler found - type {}, cannot continue", launchHandler.get().getClass().getName());
throw new RuntimeException("Incompatible launch handler found");
}
commonLaunchHandler = (CommonLaunchHandler)launchHandler.get();
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLPaths.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLPaths.java
index 8c5bbd2b16e..91b51288530 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLPaths.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLPaths.java
@@ -5,9 +5,9 @@
package net.minecraftforge.fml.loading;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.IEnvironment;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -22,7 +22,7 @@ public enum FMLPaths
CONFIGDIR("config"),
FMLCONFIG(false, CONFIGDIR, "fml.toml");
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final Path relativePath;
private final boolean isDirectory;
private Path absolutePath;
@@ -61,7 +61,10 @@ public static void loadAbsolutePaths(Path rootPath)
{
FileUtils.getOrCreateDirectory(path.absolutePath, path.name());
}
- LOGGER.debug(CORE,"Path {} is {}", ()-> path, ()-> path.absolutePath);
+ if (LOGGER.isDebugEnabled(CORE))
+ {
+ LOGGER.debug(CORE, "Path {} is {}", path, path.absolutePath);
+ }
}
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLServiceProvider.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLServiceProvider.java
index de6134b379e..e8647f17f5c 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLServiceProvider.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLServiceProvider.java
@@ -5,14 +5,14 @@
package net.minecraftforge.fml.loading;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.*;
import joptsimple.ArgumentAcceptingOptionSpec;
import joptsimple.OptionSpecBuilder;
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
import net.minecraftforge.forgespi.Environment;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
import java.util.ArrayList;
import java.util.Arrays;
@@ -26,7 +26,7 @@
public class FMLServiceProvider implements ITransformationService
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private ArgumentAcceptingOptionSpec modsOption;
private ArgumentAcceptingOptionSpec modListsOption;
private ArgumentAcceptingOptionSpec mavenRootsOption;
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FileUtils.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FileUtils.java
index 554ccc87ba6..7cc66b9dd30 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FileUtils.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FileUtils.java
@@ -5,8 +5,8 @@
package net.minecraftforge.fml.loading;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.mojang.logging.LogUtils;
+import org.slf4j.Logger;
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
@@ -17,7 +17,7 @@
public class FileUtils
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
public static Path getOrCreateDirectory(Path dirPath, String dirLabel) {
if (!Files.isDirectory(dirPath.getParent())) {
@@ -25,20 +25,20 @@ public static Path getOrCreateDirectory(Path dirPath, String dirLabel) {
}
if (!Files.isDirectory(dirPath))
{
- LOGGER.debug(CORE,"Making {} directory : {}", dirLabel, dirPath);
+ LOGGER.debug(CORE, "Making {} directory : {}", dirLabel, dirPath);
try {
Files.createDirectory(dirPath);
} catch (IOException e) {
if (e instanceof FileAlreadyExistsException) {
- LOGGER.fatal(CORE,"Failed to create {} directory - there is a file in the way", dirLabel);
+ LOGGER.error(CORE, "Failed to create {} directory - there is a file in the way", dirLabel);
} else {
- LOGGER.fatal(CORE,"Problem with creating {} directory (Permissions?)", dirLabel, e);
+ LOGGER.error(CORE, "Problem with creating {} directory (Permissions?)", dirLabel, e);
}
throw new RuntimeException("Problem creating directory", e);
}
- LOGGER.debug(CORE,"Created {} directory : {}", dirLabel, dirPath);
+ LOGGER.debug(CORE, "Created {} directory : {}", dirLabel, dirPath);
} else {
- LOGGER.debug(CORE,"Found existing {} directory : {}", dirLabel, dirPath);
+ LOGGER.debug(CORE, "Found existing {} directory : {}", dirLabel, dirPath);
}
return dirPath;
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java
index 3e1cb03cbfd..da4ef9cdd4b 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java
@@ -5,6 +5,7 @@
package net.minecraftforge.fml.loading;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.Launcher;
import cpw.mods.modlauncher.api.IModuleLayerManager;
import cpw.mods.modlauncher.util.ServiceLoaderUtils;
@@ -12,11 +13,10 @@
import net.minecraftforge.forgespi.language.IModLanguageProvider;
import net.minecraftforge.fml.loading.moddiscovery.ExplodedDirectoryLocator;
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.artifact.versioning.VersionRange;
+import org.slf4j.Logger;
import java.net.URISyntaxException;
import java.nio.file.Files;
@@ -38,7 +38,7 @@
public class LanguageLoadingProvider
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final List languageProviders = new ArrayList<>();
private final ServiceLoader serviceLoader;
private final Map languageProviderMap = new HashMap<>();
@@ -81,7 +81,7 @@ public IModLanguageProvider getModLanguageProvider()
loadLanguageProviders();
}
private void loadLanguageProviders() {
- LOGGER.debug(CORE, "Found {} language providers", ServiceLoaderUtils.streamServiceLoader(()->serviceLoader, sce->LOGGER.fatal("Problem with language loaders")).count());
+ LOGGER.debug(CORE, "Found {} language providers", ServiceLoaderUtils.streamServiceLoader(()->serviceLoader, sce->LOGGER.error("Problem with language loaders")).count());
serviceLoader.forEach(languageProviders::add);
languageProviders.forEach(lp -> {
@@ -94,7 +94,7 @@ private void loadLanguageProviders() {
Optional implementationVersion = JarVersionLookupHandler.getImplementationVersion(lp.getClass());
String impl = implementationVersion.orElse(Files.isDirectory(lpPath) ? FMLLoader.versionInfo().forgeVersion().split("\\.")[0] : null);
if (impl == null) {
- LOGGER.fatal(CORE, "Found unversioned language provider {}", lp.name());
+ LOGGER.error(CORE, "Found unversioned language provider {}", lp.name());
throw new RuntimeException("Failed to find implementation version for language provider "+ lp.name());
}
LOGGER.debug(CORE, "Found language provider {}, version {}", lp.name(), impl);
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LauncherVersion.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LauncherVersion.java
index c3edd08574d..02355687e17 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LauncherVersion.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LauncherVersion.java
@@ -5,13 +5,13 @@
package net.minecraftforge.fml.loading;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.mojang.logging.LogUtils;
+import org.slf4j.Logger;
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
public class LauncherVersion {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private static final String launcherVersion;
static {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LibraryFinder.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LibraryFinder.java
index 31a0e44183d..c8cdcea41a7 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LibraryFinder.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LibraryFinder.java
@@ -5,14 +5,14 @@
package net.minecraftforge.fml.loading;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.mojang.logging.LogUtils;
+import org.slf4j.Logger;
import java.nio.file.Files;
import java.nio.file.Path;
public class LibraryFinder {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private static Path libsPath;
static Path findLibsPath() {
if (libsPath == null) {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LogMarkers.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LogMarkers.java
index e8f5c3aa494..63e68352a17 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LogMarkers.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LogMarkers.java
@@ -5,12 +5,12 @@
package net.minecraftforge.fml.loading;
-import org.apache.logging.log4j.Marker;
-import org.apache.logging.log4j.MarkerManager;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
public class LogMarkers {
- public static final Marker CORE = MarkerManager.getMarker("CORE");
- public static final Marker LOADING = MarkerManager.getMarker("LOADING");
- public static final Marker SCAN = MarkerManager.getMarker("SCAN");
- public static final Marker SPLASH = MarkerManager.getMarker("SPLASH");
+ public static final Marker CORE = MarkerFactory.getMarker("CORE");
+ public static final Marker LOADING = MarkerFactory.getMarker("LOADING");
+ public static final Marker SCAN = MarkerFactory.getMarker("SCAN");
+ public static final Marker SPLASH = MarkerFactory.getMarker("SPLASH");
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/MCPNamingService.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/MCPNamingService.java
index 17bdb3d4d1e..767bdfa1ecc 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/MCPNamingService.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/MCPNamingService.java
@@ -5,10 +5,10 @@
package net.minecraftforge.fml.loading;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.INameMappingService;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.BufferedReader;
import java.io.IOException;
@@ -20,7 +20,7 @@
import java.util.function.BiFunction;
public class MCPNamingService implements INameMappingService {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private HashMap methods;
private HashMap fields;
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.java
index 925c6bf2ec8..62b167146d0 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.java
@@ -5,10 +5,11 @@
package net.minecraftforge.fml.loading;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
import cpw.mods.modlauncher.api.NamedPath;
import cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService;
-import org.apache.logging.log4j.LogManager;
+import org.slf4j.Logger;
import java.io.File;
import java.io.IOException;
@@ -19,6 +20,8 @@
import java.util.zip.ZipFile;
public class ModDirTransformerDiscoverer implements ITransformerDiscoveryService {
+ private static final Logger LOGGER = LogUtils.getLogger();
+
@Override
public List candidates(final Path gameDirectory) {
ModDirTransformerDiscoverer.scan(gameDirectory);
@@ -40,7 +43,7 @@ private static void scan(final Path gameDirectory) {
try (var walk = Files.walk(modsDir, 1)){
walk.forEach(ModDirTransformerDiscoverer::visitFile);
} catch (IOException | IllegalStateException ioe) {
- LogManager.getLogger().error("Error during early discovery", ioe);
+ LOGGER.error("Error during early discovery", ioe);
}
}
@@ -55,7 +58,7 @@ private static void visitFile(Path path) {
found.add(new NamedPath(zf.getName(), path));
}
} catch (IOException ioe) {
- LogManager.getLogger().error("Zip Error when loading jar file {}", path, ioe);
+ LOGGER.error("Zip Error when loading jar file {}", path, ioe);
}
}
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModJarURLHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModJarURLHandler.java
index 1326824b8ab..19b8220b7ec 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModJarURLHandler.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModJarURLHandler.java
@@ -5,9 +5,9 @@
package net.minecraftforge.fml.loading;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.IOException;
import java.io.InputStream;
@@ -24,7 +24,7 @@
public class ModJarURLHandler extends URLStreamHandler
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
// modjar://modid/path/to/file
@Override
protected URLConnection openConnection(URL url) {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java
index b20f161182d..0332596f3fa 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java
@@ -7,6 +7,7 @@
import com.google.common.graph.GraphBuilder;
import com.google.common.graph.MutableGraph;
+import com.mojang.logging.LogUtils;
import cpw.mods.jarhandling.SecureJar;
import net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator;
import net.minecraftforge.forgespi.language.IModFileInfo;
@@ -18,10 +19,9 @@
import net.minecraftforge.fml.loading.toposort.CyclePresentException;
import net.minecraftforge.fml.loading.toposort.TopologicalSort;
import net.minecraftforge.forgespi.locating.IModFile;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.slf4j.Logger;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
@@ -35,7 +35,7 @@
public class ModSorter
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private List modFiles;
private List sortedList;
private Map modIdNameLookup;
@@ -98,11 +98,10 @@ private void sort()
catch (CyclePresentException e)
{
Set> cycles = e.getCycles();
- LOGGER.error(LOADING, () -> new AdvancedLogMessageAdapter(buffer ->
- buffer.append("Mod Sorting failed.\n")
- .append("Detected Cycles: ")
- .append(cycles)
- .append('\n')));
+ if (LOGGER.isErrorEnabled(LOADING))
+ {
+ LOGGER.error(LOADING, "Mod Sorting failed.\nDetected Cycles: {}\n", cycles);
+ }
var dataList = cycles.stream()
.mapMulti(Iterable::forEach)
.mapMulti((mf,c)->mf.getMods().forEach(c))
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java
index 3b2e9fcf4c5..40b1ced3181 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java
@@ -16,14 +16,11 @@
import java.util.stream.Collectors;
import com.google.common.collect.Streams;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.serviceapi.ILaunchPluginService;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.api.distmarker.OnlyIns;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.Marker;
-import org.apache.logging.log4j.MarkerManager;
import org.objectweb.asm.Handle;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
@@ -33,11 +30,14 @@
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldNode;
import org.objectweb.asm.tree.MethodNode;
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
public class RuntimeDistCleaner implements ILaunchPluginService
{
- private static final Logger LOGGER = LogManager.getLogger();
- private static final Marker DISTXFORM = MarkerManager.getMarker("DISTXFORM");
+ private static final Logger LOGGER = LogUtils.getLogger();
+ private static final Marker DISTXFORM = MarkerFactory.getMarker("DISTXFORM");
private static String DIST;
private static final String ONLYIN = Type.getDescriptor(OnlyIn.class);
private static final String ONLYINS = Type.getDescriptor(OnlyIns.class);
@@ -53,7 +53,7 @@ public int processClassWithFlags(final Phase phase, final ClassNode classNode, f
AtomicBoolean changes = new AtomicBoolean();
if (remove(classNode.visibleAnnotations, DIST))
{
- LOGGER.fatal(DISTXFORM, "Attempted to load class {} for invalid dist {}", classNode.name, DIST);
+ LOGGER.error(DISTXFORM, "Attempted to load class {} for invalid dist {}", classNode.name, DIST);
throw new RuntimeException("Attempted to load class "+ classNode.name + " for invalid dist "+ DIST);
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/TracingPrintStream.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/TracingPrintStream.java
index 030b187b61b..cc84df2b94d 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/TracingPrintStream.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/TracingPrintStream.java
@@ -5,8 +5,7 @@
package net.minecraftforge.fml.loading;
-import org.apache.logging.log4j.Logger;
-
+import org.slf4j.Logger;
import java.io.PrintStream;
/**
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractJarFileLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractJarFileLocator.java
index 0f70a6cb038..14b0c885917 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractJarFileLocator.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractJarFileLocator.java
@@ -5,32 +5,23 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import cpw.mods.jarhandling.SecureJar;
-import cpw.mods.jarhandling.JarMetadata;
-import net.minecraftforge.fml.loading.LogMarkers;
-import net.minecraftforge.forgespi.language.IConfigurable;
-import net.minecraftforge.forgespi.language.IModFileInfo;
-import net.minecraftforge.forgespi.language.IModInfo;
-import net.minecraftforge.forgespi.locating.IModFile;
-import net.minecraftforge.forgespi.locating.IModLocator;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
-import java.util.jar.Manifest;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import net.minecraftforge.fml.loading.LogMarkers;
+import net.minecraftforge.forgespi.locating.IModFile;
+import org.slf4j.Logger;
public abstract class AbstractJarFileLocator extends AbstractModLocator {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
@Override
public void scanFile(final IModFile file, final Consumer pathConsumer) {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModLocator.java
index 51c8c71cabe..97b9a3ddc25 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModLocator.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/AbstractModLocator.java
@@ -5,6 +5,7 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import cpw.mods.jarhandling.JarMetadata;
import cpw.mods.jarhandling.SecureJar;
import net.minecraftforge.fml.loading.LogMarkers;
@@ -13,8 +14,7 @@
import net.minecraftforge.forgespi.language.IModInfo;
import net.minecraftforge.forgespi.locating.IModFile;
import net.minecraftforge.forgespi.locating.IModLocator;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.nio.file.Path;
import java.util.Collections;
@@ -25,7 +25,7 @@
import java.util.jar.Manifest;
public abstract class AbstractModLocator implements IModLocator {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
protected static final String MODS_TOML = "META-INF/mods.toml";
protected static final String MANIFEST = "META-INF/MANIFEST.MF";
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java
index f2f56ceb7bf..c4550454b74 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java
@@ -5,11 +5,11 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.LoadingModList;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.forgespi.language.ModFileScanData;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.time.Duration;
import java.time.Instant;
@@ -28,7 +28,7 @@ private enum ScanStatus {
ERRORED
}
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final ExecutorService modContentScanner;
private final List pendingFiles;
private final List scannedFiles;
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java
index cf19b284084..0283bf3b010 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java
@@ -5,9 +5,9 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.LogMarkers;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.File;
import java.io.IOException;
@@ -25,7 +25,7 @@
import java.util.stream.Stream;
public class ClasspathLocator extends AbstractJarFileLocator {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final List legacyClasspath = Arrays.stream(System.getProperty("legacyClassPath", "").split(File.pathSeparator)).map(Path::of).toList();
private boolean enabled = false;
@@ -48,7 +48,7 @@ public Stream scanCandidates() {
return paths.build();
} catch (IOException e) {
- LOGGER.fatal(LogMarkers.SCAN, "Error trying to find resources", e);
+ LOGGER.error(LogMarkers.SCAN, "Error trying to find resources", e);
throw new RuntimeException(e);
}
}
@@ -85,7 +85,7 @@ private Path findJarPathFor(final String resourceName, final String jarName, fin
//LOGGER.debug(CORE, "Found JAR {} at path {}", jarName, path.toString());
return path;
} catch (NullPointerException | URISyntaxException e) {
- LOGGER.fatal(LogMarkers.SCAN, "Failed to find JAR for class {} - {}", resourceName, jarName);
+ LOGGER.error(LogMarkers.SCAN, "Failed to find JAR for class {} - {}", resourceName, jarName);
throw new RuntimeException("Unable to locate "+resourceName+" - "+jarName, e);
}
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java
index 4666aa0b415..faef0000b00 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ExplodedDirectoryLocator.java
@@ -5,11 +5,11 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.forgespi.locating.IModFile;
import net.minecraftforge.forgespi.locating.IModLocator;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.IOException;
import java.nio.file.Files;
@@ -22,7 +22,7 @@
import java.util.stream.Stream;
public class ExplodedDirectoryLocator implements IModLocator {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
public record ExplodedMod(String modid, List paths) {}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/MinecraftLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/MinecraftLocator.java
index 939d5f8cb03..ea527c050b3 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/MinecraftLocator.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/MinecraftLocator.java
@@ -6,15 +6,14 @@
package net.minecraftforge.fml.loading.moddiscovery;
import com.electronwill.nightconfig.core.Config;
+import com.mojang.logging.LogUtils;
import cpw.mods.jarhandling.SecureJar;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.forgespi.language.IModFileInfo;
import net.minecraftforge.forgespi.locating.IModFile;
-import net.minecraftforge.forgespi.locating.IModLocator;
import net.minecraftforge.forgespi.locating.ModFileFactory;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.IOException;
import java.nio.file.*;
@@ -24,7 +23,7 @@
import java.util.stream.Stream;
public class MinecraftLocator extends AbstractModLocator {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
@Override
public List scanMods() {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java
index 55fc8a974fa..746b78c08a7 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java
@@ -5,6 +5,7 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.Launcher;
import cpw.mods.modlauncher.api.IModuleLayerManager;
import cpw.mods.modlauncher.util.ServiceLoaderUtils;
@@ -13,8 +14,7 @@
import net.minecraftforge.forgespi.Environment;
import net.minecraftforge.forgespi.locating.IModFile;
import net.minecraftforge.forgespi.locating.IModLocator;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.util.ArrayList;
import java.util.List;
@@ -23,7 +23,7 @@
import java.util.stream.Collectors;
public class ModDiscoverer {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final ServiceLoader locators;
private final List locatorList;
@@ -34,7 +34,11 @@ public ModDiscoverer(Map arguments) {
locators = ServiceLoader.load(moduleLayerManager.getLayer(IModuleLayerManager.Layer.SERVICE).orElseThrow(), IModLocator.class);
locatorList = ServiceLoaderUtils.streamServiceLoader(()->locators, sce->LOGGER.error("Failed to load locator list", sce)).collect(Collectors.toList());
locatorList.forEach(l->l.initArguments(arguments));
- LOGGER.debug(LogMarkers.CORE,"Found Mod Locators : {}", ()->locatorList.stream().map(iModLocator -> "("+iModLocator.name() + ":" + iModLocator.getClass().getPackage().getImplementationVersion()+")").collect(Collectors.joining(",")));
+ if (LOGGER.isDebugEnabled(LogMarkers.CORE))
+ {
+ LOGGER.debug(LogMarkers.CORE, "Found Mod Locators : {}", locatorList.stream()
+ .map(iModLocator -> "(" + iModLocator.name() + ":" + iModLocator.getClass().getPackage().getImplementationVersion() + ")").collect(Collectors.joining(",")));
+ }
}
ModDiscoverer(List locatorList) {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java
index 760ec9dac9f..d88d99900b8 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java
@@ -6,6 +6,7 @@
package net.minecraftforge.fml.loading.moddiscovery;
import com.google.common.collect.ImmutableMap;
+import com.mojang.logging.LogUtils;
import cpw.mods.jarhandling.SecureJar;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.LogMarkers;
@@ -17,8 +18,7 @@
import net.minecraftforge.forgespi.locating.IModFile;
import net.minecraftforge.forgespi.locating.IModLocator;
import net.minecraftforge.forgespi.locating.ModFileFactory;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -37,7 +37,7 @@ public class ModFile implements IModFile {
// Mods either must have a mods.toml or a manifest. We can no longer just put any jar on the classpath.
@Deprecated(forRemoval = true, since = "1.18")
public static final Manifest DEFAULTMANIFEST;
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
static {
DEFAULTMANIFEST = new Manifest();
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java
index 74b4644841f..449cd58db43 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileInfo.java
@@ -6,6 +6,7 @@
package net.minecraftforge.fml.loading.moddiscovery;
import com.google.common.base.Strings;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.fml.loading.StringUtils;
@@ -13,8 +14,7 @@
import net.minecraftforge.forgespi.language.IModFileInfo;
import net.minecraftforge.forgespi.language.IModInfo;
import net.minecraftforge.forgespi.language.MavenVersionAdapter;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import javax.security.auth.x500.X500Principal;
import java.net.URL;
import java.security.CodeSigner;
@@ -32,7 +32,7 @@
public class ModFileInfo implements IModFileInfo, IConfigurable
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final IConfigurable config;
private final ModFile modFile;
private final URL issueURL;
@@ -68,10 +68,13 @@ public class ModFileInfo implements IModFileInfo, IConfigurable
this.mods = modConfigs.stream()
.map(mi-> new ModInfo(this, mi))
.collect(Collectors.toList());
- LOGGER.debug(LogMarkers.LOADING, "Found valid mod file {} with {} mods - versions {}",
- this.modFile::getFileName,
- () -> this.mods.stream().map(IModInfo::getModId).collect(Collectors.joining(",", "{", "}")),
- () -> this.mods.stream().map(IModInfo::getVersion).map(Objects::toString).collect(Collectors.joining(",", "{", "}")));
+ if (LOGGER.isDebugEnabled(LogMarkers.LOADING))
+ {
+ LOGGER.debug(LogMarkers.LOADING, "Found valid mod file {} with {} mods - versions {}",
+ this.modFile.getFileName(),
+ this.mods.stream().map(IModInfo::getModId).collect(Collectors.joining(",", "{", "}")),
+ this.mods.stream().map(IModInfo::getVersion).map(Objects::toString).collect(Collectors.joining(",", "{", "}")));
+ }
}
public ModFileInfo(final ModFile file, final IConfigurable config, final List languageSpecs) {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileParser.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileParser.java
index c11e9cb56a0..eb1140b9823 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileParser.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFileParser.java
@@ -8,12 +8,12 @@
import com.electronwill.nightconfig.core.file.FileConfig;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.forgespi.language.IModFileInfo;
import net.minecraftforge.forgespi.locating.IModFile;
import net.minecraftforge.forgespi.locating.ModFileFactory;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.IOException;
import java.lang.reflect.Type;
@@ -25,7 +25,7 @@
import java.util.stream.Collectors;
public class ModFileParser {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
public static IModFileInfo readModList(final ModFile modFile, final ModFileFactory.ModFileInfoParser parser) {
return parser.build(modFile);
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java
index 6573e4fd94b..7c7f82c99e5 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModInfo.java
@@ -5,16 +5,18 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.StringSubstitutor;
import net.minecraftforge.fml.loading.StringUtils;
import net.minecraftforge.forgespi.language.IConfigurable;
import net.minecraftforge.forgespi.language.IModInfo;
import net.minecraftforge.forgespi.language.MavenVersionAdapter;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.artifact.versioning.VersionRange;
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
import java.net.URL;
import java.util.Collections;
@@ -26,7 +28,7 @@
public class ModInfo implements IModInfo, IConfigurable
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private static final DefaultArtifactVersion DEFAULT_VERSION = new DefaultArtifactVersion("1");
private static final Pattern VALID_MODID = Pattern.compile("^[a-z][a-z0-9_]{1,63}$");
private static final Pattern VALID_NAMESPACE = Pattern.compile("^[a-z][a-z0-9_.-]{1,63}$");
@@ -52,12 +54,12 @@ public ModInfo(final ModFileInfo owningFile, final IConfigurable config)
this.modId = config.getConfigElement("modId")
.orElseThrow(() -> new InvalidModFileException("Missing modId", owningFile));
if (!VALID_MODID.matcher(this.modId).matches()) {
- LOGGER.fatal("Invalid modId found in file {} - {} does not match the standard: {}", this.owningFile.getFile().getFilePath(), this.modId, VALID_MODID.pattern());
+ LOGGER.error(LogUtils.FATAL_MARKER, "Invalid modId found in file {} - {} does not match the standard: {}", this.owningFile.getFile().getFilePath(), this.modId, VALID_MODID.pattern());
throw new InvalidModFileException("Invalid modId found : " + this.modId, owningFile);
}
this.namespace = config.getConfigElement("namespace").orElse(this.modId);
if (!VALID_NAMESPACE.matcher(this.namespace).matches()) {
- LOGGER.fatal("Invalid override namespace found in file {} - {} does not match the standard: {}", this.owningFile.getFile().getFilePath(), this.namespace, VALID_NAMESPACE.pattern());
+ LOGGER.error(LogUtils.FATAL_MARKER, "Invalid override namespace found in file {} - {} does not match the standard: {}", this.owningFile.getFile().getFilePath(), this.namespace, VALID_NAMESPACE.pattern());
throw new InvalidModFileException("Invalid override namespace found : " + this.namespace, owningFile);
}
this.version = config.getConfigElement("version")
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModListHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModListHandler.java
index ecf067502d7..a9b4a9233da 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModListHandler.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModListHandler.java
@@ -5,13 +5,13 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.loading.FileUtils;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.fml.loading.MavenCoordinateResolver;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.IOException;
import java.nio.file.Files;
@@ -23,7 +23,7 @@
import java.util.stream.Collectors;
public class ModListHandler {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
/**
* Reads the modList paths specified, and searches each maven root for mods matching. Returns a list of mods
* found.
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java
index b7b4d2455b4..d9dd34cff68 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java
@@ -5,6 +5,7 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.IModuleLayerManager;
import cpw.mods.modlauncher.api.ITransformationService;
import net.minecraftforge.fml.loading.EarlyLoadingException;
@@ -13,14 +14,13 @@
import net.minecraftforge.fml.loading.ModSorter;
import net.minecraftforge.fml.loading.progress.StartupMessageManager;
import net.minecraftforge.forgespi.locating.IModFile;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
import java.util.*;
public class ModValidator {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final Map> modFiles;
private final List candidatePlugins;
private final List candidateMods;
@@ -41,7 +41,9 @@ private static List lst(List files) {
public void stage1Validation() {
brokenFiles = validateFiles(candidateMods);
- LOGGER.debug(LogMarkers.SCAN,"Found {} mod files with {} mods", candidateMods::size, ()-> candidateMods.stream().mapToInt(mf -> mf.getModInfos().size()).sum());
+ if (LOGGER.isDebugEnabled(LogMarkers.SCAN)) {
+ LOGGER.debug(LogMarkers.SCAN, "Found {} mod files with {} mods", candidateMods.size(), candidateMods.stream().mapToInt(mf -> mf.getModInfos().size()).sum());
+ }
StartupMessageManager.modLoaderConsumer().ifPresent(c->c.accept("Found "+ candidateMods.size()+" modfiles to load"));
}
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java
index f21e069835b..7d770554115 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java
@@ -5,12 +5,12 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.fml.loading.ModDirTransformerDiscoverer;
import net.minecraftforge.fml.loading.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -25,7 +25,7 @@
*/
public class ModsFolderLocator extends AbstractJarFileLocator {
private static final String SUFFIX = ".jar";
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final Path modFolder;
private final String customName;
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/Scanner.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/Scanner.java
index 19683914a3e..08a6310f151 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/Scanner.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/Scanner.java
@@ -5,12 +5,12 @@
package net.minecraftforge.fml.loading.moddiscovery;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.forgespi.language.IModLanguageProvider;
import net.minecraftforge.forgespi.language.ModFileScanData;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.objectweb.asm.ClassReader;
+import org.slf4j.Logger;
import java.io.IOException;
import java.io.InputStream;
@@ -19,7 +19,7 @@
import java.util.List;
public class Scanner {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final ModFile fileToScan;
public Scanner(final ModFile fileToScan) {
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/progress/ClientVisualization.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/progress/ClientVisualization.java
index d9ab80d2225..7fa1082321b 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/progress/ClientVisualization.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/progress/ClientVisualization.java
@@ -34,8 +34,6 @@
import java.util.function.LongSupplier;
import java.util.function.Supplier;
-import javax.annotation.Nullable;
-
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.glfw.GLFW.glfwCreateWindow;
import static org.lwjgl.opengl.GL11.*;
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/ArgumentList.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/ArgumentList.java
index ab3abed4da3..69ce04db9e6 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/ArgumentList.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/ArgumentList.java
@@ -5,8 +5,8 @@
package net.minecraftforge.fml.loading.targets;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.mojang.logging.LogUtils;
+import org.slf4j.Logger;
import java.util.ArrayList;
import java.util.Arrays;
@@ -20,7 +20,7 @@
* Can not use JOptSimple as that doesn't parse out the values for keys unless the spec says it has a value.
*/
class ArgumentList {
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private List> entries = new ArrayList<>();
private Map values = new HashMap<>();
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java
index 3db4ff71a4e..29b02f75b9e 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonClientLaunchHandler.java
@@ -10,17 +10,12 @@
import net.minecraftforge.fml.loading.VersionInfo;
import net.minecraftforge.api.distmarker.Dist;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.stream.Stream;
public abstract class CommonClientLaunchHandler extends CommonLaunchHandler {
- private static final Logger LOGGER = LogManager.getLogger();
-
@Override public Dist getDist() { return Dist.CLIENT; }
@Override public String getNaming() { return "srg"; }
@Override public boolean isProduction() { return true; }
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonLaunchHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonLaunchHandler.java
index 2e05adb6d14..411c4a2374f 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonLaunchHandler.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonLaunchHandler.java
@@ -5,12 +5,12 @@
package net.minecraftforge.fml.loading.targets;
+import com.mojang.logging.LogUtils;
import cpw.mods.modlauncher.api.ILaunchHandlerService;
import cpw.mods.modlauncher.api.ITransformingClassLoaderBuilder;
import net.minecraftforge.fml.loading.LogMarkers;
import net.minecraftforge.api.distmarker.Dist;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.io.File;
import java.nio.file.Path;
@@ -25,7 +25,7 @@
public abstract class CommonLaunchHandler implements ILaunchHandlerService {
public record LocatedPaths(List minecraftPaths, BiPredicate minecraftFilter, List> otherModPaths, List otherArtifacts) {}
- protected static final Logger LOGGER = LogManager.getLogger();
+ protected static final Logger LOGGER = LogUtils.getLogger();
public abstract Dist getDist();
diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java
index 01b763a558b..afe91492bd0 100644
--- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java
+++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/targets/CommonServerLaunchHandler.java
@@ -10,8 +10,6 @@
import net.minecraftforge.fml.loading.LibraryFinder;
import net.minecraftforge.fml.loading.VersionInfo;
import net.minecraftforge.api.distmarker.Dist;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import java.nio.file.Path;
import java.util.List;
@@ -20,8 +18,6 @@
import java.util.stream.Stream;
public abstract class CommonServerLaunchHandler extends CommonLaunchHandler {
- protected static final Logger LOGGER = LogManager.getLogger();
-
@Override public Dist getDist() { return Dist.DEDICATED_SERVER; }
@Override public String getNaming() { return "srg"; }
@Override public boolean isProduction() { return true; }
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 7454180f2ae..41d9927a4d4 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 41dfb87909a..aa991fceae6 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-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index c53aefaa5fc..1b6c787337f 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# Copyright © 2015-2021 the original authors.
+# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -32,10 +32,10 @@
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
diff --git a/javafmllanguage/build.gradle b/javafmllanguage/build.gradle
index d85d95e76c7..20434dc1361 100644
--- a/javafmllanguage/build.gradle
+++ b/javafmllanguage/build.gradle
@@ -10,7 +10,7 @@ apply plugin: 'org.javamodularity.moduleplugin'
dependencyUpdates.rejectVersionIf { isNonStable(it.candidate.version) }
dependencies {
- compileOnly('org.jetbrains:annotations:21.0.1')
+ compileOnly("org.jetbrains:annotations:${JETBRAINS_ANNOTATIONS_VERSION}")
implementation(project(':fmlloader'))
implementation(project(':fmlcore'))
}
diff --git a/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java b/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java
index 174b3a9661a..50b8265d8e8 100644
--- a/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java
+++ b/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java
@@ -18,14 +18,15 @@
import net.minecraftforge.forgespi.language.ModFileScanData;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.MarkerManager;
import java.util.Optional;
-import static net.minecraftforge.fml.loading.LogMarkers.LOADING;
-
public class FMLModContainer extends ModContainer
{
private static final Logger LOGGER = LogManager.getLogger();
+ private static final Marker LOADING = MarkerManager.getMarker("LOADING");
private final ModFileScanData scanResults;
private final IEventBus eventBus;
private Object modInstance;
diff --git a/l4jManifest.xml b/l4jManifest.xml
deleted file mode 100644
index a57d63e795b..00000000000
--- a/l4jManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lowcodelanguage/src/main/java/net/minecraftforge/fml/lowcodemod/LowCodeModContainer.java b/lowcodelanguage/src/main/java/net/minecraftforge/fml/lowcodemod/LowCodeModContainer.java
index 8e90f05ff56..049ccdfbe15 100644
--- a/lowcodelanguage/src/main/java/net/minecraftforge/fml/lowcodemod/LowCodeModContainer.java
+++ b/lowcodelanguage/src/main/java/net/minecraftforge/fml/lowcodemod/LowCodeModContainer.java
@@ -5,14 +5,14 @@
package net.minecraftforge.fml.lowcodemod;
+import com.mojang.logging.LogUtils;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.fml.IExtensionPoint;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.event.IModBusEvent;
import net.minecraftforge.forgespi.language.IModInfo;
import net.minecraftforge.forgespi.language.ModFileScanData;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import org.slf4j.Logger;
import java.util.Objects;
@@ -20,7 +20,7 @@
public class LowCodeModContainer extends ModContainer
{
- private static final Logger LOGGER = LogManager.getLogger();
+ private static final Logger LOGGER = LogUtils.getLogger();
private final ModFileScanData scanResults;
private Object modInstance;
diff --git a/mclanguage/build.gradle b/mclanguage/build.gradle
index 9f1c151393f..2e386543e57 100644
--- a/mclanguage/build.gradle
+++ b/mclanguage/build.gradle
@@ -10,7 +10,7 @@ apply plugin: 'org.javamodularity.moduleplugin'
dependencyUpdates.rejectVersionIf { isNonStable(it.candidate.version) }
dependencies {
- compileOnly('org.jetbrains:annotations:21.0.1')
+ compileOnly("org.jetbrains:annotations:${JETBRAINS_ANNOTATIONS_VERSION}")
implementation(project(':fmlloader'))
implementation(project(':fmlcore'))
}
diff --git a/mdk/build.gradle b/mdk/build.gradle
index 4f1e84df32e..f2dd6cf98d1 100644
--- a/mdk/build.gradle
+++ b/mdk/build.gradle
@@ -1,20 +1,8 @@
-buildscript {
- repositories {
- // These repositories are only for Gradle plugins, put any other repositories in the repository block further below
- maven { url = 'https://maven.minecraftforge.net' }
- mavenCentral()
- }
- dependencies {
- classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
- }
-}
-// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
plugins {
id 'eclipse'
id 'maven-publish'
+ id 'net.minecraftforge.gradle' version '5.+'
}
-apply plugin: 'net.minecraftforge.gradle'
-
version = '1.0'
group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
diff --git a/mdk/settings.gradle b/mdk/settings.gradle
new file mode 100644
index 00000000000..3703f364a95
--- /dev/null
+++ b/mdk/settings.gradle
@@ -0,0 +1,6 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ maven { url = 'https://maven.minecraftforge.net/' }
+ }
+}
\ No newline at end of file
diff --git a/mdk/src/main/resources/pack.mcmeta b/mdk/src/main/resources/pack.mcmeta
index 6f2f48b7e4c..b643e13f888 100644
--- a/mdk/src/main/resources/pack.mcmeta
+++ b/mdk/src/main/resources/pack.mcmeta
@@ -2,7 +2,7 @@
"pack": {
"description": "examplemod resources",
"pack_format": 9,
- "forge:resource_pack_format": 8,
- "forge:data_pack_format": 9
+ "forge:resource_pack_format": 9,
+ "forge:data_pack_format": 10
}
}
diff --git a/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch b/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch
index 910e5a4df4c..255fa4efb32 100644
--- a/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch
+++ b/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch
@@ -26,7 +26,7 @@
}
this.m_83949_();
-@@ -292,4 +_,27 @@
+@@ -291,4 +_,27 @@
public int m_83980_() {
return this.f_83924_;
}
diff --git a/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch b/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch
index 2bdeee44027..e84ad62200e 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
-@@ -81,7 +_,7 @@
+@@ -80,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;
-@@ -299,6 +_,7 @@
+@@ -298,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/com/mojang/blaze3d/vertex/BufferBuilder.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/BufferBuilder.java.patch
index f9feac5e30e..dc7c6274f70 100644
--- a/patches/minecraft/com/mojang/blaze3d/vertex/BufferBuilder.java.patch
+++ b/patches/minecraft/com/mojang/blaze3d/vertex/BufferBuilder.java.patch
@@ -1,14 +1,6 @@
--- a/com/mojang/blaze3d/vertex/BufferBuilder.java
+++ b/com/mojang/blaze3d/vertex/BufferBuilder.java
-@@ -332,6 +_,7 @@
- }
-
- ByteBuffer bytebuffer = this.f_85648_.slice();
-+ bytebuffer.order(this.f_85648_.order()); // FORGE: Fix incorrect byte order
- this.f_85648_.clear();
- return Pair.of(bufferbuilder$drawstate, bytebuffer);
- }
-@@ -444,4 +_,15 @@
+@@ -486,4 +_,15 @@
this.f_166822_ = p_166829_;
}
}
diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch
index 2574be5e216..2b57d3de3d5 100644
--- a/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch
+++ b/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch
@@ -1,6 +1,6 @@
--- a/com/mojang/blaze3d/vertex/VertexFormat.java
+++ b/com/mojang/blaze3d/vertex/VertexFormat.java
-@@ -195,4 +_,11 @@
+@@ -181,4 +_,11 @@
return i;
}
}
diff --git a/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch b/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch
index 11fcabc3329..bb108875901 100644
--- a/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch
+++ b/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch
@@ -1,7 +1,7 @@
--- a/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java
+++ b/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java
-@@ -67,6 +_,15 @@
- return (new TextComponent("")).m_7220_(this.f_200947_.getFirst()).m_130946_(": ").m_7220_(this.f_200947_.getSecond());
+@@ -65,6 +_,15 @@
+ return Component.m_237119_().m_7220_(this.f_200947_.getFirst()).m_130946_(": ").m_7220_(this.f_200947_.getSecond());
}
+ @Override
diff --git a/patches/minecraft/net/minecraft/SharedConstants.java.patch b/patches/minecraft/net/minecraft/SharedConstants.java.patch
index 69a6ecccb04..6076fa4557a 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
-@@ -183,6 +_,7 @@
+@@ -203,6 +_,7 @@
}
static {
diff --git a/patches/minecraft/net/minecraft/Util.java.patch b/patches/minecraft/net/minecraft/Util.java.patch
index 8dac1a5ae72..e0dcf5e7931 100644
--- a/patches/minecraft/net/minecraft/Util.java.patch
+++ b/patches/minecraft/net/minecraft/Util.java.patch
@@ -1,16 +1,18 @@
--- a/net/minecraft/Util.java
+++ b/net/minecraft/Util.java
-@@ -155,6 +_,9 @@
+@@ -164,6 +_,11 @@
return 255;
}
-+ // We add this inner class to compensate for Mojang's missing inner class and allow us to obf subsequent anon inner classes correctly.
-+ @SuppressWarnings("unused") private static LongSupplier INNER_CLASS_SHIFT = new LongSupplier() { public long getAsLong() { return 0; } };
++ // 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; } };
+
public static ExecutorService m_183988_() {
return f_137443_;
}
-@@ -233,7 +_,7 @@
+@@ -242,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/advancements/Advancement.java.patch b/patches/minecraft/net/minecraft/advancements/Advancement.java.patch
index 56c9ff33a31..1889d490454 100644
--- a/patches/minecraft/net/minecraft/advancements/Advancement.java.patch
+++ b/patches/minecraft/net/minecraft/advancements/Advancement.java.patch
@@ -1,16 +1,15 @@
--- a/net/minecraft/advancements/Advancement.java
+++ b/net/minecraft/advancements/Advancement.java
-@@ -129,8 +_,8 @@
+@@ -127,7 +_,7 @@
return this.f_138305_;
}
- public static class Builder {
- @Nullable
+ public static class Builder implements net.minecraftforge.common.extensions.IForgeAdvancementBuilder {
+ @Nullable
private ResourceLocation f_138332_;
@Nullable
- private Advancement f_138333_;
-@@ -320,7 +_,14 @@
+@@ -308,7 +_,14 @@
return "Task Advancement{parentId=" + this.f_138332_ + ", display=" + this.f_138334_ + ", rewards=" + this.f_138335_ + ", criteria=" + this.f_138336_ + ", requirements=" + Arrays.deepToString(this.f_138337_) + "}";
}
diff --git a/patches/minecraft/net/minecraft/advancements/AdvancementList.java.patch b/patches/minecraft/net/minecraft/advancements/AdvancementList.java.patch
index 2c51150adfd..80436c26c06 100644
--- a/patches/minecraft/net/minecraft/advancements/AdvancementList.java.patch
+++ b/patches/minecraft/net/minecraft/advancements/AdvancementList.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/advancements/AdvancementList.java
+++ b/net/minecraft/advancements/AdvancementList.java
-@@ -91,6 +_,7 @@
+@@ -90,6 +_,7 @@
}
}
diff --git a/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch b/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch
index f828d2248c6..8e49614e082 100644
--- a/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch
+++ b/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch
@@ -4,8 +4,8 @@
public void m_9989_(ServerPlayer p_9990_) {
p_9990_.m_6756_(this.f_9979_);
-- LootContext lootcontext = (new LootContext.Builder(p_9990_.m_183503_())).m_78972_(LootContextParams.f_81455_, p_9990_).m_78972_(LootContextParams.f_81460_, p_9990_.m_20182_()).m_78977_(p_9990_.m_21187_()).m_78975_(LootContextParamSets.f_81418_);
-+ LootContext lootcontext = (new LootContext.Builder(p_9990_.m_183503_())).m_78972_(LootContextParams.f_81455_, p_9990_).m_78972_(LootContextParams.f_81460_, p_9990_.m_20182_()).m_78977_(p_9990_.m_21187_()).m_78963_(p_9990_.m_36336_()).m_78975_(LootContextParamSets.f_81418_); // FORGE: luck to LootContext
+- LootContext lootcontext = (new LootContext.Builder(p_9990_.m_9236_())).m_78972_(LootContextParams.f_81455_, p_9990_).m_78972_(LootContextParams.f_81460_, p_9990_.m_20182_()).m_230911_(p_9990_.m_217043_()).m_78975_(LootContextParamSets.f_81418_);
++ LootContext lootcontext = (new LootContext.Builder(p_9990_.m_9236_())).m_78972_(LootContextParams.f_81455_, p_9990_).m_78972_(LootContextParams.f_81460_, p_9990_.m_20182_()).m_230911_(p_9990_.m_217043_()).m_78963_(p_9990_.m_36336_()).m_78975_(LootContextParamSets.f_81418_); // FORGE: luck to LootContext
boolean flag = false;
for(ResourceLocation resourcelocation : this.f_9980_) {
diff --git a/patches/minecraft/net/minecraft/client/ClientRecipeBook.java.patch b/patches/minecraft/net/minecraft/client/ClientRecipeBook.java.patch
index cf29f1ae9c9..2855244ad43 100644
--- a/patches/minecraft/net/minecraft/client/ClientRecipeBook.java.patch
+++ b/patches/minecraft/net/minecraft/client/ClientRecipeBook.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/ClientRecipeBook.java
+++ b/net/minecraft/client/ClientRecipeBook.java
-@@ -104,6 +_,8 @@
+@@ -103,6 +_,8 @@
} else if (recipetype == RecipeType.f_44113_) {
return RecipeBookCategories.SMITHING;
} else {
diff --git a/patches/minecraft/net/minecraft/client/KeyMapping.java.patch b/patches/minecraft/net/minecraft/client/KeyMapping.java.patch
index 3237bef33ea..60bec959dac 100644
--- a/patches/minecraft/net/minecraft/client/KeyMapping.java.patch
+++ b/patches/minecraft/net/minecraft/client/KeyMapping.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/KeyMapping.java
+++ b/net/minecraft/client/KeyMapping.java
-@@ -14,9 +_,9 @@
+@@ -13,9 +_,9 @@
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
@@ -12,7 +12,7 @@
private static final Set f_90811_ = Sets.newHashSet();
public static final String f_167805_ = "key.categories.movement";
public static final String f_167806_ = "key.categories.misc";
-@@ -42,7 +_,7 @@
+@@ -41,7 +_,7 @@
private int f_90818_;
public static void m_90835_(InputConstants.Key p_90836_) {
@@ -21,7 +21,7 @@
if (keymapping != null) {
++keymapping.f_90818_;
}
-@@ -50,7 +_,7 @@
+@@ -49,7 +_,7 @@
}
public static void m_90837_(InputConstants.Key p_90838_, boolean p_90839_) {
@@ -30,7 +30,7 @@
if (keymapping != null) {
keymapping.m_7249_(p_90839_);
}
-@@ -74,10 +_,10 @@
+@@ -73,10 +_,10 @@
}
public static void m_90854_() {
@@ -43,7 +43,7 @@
}
}
-@@ -92,12 +_,12 @@
+@@ -91,12 +_,12 @@
this.f_90814_ = this.f_90816_;
this.f_90815_ = p_90828_;
f_90809_.put(p_90825_, this);
@@ -58,7 +58,7 @@
}
public String m_90858_() {
-@@ -131,7 +_,13 @@
+@@ -130,7 +_,13 @@
}
public int compareTo(KeyMapping p_90841_) {
@@ -73,7 +73,7 @@
}
public static Supplier m_90842_(String p_90843_) {
-@@ -142,6 +_,20 @@
+@@ -141,6 +_,20 @@
}
public boolean m_90850_(KeyMapping p_90851_) {
@@ -94,7 +94,7 @@
return this.f_90816_.equals(p_90851_.f_90816_);
}
-@@ -162,11 +_,13 @@
+@@ -161,11 +_,13 @@
}
public Component m_90863_() {
@@ -109,7 +109,7 @@
}
public String m_90865_() {
-@@ -176,4 +_,84 @@
+@@ -175,4 +_,84 @@
public void m_7249_(boolean p_90846_) {
this.f_90817_ = p_90846_;
}
diff --git a/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch b/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch
index c91cbc2702c..5aa624f564e 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
-@@ -307,7 +_,9 @@
+@@ -300,7 +_,9 @@
}
Screen screen = this.f_90867_.f_91080_;
@@ -10,8 +10,8 @@
+ if (p_90897_ == 1) {
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_.f_92052_ = this.f_90867_.m_91268_().m_85440_();
-@@ -326,6 +_,8 @@
+ this.f_90867_.f_91066_.m_231829_().m_231514_(this.f_90867_.m_91268_().m_85440_());
+@@ -318,6 +_,8 @@
});
return;
}
@@ -20,7 +20,7 @@
}
if (NarratorChatListener.f_93311_.m_93316_()) {
-@@ -349,11 +_,15 @@
+@@ -340,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());
-@@ -406,22 +_,26 @@
+@@ -397,22 +_,26 @@
}
}
}
diff --git a/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/patches/minecraft/net/minecraft/client/Minecraft.java.patch
index 7172b87a9af..5b0c81c6daa 100644
--- a/patches/minecraft/net/minecraft/client/Minecraft.java.patch
+++ b/patches/minecraft/net/minecraft/client/Minecraft.java.patch
@@ -1,31 +1,32 @@
--- a/net/minecraft/client/Minecraft.java
+++ b/net/minecraft/client/Minecraft.java
-@@ -252,7 +_,7 @@
+@@ -236,7 +_,7 @@
import org.slf4j.Logger;
@OnlyIn(Dist.CLIENT)
-public class Minecraft extends ReentrantBlockableEventLoop implements WindowEventHandler {
+public class Minecraft extends ReentrantBlockableEventLoop implements WindowEventHandler, net.minecraftforge.client.extensions.IForgeMinecraft {
- private static Minecraft f_90981_;
+ static Minecraft f_90981_;
private static final Logger f_90982_ = LogUtils.getLogger();
public static final boolean f_91002_ = Util.m_137581_() == Util.OS.OSX;
-@@ -394,14 +_,13 @@
+@@ -385,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_());
- this.f_91038_ = new PackRepository(Minecraft::m_167933_, this.f_91037_, new FolderRepositorySource(this.f_90985_, PackSource.f_10527_));
+ this.f_91038_ = new PackRepository(Minecraft::createClientPackAdapter, this.f_91037_, new FolderRepositorySource(this.f_90985_, PackSource.f_10527_));
this.f_91030_ = p_91084_.f_101905_.f_101945_;
- YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(this.f_91030_);
- this.f_91048_ = yggdrasilauthenticationservice.createMinecraftSessionService();
- this.f_193584_ = this.m_193585_(yggdrasilauthenticationservice, p_91084_);
+ this.f_231338_ = new YggdrasilAuthenticationService(this.f_91030_);
+ this.f_91048_ = this.f_231338_.createMinecraftSessionService();
+@@ -393,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_());
- f_90982_.debug("(Session ID is {})", (Object)this.f_90998_.m_92544_());
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_;
-@@ -433,6 +_,7 @@
+@@ -426,6 +_,7 @@
}
Util.f_137440_ = RenderSystem.m_69576_();
@@ -33,15 +34,15 @@
this.f_90989_ = new VirtualScreen(this);
this.f_90990_ = this.f_90989_.m_110872_(displaydata, this.f_91066_.f_92123_, this.m_91270_());
this.m_7440_(true);
-@@ -448,7 +_,6 @@
+@@ -445,7 +_,6 @@
- this.f_90990_.m_85380_(this.f_91066_.f_92113_);
+ 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_());
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);
-@@ -456,6 +_,7 @@
+@@ -453,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);
@@ -49,7 +50,7 @@
this.f_91038_.m_10506_();
this.f_91066_.m_92145_(this.f_91038_);
this.f_91039_ = new LanguageManager(this.f_91066_.f_92075_);
-@@ -504,6 +_,7 @@
+@@ -500,6 +_,7 @@
this.m_91271_();
this.f_91036_.m_7217_(this.f_90997_);
this.f_91061_ = new ParticleEngine(this.f_91073_, this.f_90987_);
@@ -57,17 +58,17 @@
this.f_91036_.m_7217_(this.f_91061_);
this.f_91053_ = new PaintingTextureManager(this.f_90987_);
this.f_91036_.m_7217_(this.f_91053_);
-@@ -512,7 +_,8 @@
+@@ -508,7 +_,8 @@
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_91065_ = new Gui(this, this.f_90995_);
+ this.f_91065_ = new net.minecraftforge.client.gui.ForgeIngameGui(this);
+ this.f_91067_.m_91524_(this.f_90990_.m_85439_()); //Forge: Moved below ingameGUI setting to prevent NPEs in handeler.
this.f_91064_ = new DebugRenderer(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_()) {
-@@ -530,6 +_,11 @@
+@@ -526,6 +_,11 @@
TinyFileDialogs.tinyfd_messageBox("Minecraft", stringbuilder.toString(), "ok", "error", false);
}
@@ -76,10 +77,10 @@
+ net.minecraftforge.fml.ModLoader.get().postEvent(new net.minecraftforge.client.event.EntityRenderersEvent.RegisterLayerDefinitions());
+ net.minecraftforge.fml.ModLoader.get().postEvent(new net.minecraftforge.client.event.EntityRenderersEvent.RegisterRenderers());
+
- this.f_90990_.m_85409_(this.f_91066_.f_92041_);
- this.f_90990_.m_85424_(this.f_91066_.f_92034_);
+ 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_();
-@@ -545,13 +_,16 @@
+@@ -543,13 +_,16 @@
}
this.f_167847_.m_168556_();
@@ -101,7 +102,7 @@
}
-@@ -594,6 +_,8 @@
+@@ -592,6 +_,8 @@
private UserApiService m_193585_(YggdrasilAuthenticationService p_193586_, GameConfig p_193587_) {
try {
@@ -110,7 +111,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);
-@@ -606,7 +_,7 @@
+@@ -604,7 +_,7 @@
}
private void m_91239_(Throwable p_91240_) {
@@ -119,7 +120,7 @@
this.m_91241_(p_91240_, (Component)null);
} else {
Util.m_137559_(p_91240_);
-@@ -763,13 +_,13 @@
+@@ -762,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_());
@@ -136,7 +137,7 @@
}
}
-@@ -879,10 +_,6 @@
+@@ -892,10 +_,6 @@
f_90982_.error("setScreen called from non-game thread");
}
@@ -147,7 +148,7 @@
if (p_91153_ == null && this.f_91073_ == null) {
p_91153_ = new TitleScreen();
} else if (p_91153_ == null && this.f_91074_.m_21224_()) {
-@@ -893,6 +_,15 @@
+@@ -906,6 +_,15 @@
}
}
@@ -163,7 +164,7 @@
this.f_91080_ = p_91153_;
BufferUploader.m_166835_();
if (p_91153_ != null) {
-@@ -1022,11 +_,13 @@
+@@ -1049,11 +_,13 @@
RenderSystem.m_69481_();
this.f_91026_.m_7238_();
if (!this.f_91079_) {
@@ -177,7 +178,7 @@
}
if (this.f_91056_ != null) {
-@@ -1132,10 +_,12 @@
+@@ -1180,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_());
@@ -190,7 +191,15 @@
this.f_91063_.m_109097_(this.f_90990_.m_85441_(), this.f_90990_.m_85442_());
this.f_91067_.m_91599_();
}
-@@ -1432,11 +_,21 @@
+@@ -1461,6 +_,7 @@
+ }
+
+ public void m_91395_() {
++ if (this.m_91396_()) net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.GameShuttingDownEvent());
+ this.f_91019_ = false;
+ }
+
+@@ -1490,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_();
@@ -205,20 +214,18 @@
+ return;
+ }
Direction direction = blockhitresult.m_82434_();
- if (this.f_91072_.m_105283_(blockpos, direction)) {
+- if (this.f_91072_.m_105283_(blockpos, direction)) {
- this.f_91061_.m_107367_(blockpos, direction);
-+ if (inputEvent.shouldSwingHand()) {
++ if (this.f_91072_.m_105283_(blockpos, direction) && inputEvent.shouldSwingHand()) {
+ this.f_91061_.addBlockHitEffects(blockpos, blockhitresult);
this.f_91074_.m_6674_(InteractionHand.MAIN_HAND);
-+ }
}
}
-
-@@ -1460,14 +_,20 @@
+@@ -1518,14 +_,20 @@
return false;
} else {
boolean flag = false;
-- switch(this.f_91077_.m_6662_()) {
+- switch (this.f_91077_.m_6662_()) {
+ net.minecraftforge.client.event.InputEvent.ClickInputEvent inputEvent = net.minecraftforge.client.ForgeHooksClient.onClickInput(0, this.f_91066_.f_92096_, InteractionHand.MAIN_HAND);
+ HitResult.Type hitType = this.f_91077_.m_6662_();
+ if(this.f_91077_ instanceof EntityHitResult entityHit) { // Forge: Perform attack range checks here, instead of in GameRenderer#pick, so extended-reach interactions work.
@@ -226,21 +233,21 @@
+ }
+ if (!inputEvent.isCanceled())
+ switch(hitType) {
- case ENTITY:
- this.f_91072_.m_105223_(this.f_91074_, ((EntityHitResult)this.f_91077_).m_82443_());
- break;
- case BLOCK:
- BlockHitResult blockhitresult = (BlockHitResult)this.f_91077_;
- BlockPos blockpos = blockhitresult.m_82425_();
-- if (!this.f_91073_.m_8055_(blockpos).m_60795_()) {
+ case ENTITY:
+ this.f_91072_.m_105223_(this.f_91074_, ((EntityHitResult)this.f_91077_).m_82443_());
+ break;
+ case BLOCK:
+ BlockHitResult blockhitresult = (BlockHitResult)this.f_91077_;
+ BlockPos blockpos = blockhitresult.m_82425_();
+- if (!this.f_91073_.m_8055_(blockpos).m_60795_()) {
+ if (!this.f_91073_.m_46859_(blockpos)) {
- this.f_91072_.m_105269_(blockpos, blockhitresult.m_82434_());
- if (this.f_91073_.m_8055_(blockpos).m_60795_()) {
- flag = true;
-@@ -1480,8 +_,10 @@
- }
+ this.f_91072_.m_105269_(blockpos, blockhitresult.m_82434_());
+ if (this.f_91073_.m_8055_(blockpos).m_60795_()) {
+ flag = true;
+@@ -1538,8 +_,10 @@
+ }
- this.f_91074_.m_36334_();
+ this.f_91074_.m_36334_();
+ net.minecraftforge.common.ForgeHooks.onEmptyLeftClick(this.f_91074_);
}
@@ -248,7 +255,7 @@
this.f_91074_.m_6674_(InteractionHand.MAIN_HAND);
return flag;
}
-@@ -1496,6 +_,11 @@
+@@ -1554,6 +_,11 @@
}
for(InteractionHand interactionhand : InteractionHand.values()) {
@@ -259,32 +266,32 @@
+ }
ItemStack itemstack = this.f_91074_.m_21120_(interactionhand);
if (this.f_91077_ != null) {
- switch(this.f_91077_.m_6662_()) {
-@@ -1506,6 +_,7 @@
- return;
- }
+ switch (this.f_91077_.m_6662_()) {
+@@ -1564,6 +_,7 @@
+ return;
+ }
+ if(!this.f_91074_.canInteractWith(entityhitresult.m_82443_(), 0)) return; //Forge: Entity may be traced via attack range, but the player may not have sufficient reach. No padding in client code.
- 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);
-@@ -1513,6 +_,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 @@
- if (interactionresult.m_19077_()) {
- if (interactionresult.m_19080_()) {
+ if (interactionresult.m_19077_()) {
+ if (interactionresult.m_19080_()) {
+ if (inputEvent.shouldSwingHand())
- this.f_91074_.m_6674_(interactionhand);
- }
+ this.f_91074_.m_6674_(interactionhand);
+ }
-@@ -1525,6 +_,7 @@
- InteractionResult interactionresult1 = this.f_91072_.m_105262_(this.f_91074_, this.f_91073_, interactionhand, blockhitresult);
- if (interactionresult1.m_19077_()) {
- if (interactionresult1.m_19080_()) {
+@@ -1583,6 +_,7 @@
+ InteractionResult interactionresult1 = this.f_91072_.m_233732_(this.f_91074_, interactionhand, blockhitresult);
+ if (interactionresult1.m_19077_()) {
+ if (interactionresult1.m_19080_()) {
+ if (inputEvent.shouldSwingHand())
- 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);
-@@ -1540,6 +_,9 @@
+ 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 @@
}
}
@@ -292,9 +299,9 @@
+ net.minecraftforge.common.ForgeHooks.onEmptyClick(this.f_91074_, interactionhand);
+
if (!itemstack.m_41619_()) {
- InteractionResult interactionresult2 = this.f_91072_.m_105235_(this.f_91074_, this.f_91073_, interactionhand);
+ InteractionResult interactionresult2 = this.f_91072_.m_233721_(this.f_91074_, interactionhand);
if (interactionresult2.m_19077_()) {
-@@ -1566,6 +_,8 @@
+@@ -1624,6 +_,8 @@
--this.f_91011_;
}
@@ -303,7 +310,7 @@
this.f_91026_.m_6180_("gui");
this.f_91065_.m_193832_(this.f_91012_);
this.f_91026_.m_7238_();
-@@ -1694,6 +_,8 @@
+@@ -1752,6 +_,8 @@
this.f_91026_.m_6182_("keyboard");
this.f_91068_.m_90931_();
this.f_91026_.m_7238_();
@@ -312,105 +319,26 @@
}
private boolean m_91278_() {
-@@ -1814,11 +_,11 @@
- }
-
- public void m_91200_(String p_91201_) {
-- this.m_205205_(p_91201_, WorldStem.DataPackConfigSupplier::m_206928_, WorldStem.WorldDataSupplier::m_206954_, false, Minecraft.ExperimentalDialogType.BACKUP);
-+ this.doLoadLevel(p_91201_, WorldStem.DataPackConfigSupplier::m_206928_, WorldStem.WorldDataSupplier::m_206954_, false, Minecraft.ExperimentalDialogType.BACKUP, false);
- }
-
- public void m_205185_(String p_205186_, LevelSettings p_205187_, RegistryAccess p_205188_, WorldGenSettings p_205189_) {
-- this.m_205205_(p_205186_, (p_210684_) -> {
-+ this.doLoadLevel(p_205186_, (p_210684_) -> {
- return p_205187_::m_46934_;
- }, (p_210718_) -> {
- return (p_210712_, p_210713_) -> {
-@@ -1831,10 +_,10 @@
- WorldGenSettings worldgensettings = dataresult.getOrThrow(false, Util.m_137489_("Error reading worldgen settings after loading data packs: ", f_90982_::error));
- return Pair.of(new PrimaryLevelData(p_205187_, worldgensettings, dataresult.lifecycle()), registryaccess$writable.m_203557_());
- };
-- }, false, Minecraft.ExperimentalDialogType.CREATE);
-+ }, false, Minecraft.ExperimentalDialogType.CREATE, true);
- }
-
-- private void m_205205_(String p_205206_, Function p_205207_, Function p_205208_, boolean p_205209_, Minecraft.ExperimentalDialogType p_205210_) {
-+ private void doLoadLevel(String p_205206_, Function p_205207_, Function p_205208_, boolean p_205209_, Minecraft.ExperimentalDialogType p_205210_, boolean creating) {
- LevelStorageSource.LevelStorageAccess levelstoragesource$levelstorageaccess;
- try {
- levelstoragesource$levelstorageaccess = this.f_91031_.m_78260_(p_205206_);
-@@ -1849,11 +_,12 @@
-
- WorldStem worldstem;
- try {
-+ if (!creating) levelstoragesource$levelstorageaccess.readAdditionalLevelSaveData();
- worldstem = this.m_205125_(packrepository, p_205209_, p_205207_.apply(levelstoragesource$levelstorageaccess), p_205208_.apply(levelstoragesource$levelstorageaccess));
- } catch (Exception exception) {
- f_90982_.warn("Failed to load datapacks, can't proceed with server load", (Throwable)exception);
- this.m_91152_(new DatapackLoadFailureScreen(() -> {
-- this.m_205205_(p_205206_, p_205207_, p_205208_, true, p_205210_);
-+ this.doLoadLevel(p_205206_, p_205207_, p_205208_, true, p_205210_, creating);
- }));
-
- try {
-@@ -1869,13 +_,15 @@
- WorldData worlddata = worldstem.f_206895_();
- boolean flag = worlddata.m_5961_().m_64670_();
- boolean flag1 = worlddata.m_5754_() != Lifecycle.stable();
-- if (p_205210_ == Minecraft.ExperimentalDialogType.NONE || !flag && !flag1) {
-+ //Skip confirmation if it has been done already for this world
-+ boolean skipConfirmation = worlddata instanceof PrimaryLevelData pld && pld.hasConfirmedExperimentalWarning();
-+ if (skipConfirmation || p_205210_ == Minecraft.ExperimentalDialogType.NONE || !flag && !flag1) {
- this.m_91399_();
- this.f_90999_.set((StoringChunkProgressListener)null);
-
- try {
- RegistryAccess.Frozen registryaccess$frozen = worldstem.f_206894_();
-- levelstoragesource$levelstorageaccess.m_78287_(registryaccess$frozen, worlddata);
-+ levelstoragesource$levelstorageaccess.m_78287_(registryaccess$frozen, worlddata); //TODO-PATCHING: Figure out what registry access needs to be passed in here.
- worldstem.m_206901_();
- YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(this.f_91030_);
- MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService();
-@@ -1885,7 +_,7 @@
- SkullBlockEntity.m_196700_(gameprofilecache, minecraftsessionservice, this);
- GameProfileCache.m_11004_(false);
- this.f_91007_ = MinecraftServer.m_129872_((p_210695_) -> {
-- return new IntegratedServer(p_210695_, this, levelstoragesource$levelstorageaccess, packrepository, worldstem, minecraftsessionservice, gameprofilerepository, gameprofilecache, (p_210795_) -> {
-+ return new IntegratedServer(p_210695_, this, levelstoragesource$levelstorageaccess, packrepository, worldstem, minecraftsessionservice, gameprofilerepository, gameprofilecache, (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);
-@@ -1929,12 +_,19 @@
- connection.m_129505_(new ClientHandshakePacketListenerImpl(connection, this, (Screen)null, (p_210793_) -> {
- }));
- connection.m_129512_(new ClientIntentionPacket(socketaddress.toString(), 0, ConnectionProtocol.LOGIN));
-- connection.m_129512_(new ServerboundHelloPacket(this.m_91094_().m_92548_()));
-+ com.mojang.authlib.GameProfile gameProfile = this.m_91094_().m_92548_();
-+ if (!this.m_91094_().hasCachedProperties()) {
-+ gameProfile = f_91048_.fillProfileProperties(gameProfile, true); //Forge: Fill profile properties upon game load. Fixes MC-52974.
-+ this.m_91094_().setProperties(gameProfile.getProperties());
-+ }
-+ connection.m_129512_(new ServerboundHelloPacket(gameProfile));
- this.f_91009_ = connection;
- } else {
-+ if (flag) //FORGE: For legacy world options, let vanilla handle it.
- this.m_91143_(p_205210_, p_205206_, flag, () -> {
-- this.m_205205_(p_205206_, p_205207_, p_205208_, p_205209_, Minecraft.ExperimentalDialogType.NONE);
-+ this.doLoadLevel(p_205206_, p_205207_, p_205208_, p_205209_, Minecraft.ExperimentalDialogType.NONE, creating);
- });
-+ else net.minecraftforge.client.ForgeHooksClient.createWorldConfirmationScreen(f_91031_, p_205206_, creating, p_205208_, wds -> () -> this.doLoadLevel(p_205206_, p_205207_, wds, p_205209_, ExperimentalDialogType.NONE, creating));
- worldstem.close();
-
- try {
-@@ -2026,6 +_,7 @@
+@@ -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 @@
}
public void m_91156_(ClientLevel p_91157_) {
+ if (f_91073_ != null) net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(f_91073_));
ProgressScreen progressscreen = new ProgressScreen(true);
- progressscreen.m_6309_(new TranslatableComponent("connect.joining"));
+ progressscreen.m_6309_(Component.m_237115_("connect.joining"));
this.m_91362_(progressscreen);
-@@ -2058,10 +_,12 @@
+@@ -1978,10 +_,12 @@
IntegratedServer integratedserver = this.f_91007_;
this.f_91007_ = null;
this.f_91063_.m_109150_();
@@ -423,7 +351,7 @@
if (integratedserver != null) {
this.f_91026_.m_6180_("waitForServer");
-@@ -2076,6 +_,7 @@
+@@ -1996,6 +_,7 @@
this.f_91065_.m_93089_();
this.f_91008_ = null;
this.f_91010_ = false;
@@ -431,7 +359,7 @@
this.f_91004_.m_90740_();
}
-@@ -2162,66 +_,9 @@
+@@ -2082,66 +_,9 @@
private void m_91280_() {
if (this.f_91077_ != null && this.f_91077_.m_6662_() != HitResult.Type.MISS) {
@@ -501,7 +429,7 @@
}
}
-@@ -2713,8 +_,8 @@
+@@ -2632,8 +_,8 @@
return this.f_90993_;
}
@@ -512,7 +440,7 @@
Supplier supplier = p_167937_;
if (i <= 3) {
supplier = m_91330_(p_167937_);
-@@ -2724,7 +_,7 @@
+@@ -2643,7 +_,7 @@
supplier = m_91352_(supplier);
}
@@ -521,7 +449,7 @@
}
private static Supplier m_91330_(Supplier p_91331_) {
-@@ -2741,6 +_,14 @@
+@@ -2660,6 +_,14 @@
public void m_91312_(int p_91313_) {
this.f_91051_.m_119410_(p_91313_);
diff --git a/patches/minecraft/net/minecraft/client/MouseHandler.java.patch b/patches/minecraft/net/minecraft/client/MouseHandler.java.patch
index c3534811e8f..d4266d503d7 100644
--- a/patches/minecraft/net/minecraft/client/MouseHandler.java.patch
+++ b/patches/minecraft/net/minecraft/client/MouseHandler.java.patch
@@ -41,13 +41,13 @@
private void m_91526_(long p_91527_, double p_91528_, double p_91529_) {
if (p_91527_ == Minecraft.m_91087_().m_91268_().m_85439_()) {
-- double d0 = (this.f_91503_.f_91066_.f_92045_ ? Math.signum(p_91529_) : p_91529_) * this.f_91503_.f_91066_.f_92033_;
+- double d0 = (this.f_91503_.f_91066_.m_231821_().m_231551_() ? Math.signum(p_91529_) : p_91529_) * this.f_91503_.f_91066_.m_232122_().m_231551_();
+ // FORGE: Allows for Horizontal Scroll to be recognized as Vertical Scroll - Fixes MC-121772
+ double offset = p_91529_;
+ if (Minecraft.f_91002_ && p_91529_ == 0) {
+ offset = p_91528_;
+ }
-+ double d0 = (this.f_91503_.f_91066_.f_92045_ ? Math.signum(offset) : offset) * this.f_91503_.f_91066_.f_92033_;
++ double d0 = (this.f_91503_.f_91066_.m_231821_().m_231551_() ? Math.signum(offset) : offset) * this.f_91503_.f_91066_.m_232122_().m_231551_();
if (this.f_91503_.m_91265_() == null) {
if (this.f_91503_.f_91080_ != null) {
double d1 = this.f_91507_ * (double)this.f_91503_.m_91268_().m_85445_() / (double)this.f_91503_.m_91268_().m_85443_();
diff --git a/patches/minecraft/net/minecraft/client/Options.java.patch b/patches/minecraft/net/minecraft/client/Options.java.patch
index 826b04f9e03..d2e11e5892f 100644
--- a/patches/minecraft/net/minecraft/client/Options.java.patch
+++ b/patches/minecraft/net/minecraft/client/Options.java.patch
@@ -1,15 +1,15 @@
--- a/net/minecraft/client/Options.java
+++ b/net/minecraft/client/Options.java
-@@ -188,6 +_,7 @@
- public boolean f_92076_;
+@@ -772,6 +_,7 @@
+ }
public Options(Minecraft p_92138_, File p_92139_) {
+ setForgeKeybindProperties();
this.f_92060_ = p_92138_;
this.f_92110_ = new File(p_92139_, "options.txt");
- if (p_92138_.m_91103_() && Runtime.getRuntime().maxMemory() >= 1000000000L) {
-@@ -302,10 +_,14 @@
- this.f_193762_ = p_168428_.m_142682_("allowServerListing", this.f_193762_);
+ boolean flag = p_92138_.m_91103_();
+@@ -887,10 +_,14 @@
+ p_168428_.m_213982_("onlyShowSecureChat", this.f_231798_);
for(KeyMapping keymapping : this.f_92059_) {
- String s = keymapping.m_90865_();
@@ -25,7 +25,7 @@
}
}
-@@ -493,6 +_,7 @@
+@@ -1058,6 +_,7 @@
}
public void m_92169_() {
@@ -33,7 +33,7 @@
try {
final PrintWriter printwriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(this.f_92110_), StandardCharsets.UTF_8));
-@@ -641,6 +_,23 @@
+@@ -1205,6 +_,23 @@
}
p_92146_.m_10509_(set);
diff --git a/patches/minecraft/net/minecraft/client/RecipeBookCategories.java.patch b/patches/minecraft/net/minecraft/client/RecipeBookCategories.java.patch
index 3ee67a58a79..ba40062a6ad 100644
--- a/patches/minecraft/net/minecraft/client/RecipeBookCategories.java.patch
+++ b/patches/minecraft/net/minecraft/client/RecipeBookCategories.java.patch
@@ -19,12 +19,12 @@
private RecipeBookCategories(ItemStack... p_92267_) {
@@ -54,11 +_,17 @@
- case SMOKER:
- return f_92256_;
- default:
+ case SMOKER:
+ return f_92256_;
+ default:
+ if (net.minecraftforge.client.RecipeBookRegistry.TYPE_TO_CATEGORIES_VIEW.containsKey(p_92270_))
+ return net.minecraftforge.client.RecipeBookRegistry.TYPE_TO_CATEGORIES_VIEW.get(p_92270_);
- return ImmutableList.of();
+ return ImmutableList.of();
}
}
diff --git a/patches/minecraft/net/minecraft/client/Screenshot.java.patch b/patches/minecraft/net/minecraft/client/Screenshot.java.patch
index e60f21fc383..f940cee4739 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
-@@ -61,13 +_,23 @@
+@@ -59,13 +_,23 @@
file2 = new File(file1, p_92307_);
}
@@ -15,15 +15,15 @@
try {
- nativeimage.m_85056_(file2);
+ nativeimage.m_85056_(target);
- Component component = (new TextComponent(file2.getName())).m_130940_(ChatFormatting.UNDERLINE).m_130938_((p_168608_) -> {
+ Component component = Component.m_237113_(file2.getName()).m_130940_(ChatFormatting.UNDERLINE).m_130938_((p_168608_) -> {
- return p_168608_.m_131142_(new ClickEvent(ClickEvent.Action.OPEN_FILE, file2.getAbsolutePath()));
+ return p_168608_.m_131142_(new ClickEvent(ClickEvent.Action.OPEN_FILE, target.getAbsolutePath()));
});
-- p_92311_.accept(new TranslatableComponent("screenshot.success", component));
+- p_92311_.accept(Component.m_237110_("screenshot.success", component));
+ if (event.getResultMessage() != null)
+ p_92311_.accept(event.getResultMessage());
+ else
-+ p_92311_.accept(new TranslatableComponent("screenshot.success", component));
++ p_92311_.accept(Component.m_237110_("screenshot.success", component));
} catch (Exception exception) {
f_92276_.warn("Couldn't save screenshot", (Throwable)exception);
- p_92311_.accept(new TranslatableComponent("screenshot.failure", exception.getMessage()));
+ p_92311_.accept(Component.m_237110_("screenshot.failure", exception.getMessage()));
diff --git a/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch b/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch
index 531cd100559..c0ca58a0b0c 100644
--- a/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch
+++ b/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch
@@ -5,8 +5,8 @@
public class BlockColors {
private static final int f_168640_ = -1;
- private final IdMapper f_92571_ = new IdMapper<>(32);
-+ // FORGE: Use RegistryDelegates as non-Vanilla block ids are not constant
-+ private final java.util.Map, BlockColor> f_92571_ = new java.util.HashMap<>();
++ // FORGE: Use registry delegate as non-Vanilla block ids are not constant
++ private final java.util.Map, BlockColor> f_92571_ = new java.util.HashMap<>();
private final Map>> f_92572_ = Maps.newHashMap();
public static BlockColors m_92574_() {
@@ -20,7 +20,7 @@
public int m_92582_(BlockState p_92583_, Level p_92584_, BlockPos p_92585_) {
- BlockColor blockcolor = this.f_92571_.m_7942_(Registry.f_122824_.m_7447_(p_92583_.m_60734_()));
-+ BlockColor blockcolor = this.f_92571_.get(p_92583_.m_60734_().delegate);
++ BlockColor blockcolor = this.f_92571_.get(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(p_92583_.m_60734_()));
if (blockcolor != null) {
return blockcolor.m_92566_(p_92583_, (BlockAndTintGetter)null, (BlockPos)null, 0);
} else {
@@ -29,14 +29,14 @@
public int m_92577_(BlockState p_92578_, @Nullable BlockAndTintGetter p_92579_, @Nullable BlockPos p_92580_, int p_92581_) {
- BlockColor blockcolor = this.f_92571_.m_7942_(Registry.f_122824_.m_7447_(p_92578_.m_60734_()));
-+ BlockColor blockcolor = this.f_92571_.get(p_92578_.m_60734_().delegate);
++ BlockColor blockcolor = this.f_92571_.get(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(p_92578_.m_60734_()));
return blockcolor == null ? -1 : blockcolor.m_92566_(p_92578_, p_92579_, p_92580_, p_92581_);
}
public void m_92589_(BlockColor p_92590_, Block... p_92591_) {
for(Block block : p_92591_) {
- this.f_92571_.m_122664_(p_92590_, Registry.f_122824_.m_7447_(block));
-+ this.f_92571_.put(block.delegate, p_92590_);
++ this.f_92571_.put(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(block), p_92590_);
}
}
diff --git a/patches/minecraft/net/minecraft/client/color/item/ItemColors.java.patch b/patches/minecraft/net/minecraft/client/color/item/ItemColors.java.patch
index 1ab1c1def5d..5021f30bad0 100644
--- a/patches/minecraft/net/minecraft/client/color/item/ItemColors.java.patch
+++ b/patches/minecraft/net/minecraft/client/color/item/ItemColors.java.patch
@@ -1,18 +1,18 @@
--- a/net/minecraft/client/color/item/ItemColors.java
+++ b/net/minecraft/client/color/item/ItemColors.java
-@@ -24,7 +_,8 @@
+@@ -25,7 +_,8 @@
@OnlyIn(Dist.CLIENT)
public class ItemColors {
private static final int f_168642_ = -1;
- private final IdMapper f_92674_ = new IdMapper<>(32);
-+ // FORGE: Use RegistryDelegates as non-Vanilla item ids are not constant
-+ private final java.util.Map, ItemColor> f_92674_ = new java.util.HashMap<>();
++ // FORGE: Use registry delegate as non-Vanilla item ids are not constant
++ private final java.util.Map, ItemColor> f_92674_ = new java.util.HashMap<>();
public static ItemColors m_92683_(BlockColors p_92684_) {
ItemColors itemcolors = new ItemColors();
-@@ -84,17 +_,18 @@
- itemcolors.m_92689_((p_92693_, p_92694_) -> {
- return p_92694_ == 0 ? -1 : MapItem.m_42918_(p_92693_);
+@@ -88,17 +_,18 @@
+ itemcolors.m_92689_((p_232352_, p_232353_) -> {
+ return p_232353_ == 0 ? -1 : MapItem.m_42918_(p_232352_);
}, Items.f_42573_);
+ net.minecraftforge.client.ForgeHooksClient.onItemColorsInit(itemcolors, p_92684_);
return itemcolors;
@@ -20,14 +20,14 @@
public int m_92676_(ItemStack p_92677_, int p_92678_) {
- ItemColor itemcolor = this.f_92674_.m_7942_(Registry.f_122827_.m_7447_(p_92677_.m_41720_()));
-+ ItemColor itemcolor = this.f_92674_.get(p_92677_.m_41720_().delegate);
++ ItemColor itemcolor = this.f_92674_.get(net.minecraftforge.registries.ForgeRegistries.ITEMS.getDelegateOrThrow(p_92677_.m_41720_()));
return itemcolor == null ? -1 : itemcolor.m_92671_(p_92677_, p_92678_);
}
public void m_92689_(ItemColor p_92690_, ItemLike... p_92691_) {
for(ItemLike itemlike : p_92691_) {
- this.f_92674_.m_122664_(p_92690_, Item.m_41393_(itemlike.m_5456_()));
-+ this.f_92674_.put(itemlike.m_5456_().delegate, p_92690_);
++ this.f_92674_.put(net.minecraftforge.registries.ForgeRegistries.ITEMS.getDelegateOrThrow(itemlike.m_5456_()), p_92690_);
}
}
diff --git a/patches/minecraft/net/minecraft/client/gui/Gui.java.patch b/patches/minecraft/net/minecraft/client/gui/Gui.java.patch
index 72682e4eda9..4cd9e4b0ce1 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
-@@ -411,6 +_,7 @@
+@@ -400,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;
-@@ -463,6 +_,10 @@
+@@ -452,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;
-@@ -500,6 +_,7 @@
+@@ -489,6 +_,7 @@
RenderSystem.m_157429_(1.0F, 1.0F, 1.0F, f1);
m_93200_(p_93029_, l + 3, i1 + 3, this.m_93252_(), 18, 18, textureatlassprite);
});
@@ -27,12 +27,12 @@
}
}
-@@ -620,12 +_,13 @@
+@@ -609,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_()) {
-- MutableComponent mutablecomponent = (new TextComponent("")).m_7220_(this.f_92994_.m_41786_()).m_130940_(this.f_92994_.m_41791_().f_43022_);
-+ MutableComponent mutablecomponent = (new TextComponent("")).m_7220_(this.f_92994_.m_41786_()).m_130938_(this.f_92994_.m_41791_().getStyleModifier());
+- MutableComponent mutablecomponent = Component.m_237119_().m_7220_(this.f_92994_.m_41786_()).m_130940_(this.f_92994_.m_41791_().f_43022_);
++ MutableComponent mutablecomponent = Component.m_237119_().m_7220_(this.f_92994_.m_41786_()).m_130938_(this.f_92994_.m_41791_().getStyleModifier());
if (this.f_92994_.m_41788_()) {
mutablecomponent.m_130940_(ChatFormatting.ITALIC);
}
@@ -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_()) {
-@@ -641,7 +_,13 @@
+@@ -630,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_();
}
}
-@@ -1153,7 +_,7 @@
+@@ -1144,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/AbstractWidget.java.patch b/patches/minecraft/net/minecraft/client/gui/components/AbstractWidget.java.patch
index 130f63de498..e582815e1ac 100644
--- a/patches/minecraft/net/minecraft/client/gui/components/AbstractWidget.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/components/AbstractWidget.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/components/AbstractWidget.java
+++ b/net/minecraft/client/gui/components/AbstractWidget.java
-@@ -86,7 +_,7 @@
+@@ -85,7 +_,7 @@
this.m_93228_(p_93676_, this.f_93620_, this.f_93621_, 0, 46 + i * 20, this.f_93618_ / 2, this.f_93619_);
this.m_93228_(p_93676_, this.f_93620_ + this.f_93618_ / 2, this.f_93621_, 200 - this.f_93618_ / 2, 46 + i * 20, this.f_93618_ / 2, this.f_93619_);
this.m_7906_(p_93676_, minecraft, p_93677_, p_93678_);
@@ -9,7 +9,7 @@
m_93215_(p_93676_, font, this.m_6035_(), this.f_93620_ + this.f_93618_ / 2, this.f_93621_ + (this.f_93619_ - 8) / 2, j | Mth.m_14167_(this.f_93625_ * 255.0F) << 24);
}
-@@ -181,6 +_,10 @@
+@@ -180,6 +_,10 @@
this.f_93618_ = p_93675_;
}
@@ -20,7 +20,7 @@
public void m_93650_(float p_93651_) {
this.f_93625_ = p_93651_;
}
-@@ -203,6 +_,19 @@
+@@ -202,6 +_,19 @@
protected void m_93692_(boolean p_93693_) {
this.f_93616_ = p_93693_;
diff --git a/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch b/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch
index 548584b76a0..08759aa86b0 100644
--- a/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/components/DebugScreenOverlay.java
+++ b/net/minecraft/client/gui/components/DebugScreenOverlay.java
-@@ -399,6 +_,7 @@
+@@ -409,6 +_,7 @@
list.add("");
list.add(ChatFormatting.UNDERLINE + "Targeted Entity");
list.add(String.valueOf((Object)Registry.f_122826_.m_7981_(entity.m_6095_())));
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/DeathScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/DeathScreen.java.patch
index 438b09e4d2e..5b7d111e147 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/DeathScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/DeathScreen.java.patch
@@ -1,10 +1,10 @@
--- a/net/minecraft/client/gui/screens/DeathScreen.java
+++ b/net/minecraft/client/gui/screens/DeathScreen.java
-@@ -37,6 +_,7 @@
+@@ -36,6 +_,7 @@
})));
- this.f_169295_.add(this.m_142416_(new Button(this.f_96543_ / 2 - 100, this.f_96544_ / 4 + 96, 200, 20, new TranslatableComponent("deathScreen.titleScreen"), (p_95925_) -> {
+ this.f_169295_.add(this.m_142416_(new Button(this.f_96543_ / 2 - 100, this.f_96544_ / 4 + 96, 200, 20, Component.m_237115_("deathScreen.titleScreen"), (p_95925_) -> {
if (this.f_95908_) {
+ m_95931_(true);
this.m_95934_();
} else {
- ConfirmScreen confirmscreen = new ConfirmScreen(this::m_95931_, new TranslatableComponent("deathScreen.quit.confirm"), TextComponent.f_131282_, new TranslatableComponent("deathScreen.titleScreen"), new TranslatableComponent("deathScreen.respawn"));
+ ConfirmScreen confirmscreen = new ConfirmScreen(this::m_95931_, Component.m_237115_("deathScreen.quit.confirm"), CommonComponents.f_237098_, Component.m_237115_("deathScreen.titleScreen"), Component.m_237115_("deathScreen.respawn"));
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/OptionsScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/OptionsScreen.java.patch
index bbb6bf4c536..dbfd441b0bc 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/OptionsScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/OptionsScreen.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/OptionsScreen.java
+++ b/net/minecraft/client/gui/screens/OptionsScreen.java
-@@ -141,4 +_,12 @@
+@@ -140,4 +_,12 @@
m_93215_(p_96249_, this.f_96547_, this.f_96539_, this.f_96543_ / 2, 15, 16777215);
super.m_6305_(p_96249_, p_96250_, p_96251_, p_96252_);
}
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 4ee57876d2b..7ea644ffa06 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/Screen.java
+++ b/net/minecraft/client/gui/screens/Screen.java
-@@ -127,7 +_,7 @@
+@@ -126,7 +_,7 @@
}
public void m_7379_() {
@@ -9,7 +9,7 @@
}
protected T m_142416_(T p_169406_) {
-@@ -164,15 +_,29 @@
+@@ -163,15 +_,29 @@
this.f_169368_.clear();
}
@@ -43,7 +43,7 @@
this.m_169383_(p_169389_, list, p_169392_, p_169393_);
}
-@@ -185,20 +_,44 @@
+@@ -184,20 +_,44 @@
}
public void m_96597_(PoseStack p_96598_, List p_96599_, int p_96600_, int p_96601_) {
@@ -90,7 +90,7 @@
if (k > i) {
i = k;
}
-@@ -206,8 +_,8 @@
+@@ -205,8 +_,8 @@
j += clienttooltipcomponent.m_142103_();
}
@@ -101,7 +101,7 @@
if (j2 + i > this.f_96543_) {
j2 -= 28 + i;
}
-@@ -228,15 +_,16 @@
+@@ -231,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_();
-@@ -251,7 +_,7 @@
+@@ -253,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);
}
-@@ -261,7 +_,7 @@
+@@ -263,7 +_,7 @@
for(int l2 = 0; l2 < p_169385_.size(); ++l2) {
ClientTooltipComponent clienttooltipcomponent2 = p_169385_.get(l2);
@@ -145,20 +145,7 @@
l1 += clienttooltipcomponent2.m_142103_() + (l2 == 0 ? 2 : 0);
}
-@@ -355,9 +_,12 @@
- }
-
- public void m_96612_(String p_96613_, boolean p_96614_) {
-+ p_96613_ = net.minecraftforge.event.ForgeEventFactory.onClientSendMessage(p_96613_);
-+ if (p_96613_.isEmpty()) return;
- if (p_96614_) {
- this.f_96541_.f_91065_.m_93076_().m_93783_(p_96613_);
- }
-+ if (net.minecraftforge.client.ClientCommandHandler.sendMessage(p_96613_)) return;
-
- this.f_96541_.f_91074_.m_108739_(p_96613_);
- }
-@@ -368,11 +_,21 @@
+@@ -363,9 +_,19 @@
this.f_96547_ = p_96607_.f_91062_;
this.f_96543_ = p_96608_;
this.f_96544_ = p_96609_;
@@ -170,17 +157,15 @@
+ f_96540_.add(b);
+ };
+ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.ScreenEvent.InitScreenEvent.Pre(this, this.f_96540_, add, this::m_169411_))) {
- this.m_169413_();
- this.m_7522_((GuiEventListener)null);
- this.m_7856_();
+ this.m_232761_();
this.m_169407_(false);
this.m_169378_(f_169370_);
+ }
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.ScreenEvent.InitScreenEvent.Post(this, this.f_96540_, add, this::m_169411_));
}
- public List extends GuiEventListener> m_6702_() {
-@@ -395,6 +_,7 @@
+ protected void m_232761_() {
+@@ -394,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);
@@ -188,7 +173,7 @@
} else {
this.m_96626_(p_96560_);
}
-@@ -414,6 +_,7 @@
+@@ -413,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_();
@@ -196,7 +181,7 @@
}
public boolean m_7043_() {
-@@ -499,6 +_,10 @@
+@@ -498,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 acd4dcb64a7..112fe416c4d 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch
@@ -1,14 +1,14 @@
--- a/net/minecraft/client/gui/screens/TitleScreen.java
+++ b/net/minecraft/client/gui/screens/TitleScreen.java
-@@ -73,6 +_,7 @@
- private TitleScreen.Warning32Bit f_210857_;
- private RealmsClient f_210858_;
- private boolean f_210859_ = false;
+@@ -66,6 +_,7 @@
+ private long f_96715_;
+ @Nullable
+ private TitleScreen.WarningLabel f_232768_;
+ private net.minecraftforge.client.gui.NotificationModUpdateScreen modUpdateNotification;
public TitleScreen() {
this(false);
-@@ -131,11 +_,16 @@
+@@ -110,11 +_,16 @@
int j = this.f_96543_ - i - 2;
int k = 24;
int l = this.f_96544_ / 4 + 48;
@@ -17,7 +17,7 @@
this.m_96772_(l, 24);
} else {
this.m_96763_(l, 24);
-+ modButton = this.m_142416_(new Button(this.f_96543_ / 2 - 100, l + 24 * 2, 98, 20, new TranslatableComponent("fml.menu.mods"), button -> {
++ modButton = this.m_142416_(new Button(this.f_96543_ / 2 - 100, l + 24 * 2, 98, 20, Component.m_237115_("fml.menu.mods"), button -> {
+ this.f_96541_.m_91152_(new net.minecraftforge.client.gui.ModListScreen(this));
+ }));
}
@@ -25,24 +25,24 @@
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_()));
-@@ -201,7 +_,7 @@
+@@ -169,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;
-- (this.m_142416_(new Button(this.f_96543_ / 2 - 100, p_96764_ + p_96765_ * 2, 200, 20, new TranslatableComponent("menu.online"), (p_211788_) -> {
-+ (this.m_142416_(new Button(this.f_96543_ / 2 + 2, p_96764_ + p_96765_ * 2, 98, 20, new TranslatableComponent("menu.online"), (p_96771_) -> {
+- (this.m_142416_(new Button(this.f_96543_ / 2 - 100, p_96764_ + p_96765_ * 2, 200, 20, Component.m_237115_("menu.online"), (p_210872_) -> {
++ (this.m_142416_(new Button(this.f_96543_ / 2 + 2, p_96764_ + p_96765_ * 2, 98, 20, Component.m_237115_("menu.online"), (p_96771_) -> {
this.m_96793_();
}, button$ontooltip))).f_93623_ = flag;
}
-@@ -331,6 +_,7 @@
- this.f_210857_.f_210875_.m_6514_(p_96739_, this.f_210857_.f_210876_, this.f_210857_.f_210877_, 9, 16777215 | l);
+@@ -298,6 +_,7 @@
+ this.f_232768_.m_232790_(p_96739_, l);
}
+ net.minecraftforge.client.ForgeHooksClient.renderMainMenu(this, p_96739_, this.f_96547_, this.f_96543_, this.f_96544_, l);
if (this.f_96721_ != null) {
p_96739_.m_85836_();
p_96739_.m_85837_((double)(this.f_96543_ / 2 + 90), 70.0D, 0.0D);
-@@ -353,7 +_,14 @@
+@@ -320,7 +_,14 @@
s = s + I18n.m_118938_("menu.modded");
}
@@ -58,7 +58,7 @@
for(GuiEventListener guieventlistener : this.m_6702_()) {
if (guieventlistener instanceof AbstractWidget) {
-@@ -365,6 +_,7 @@
+@@ -332,6 +_,7 @@
if (this.m_96789_() && f1 >= 1.0F) {
this.f_96726_.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 e69bb8ba9b4..25193d29fd8 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
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java
+++ b/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java
-@@ -43,6 +_,7 @@
+@@ -42,6 +_,7 @@
@Nullable
private AdvancementTab f_97336_;
private boolean f_97337_;
@@ -8,7 +8,7 @@
public AdvancementsScreen(ClientAdvancements p_97340_) {
super(NarratorChatListener.f_93310_);
-@@ -58,7 +_,13 @@
+@@ -57,7 +_,13 @@
} else {
this.f_97334_.m_104401_(this.f_97336_ == null ? null : this.f_97336_.m_97182_(), true);
}
@@ -16,14 +16,14 @@
+ if (this.f_97335_.size() > AdvancementTabType.MAX_TABS) {
+ int guiLeft = (this.f_96543_ - 252) / 2;
+ int guiTop = (this.f_96544_ - 140) / 2;
-+ m_142416_(new net.minecraft.client.gui.components.Button(guiLeft, guiTop - 50, 20, 20, new net.minecraft.network.chat.TextComponent("<"), b -> tabPage = Math.max(tabPage - 1, 0 )));
-+ m_142416_(new net.minecraft.client.gui.components.Button(guiLeft + 252 - 20, guiTop - 50, 20, 20, new net.minecraft.network.chat.TextComponent(">"), b -> tabPage = Math.min(tabPage + 1, maxPages)));
++ m_142416_(new net.minecraft.client.gui.components.Button(guiLeft, guiTop - 50, 20, 20, Component.m_237113_("<"), b -> tabPage = Math.max(tabPage - 1, 0 )));
++ m_142416_(new net.minecraft.client.gui.components.Button(guiLeft + 252 - 20, guiTop - 50, 20, 20, Component.m_237113_(">"), b -> tabPage = Math.min(tabPage + 1, maxPages)));
+ maxPages = this.f_97335_.size() / AdvancementTabType.MAX_TABS;
+ }
}
public void m_7861_() {
-@@ -76,7 +_,7 @@
+@@ -75,7 +_,7 @@
int j = (this.f_96544_ - 140) / 2;
for(AdvancementTab advancementtab : this.f_97335_.values()) {
@@ -32,19 +32,19 @@
this.f_97334_.m_104401_(advancementtab.m_97182_(), true);
break;
}
-@@ -100,6 +_,11 @@
+@@ -99,6 +_,11 @@
int i = (this.f_96543_ - 252) / 2;
int j = (this.f_96544_ - 140) / 2;
this.m_7333_(p_97361_);
+ if (maxPages != 0) {
-+ net.minecraft.network.chat.Component page = new net.minecraft.network.chat.TextComponent(String.format("%d / %d", tabPage + 1, maxPages + 1));
++ net.minecraft.network.chat.Component page = Component.m_237113_(String.format("%d / %d", tabPage + 1, maxPages + 1));
+ int width = this.f_96547_.m_92852_(page);
+ this.f_96547_.m_92744_(p_97361_, page.m_7532_(), i + (252 / 2) - (width / 2), j - 44, -1);
+ }
this.m_97373_(p_97361_, p_97362_, p_97363_, i, j);
this.m_97356_(p_97361_, i, j);
this.m_97381_(p_97361_, p_97362_, p_97363_, i, j);
-@@ -150,12 +_,14 @@
+@@ -149,12 +_,14 @@
RenderSystem.m_157456_(0, f_97330_);
for(AdvancementTab advancementtab : this.f_97335_.values()) {
@@ -59,7 +59,7 @@
advancementtab1.m_97159_(p_97358_, p_97359_, this.f_96542_);
}
-@@ -181,7 +_,7 @@
+@@ -180,7 +_,7 @@
if (this.f_97335_.size() > 1) {
for(AdvancementTab advancementtab : this.f_97335_.values()) {
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsList.java.patch
index 6343977bd6f..f18b1aadd63 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsList.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsList.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/controls/KeyBindsList.java
+++ b/net/minecraft/client/gui/screens/controls/KeyBindsList.java
-@@ -53,7 +_,7 @@
+@@ -51,7 +_,7 @@
}
protected int m_5756_() {
@@ -9,7 +9,7 @@
}
public int m_5759_() {
-@@ -109,7 +_,7 @@
+@@ -107,7 +_,7 @@
KeyEntry(final KeyMapping p_193916_, final Component p_193917_) {
this.f_193910_ = p_193916_;
this.f_193911_ = p_193917_;
@@ -18,15 +18,15 @@
KeyBindsList.this.f_193858_.f_193975_ = p_193916_;
}) {
protected MutableComponent m_5646_() {
-@@ -117,6 +_,7 @@
+@@ -115,6 +_,7 @@
}
};
- this.f_193913_ = new Button(0, 0, 50, 20, new TranslatableComponent("controls.reset"), (p_193935_) -> {
+ this.f_193913_ = new Button(0, 0, 50, 20, Component.m_237115_("controls.reset"), (p_193935_) -> {
+ this.f_193910_.setToDefault();
KeyBindsList.this.f_93386_.f_91066_.m_92159_(p_193916_, p_193916_.m_90861_());
KeyMapping.m_90854_();
}) {
-@@ -130,7 +_,7 @@
+@@ -128,7 +_,7 @@
boolean flag = KeyBindsList.this.f_193858_.f_193975_ == this.f_193910_;
float f = (float)(p_193926_ + 90 - KeyBindsList.this.f_193859_);
KeyBindsList.this.f_93386_.f_91062_.m_92889_(p_193923_, this.f_193911_, f, (float)(p_193925_ + p_193928_ / 2 - 9 / 2), 16777215);
@@ -35,7 +35,7 @@
this.f_193913_.f_93621_ = p_193925_;
this.f_193913_.f_93623_ = !this.f_193910_.m_90864_();
this.f_193913_.m_6305_(p_193923_, p_193929_, p_193930_, p_193932_);
-@@ -138,11 +_,12 @@
+@@ -136,11 +_,12 @@
this.f_193912_.f_93621_ = p_193925_;
this.f_193912_.m_93666_(this.f_193910_.m_90863_());
boolean flag1 = false;
@@ -49,9 +49,9 @@
}
}
}
-@@ -150,7 +_,7 @@
+@@ -148,7 +_,7 @@
if (flag) {
- this.f_193912_.m_93666_((new TextComponent("> ")).m_7220_(this.f_193912_.m_6035_().m_6881_().m_130940_(ChatFormatting.YELLOW)).m_130946_(" <").m_130940_(ChatFormatting.YELLOW));
+ this.f_193912_.m_93666_(Component.m_237113_("> ").m_7220_(this.f_193912_.m_6035_().m_6881_().m_130940_(ChatFormatting.YELLOW)).m_130946_(" <").m_130940_(ChatFormatting.YELLOW));
} else if (flag1) {
- this.f_193912_.m_93666_(this.f_193912_.m_6035_().m_6881_().m_130940_(ChatFormatting.RED));
+ this.f_193912_.m_93666_(this.f_193912_.m_6035_().m_6881_().m_130940_(keyCodeModifierConflict ? ChatFormatting.GOLD : ChatFormatting.RED));
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch
index 7891326ea8b..5a0a9bd0cba 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch
@@ -2,7 +2,7 @@
+++ b/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java
@@ -31,7 +_,7 @@
this.m_7787_(this.f_193977_);
- this.f_193978_ = this.m_142416_(new Button(this.f_96543_ / 2 - 155, this.f_96544_ - 29, 150, 20, new TranslatableComponent("controls.resetAll"), (p_193999_) -> {
+ this.f_193978_ = this.m_142416_(new Button(this.f_96543_ / 2 - 155, this.f_96544_ - 29, 150, 20, Component.m_237115_("controls.resetAll"), (p_193999_) -> {
for(KeyMapping keymapping : this.f_96282_.f_92059_) {
- keymapping.m_90848_(keymapping.m_90861_());
+ keymapping.setToDefault();
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch
index 8e2cd08af50..d49e023ae12 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch
@@ -108,7 +108,7 @@
this.m_6597_(slot2, slot2.f_40219_, p_97814_, ClickType.QUICK_MOVE);
}
}
-@@ -496,7 +_,7 @@
+@@ -495,7 +_,7 @@
this.m_6597_((Slot)null, -999, AbstractContainerMenu.m_38930_(2, this.f_97717_), ClickType.QUICK_CRAFT);
} else if (!this.f_97732_.m_142621_().m_41619_()) {
@@ -117,7 +117,7 @@
this.m_6597_(slot, k, p_97814_, ClickType.CLONE);
} else {
boolean flag1 = k != -999 && (InputConstants.m_84830_(Minecraft.m_91087_().m_91268_().m_85439_(), 340) || InputConstants.m_84830_(Minecraft.m_91087_().m_91268_().m_85439_(), 344));
-@@ -538,34 +_,39 @@
+@@ -542,34 +_,39 @@
}
public boolean m_7933_(int p_97765_, int p_97766_, int p_97767_) {
@@ -164,13 +164,13 @@
this.m_6597_(this.f_97734_, this.f_97734_.f_40219_, i, ClickType.SWAP);
return true;
}
-@@ -600,6 +_,18 @@
+@@ -604,6 +_,18 @@
public T m_6262_() {
return this.f_97732_;
+ }
+
-+ @javax.annotation.Nullable
++ @org.jetbrains.annotations.Nullable
+ public Slot getSlotUnderMouse() { return this.f_97734_; }
+ public int getGuiLeft() { return f_97735_; }
+ public int getGuiTop() { return f_97736_; }
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 457f30e45a5..4e18a7ff4f2 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
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java
+++ b/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java
-@@ -73,6 +_,8 @@
+@@ -72,6 +_,8 @@
private Slot f_98512_;
private CreativeInventoryListener f_98513_;
private boolean f_98514_;
@@ -9,20 +9,20 @@
private boolean f_98515_;
private final Set> f_98516_ = new HashSet<>();
-@@ -232,6 +_,12 @@
+@@ -231,6 +_,12 @@
protected void m_7856_() {
if (this.f_96541_.f_91072_.m_105290_()) {
super.m_7856_();
+ int tabCount = CreativeModeTab.f_40748_.length;
+ if (tabCount > 12) {
-+ m_142416_(new net.minecraft.client.gui.components.Button(f_97735_, f_97736_ - 50, 20, 20, new TextComponent("<"), b -> tabPage = Math.max(tabPage - 1, 0 )));
-+ m_142416_(new net.minecraft.client.gui.components.Button(f_97735_ + f_97726_ - 20, f_97736_ - 50, 20, 20, new TextComponent(">"), b -> tabPage = Math.min(tabPage + 1, maxPages)));
++ m_142416_(new net.minecraft.client.gui.components.Button(f_97735_, f_97736_ - 50, 20, 20, Component.m_237113_("<"), b -> tabPage = Math.max(tabPage - 1, 0 )));
++ m_142416_(new net.minecraft.client.gui.components.Button(f_97735_ + f_97726_ - 20, f_97736_ - 50, 20, 20, Component.m_237113_(">"), b -> tabPage = Math.min(tabPage + 1, maxPages)));
+ maxPages = (int) Math.ceil((tabCount - 12) / 10D);
+ }
this.f_96541_.f_91068_.m_90926_(true);
- this.f_98510_ = new EditBox(this.f_96547_, this.f_97735_ + 82, this.f_97736_ + 6, 80, 9, new TranslatableComponent("itemGroup.search"));
+ this.f_98510_ = new EditBox(this.f_96547_, this.f_97735_ + 82, this.f_97736_ + 6, 80, 9, Component.m_237115_("itemGroup.search"));
this.f_98510_.m_94199_(50);
-@@ -273,7 +_,7 @@
+@@ -272,7 +_,7 @@
public boolean m_5534_(char p_98521_, int p_98522_) {
if (this.f_98514_) {
return false;
@@ -31,7 +31,7 @@
return false;
} else {
String s = this.f_98510_.m_94155_();
-@@ -291,7 +_,7 @@
+@@ -290,7 +_,7 @@
public boolean m_7933_(int p_98547_, int p_98548_, int p_98549_) {
this.f_98514_ = false;
@@ -40,7 +40,7 @@
if (this.f_96541_.f_91066_.f_92098_.m_90832_(p_98547_, p_98548_)) {
this.f_98514_ = true;
this.m_98560_(CreativeModeTab.f_40754_);
-@@ -328,6 +_,32 @@
+@@ -327,6 +_,32 @@
private void m_98630_() {
(this.f_97732_).f_98639_.clear();
this.f_98516_.clear();
@@ -73,7 +73,7 @@
String s = this.f_98510_.m_94155_();
if (s.isEmpty()) {
for(Item item : Registry.f_122827_) {
-@@ -372,9 +_,9 @@
+@@ -371,9 +_,9 @@
protected void m_7027_(PoseStack p_98616_, int p_98617_, int p_98618_) {
CreativeModeTab creativemodetab = CreativeModeTab.f_40748_[f_98507_];
@@ -85,7 +85,7 @@
}
}
-@@ -385,7 +_,7 @@
+@@ -384,7 +_,7 @@
double d1 = p_98532_ - (double)this.f_97736_;
for(CreativeModeTab creativemodetab : CreativeModeTab.f_40748_) {
@@ -94,7 +94,7 @@
return true;
}
}
-@@ -406,7 +_,7 @@
+@@ -405,7 +_,7 @@
this.f_98509_ = false;
for(CreativeModeTab creativemodetab : CreativeModeTab.f_40748_) {
@@ -103,7 +103,7 @@
this.m_98560_(creativemodetab);
return true;
}
-@@ -417,12 +_,15 @@
+@@ -416,12 +_,15 @@
}
private boolean m_98631_() {
@@ -118,7 +118,7 @@
+ slotColor = p_98561_.getSlotColor();
this.f_97737_.clear();
(this.f_97732_).f_98639_.clear();
- if (p_98561_ == CreativeModeTab.f_40760_) {
+ this.m_238391_();
@@ -499,13 +_,15 @@
}
@@ -162,7 +162,7 @@
}
+ if (maxPages != 0) {
-+ Component page = new TextComponent(String.format("%d / %d", tabPage + 1, maxPages + 1));
++ Component page = Component.m_237113_(String.format("%d / %d", tabPage + 1, maxPages + 1));
+ this.m_93250_(300);
+ this.f_96542_.f_115093_ = 300.0F;
+ f_96547_.m_92744_(p_98577_, page.m_7532_(), f_97735_ + (f_97726_ / 2) - (f_96547_.m_92852_(page) / 2), f_97736_ - 44, -1);
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen.java.patch
index bea69fe6c3f..42964990f43 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen.java
+++ b/net/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen.java
-@@ -44,12 +_,15 @@
+@@ -42,12 +_,15 @@
if (!collection.isEmpty() && j >= 32) {
RenderSystem.m_157429_(1.0F, 1.0F, 1.0F, 1.0F);
boolean flag = j >= 120;
@@ -17,7 +17,7 @@
this.m_194002_(p_194015_, i, k, iterable, flag);
this.m_194008_(p_194015_, i, k, iterable, flag);
if (flag) {
-@@ -110,6 +_,12 @@
+@@ -108,6 +_,12 @@
int i = this.f_97736_;
for(MobEffectInstance mobeffectinstance : p_98726_) {
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch
index a88da97caa7..e79bb5c6490 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java
+++ b/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java
-@@ -151,7 +_,7 @@
+@@ -150,7 +_,7 @@
int i2 = 86 - this.f_96547_.m_92895_(s);
FormattedText formattedtext = EnchantmentNames.m_98734_().m_98737_(this.f_96547_, i2);
int j2 = 6839882;
@@ -9,20 +9,20 @@
this.m_93228_(p_98762_, j1, j + 14 + 19 * i1, 0, 185, 108, 19);
this.m_93228_(p_98762_, j1 + 1, j + 15 + 19 * i1, 16 * i1, 239, 16, 16);
this.f_96547_.m_92857_(formattedtext, k1, j + 16 + 19 * i1, i2, (j2 & 16711422) >> 1);
-@@ -190,10 +_,13 @@
+@@ -189,10 +_,13 @@
Enchantment enchantment = Enchantment.m_44697_((this.f_97732_).f_39447_[j]);
int l = (this.f_97732_).f_39448_[j];
int i1 = j + 1;
- if (this.m_6774_(60, 14 + 19 * j, 108, 17, (double)p_98768_, (double)p_98769_) && k > 0 && l >= 0 && enchantment != null) {
+ if (this.m_6774_(60, 14 + 19 * j, 108, 17, (double)p_98768_, (double)p_98769_) && k > 0) {
List list = Lists.newArrayList();
-- list.add((new TranslatableComponent("container.enchant.clue", enchantment.m_44700_(l))).m_130940_(ChatFormatting.WHITE));
+- list.add(Component.m_237110_("container.enchant.clue", enchantment.m_44700_(l)).m_130940_(ChatFormatting.WHITE));
- if (!flag) {
-+ list.add((new TranslatableComponent("container.enchant.clue", enchantment == null ? "" : enchantment.m_44700_(l))).m_130940_(ChatFormatting.WHITE));
++ list.add((Component.m_237110_("container.enchant.clue", enchantment == null ? "" : enchantment.m_44700_(l))).m_130940_(ChatFormatting.WHITE));
+ if (enchantment == null) {
-+ list.add(new TextComponent(""));
-+ list.add(new TranslatableComponent("forge.container.enchant.limitedEnchantability").m_130940_(ChatFormatting.RED));
++ list.add(Component.m_237113_(""));
++ list.add(Component.m_237115_("forge.container.enchant.limitedEnchantability").m_130940_(ChatFormatting.RED));
+ } else if (!flag) {
- list.add(TextComponent.f_131282_);
+ list.add(CommonComponents.f_237098_);
if (this.f_96541_.f_91074_.f_36078_ < k) {
- list.add((new TranslatableComponent("container.enchant.level.requirement", (this.f_97732_).f_39446_[j])).m_130940_(ChatFormatting.RED));
+ list.add(Component.m_237110_("container.enchant.level.requirement", (this.f_97732_).f_39446_[j]).m_130940_(ChatFormatting.RED));
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/LoomScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/LoomScreen.java.patch
deleted file mode 100644
index cc67b94ce2f..00000000000
--- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/LoomScreen.java.patch
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/net/minecraft/client/gui/screens/inventory/LoomScreen.java
-+++ b/net/minecraft/client/gui/screens/inventory/LoomScreen.java
-@@ -125,20 +_,20 @@
- int l2 = j + 13;
- int l = this.f_99072_ + 16;
-
-- for(int i1 = this.f_99072_; i1 < l && i1 < BannerPattern.f_58526_ - BannerPattern.f_58527_; ++i1) {
-+ for(int i1 = this.f_99072_; i1 < l && i1 < net.minecraftforge.common.ForgeHooks.getNonPatternItemCount(); ++i1) {
- int j1 = i1 - this.f_99072_;
- int k1 = j2 + j1 % 4 * 14;
- int l1 = l2 + j1 / 4 * 14;
- RenderSystem.m_157456_(0, f_99060_);
- int i2 = this.f_97727_;
-- if (i1 == this.f_97732_.m_39891_()) {
-+ if (net.minecraftforge.common.ForgeHooks.getActualPatternIndex(i1) == this.f_97732_.m_39891_()) {
- i2 += 14;
- } else if (p_99101_ >= k1 && p_99102_ >= l1 && p_99101_ < k1 + 14 && p_99102_ < l1 + 14) {
- i2 += 28;
- }
-
- this.m_93228_(p_99099_, k1, l1, 0, i2, 14, 14);
-- this.m_99108_(i1, k1, l1);
-+ this.m_99108_(net.minecraftforge.common.ForgeHooks.getActualPatternIndex(i1), k1, l1);
- }
- } else if (this.f_99068_) {
- int k2 = i + 60;
-@@ -209,7 +_,7 @@
- int j = i + 56;
- this.f_99070_ = ((float)p_99088_ - (float)i - 7.5F) / ((float)(j - i) - 15.0F);
- this.f_99070_ = Mth.m_14036_(this.f_99070_, 0.0F, 1.0F);
-- int k = f_99061_ - 4;
-+ int k = net.minecraftforge.common.ForgeHooks.getTotalPatternRows() - 4;
- int l = (int)((double)(this.f_99070_ * (float)k) + 0.5D);
- if (l < 0) {
- l = 0;
-@@ -224,7 +_,7 @@
-
- public boolean m_6050_(double p_99079_, double p_99080_, double p_99081_) {
- if (this.f_99067_) {
-- int i = f_99061_ - 4;
-+ int i = net.minecraftforge.common.ForgeHooks.getTotalPatternRows() - 4;
- float f = (float)p_99081_ / (float)i;
- this.f_99070_ = Mth.m_14036_(this.f_99070_ - f, 0.0F, 1.0F);
- this.f_99072_ = 1 + (int)(this.f_99070_ * (float)i + 0.5F) * 4;
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen.java.patch
index a4c259b70a9..22842acb97f 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen.java
+++ b/net/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen.java
-@@ -250,6 +_,11 @@
+@@ -263,6 +_,11 @@
}
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch
index f6fa61b2127..c5c9b3e9ad6 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch
@@ -1,11 +1,11 @@
--- a/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java
+++ b/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java
-@@ -334,6 +_,8 @@
+@@ -321,6 +_,8 @@
this.f_99855_.m_99707_(list1);
}
+ net.minecraftforge.client.ForgeHooksClient.drawForgePingInfo(this.f_99855_, f_99857_, p_99879_, p_99882_, p_99881_, p_99883_, i1, j1);
+
- if (this.f_99856_.f_91066_.f_92051_ || p_99887_) {
+ if (this.f_99856_.f_91066_.m_231828_().m_231551_() || p_99887_) {
RenderSystem.m_157456_(0, ServerSelectionList.f_99759_);
GuiComponent.m_93172_(p_99879_, p_99882_, p_99881_, p_99882_ + 32, p_99881_ + 32, -1601138544);
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch
index 6afde4d114c..ec662d3d9cc 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java
+++ b/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java
-@@ -139,7 +_,7 @@
+@@ -137,7 +_,7 @@
private void m_100013_(TransferableSelectionList p_100014_, Stream p_100015_) {
p_100014_.m_6702_().clear();
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch
index 4dd1b853d63..220e6f093ab 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java
+++ b/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java
-@@ -107,7 +_,7 @@
+@@ -106,7 +_,7 @@
this.m_5674_();
this.f_100279_.clear();
@@ -9,7 +9,7 @@
this.f_100279_.add(new RecipeBookTabButton(recipebookcategories));
}
-@@ -319,7 +_,7 @@
+@@ -318,7 +_,7 @@
}
if (itemstack != null && this.f_100272_.f_91080_ != null) {
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch
index 97391bc335b..ed356fd4c99 100644
--- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch
+++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch
@@ -1,15 +1,6 @@
--- a/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java
+++ b/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java
-@@ -106,7 +_,7 @@
-
- public static CreateWorldScreen m_205424_(@Nullable Screen p_205425_) {
- RegistryAccess.Frozen registryaccess$frozen = RegistryAccess.f_123049_.get();
-- return new CreateWorldScreen(p_205425_, DataPackConfig.f_45842_, new WorldGenSettingsComponent(registryaccess$frozen, WorldGenSettings.m_190050_(registryaccess$frozen), Optional.of(WorldPreset.f_101506_), OptionalLong.empty()));
-+ return new CreateWorldScreen(p_205425_, DataPackConfig.f_45842_, new WorldGenSettingsComponent(registryaccess$frozen, net.minecraftforge.client.ForgeHooksClient.getDefaultWorldPreset().map(type -> type.m_205485_(registryaccess$frozen, new java.util.Random().nextLong(), true, false)).orElseGet(() -> WorldGenSettings.m_190050_(registryaccess$frozen)), net.minecraftforge.client.ForgeHooksClient.getDefaultWorldPreset(), OptionalLong.empty()));
- }
-
- public static CreateWorldScreen m_205426_(@Nullable Screen p_205427_, WorldStem p_205428_, @Nullable Path p_205429_) {
-@@ -625,6 +_,7 @@
+@@ -653,6 +_,7 @@
File file1 = path.toFile();
if (this.f_100832_ == null) {
this.f_100832_ = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource(), new FolderRepositorySource(file1, PackSource.f_10527_));
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent.java.patch
deleted file mode 100644
index b69f42adc01..00000000000
--- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent.java.patch
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent.java
-+++ b/net/minecraft/client/gui/screens/worldselection/WorldGenSettingsComponent.java
-@@ -107,6 +_,7 @@
- this.f_170244_.f_93624_ = false;
- this.f_101391_ = p_101430_.m_142416_(new Button(j, 120, 150, 20, new TranslatableComponent("selectWorld.customizeType"), (p_170248_) -> {
- WorldPreset.PresetEditor worldpreset$preseteditor = WorldPreset.f_101509_.get(this.f_101395_);
-+ worldpreset$preseteditor = net.minecraftforge.client.ForgeHooksClient.getPresetEditor(this.f_101395_, worldpreset$preseteditor);
- if (worldpreset$preseteditor != null) {
- p_101431_.m_91152_(worldpreset$preseteditor.m_101642_(p_101430_, this.f_101394_));
- }
-@@ -273,7 +_,7 @@
- } else {
- this.f_101389_.f_93624_ = p_170288_;
- this.f_101380_.f_93624_ = p_170288_;
-- this.f_101391_.f_93624_ = p_170288_ && WorldPreset.f_101509_.containsKey(this.f_101395_);
-+ this.f_101391_.f_93624_ = p_170288_ && (WorldPreset.f_101509_.containsKey(this.f_101395_) || net.minecraftforge.client.ForgeHooksClient.hasPresetEditor(this.f_101395_));
- this.f_101392_.f_93624_ = p_170288_;
- }
-
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch
new file mode 100644
index 00000000000..3e9f703eaa0
--- /dev/null
+++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch
@@ -0,0 +1,33 @@
+--- a/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java
++++ b/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java
+@@ -66,6 +_,7 @@
+
+ try {
+ WorldLoader.PackConfig worldloader$packconfig = new WorldLoader.PackConfig(packrepository, datapackconfig, false);
++ levelstoragesource$levelstorageaccess.readAdditionalLevelSaveData(); // Read extra (e.g. modded) data from the world before creating it
+ WorldStem worldstem = this.m_233096_(worldloader$packconfig, (p_233103_, p_233104_) -> {
+ return Pair.of(new PrimaryLevelData(p_233159_, p_233161_, Lifecycle.stable()), p_233160_.m_203557_());
+ });
+@@ -151,7 +_,9 @@
+ WorldData worlddata = worldstem.f_206895_();
+ boolean flag = worlddata.m_5961_().m_64670_();
+ boolean flag1 = worlddata.m_5754_() != Lifecycle.stable();
+- if (!p_233149_ || !flag && !flag1) {
++ // Forge: Skip confirmation if it has been done already for this world
++ boolean skipConfirmation = worlddata instanceof PrimaryLevelData pld && pld.hasConfirmedExperimentalWarning();
++ if (skipConfirmation || !p_233149_ || !flag && !flag1) {
+ this.f_233089_.m_91100_().m_235003_(levelstoragesource$levelstorageaccess).thenApply((p_233177_) -> {
+ return true;
+ }).exceptionallyComposeAsync((p_233183_) -> {
+@@ -173,9 +_,11 @@
+ return null;
+ });
+ } else {
++ if (flag) // Forge: For legacy world options, let vanilla handle it.
+ this.m_233140_(p_233146_, p_233147_, flag, () -> {
+ this.m_233145_(p_233146_, p_233147_, p_233148_, false);
+ });
++ else net.minecraftforge.client.ForgeHooksClient.createWorldConfirmationScreen(p_233147_, levelstoragesource$levelstorageaccess, packrepository, worldstem);
+ worldstem.close();
+ m_233116_(levelstoragesource$levelstorageaccess, p_233147_);
+ }
diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldPreset.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldPreset.java.patch
deleted file mode 100644
index a4680d8718e..00000000000
--- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldPreset.java.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/net/minecraft/client/gui/screens/worldselection/WorldPreset.java
-+++ b/net/minecraft/client/gui/screens/worldselection/WorldPreset.java
-@@ -93,6 +_,9 @@
- WorldPreset(String p_101519_) {
- this.f_101516_ = new TranslatableComponent("generator." + p_101519_);
- }
-+ public WorldPreset(Component displayName) {
-+ this.f_101516_ = displayName;
-+ }
-
- private static WorldGenSettings m_205493_(RegistryAccess p_205494_, WorldGenSettings p_205495_, Holder p_205496_) {
- BiomeSource biomesource = new FixedBiomeSource(p_205496_);
-@@ -134,4 +_,8 @@
- public interface PresetEditor {
- Screen m_101642_(CreateWorldScreen p_101643_, WorldGenSettings p_101644_);
- }
-+
-+ // Forge start
-+ // For internal use only, automatically called for all ForgeWorldTypes. Register your ForgeWorldType in the forge registry!
-+ public static void registerGenerator(WorldPreset gen) { f_101508_.add(gen); }
- }
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 5d369310812..62959cc46d7 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,25 +1,25 @@
--- a/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java
+++ b/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java
-@@ -64,6 +_,7 @@
+@@ -68,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");
+ private static final ResourceLocation FORGE_EXPERIMENTAL_WARNING_ICON = new ResourceLocation("forge","textures/gui/experimental_warning.png");
- static final Component f_101649_ = (new TranslatableComponent("selectWorld.tooltip.fromNewerVersion1")).m_130940_(ChatFormatting.RED);
- static final Component f_101650_ = (new TranslatableComponent("selectWorld.tooltip.fromNewerVersion2")).m_130940_(ChatFormatting.RED);
- static final Component f_101651_ = (new TranslatableComponent("selectWorld.tooltip.snapshot1")).m_130940_(ChatFormatting.GOLD);
-@@ -207,6 +_,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 @@
RenderSystem.m_69478_();
GuiComponent.m_93133_(p_101721_, p_101724_, p_101723_, 0.0F, 0.0F, 32, 32, 32, 32);
RenderSystem.m_69461_();
+ renderExperimentalWarning(p_101721_, p_101727_, p_101728_, p_101723_, p_101724_);
- if (this.f_101693_.f_91066_.f_92051_ || p_101729_) {
+ 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);
-@@ -524,6 +_,19 @@
+@@ -647,6 +_,19 @@
- public String m_170324_() {
- return this.f_101695_.m_78361_();
+ public boolean m_214209_() {
+ return !this.f_101695_.m_164916_();
+ }
+ private void renderExperimentalWarning(PoseStack stack, int mouseX, int mouseY, int top, int left) {
+ if (this.f_101695_.isExperimental()) {
@@ -29,7 +29,7 @@
+ //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_(new TranslatableComponent("forge.experimentalsettings.tooltip"), 200);
++ List tooltip = Minecraft.m_91087_().f_91062_.m_92923_(Component.m_237115_("forge.experimentalsettings.tooltip"), 200);
+ WorldSelectionList.this.f_101654_.m_96617_(stack, tooltip, mouseX, mouseY);
+ }
+ }
diff --git a/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch b/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch
index acf31ddefe4..20086835712 100644
--- a/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch
+++ b/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch
@@ -1,8 +1,8 @@
--- a/net/minecraft/client/model/geom/LayerDefinitions.java
+++ b/net/minecraft/client/model/geom/LayerDefinitions.java
-@@ -284,6 +_,7 @@
+@@ -293,6 +_,7 @@
WoodType.m_61843_().forEach((p_171114_) -> {
- builder.put(ModelLayers.m_171291_(p_171114_), layerdefinition19);
+ builder.put(ModelLayers.m_171291_(p_171114_), layerdefinition20);
});
+ net.minecraftforge.client.ForgeHooksClient.loadLayerDefinitions(builder);
ImmutableMap immutablemap = builder.build();
diff --git a/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch b/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch
index 0ee6a42e259..0e7241950e3 100644
--- a/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch
+++ b/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/model/geom/ModelLayers.java
+++ b/net/minecraft/client/model/geom/ModelLayers.java
-@@ -199,7 +_,8 @@
+@@ -207,7 +_,8 @@
}
public static ModelLayerLocation m_171291_(WoodType p_171292_) {
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch
index 18e172351ac..6c1d569bae8 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch
@@ -1,14 +1,14 @@
--- a/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java
+++ b/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java
-@@ -115,6 +_,7 @@
- this.f_104521_.accept(new TranslatableComponent("connect.joining"));
+@@ -126,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);
+ net.minecraftforge.network.NetworkHooks.handleClientLoginSuccess(this.f_104522_);
this.f_104522_.m_129505_(new ClientPacketListener(this.f_104519_, this.f_104520_, this.f_104522_, this.f_104523_, this.f_104519_.m_193590_()));
}
-@@ -122,7 +_,7 @@
+@@ -133,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,11 +17,11 @@
}
}
-@@ -143,6 +_,7 @@
+@@ -154,6 +_,7 @@
}
public void m_7254_(ClientboundCustomQueryPacket p_104545_) {
+ if (net.minecraftforge.network.NetworkHooks.onCustomPayload(p_104545_, this.f_104522_)) return;
- this.f_104521_.accept(new TranslatableComponent("connect.negotiating"));
+ this.f_104521_.accept(Component.m_237115_("connect.negotiating"));
this.f_104522_.m_129512_(new ServerboundCustomQueryPacket(p_104545_.m_134755_(), (FriendlyByteBuf)null));
}
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch
index abd9dadcdac..f35dbee5b22 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch
@@ -1,14 +1,14 @@
--- a/net/minecraft/client/multiplayer/ClientLevel.java
+++ b/net/minecraft/client/multiplayer/ClientLevel.java
-@@ -117,6 +_,7 @@
- private final Deque f_194122_ = Queues.newArrayDeque();
+@@ -121,6 +_,7 @@
private int f_194123_;
+ private final BlockStatePredictionHandler f_233599_ = new BlockStatePredictionHandler();
private static final Set- f_194124_ = Set.of(Items.f_42127_, Items.f_151033_);
+ private final it.unimi.dsi.fastutil.ints.Int2ObjectMap> partEntities = new it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap<>();
- public ClientLevel(ClientPacketListener p_205505_, ClientLevel.ClientLevelData p_205506_, ResourceKey p_205507_, Holder p_205508_, int p_205509_, int p_205510_, Supplier p_205511_, LevelRenderer p_205512_, boolean p_205513_, long p_205514_) {
- super(p_205506_, p_205507_, p_205508_, p_205511_, true, p_205513_, p_205514_);
-@@ -129,6 +_,8 @@
+ public void m_233651_(int p_233652_) {
+ this.f_233599_.m_233856_(p_233652_, this);
+@@ -174,6 +_,8 @@
this.f_194123_ = p_205510_;
this.m_46465_();
this.m_46466_();
@@ -17,7 +17,7 @@
}
public void m_194171_(Runnable p_194172_) {
-@@ -215,6 +_,7 @@
+@@ -260,6 +_,7 @@
this.m_46473_().m_6521_(() -> {
return Registry.f_122826_.m_7981_(p_104640_.m_6095_()).toString();
});
@@ -25,7 +25,7 @@
p_104640_.m_8119_();
this.m_46473_().m_7238_();
-@@ -277,8 +_,10 @@
+@@ -322,8 +_,10 @@
}
private void m_104739_(int p_104740_, Entity p_104741_) {
@@ -36,31 +36,33 @@
}
public void m_171642_(int p_171643_, Entity.RemovalReason p_171644_) {
-@@ -409,6 +_,11 @@
+@@ -450,6 +_,12 @@
}
- public void m_6263_(@Nullable Player p_104645_, double p_104646_, double p_104647_, double p_104648_, SoundEvent p_104649_, SoundSource p_104650_, float p_104651_, float p_104652_) {
-+ net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_104645_, p_104649_, p_104650_, p_104651_, p_104652_);
+ public void m_214150_(@Nullable Player p_233621_, double p_233622_, double p_233623_, double p_233624_, SoundEvent p_233625_, SoundSource p_233626_, float p_233627_, float p_233628_, long p_233629_) {
++ net.minecraftforge.event.PlayLevelSoundEvent.AtPosition event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtPosition(this, p_233622_, p_233623_, p_233624_, p_233625_, p_233626_, p_233627_, p_233628_);
+ if (event.isCanceled() || event.getSound() == null) return;
-+ p_104649_ = event.getSound();
-+ p_104650_ = event.getCategory();
-+ p_104651_ = event.getVolume();
- if (p_104645_ == this.f_104565_.f_91074_) {
- this.m_7785_(p_104646_, p_104647_, p_104648_, p_104649_, p_104650_, p_104651_, p_104652_, false);
++ p_233625_ = event.getSound();
++ p_233626_ = event.getSource();
++ p_233627_ = event.getNewVolume();
++ p_233628_ = event.getNewPitch();
+ if (p_233621_ == this.f_104565_.f_91074_) {
+ this.m_233602_(p_233622_, p_233623_, p_233624_, p_233625_, p_233626_, p_233627_, p_233628_, false, p_233629_);
}
-@@ -416,6 +_,11 @@
+@@ -457,6 +_,12 @@
}
- public void m_6269_(@Nullable Player p_104659_, Entity p_104660_, SoundEvent p_104661_, SoundSource p_104662_, float p_104663_, float p_104664_) {
-+ net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_104659_, p_104661_, p_104662_, p_104663_, p_104664_);
+ public void m_213890_(@Nullable Player p_233631_, Entity p_233632_, SoundEvent p_233633_, SoundSource p_233634_, float p_233635_, float p_233636_, long p_233637_) {
++ net.minecraftforge.event.PlayLevelSoundEvent.AtEntity event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_233631_, p_233633_, p_233634_, p_233635_, p_233636_);
+ if (event.isCanceled() || event.getSound() == null) return;
-+ p_104661_ = event.getSound();
-+ p_104662_ = event.getCategory();
-+ p_104663_ = event.getVolume();
- if (p_104659_ == this.f_104565_.f_91074_) {
- this.f_104565_.m_91106_().m_120367_(new EntityBoundSoundInstance(p_104661_, p_104662_, p_104663_, p_104664_, p_104660_));
++ p_233633_ = event.getSound();
++ p_233634_ = event.getSource();
++ p_233635_ = event.getNewVolume();
++ p_233636_ = event.getNewPitch();
+ if (p_233631_ == this.f_104565_.f_91074_) {
+ this.f_104565_.m_91106_().m_120367_(new EntityBoundSoundInstance(p_233633_, p_233634_, p_233635_, p_233636_, p_233632_, p_233637_));
}
-@@ -870,6 +_,7 @@
+@@ -902,6 +_,7 @@
}
public void m_104851_(Difficulty p_104852_) {
@@ -68,13 +70,13 @@
this.f_104840_ = p_104852_;
}
-@@ -907,11 +_,30 @@
+@@ -939,14 +_,33 @@
ClientLevel.this.f_104566_.add((AbstractClientPlayer)p_171712_);
}
+ if (p_171712_.isMultipartEntity()) {
+ for (net.minecraftforge.entity.PartEntity> part : p_171712_.getParts()) {
-+ ClientLevel.this.partEntities.put(part.m_142049_(), part);
++ ClientLevel.this.partEntities.put(part.m_19879_(), part);
+ }
+ }
}
@@ -88,10 +90,13 @@
+
+ if (p_171716_.isMultipartEntity()) {
+ for (net.minecraftforge.entity.PartEntity> part : p_171716_.getParts()) {
-+ ClientLevel.this.partEntities.remove(part.m_142049_());
++ ClientLevel.this.partEntities.remove(part.m_19879_());
+ }
+ }
}
+
+ public void m_214006_(Entity p_233660_) {
+ }
+ }
+
+ @Override
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch
index c69570d52f7..cbc03e9e020 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
-@@ -360,6 +_,7 @@
+@@ -361,6 +_,7 @@
this.f_104888_.f_91064_.m_113434_();
this.f_104888_.f_91074_.m_172530_();
@@ -8,26 +8,24 @@
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_);
-@@ -371,6 +_,7 @@
- this.f_104888_.f_91074_.m_108711_(p_105030_.f_132372_());
+@@ -373,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_());
+ net.minecraftforge.network.NetworkHooks.sendMCRegistryPackets(f_104885_, "PLAY_TO_SERVER");
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_();
-@@ -712,7 +_,9 @@
+@@ -768,6 +_,8 @@
+ }
- public void m_5784_(ClientboundChatPacket p_104986_) {
- PacketUtils.m_131363_(p_104986_, this, this.f_104888_);
-- this.f_104888_.f_91065_.m_93051_(p_104986_.m_131840_(), p_104986_.m_131836_(), p_104986_.m_131841_());
-+ net.minecraft.network.chat.Component message = net.minecraftforge.event.ForgeEventFactory.onClientChat(p_104986_.m_131840_(), p_104986_.m_131836_(), p_104986_.m_131841_());
-+ if (message == null) return;
-+ this.f_104888_.f_91065_.m_93051_(p_104986_.m_131840_(), message, p_104986_.m_131841_());
+ Component component = flag ? p_233693_.f_237213_() : p_233693_.m_237220_();
++ component = net.minecraftforge.event.ForgeEventFactory.onClientChat(p_233692_, component, p_233694_);
++ if (component == null) return;
+ this.f_104888_.f_91065_.m_232360_(p_233692_, component, p_233694_);
}
- public void m_7791_(ClientboundAnimatePacket p_104968_) {
-@@ -894,8 +_,10 @@
+@@ -931,8 +_,10 @@
localplayer1.m_21204_().m_22159_(localplayer.m_21204_());
}
@@ -38,7 +36,7 @@
this.f_104889_.m_104630_(i, localplayer1);
localplayer1.m_146922_(-180.0F);
localplayer1.f_108618_ = new KeyboardInput(this.f_104888_.f_91066_);
-@@ -998,10 +_,7 @@
+@@ -1036,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_) -> {
@@ -50,33 +48,33 @@
if (p_205557_ instanceof CommandBlockEntity && this.f_104888_.f_91080_ instanceof CommandBlockEditScreen) {
((CommandBlockEditScreen)this.f_104888_.f_91080_).m_98398_();
-@@ -1147,6 +_,7 @@
+@@ -1185,6 +_,7 @@
public void m_7443_(ClientboundCommandsPacket p_104990_) {
PacketUtils.m_131363_(p_104990_, this, this.f_104888_);
- this.f_104899_ = new CommandDispatcher<>(p_104990_.m_131884_());
+ this.f_104899_ = new CommandDispatcher<>(p_104990_.m_237624_(new CommandBuildContext(this.f_104903_)));
+ this.f_104899_ = net.minecraftforge.client.ClientCommandHandler.mergeServerCommands(this.f_104899_);
}
public void m_7183_(ClientboundStopSoundPacket p_105116_) {
-@@ -1168,6 +_,7 @@
+@@ -1203,6 +_,7 @@
+ ClientRecipeBook clientrecipebook = this.f_104888_.f_91074_.m_108631_();
clientrecipebook.m_90625_(this.f_104900_.m_44051_());
- clientrecipebook.m_90639_().forEach(mutablesearchtree::m_8080_);
- mutablesearchtree.m_7729_();
+ this.f_104888_.m_231374_(SearchRegistry.f_119943_, clientrecipebook.m_90639_());
+ net.minecraftforge.client.ForgeHooksClient.onRecipesUpdated(this.f_104900_);
}
public void m_7244_(ClientboundPlayerLookAtPacket p_105054_) {
-@@ -1262,6 +_,7 @@
- }
+@@ -1304,6 +_,7 @@
- this.f_104888_.m_91171_(SearchRegistry.f_119942_).m_7729_();
+ this.f_104888_.m_231374_(SearchRegistry.f_119941_, nonnulllist);
+ this.f_104888_.m_231374_(SearchRegistry.f_119942_, nonnulllist);
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.TagsUpdatedEvent(this.f_104903_, true, f_104885_.m_129531_()));
}
private void m_205560_(ResourceKey extends Registry extends T>> p_205561_, TagNetworkSerialization.NetworkPayload p_205562_) {
-@@ -1815,7 +_,8 @@
- int i5 = friendlybytebuf.m_130242_();
- this.f_104888_.f_91064_.f_173815_.m_173830_(positionsource, i5);
+@@ -1843,7 +_,8 @@
+ int j5 = friendlybytebuf.m_130242_();
+ this.f_104888_.f_91064_.f_173815_.m_173830_(positionsource, j5);
} else {
- f_104883_.warn("Unknown custom packed identifier: {}", (Object)resourcelocation);
+ if (!net.minecraftforge.network.NetworkHooks.onCustomPayload(p_105004_, this.f_104885_))
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch
index e63e45d894f..577d96798d5 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/multiplayer/MultiPlayerGameMode.java
+++ b/net/minecraft/client/multiplayer/MultiPlayerGameMode.java
-@@ -102,6 +_,7 @@
+@@ -104,6 +_,7 @@
}
public boolean m_105267_(BlockPos p_105268_) {
@@ -8,7 +8,7 @@
if (this.f_105189_.f_91074_.m_36187_(this.f_105189_.f_91073_, p_105268_, this.f_105197_)) {
return false;
} else {
-@@ -116,9 +_,8 @@
+@@ -118,9 +_,8 @@
} else if (blockstate.m_60795_()) {
return false;
} else {
@@ -19,47 +19,58 @@
if (flag) {
block.m_6786_(level, p_105268_, blockstate);
}
-@@ -139,21 +_,25 @@
+@@ -141,6 +_,7 @@
BlockState blockstate = this.f_105189_.f_91073_.m_8055_(p_105270_);
this.f_105189_.m_91301_().m_120581_(this.f_105189_.f_91073_, p_105270_, blockstate, 1.0F);
- this.m_105272_(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_);
-+ if (!net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.f_105189_.f_91074_, p_105270_, p_105271_).isCanceled())
- this.m_105267_(p_105270_);
- this.f_105195_ = 5;
- } else if (!this.f_105196_ || !this.m_105281_(p_105270_)) {
+ this.m_233729_(this.f_105189_.f_91073_, (p_233757_) -> {
++ if (!net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.f_105189_.f_91074_, p_105270_, p_105271_).isCanceled())
+ this.m_105267_(p_105270_);
+ return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_, p_233757_);
+ });
+@@ -149,15 +_,19 @@
if (this.f_105196_) {
- this.m_105272_(ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, this.f_105191_, p_105271_);
+ this.f_105190_.m_104955_(new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, this.f_105191_, p_105271_));
}
+ net.minecraftforge.event.entity.player.PlayerInteractEvent.LeftClickBlock event = net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.f_105189_.f_91074_, p_105270_, p_105271_);
BlockState blockstate1 = this.f_105189_.f_91073_.m_8055_(p_105270_);
this.f_105189_.m_91301_().m_120581_(this.f_105189_.f_91073_, p_105270_, blockstate1, 0.0F);
- this.m_105272_(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_);
- boolean flag = !blockstate1.m_60795_();
- if (flag && this.f_105193_ == 0.0F) {
-+ if (event.getUseBlock() != net.minecraftforge.eventbus.api.Event.Result.DENY)
- blockstate1.m_60686_(this.f_105189_.f_91073_, p_105270_, this.f_105189_.f_91074_);
- }
+ this.m_233729_(this.f_105189_.f_91073_, (p_233728_) -> {
+ boolean flag = !blockstate1.m_60795_();
+ if (flag && this.f_105193_ == 0.0F) {
++ if (event.getUseBlock() != net.minecraftforge.eventbus.api.Event.Result.DENY)
+ blockstate1.m_60686_(this.f_105189_.f_91073_, p_105270_, this.f_105189_.f_91074_);
+ }
-+ if (event.getUseItem() == net.minecraftforge.eventbus.api.Event.Result.DENY) return true;
- if (flag && blockstate1.m_60625_(this.f_105189_.f_91074_, this.f_105189_.f_91074_.f_19853_, p_105270_) >= 1.0F) {
- this.m_105267_(p_105270_);
- } else {
-@@ -193,6 +_,7 @@
++ ServerboundPlayerActionPacket packet = new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_, p_233728_);
++ if (event.getUseItem() == net.minecraftforge.eventbus.api.Event.Result.DENY) return packet;
+ if (flag && blockstate1.m_60625_(this.f_105189_.f_91074_, this.f_105189_.f_91074_.f_19853_, p_105270_) >= 1.0F) {
+ this.m_105267_(p_105270_);
+ } else {
+@@ -169,7 +_,7 @@
+ this.f_105189_.f_91073_.m_6801_(this.f_105189_.f_91074_.m_19879_(), this.f_105191_, (int)(this.f_105193_ * 10.0F) - 1);
+ }
+
+- return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_, p_233728_);
++ return packet;
+ });
+ }
+
+@@ -200,6 +_,7 @@
BlockState blockstate1 = this.f_105189_.f_91073_.m_8055_(p_105284_);
this.f_105189_.m_91301_().m_120581_(this.f_105189_.f_91073_, p_105284_, blockstate1, 1.0F);
- this.m_105272_(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105284_, p_105285_);
-+ if (!net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.f_105189_.f_91074_, p_105284_, p_105285_).isCanceled())
- this.m_105267_(p_105284_);
- return true;
- } else if (this.m_105281_(p_105284_)) {
-@@ -203,12 +_,13 @@
+ this.m_233729_(this.f_105189_.f_91073_, (p_233753_) -> {
++ if (!net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.f_105189_.f_91074_, p_105284_, p_105285_).isCanceled())
+ this.m_105267_(p_105284_);
+ return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105284_, p_105285_, p_233753_);
+ });
+@@ -212,12 +_,13 @@
} else {
this.f_105193_ += blockstate.m_60625_(this.f_105189_.f_91074_, this.f_105189_.f_91074_.f_19853_, p_105284_);
if (this.f_105194_ % 4.0F == 0.0F) {
- SoundType soundtype = blockstate.m_60827_();
+ SoundType soundtype = blockstate.getSoundType(this.f_105189_.f_91073_, p_105284_, this.f_105189_.f_91074_);
- this.f_105189_.m_91106_().m_120367_(new SimpleSoundInstance(soundtype.m_56778_(), SoundSource.BLOCKS, (soundtype.m_56773_() + 1.0F) / 8.0F, soundtype.m_56774_() * 0.5F, p_105284_));
+ this.f_105189_.m_91106_().m_120367_(new SimpleSoundInstance(soundtype.m_56778_(), SoundSource.BLOCKS, (soundtype.m_56773_() + 1.0F) / 8.0F, soundtype.m_56774_() * 0.5F, SoundInstance.m_235150_(), p_105284_));
}
++this.f_105194_;
@@ -67,8 +78,8 @@
+ if (net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.f_105189_.f_91074_, p_105284_, p_105285_).getUseItem() == net.minecraftforge.eventbus.api.Event.Result.DENY) return true;
if (this.f_105193_ >= 1.0F) {
this.f_105196_ = false;
- this.m_105272_(ServerboundPlayerActionPacket.Action.STOP_DESTROY_BLOCK, p_105284_, p_105285_);
-@@ -227,7 +_,7 @@
+ this.m_233729_(this.f_105189_.f_91073_, (p_233739_) -> {
+@@ -263,7 +_,7 @@
}
public float m_105286_() {
@@ -77,7 +88,7 @@
}
public void m_105287_() {
-@@ -244,7 +_,7 @@
+@@ -280,7 +_,7 @@
ItemStack itemstack = this.f_105189_.f_91074_.m_21205_();
boolean flag = this.f_105192_.m_41619_() && itemstack.m_41619_();
if (!this.f_105192_.m_41619_() && !itemstack.m_41619_()) {
@@ -86,62 +97,63 @@
}
return p_105282_.equals(this.f_105191_) && flag;
-@@ -266,13 +_,27 @@
- return InteractionResult.FAIL;
+@@ -312,20 +_,33 @@
+ private InteractionResult m_233746_(LocalPlayer p_233747_, InteractionHand p_233748_, BlockHitResult p_233749_) {
+ BlockPos blockpos = p_233749_.m_82425_();
+ ItemStack itemstack = p_233747_.m_21120_(p_233748_);
++ net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock event = net.minecraftforge.common.ForgeHooks.onRightClickBlock(p_233747_, p_233748_, blockpos, p_233749_);
++ if (event.isCanceled()) {
++ return event.getCancellationResult();
++ }
+ if (this.f_105197_ == GameType.SPECTATOR) {
+ return InteractionResult.SUCCESS;
} else {
- ItemStack itemstack = p_105263_.m_21120_(p_105265_);
-+ net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock event = net.minecraftforge.common.ForgeHooks
-+ .onRightClickBlock(p_105263_, p_105265_, blockpos, p_105266_);
-+ if (event.isCanceled()) {
-+ this.f_105190_.m_104955_(new ServerboundUseItemOnPacket(p_105265_, p_105266_));
-+ return event.getCancellationResult();
-+ }
- if (this.f_105197_ == GameType.SPECTATOR) {
- this.f_105190_.m_104955_(new ServerboundUseItemOnPacket(p_105265_, p_105266_));
- return InteractionResult.SUCCESS;
- } else {
-- boolean flag = !p_105263_.m_21205_().m_41619_() || !p_105263_.m_21206_().m_41619_();
-+ UseOnContext useoncontext = new UseOnContext(p_105263_, p_105265_, p_105266_);
-+ if (event.getUseItem() != net.minecraftforge.eventbus.api.Event.Result.DENY) {
-+ InteractionResult result = itemstack.onItemUseFirst(useoncontext);
-+ if (result != InteractionResult.PASS) {
-+ this.f_105190_.m_104955_(new ServerboundUseItemOnPacket(p_105265_, p_105266_));
-+ return result;
-+ }
+- boolean flag = !p_233747_.m_21205_().m_41619_() || !p_233747_.m_21206_().m_41619_();
++ UseOnContext useoncontext = new UseOnContext(p_233747_, p_233748_, p_233749_);
++ if (event.getUseItem() != net.minecraftforge.eventbus.api.Event.Result.DENY) {
++ InteractionResult result = itemstack.onItemUseFirst(useoncontext);
++ if (result != InteractionResult.PASS) {
++ return result;
+ }
-+ boolean flag = !p_105263_.m_21205_().doesSneakBypassUse(p_105264_,blockpos,p_105263_) || !p_105263_.m_21206_().doesSneakBypassUse(p_105264_,blockpos,p_105263_);
- boolean flag1 = p_105263_.m_36341_() && flag;
-- if (!flag1) {
-+ if (event.getUseBlock() == net.minecraftforge.eventbus.api.Event.Result.ALLOW || (event.getUseBlock() != net.minecraftforge.eventbus.api.Event.Result.DENY && !flag1)) {
- InteractionResult interactionresult = p_105264_.m_8055_(blockpos).m_60664_(p_105264_, p_105263_, p_105265_, p_105266_);
- if (interactionresult.m_19077_()) {
- this.f_105190_.m_104955_(new ServerboundUseItemOnPacket(p_105265_, p_105266_));
-@@ -281,8 +_,8 @@
++ }
++ boolean flag = !p_233747_.m_21205_().doesSneakBypassUse(p_233747_.m_9236_(), blockpos, p_233747_) || !p_233747_.m_21206_().doesSneakBypassUse(p_233747_.m_9236_(), blockpos, p_233747_);
+ boolean flag1 = p_233747_.m_36341_() && flag;
+- if (!flag1) {
++ if (event.getUseBlock() == net.minecraftforge.eventbus.api.Event.Result.ALLOW || (event.getUseBlock() != net.minecraftforge.eventbus.api.Event.Result.DENY && !flag1)) {
+ InteractionResult interactionresult = this.f_105189_.f_91073_.m_8055_(blockpos).m_60664_(this.f_105189_.f_91073_, p_233747_, p_233748_, p_233749_);
+ if (interactionresult.m_19077_()) {
+ return interactionresult;
}
+ }
- this.f_105190_.m_104955_(new ServerboundUseItemOnPacket(p_105265_, p_105266_));
-- if (!itemstack.m_41619_() && !p_105263_.m_36335_().m_41519_(itemstack.m_41720_())) {
-- UseOnContext useoncontext = new UseOnContext(p_105263_, p_105265_, p_105266_);
-+ if (event.getUseItem() == net.minecraftforge.eventbus.api.Event.Result.DENY) return InteractionResult.PASS;
-+ if (event.getUseItem() == net.minecraftforge.eventbus.api.Event.Result.ALLOW || (!itemstack.m_41619_() && !p_105263_.m_36335_().m_41519_(itemstack.m_41720_()))) {
- InteractionResult interactionresult1;
- if (this.f_105197_.m_46408_()) {
- int i = itemstack.m_41613_();
-@@ -311,10 +_,13 @@
- if (p_105236_.m_36335_().m_41519_(itemstack.m_41720_())) {
- return InteractionResult.PASS;
- } else {
-+ InteractionResult cancelResult = net.minecraftforge.common.ForgeHooks.onItemRightClick(p_105236_, p_105238_);
-+ if (cancelResult != null) return cancelResult;
- InteractionResultHolder interactionresultholder = itemstack.m_41682_(p_105237_, p_105236_, p_105238_);
- ItemStack itemstack1 = interactionresultholder.m_19095_();
- if (itemstack1 != itemstack) {
- p_105236_.m_21008_(p_105238_, itemstack1);
-+ if (itemstack1.m_41619_()) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_105236_, itemstack, p_105238_);
- }
+- if (!itemstack.m_41619_() && !p_233747_.m_36335_().m_41519_(itemstack.m_41720_())) {
+- UseOnContext useoncontext = new UseOnContext(p_233747_, p_233748_, p_233749_);
++ if (event.getUseItem() == net.minecraftforge.eventbus.api.Event.Result.DENY) {
++ return InteractionResult.PASS;
++ }
++ if (event.getUseItem() == net.minecraftforge.eventbus.api.Event.Result.ALLOW || (!itemstack.m_41619_() && !p_233747_.m_36335_().m_41519_(itemstack.m_41720_()))) {
+ InteractionResult interactionresult1;
+ if (this.f_105197_.m_46408_()) {
+ int i = itemstack.m_41613_();
+@@ -356,10 +_,17 @@
+ mutableobject.setValue(InteractionResult.PASS);
+ return serverbounduseitempacket;
+ } else {
++ InteractionResult cancelResult = net.minecraftforge.common.ForgeHooks.onItemRightClick(p_233722_, p_233723_);
++ if (cancelResult != null) {
++ mutableobject.setValue(cancelResult);
++ return serverbounduseitempacket;
++ }
+ InteractionResultHolder interactionresultholder = itemstack.m_41682_(this.f_105189_.f_91073_, p_233722_, p_233723_);
+ ItemStack itemstack1 = interactionresultholder.m_19095_();
+ if (itemstack1 != itemstack) {
+ p_233722_.m_21008_(p_233723_, itemstack1);
++ if (itemstack1.m_41619_())
++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_233722_, itemstack, p_233723_);
+ }
- return interactionresultholder.m_19089_();
-@@ -350,6 +_,9 @@
+ mutableobject.setValue(interactionresultholder.m_19089_());
+@@ -398,6 +_,9 @@
this.m_105297_();
Vec3 vec3 = p_105233_.m_82450_().m_82492_(p_105232_.m_20185_(), p_105232_.m_20186_(), p_105232_.m_20189_());
this.f_105190_.m_104955_(ServerboundInteractPacket.m_179612_(p_105232_, p_105231_.m_6144_(), p_105234_, vec3));
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch
index c61b6feaa32..a125f091101 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
-@@ -50,6 +_,7 @@
+@@ -77,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
new file mode 100644
index 00000000000..cd3c2d838d6
--- /dev/null
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ProfileKeyPairManager.java.patch
@@ -0,0 +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;
diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch
index a4803b21bd9..cbd5759ac08 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
-@@ -26,6 +_,7 @@
+@@ -35,6 +_,7 @@
@Nullable
- private String f_105372_;
- private boolean f_105373_;
+ private ServerData.ChatPreview f_233800_;
+ private boolean f_233801_ = true;
+ 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/ServerStatusPinger.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch
index 0678850644b..892f7f7fa58 100644
--- a/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch
+++ b/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/multiplayer/ServerStatusPinger.java
+++ b/net/minecraft/client/multiplayer/ServerStatusPinger.java
-@@ -125,6 +_,7 @@
+@@ -124,6 +_,7 @@
p_105461_.run();
}
diff --git a/patches/minecraft/net/minecraft/client/particle/BreakingItemParticle.java.patch b/patches/minecraft/net/minecraft/client/particle/BreakingItemParticle.java.patch
index 0357c21112b..8cd54f85dbd 100644
--- a/patches/minecraft/net/minecraft/client/particle/BreakingItemParticle.java.patch
+++ b/patches/minecraft/net/minecraft/client/particle/BreakingItemParticle.java.patch
@@ -9,4 +9,4 @@
+ this.m_108337_(model.m_7343_().m_173464_(model, p_105669_, p_105665_, null, 0).getParticleIcon(net.minecraftforge.client.model.data.EmptyModelData.INSTANCE));
this.f_107226_ = 1.0F;
this.f_107663_ /= 2.0F;
- this.f_105643_ = this.f_107223_.nextFloat() * 3.0F;
+ this.f_105643_ = this.f_107223_.m_188501_() * 3.0F;
diff --git a/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch b/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch
index f4fb172ba4a..d7da5ca52be 100644
--- a/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch
+++ b/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/particle/ParticleEngine.java
+++ b/net/minecraft/client/particle/ParticleEngine.java
-@@ -66,11 +_,11 @@
+@@ -63,11 +_,11 @@
private static final int f_172264_ = 16384;
private static final List f_107288_ = ImmutableList.of(ParticleRenderType.f_107429_, ParticleRenderType.f_107430_, ParticleRenderType.f_107432_, ParticleRenderType.f_107431_, ParticleRenderType.f_107433_);
protected ClientLevel f_107287_;
@@ -8,13 +8,13 @@
+ private final Map> f_107289_ = Maps.newTreeMap(net.minecraftforge.client.ForgeHooksClient.makeParticleRenderTypeComparator(f_107288_));
private final Queue f_107290_ = Queues.newArrayDeque();
private final TextureManager f_107291_;
- private final Random f_107292_ = new Random();
+ private final RandomSource f_107292_ = RandomSource.m_216327_();
- private final Int2ObjectMap> f_107293_ = new Int2ObjectOpenHashMap<>();
+ private final Map> f_107293_ = new java.util.HashMap<>();
private final Queue f_107294_ = Queues.newArrayDeque();
private final Map f_107295_ = Maps.newHashMap();
private final TextureAtlas f_107296_;
-@@ -176,13 +_,13 @@
+@@ -178,13 +_,13 @@
}
public void m_107381_(ParticleType p_107382_, ParticleProvider p_107383_) {
@@ -30,7 +30,7 @@
}
public CompletableFuture m_5540_(PreparableReloadListener.PreparationBarrier p_107305_, ResourceManager p_107306_, ProfilerFiller p_107307_, ProfilerFiller p_107308_, Executor p_107309_, Executor p_107310_) {
-@@ -300,7 +_,7 @@
+@@ -288,7 +_,7 @@
@Nullable
private Particle m_107395_(T p_107396_, double p_107397_, double p_107398_, double p_107399_, double p_107400_, double p_107401_, double p_107402_) {
@@ -39,7 +39,7 @@
return particleprovider == null ? null : particleprovider.m_6966_(p_107396_, this.f_107287_, p_107397_, p_107398_, p_107399_, p_107400_, p_107401_, p_107402_);
}
-@@ -381,15 +_,25 @@
+@@ -369,15 +_,25 @@
}
}
@@ -66,7 +66,7 @@
Iterable iterable = this.f_107289_.get(particlerendertype);
if (iterable != null) {
RenderSystem.m_157427_(GameRenderer::m_172829_);
-@@ -399,6 +_,7 @@
+@@ -387,6 +_,7 @@
particlerendertype.m_6505_(bufferbuilder, this.f_107291_);
for(Particle particle : iterable) {
@@ -74,7 +74,7 @@
try {
particle.m_5744_(bufferbuilder, p_107340_, p_107341_);
} catch (Throwable throwable) {
-@@ -429,7 +_,7 @@
+@@ -417,7 +_,7 @@
}
public void m_107355_(BlockPos p_107356_, BlockState p_107357_) {
@@ -83,7 +83,7 @@
VoxelShape voxelshape = p_107357_.m_60808_(this.f_107287_, p_107356_);
double d0 = 0.25D;
voxelshape.m_83286_((p_172273_, p_172274_, p_172275_, p_172276_, p_172277_, p_172278_) -> {
-@@ -449,7 +_,7 @@
+@@ -437,7 +_,7 @@
double d7 = d4 * d1 + p_172273_;
double d8 = d5 * d2 + p_172274_;
double d9 = d6 * d3 + p_172275_;
@@ -92,7 +92,7 @@
}
}
}
-@@ -493,12 +_,18 @@
+@@ -481,12 +_,18 @@
d0 = (double)i + aabb.f_82291_ + (double)0.1F;
}
diff --git a/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch b/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch
index 7d52bf21444..786d0ad6640 100644
--- a/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch
+++ b/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch
@@ -1,10 +1,10 @@
--- a/net/minecraft/client/player/AbstractClientPlayer.java
+++ b/net/minecraft/client/player/AbstractClientPlayer.java
-@@ -144,6 +_,6 @@
+@@ -146,6 +_,6 @@
}
}
-- return Mth.m_14179_(Minecraft.m_91087_().f_91066_.f_92070_, 1.0F, f);
+- return Mth.m_14179_(Minecraft.m_91087_().f_91066_.m_231925_().m_231551_().floatValue(), 1.0F, f);
+ return net.minecraftforge.client.ForgeHooksClient.getFieldOfView(this, f);
}
}
diff --git a/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch b/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch
index 6910353f99e..3da16b96168 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
-@@ -145,6 +_,7 @@
+@@ -159,6 +_,7 @@
}
public boolean m_6469_(DamageSource p_108662_, float p_108663_) {
@@ -8,27 +8,48 @@
return false;
}
-@@ -461,6 +_,11 @@
+@@ -290,6 +_,9 @@
+ }
+
+ 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.event.ForgeEventFactory.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 @@
+ }
+
+ 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 @@
}
public void m_5496_(SoundEvent p_108651_, float p_108652_, float p_108653_) {
-+ net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, p_108651_, this.m_5720_(), p_108652_, p_108653_);
+- this.f_19853_.m_7785_(this.m_20185_(), this.m_20186_(), this.m_20189_(), p_108651_, this.m_5720_(), p_108652_, p_108653_, false);
++ net.minecraftforge.event.PlayLevelSoundEvent.AtEntity event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, p_108651_, this.m_5720_(), p_108652_, p_108653_);
+ if (event.isCanceled() || event.getSound() == null) return;
+ p_108651_ = event.getSound();
-+ p_108652_ = event.getVolume();
-+ p_108653_ = event.getPitch();
- this.f_19853_.m_7785_(this.m_20185_(), this.m_20186_(), this.m_20189_(), p_108651_, this.m_5720_(), p_108652_, p_108653_, false);
++ SoundSource source = event.getSource();
++ p_108652_ = event.getNewVolume();
++ p_108653_ = event.getNewPitch();
++ this.f_19853_.m_7785_(this.m_20185_(), this.m_20186_(), this.m_20189_(), p_108651_, source, p_108652_, p_108653_, false);
}
-@@ -616,6 +_,7 @@
- boolean flag2 = this.m_108733_();
+ public void m_6330_(SoundEvent p_108655_, SoundSource p_108656_, float p_108657_, float p_108658_) {
+@@ -700,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));
- this.f_108618_.m_7606_(this.m_108635_());
+ float f = Mth.m_14036_(0.3F + EnchantmentHelper.m_220302_(this), 0.0F, 1.0F);
+ this.f_108618_.m_214106_(this.m_108635_(), f);
+ net.minecraftforge.client.ForgeHooksClient.onMovementInputUpdate(this, this.f_108618_);
this.f_108619_.m_91301_().m_120586_(this.f_108618_);
if (this.m_6117_() && !this.m_20159_()) {
this.f_108618_.f_108566_ *= 0.2F;
-@@ -688,7 +_,7 @@
+@@ -772,7 +_,7 @@
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);
@@ -37,7 +58,7 @@
this.f_108617_.m_104955_(new ServerboundPlayerCommandPacket(this, ServerboundPlayerCommandPacket.Action.START_FALL_FLYING));
}
}
-@@ -806,6 +_,7 @@
+@@ -890,6 +_,7 @@
public void m_6083_() {
super.m_6083_();
@@ -45,7 +66,7 @@
this.f_108611_ = false;
if (this.m_20202_() instanceof Boat) {
Boat boat = (Boat)this.m_20202_();
-@@ -1019,6 +_,18 @@
+@@ -1103,6 +_,18 @@
} else {
return super.m_7398_(p_108758_);
}
diff --git a/patches/minecraft/net/minecraft/client/player/RemotePlayer.java.patch b/patches/minecraft/net/minecraft/client/player/RemotePlayer.java.patch
index e838305c875..0cab3677288 100644
--- a/patches/minecraft/net/minecraft/client/player/RemotePlayer.java.patch
+++ b/patches/minecraft/net/minecraft/client/player/RemotePlayer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/player/RemotePlayer.java
+++ b/net/minecraft/client/player/RemotePlayer.java
-@@ -29,6 +_,7 @@
+@@ -30,6 +_,7 @@
}
public boolean m_6469_(DamageSource p_108772_, float p_108773_) {
diff --git a/patches/minecraft/net/minecraft/client/renderer/DimensionSpecialEffects.java.patch b/patches/minecraft/net/minecraft/client/renderer/DimensionSpecialEffects.java.patch
index bd0131443f2..add11e0cef8 100644
--- a/patches/minecraft/net/minecraft/client/renderer/DimensionSpecialEffects.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/DimensionSpecialEffects.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/DimensionSpecialEffects.java
+++ b/net/minecraft/client/renderer/DimensionSpecialEffects.java
-@@ -26,6 +_,10 @@
+@@ -27,6 +_,10 @@
private final DimensionSpecialEffects.SkyType f_108861_;
private final boolean f_108862_;
private final boolean f_108863_;
@@ -11,7 +11,7 @@
public DimensionSpecialEffects(float p_108866_, boolean p_108867_, DimensionSpecialEffects.SkyType p_108868_, boolean p_108869_, boolean p_108870_) {
this.f_108859_ = p_108866_;
-@@ -80,6 +_,35 @@
+@@ -81,6 +_,35 @@
public boolean m_108885_() {
return this.f_108863_;
diff --git a/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch b/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch
index 9b6d4d00b11..d0136cdb019 100644
--- a/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/EffectInstance.java
+++ b/net/minecraft/client/renderer/EffectInstance.java
-@@ -60,7 +_,8 @@
+@@ -58,7 +_,8 @@
private final EffectProgram f_108938_;
public EffectInstance(ResourceManager p_108941_, String p_108942_) throws IOException {
@@ -8,15 +8,15 @@
+ ResourceLocation rl = ResourceLocation.m_135820_(p_108942_);
+ ResourceLocation resourcelocation = new ResourceLocation(rl.m_135827_(), "shaders/program/" + rl.m_135815_() + ".json");
this.f_108932_ = p_108942_;
- Resource resource = null;
+ Resource resource = p_108941_.m_215593_(resourcelocation);
-@@ -162,7 +_,8 @@
+@@ -168,7 +_,8 @@
} else {
EffectProgram effectprogram;
if (program == null) {
- ResourceLocation resourcelocation = new ResourceLocation("shaders/program/" + p_172569_ + p_172568_.m_85569_());
+ ResourceLocation rl = ResourceLocation.m_135820_(p_172569_);
+ ResourceLocation resourcelocation = new ResourceLocation(rl.m_135827_(), "shaders/program/" + rl.m_135815_() + p_172568_.m_85569_());
- Resource resource = p_172567_.m_142591_(resourcelocation);
+ Resource resource = p_172567_.m_215593_(resourcelocation);
+ InputStream inputstream = resource.m_215507_();
- try {
diff --git a/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch
index b01e056bc3b..2b1b096bba9 100644
--- a/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/FogRenderer.java.patch
@@ -1,7 +1,7 @@
--- a/net/minecraft/client/renderer/FogRenderer.java
+++ b/net/minecraft/client/renderer/FogRenderer.java
-@@ -178,19 +_,36 @@
- f_109012_ = f_109012_ * (1.0F - f6) + f_109012_ * f8 * f6;
+@@ -182,6 +_,13 @@
+ f_109012_ = f_109012_ * (1.0F - f7) + f_109012_ * f9 * f7;
}
+ net.minecraftforge.client.event.EntityViewRenderEvent.FogColors event = new net.minecraftforge.client.event.EntityViewRenderEvent.FogColors(p_109019_, p_109020_, f_109010_, f_109011_, f_109012_);
@@ -14,35 +14,11 @@
RenderSystem.m_69424_(f_109010_, f_109011_, f_109012_, 0.0F);
}
- public static void m_109017_() {
- RenderSystem.m_157445_(Float.MAX_VALUE);
- }
--
-+ @Deprecated // FORGE: Pass in partialTicks
- public static void m_109024_(Camera p_109025_, FogRenderer.FogMode p_109026_, float p_109027_, boolean p_109028_) {
-+ setupFog(p_109025_, p_109026_, p_109027_, p_109028_, 0);
-+ }
-+
-+ public static void setupFog(Camera p_109025_, FogRenderer.FogMode p_109026_, float p_109027_, boolean p_109028_, float partialTicks) {
- FogType fogtype = p_109025_.m_167685_();
- Entity entity = p_109025_.m_90592_();
- FogShape fogshape = FogShape.SPHERE;
- float f;
- float f1;
-+ // TODO: remove this hook in 1.19
-+ float hook = net.minecraftforge.client.ForgeHooksClient.getFogDensity(p_109026_, p_109025_, partialTicks, 0.1F);
-+ if (hook >= 0) {
-+ f = -8.0f;
-+ f1 = hook * 0.5F;
-+ } else
- if (fogtype == FogType.LAVA) {
- if (entity.m_5833_()) {
- f = -8.0F;
-@@ -253,6 +_,7 @@
- RenderSystem.m_157445_(f);
- RenderSystem.m_157443_(f1);
- RenderSystem.m_202160_(fogshape);
-+ net.minecraftforge.client.ForgeHooksClient.onFogRender(p_109026_, p_109025_, partialTicks, f, f1, fogshape);
+@@ -263,6 +_,7 @@
+ RenderSystem.m_157445_(fogrenderer$fogdata.f_234200_);
+ RenderSystem.m_157443_(fogrenderer$fogdata.f_234201_);
+ RenderSystem.m_202160_(fogrenderer$fogdata.f_234202_);
++ net.minecraftforge.client.ForgeHooksClient.onFogRender(fogtype, p_234173_, p_234177_, fogrenderer$fogdata.f_234200_, fogrenderer$fogdata.f_234201_, fogrenderer$fogdata.f_234202_);
}
public static void m_109036_() {
diff --git a/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch
index 3f6a32b7b8d..75fbdca0b5c 100644
--- a/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/GameRenderer.java
+++ b/net/minecraft/client/renderer/GameRenderer.java
-@@ -288,6 +_,8 @@
+@@ -290,6 +_,8 @@
this.m_109128_(new ResourceLocation("shaders/post/spider.json"));
} else if (p_109107_ instanceof EnderMan) {
this.m_109128_(new ResourceLocation("shaders/post/invert.json"));
@@ -9,15 +9,15 @@
}
}
-@@ -544,6 +_,7 @@
- list1.add(Pair.of(new ShaderInstance(p_172768_, "rendertype_crumbling", DefaultVertexFormat.f_85811_), (p_172733_) -> {
- f_172607_ = p_172733_;
+@@ -549,6 +_,7 @@
+ list1.add(Pair.of(new ShaderInstance(p_172768_, "rendertype_crumbling", DefaultVertexFormat.f_85811_), (p_234230_) -> {
+ f_172607_ = p_234230_;
}));
+ net.minecraftforge.fml.ModLoader.get().postEvent(new net.minecraftforge.client.event.RegisterShadersEvent(p_172768_, list1));
} catch (IOException ioexception) {
- list1.forEach((p_172772_) -> {
- p_172772_.getFirst().close();
-@@ -625,19 +_,21 @@
+ list1.forEach((p_172729_) -> {
+ p_172729_.getFirst().close();
+@@ -630,19 +_,21 @@
boolean flag = false;
int i = 3;
double d1 = d0;
@@ -42,7 +42,7 @@
d1 = this.f_109059_.f_91077_.m_82450_().m_82557_(vec3);
}
-@@ -652,7 +_,7 @@
+@@ -657,7 +_,7 @@
Entity entity1 = entityhitresult.m_82443_();
Vec3 vec33 = entityhitresult.m_82450_();
double d2 = vec3.m_82557_(vec33);
@@ -51,8 +51,8 @@
this.f_109059_.f_91077_ = BlockHitResult.m_82426_(vec33, Direction.m_122366_(vec31.f_82479_, vec31.f_82480_, vec31.f_82481_), new BlockPos(vec33));
} else if (d2 < d1 || this.f_109059_.f_91077_ == null) {
this.f_109059_.f_91077_ = entityhitresult;
-@@ -706,7 +_,7 @@
- d0 *= (double)Mth.m_14179_(this.f_109059_.f_91066_.f_92070_, 1.0F, 0.85714287F);
+@@ -711,7 +_,7 @@
+ d0 *= Mth.m_14139_(this.f_109059_.f_91066_.m_231925_().m_231551_(), 1.0D, (double)0.85714287F);
}
- return d0;
@@ -60,7 +60,7 @@
}
}
-@@ -843,11 +_,11 @@
+@@ -848,11 +_,11 @@
Window window = this.f_109059_.m_91268_();
RenderSystem.m_69421_(256, Minecraft.f_91002_);
@@ -74,7 +74,7 @@
RenderSystem.m_157182_();
Lighting.m_84931_();
PoseStack posestack1 = new PoseStack();
-@@ -882,7 +_,7 @@
+@@ -888,7 +_,7 @@
}
} else if (this.f_109059_.f_91080_ != null) {
try {
@@ -83,7 +83,7 @@
} catch (Throwable throwable1) {
CrashReport crashreport1 = CrashReport.m_127521_(throwable1, "Rendering screen");
CrashReportCategory crashreportcategory1 = crashreport1.m_127514_("Screen render details");
-@@ -1040,6 +_,11 @@
+@@ -1047,6 +_,11 @@
Matrix4f matrix4f = posestack.m_85850_().m_85861_();
this.m_109111_(matrix4f);
camera.m_90575_(this.f_109059_.f_91073_, (Entity)(this.f_109059_.m_91288_() == null ? this.f_109059_.f_91074_ : this.f_109059_.m_91288_()), !this.f_109059_.f_91066_.m_92176_().m_90612_(), this.f_109059_.f_91066_.m_92176_().m_90613_(), p_109090_);
@@ -95,9 +95,9 @@
p_109092_.m_85845_(Vector3f.f_122223_.m_122240_(camera.m_90589_()));
p_109092_.m_85845_(Vector3f.f_122225_.m_122240_(camera.m_90590_() + 180.0F));
Matrix3f matrix3f = p_109092_.m_85850_().m_85864_().m_8183_();
-@@ -1049,6 +_,8 @@
+@@ -1056,6 +_,8 @@
- this.f_109059_.f_91060_.m_172961_(p_109092_, camera.m_90583_(), this.m_172716_(Math.max(d0, this.f_109059_.f_91066_.f_92068_)));
+ this.f_109059_.f_91060_.m_172961_(p_109092_, camera.m_90583_(), this.m_172716_(Math.max(d0, (double)this.f_109059_.f_91066_.m_231837_().m_231551_().intValue())));
this.f_109059_.f_91060_.m_109599_(p_109092_, p_109090_, p_109091_, flag, camera, this, this.f_109074_, matrix4f);
+ this.f_109059_.m_91307_().m_6182_("forge_render_last");
+ net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(this.f_109059_.f_91060_, p_109092_, p_109090_, matrix4f, p_109091_);
diff --git a/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch b/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch
index e68d1475ce4..335416fa3bc 100644
--- a/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch
@@ -8,15 +8,15 @@
private static final Map f_109275_ = Util.m_137469_(Maps.newHashMap(), (p_109296_) -> {
RenderType rendertype = RenderType.m_110503_();
p_109296_.put(Blocks.f_50267_, rendertype);
-@@ -286,6 +_,7 @@
- p_109296_.put(Blocks.f_50628_, rendertype3);
+@@ -296,6 +_,7 @@
p_109296_.put(Blocks.f_152498_, rendertype3);
+ p_109296_.put(Blocks.f_220862_, rendertype3);
});
+ @Deprecated
private static final Map f_109276_ = Util.m_137469_(Maps.newHashMap(), (p_109290_) -> {
RenderType rendertype = RenderType.m_110466_();
p_109290_.put(Fluids.f_76192_, rendertype);
-@@ -293,6 +_,7 @@
+@@ -303,6 +_,7 @@
});
private static boolean f_109277_;
@@ -24,7 +24,7 @@
public static RenderType m_109282_(BlockState p_109283_) {
Block block = p_109283_.m_60734_();
if (block instanceof LeavesBlock) {
-@@ -303,6 +_,7 @@
+@@ -313,6 +_,7 @@
}
}
@@ -32,7 +32,7 @@
public static RenderType m_109293_(BlockState p_109294_) {
Block block = p_109294_.m_60734_();
if (block instanceof LeavesBlock) {
-@@ -318,8 +_,7 @@
+@@ -328,8 +_,7 @@
}
public static RenderType m_109284_(BlockState p_109285_, boolean p_109286_) {
@@ -42,7 +42,7 @@
if (!Minecraft.m_91085_()) {
return Sheets.m_110792_();
} else {
-@@ -340,9 +_,70 @@
+@@ -350,9 +_,68 @@
}
}
@@ -55,16 +55,14 @@
+ // FORGE START
+
+ private static final java.util.function.Predicate SOLID_PREDICATE = type -> type == RenderType.m_110451_();
-+ private static final Map, java.util.function.Predicate> blockRenderChecks = createRenderCheckMap(f_109275_);
-+ private static final Map, java.util.function.Predicate> fluidRenderChecks = createRenderCheckMap(f_109276_);
++ private static final Map, java.util.function.Predicate> blockRenderChecks = createRenderCheckMap(net.minecraftforge.registries.ForgeRegistries.BLOCKS, f_109275_);
++ private static final Map, java.util.function.Predicate> fluidRenderChecks = createRenderCheckMap(net.minecraftforge.registries.ForgeRegistries.FLUIDS, f_109276_);
+
-+ private static > Map, java.util.function.Predicate> createRenderCheckMap(
-+ Map vanillaMap
-+ ) {
++ private static Map, java.util.function.Predicate> createRenderCheckMap(net.minecraftforge.registries.IForgeRegistry registry, Map vanillaMap) {
+ return Util.m_137469_(new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(vanillaMap.size(), 0.5F), map -> {
+ map.defaultReturnValue(SOLID_PREDICATE);
-+ for (Map.Entry entry : vanillaMap.entrySet()) {
-+ map.put(entry.getKey().delegate, createMatchingLayerPredicate(entry.getValue()));
++ for(Map.Entry entry : vanillaMap.entrySet()) {
++ map.put(registry.getDelegateOrThrow(entry.getKey()), createMatchingLayerPredicate(entry.getValue()));
+ }
+ });
+ }
@@ -74,12 +72,12 @@
+ if (block instanceof LeavesBlock) {
+ return f_109277_ ? type == RenderType.m_110457_() : type == RenderType.m_110451_();
+ } else {
-+ return blockRenderChecks.get(block.delegate).test(type);
++ return blockRenderChecks.get(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(block)).test(type);
+ }
+ }
+
+ public static boolean canRenderInLayer(FluidState fluid, RenderType type) {
-+ return fluidRenderChecks.get(fluid.m_76152_().delegate).test(type);
++ return fluidRenderChecks.get(net.minecraftforge.registries.ForgeRegistries.FLUIDS.getDelegateOrThrow(fluid.m_76152_())).test(type);
+ }
+
+ public static void setRenderLayer(Block block, RenderType type) {
@@ -88,7 +86,7 @@
+
+ public static synchronized void setRenderLayer(Block block, java.util.function.Predicate predicate) {
+ checkClientLoading();
-+ blockRenderChecks.put(block.delegate, predicate);
++ blockRenderChecks.put(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(block), predicate);
+ }
+
+ public static void setRenderLayer(Fluid fluid, RenderType type) {
@@ -97,7 +95,7 @@
+
+ public static synchronized void setRenderLayer(Fluid fluid, java.util.function.Predicate predicate) {
+ checkClientLoading();
-+ fluidRenderChecks.put(fluid.delegate, predicate);
++ fluidRenderChecks.put(net.minecraftforge.registries.ForgeRegistries.FLUIDS.getDelegateOrThrow(fluid), predicate);
+ }
+
+ private static void checkClientLoading() {
diff --git a/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch
index 6ca654e8140..fc1d5f7c6a5 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
-@@ -259,6 +_,11 @@
+@@ -263,6 +_,11 @@
}
private void m_109703_(LightTexture p_109704_, float p_109705_, double p_109706_, double p_109707_, double p_109708_) {
@@ -12,7 +12,7 @@
float f = this.f_109461_.f_91073_.m_46722_(p_109705_);
if (!(f <= 0.0F)) {
p_109704_.m_109896_();
-@@ -379,6 +_,11 @@
+@@ -383,6 +_,11 @@
}
public void m_109693_(Camera p_109694_) {
@@ -23,43 +23,35 @@
+ }
float f = this.f_109461_.f_91073_.m_46722_(1.0F) / (Minecraft.m_91405_() ? 1.0F : 2.0F);
if (!(f <= 0.0F)) {
- Random random = new Random((long)this.f_109477_ * 312987231L);
-@@ -1134,20 +_,23 @@
+ RandomSource randomsource = RandomSource.m_216335_((long)this.f_109477_ * 312987231L);
+@@ -1140,6 +_,7 @@
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_();
-+ FogRenderer.setupFog(p_109604_, FogRenderer.FogMode.FOG_SKY, f, flag2, p_109601_);
++ FogRenderer.m_234172_(p_109604_, FogRenderer.FogMode.FOG_SKY, f, flag2, p_109601_);
profilerfiller.m_6182_("sky");
RenderSystem.m_157427_(GameRenderer::m_172808_);
this.m_202423_(p_109600_, p_109607_, p_109601_, p_109604_, flag2, () -> {
-- FogRenderer.m_109024_(p_109604_, FogRenderer.FogMode.FOG_SKY, f, flag2);
-+ FogRenderer.setupFog(p_109604_, FogRenderer.FogMode.FOG_SKY, f, flag2, p_109601_);
- });
- profilerfiller.m_6182_("fog");
-- FogRenderer.m_109024_(p_109604_, FogRenderer.FogMode.FOG_TERRAIN, Math.max(f, 32.0F), flag2);
-+ FogRenderer.setupFog(p_109604_, FogRenderer.FogMode.FOG_TERRAIN, Math.max(f, 32.0F), flag2, p_109601_);
- profilerfiller.m_6182_("terrain_setup");
- this.m_194338_(p_109604_, frustum, flag1, this.f_109461_.f_91074_.m_5833_());
- profilerfiller.m_6182_("compilechunks");
+@@ -1153,7 +_,9 @@
this.m_194370_(p_109604_);
profilerfiller.m_6182_("terrain");
this.m_172993_(RenderType.m_110451_(), p_109600_, d0, d1, d2, p_109607_);
-+ this.f_109461_.m_91304_().m_119428_(TextureAtlas.f_118259_).setBlurMipmap(false, this.f_109461_.f_91066_.f_92027_ > 0); // FORGE: fix flickering leaves when mods mess up the blurMipmap settings
++ this.f_109461_.m_91304_().m_119428_(TextureAtlas.f_118259_).setBlurMipmap(false, this.f_109461_.f_91066_.m_232119_().m_231551_() > 0); // FORGE: fix flickering leaves when mods mess up the blurMipmap settings
this.m_172993_(RenderType.m_110457_(), p_109600_, d0, d1, d2, p_109607_);
+ this.f_109461_.m_91304_().m_119428_(TextureAtlas.f_118259_).restoreLastBlurMipmap();
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_());
-@@ -1179,7 +_,7 @@
+@@ -1185,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_142538_();
+ BlockPos blockpos = entity.m_20183_();
- if ((this.f_109465_.m_151562_(blockpos.m_123342_()) || this.m_202430_(blockpos)) && (entity != p_109604_.m_90592_() || p_109604_.m_90594_() || p_109604_.m_90592_() instanceof LivingEntity && ((LivingEntity)p_109604_.m_90592_()).m_5803_()) && (!(entity instanceof LocalPlayer) || p_109604_.m_90592_() == entity)) {
+ if ((this.f_109465_.m_151562_(blockpos.m_123342_()) || this.m_202430_(blockpos)) && (entity != p_109604_.m_90592_() || p_109604_.m_90594_() || p_109604_.m_90592_() instanceof LivingEntity && ((LivingEntity)p_109604_.m_90592_()).m_5803_()) && (!(entity instanceof LocalPlayer) || p_109604_.m_90592_() == entity || (entity == f_109461_.f_91074_ && !f_109461_.f_91074_.m_5833_()))) { //FORGE: render local player entity when it is not the renderViewEntity
++this.f_109439_;
if (entity.f_19797_ == 0) {
entity.f_19790_ = entity.m_20185_();
-@@ -1219,6 +_,7 @@
+@@ -1225,6 +_,7 @@
List list = levelrenderer$renderchunkinfo.f_109839_.m_112835_().m_112773_();
if (!list.isEmpty()) {
for(BlockEntity blockentity1 : list) {
@@ -67,7 +59,7 @@
BlockPos blockpos4 = blockentity1.m_58899_();
MultiBufferSource multibuffersource1 = multibuffersource$buffersource;
p_109600_.m_85836_();
-@@ -1244,6 +_,7 @@
+@@ -1250,6 +_,7 @@
synchronized(this.f_109468_) {
for(BlockEntity blockentity : this.f_109468_) {
@@ -75,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);
-@@ -1295,10 +_,13 @@
+@@ -1301,10 +_,13 @@
profilerfiller.m_6182_("outline");
BlockPos blockpos1 = ((BlockHitResult)hitresult).m_82425_();
BlockState blockstate = this.f_109465_.m_8055_(blockpos1);
@@ -89,7 +81,7 @@
}
PoseStack posestack = RenderSystem.m_157191_();
-@@ -1333,7 +_,7 @@
+@@ -1339,7 +_,7 @@
this.f_109415_.m_83945_(this.f_109461_.m_91385_());
RenderStateShard.f_110126_.m_110185_();
profilerfiller.m_6182_("particles");
@@ -98,7 +90,7 @@
RenderStateShard.f_110126_.m_110188_();
} else {
profilerfiller.m_6182_("translucent");
-@@ -1347,7 +_,7 @@
+@@ -1353,7 +_,7 @@
profilerfiller.m_6182_("string");
this.m_172993_(RenderType.m_110503_(), p_109600_, d0, d1, d2, p_109607_);
profilerfiller.m_6182_("particles");
@@ -107,7 +99,7 @@
}
posestack.m_85836_();
-@@ -1783,6 +_,11 @@
+@@ -1781,6 +_,11 @@
public void m_202423_(PoseStack p_202424_, Matrix4f p_202425_, float p_202426_, Camera p_202427_, boolean p_202428_, Runnable p_202429_) {
p_202429_.run();
@@ -118,8 +110,8 @@
+ }
if (!p_202428_) {
FogType fogtype = p_202427_.m_167685_();
- if (fogtype != FogType.POWDER_SNOW && fogtype != FogType.LAVA) {
-@@ -1910,6 +_,11 @@
+ if (fogtype != FogType.POWDER_SNOW && fogtype != FogType.LAVA && !this.m_234310_(p_202427_)) {
+@@ -1912,6 +_,11 @@
}
public void m_172954_(PoseStack p_172955_, Matrix4f p_172956_, float p_172957_, double p_172958_, double p_172959_, double p_172960_) {
@@ -131,16 +123,16 @@
float f = this.f_109465_.m_104583_().m_108871_();
if (!Float.isNaN(f)) {
RenderSystem.m_69464_();
-@@ -2095,7 +_,7 @@
+@@ -2102,7 +_,7 @@
}
} else {
- BlockPos blockpos1 = chunkrenderdispatcher$renderchunk.m_112839_().m_142082_(8, 8, 8);
+ BlockPos blockpos1 = chunkrenderdispatcher$renderchunk.m_112839_().m_7918_(8, 8, 8);
- flag = blockpos1.m_123331_(blockpos) < 768.0D || chunkrenderdispatcher$renderchunk.m_112842_();
+ flag = !net.minecraftforge.common.ForgeConfig.CLIENT.alwaysSetupTerrainOffThread.get() && (blockpos1.m_123331_(blockpos) < 768.0D || chunkrenderdispatcher$renderchunk.m_112842_()); // the target is the else block below, so invert the forge addition to get there early
}
if (flag) {
-@@ -2393,7 +_,12 @@
+@@ -2399,7 +_,12 @@
this.f_109469_.m_110859_(p_109502_, p_109503_, p_109504_, p_109505_);
}
@@ -153,7 +145,7 @@
SoundInstance soundinstance = this.f_109410_.get(p_109516_);
if (soundinstance != null) {
this.f_109461_.m_91106_().m_120399_(soundinstance);
-@@ -2401,7 +_,7 @@
+@@ -2407,7 +_,7 @@
}
if (p_109515_ != null) {
@@ -162,25 +154,25 @@
if (recorditem != null) {
this.f_109461_.f_91065_.m_93055_(recorditem.m_43050_());
}
-@@ -2553,7 +_,7 @@
- break;
- case 1010:
- if (Item.m_41445_(p_109536_) instanceof RecordItem) {
-- this.m_109514_(((RecordItem)Item.m_41445_(p_109536_)).m_43051_(), p_109535_);
-+ this.playStreamingMusic(((RecordItem)Item.m_41445_(p_109536_)).m_43051_(), p_109535_, (RecordItem) Item.m_41445_(p_109536_));
- } else {
- this.m_109514_((SoundEvent)null, p_109535_);
- }
-@@ -2723,7 +_,7 @@
- case 2001:
- BlockState blockstate = Block.m_49803_(p_109536_);
- if (!blockstate.m_60795_()) {
-- SoundType soundtype = blockstate.m_60827_();
-+ SoundType soundtype = blockstate.getSoundType(this.f_109465_, p_109535_, null);
- this.f_109465_.m_104677_(p_109535_, soundtype.m_56775_(), SoundSource.BLOCKS, (soundtype.m_56773_() + 1.0F) / 2.0F, soundtype.m_56774_() * 0.8F, false);
- }
+@@ -2559,7 +_,7 @@
+ break;
+ case 1010:
+ if (Item.m_41445_(p_234307_) instanceof RecordItem) {
+- this.m_109514_(((RecordItem)Item.m_41445_(p_234307_)).m_43051_(), p_234306_);
++ this.playStreamingMusic(((RecordItem)Item.m_41445_(p_234307_)).m_43051_(), p_234306_, (RecordItem) Item.m_41445_(p_234307_));
+ } else {
+ this.m_109514_((SoundEvent)null, p_234306_);
+ }
+@@ -2729,7 +_,7 @@
+ case 2001:
+ BlockState blockstate = Block.m_49803_(p_234307_);
+ if (!blockstate.m_60795_()) {
+- SoundType soundtype = blockstate.m_60827_();
++ SoundType soundtype = blockstate.getSoundType(this.f_109465_, p_234306_, null);
+ 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);
+ }
-@@ -2888,7 +_,7 @@
+@@ -2944,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/LightTexture.java.patch b/patches/minecraft/net/minecraft/client/renderer/LightTexture.java.patch
index 5905d2bf9c6..bc73f10fdbe 100644
--- a/patches/minecraft/net/minecraft/client/renderer/LightTexture.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/LightTexture.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/LightTexture.java
+++ b/net/minecraft/client/renderer/LightTexture.java
-@@ -160,7 +_,7 @@
+@@ -193,7 +_,7 @@
}
public static int m_109883_(int p_109884_) {
diff --git a/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch b/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch
index 4117e205ca1..f4a714495df 100644
--- a/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch
@@ -1,16 +1,16 @@
--- a/net/minecraft/client/renderer/PostChain.java
+++ b/net/minecraft/client/renderer/PostChain.java
-@@ -169,7 +_,8 @@
+@@ -173,7 +_,8 @@
throw new ChainedJsonException("Render target '" + s4 + "' can't be used as depth buffer");
}
- ResourceLocation resourcelocation = new ResourceLocation("textures/effect/" + s4 + ".png");
+ ResourceLocation rl = ResourceLocation.m_135820_(s4);
+ ResourceLocation resourcelocation = new ResourceLocation(rl.m_135827_(), "textures/effect/" + rl.m_135815_() + ".png");
- Resource resource = null;
-
- try {
-@@ -279,6 +_,7 @@
+ this.f_110007_.m_213713_(resourcelocation).orElseThrow(() -> {
+ return new ChainedJsonException("Render target or texture '" + s4 + "' does not exist");
+ });
+@@ -276,6 +_,7 @@
public void m_110038_(String p_110039_, int p_110040_, int p_110041_) {
RenderTarget rendertarget = new TextureTarget(p_110040_, p_110041_, true, Minecraft.f_91002_);
rendertarget.m_83931_(0.0F, 0.0F, 0.0F, 0.0F);
diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch b/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch
index 3a5f3cebb04..464f302330c 100644
--- a/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch
@@ -1,6 +1,6 @@
--- a/net/minecraft/client/renderer/RenderType.java
+++ b/net/minecraft/client/renderer/RenderType.java
-@@ -288,27 +_,27 @@
+@@ -301,27 +_,27 @@
}
public static RenderType m_110497_(ResourceLocation p_110498_) {
diff --git a/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch
index f9e15bac953..cab7a34e672 100644
--- a/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch
+++ b/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch
@@ -9,19 +9,19 @@
- m_173296_(p_110719_.m_91289_().m_110907_().m_110882_(blockstate), p_110720_);
+ org.apache.commons.lang3.tuple.Pair