diff --git a/common/build.gradle b/common/build.gradle index a3e4f7ce..ad3bd0be 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -12,7 +12,7 @@ dependencies { // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies // Do NOT use other classes from fabric loader modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" - implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-common:${rootProject.mixinextras_version}")) + implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:${rootProject.mixinextras_version}")) modCompileOnly("dev.latvian.mods:kubejs:${kubejs_version}") { transitive = false diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/MappedRegistryMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/MappedRegistryMixin.java index ae4faf59..73fbb87a 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/MappedRegistryMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/MappedRegistryMixin.java @@ -15,7 +15,8 @@ public class MappedRegistryMixin { */ @Redirect( method = "registerMapping(ILnet/minecraft/resources/ResourceKey;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;)Lnet/minecraft/core/Holder$Reference;", - at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectList;size(I)V", remap = false) + at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/ObjectList;size(I)V", remap = false), + require = 0 ) private void setSizeSmart(ObjectList list, int size) { if(list instanceof ObjectArrayList && size > list.size()) { diff --git a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index a01bb22b..05cb9dfb 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -61,7 +61,7 @@ public class ModernFixEarlyConfig { private static final String MIXIN_REQUIRES_MOD_DESC = Type.getDescriptor(RequiresMod.class); private static final String MIXIN_DEV_ONLY_DESC = Type.getDescriptor(IgnoreOutsideDev.class); - private static final Pattern PLATFORM_PREFIX = Pattern.compile("(forge|fabric|common)\\."); + private static final Pattern PLATFORM_PREFIX = Pattern.compile("(neoforge|fabric|common)\\."); public static String sanitize(String mixinClassName) { return PLATFORM_PREFIX.matcher(mixinClassName).replaceFirst(""); @@ -77,7 +77,7 @@ public class ModernFixEarlyConfig { } private void scanForAndBuildMixinOptions() { - List configFiles = ImmutableList.of("modernfix-common.mixins.json", "modernfix-fabric.mixins.json", "modernfix-forge.mixins.json"); + List configFiles = ImmutableList.of("modernfix-common.mixins.json", "modernfix-fabric.mixins.json", "modernfix-neoforge.mixins.json"); List mixinPaths = new ArrayList<>(); for(String configFile : configFiles) { InputStream stream = ModernFixEarlyConfig.class.getClassLoader().getResourceAsStream(configFile); @@ -175,7 +175,6 @@ public class ModernFixEarlyConfig { .put("mixin.devenv", isDevEnv) .put("mixin.perf.remove_spawn_chunks", isDevEnv) .putConditionally(() -> !isFabric, "mixin.bugfix.fix_config_crashes", true) - .putConditionally(() -> !isFabric, "mixin.bugfix.forge_at_inject_error", true) .putConditionally(() -> !isFabric, "mixin.feature.registry_event_progress", false) .putConditionally(() -> isFabric, "mixin.perf.clear_fabric_mapping_tables", false) .build(); diff --git a/common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java b/common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java index 87f4fca4..af44b445 100644 --- a/common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java +++ b/common/src/main/java/org/embeddedt/modernfix/platform/PlatformHookLoader.java @@ -4,7 +4,7 @@ import java.lang.reflect.Constructor; class PlatformHookLoader { static ModernFixPlatformHooks findInstance() { - String[] locations = new String[] { "forge", "fabric" }; + String[] locations = new String[] { "neoforge", "fabric" }; for(String location : locations) { try { Class clz = Class.forName("org.embeddedt.modernfix.platform." + location + ".ModernFixPlatformHooksImpl"); diff --git a/common/src/main/java/org/embeddedt/modernfix/util/BakeReason.java b/common/src/main/java/org/embeddedt/modernfix/util/BakeReason.java deleted file mode 100644 index e7074389..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/util/BakeReason.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.embeddedt.modernfix.util; - -import org.embeddedt.modernfix.ModernFix; - -public enum BakeReason { - FREEZE, - REMOTE_SNAPSHOT_INJECT, - LOCAL_SNAPSHOT_INJECT, - REVERT, - UNKNOWN; - private static BakeReason currentBakeReason = null; - private static boolean bakeReasonWarned = false; - - public static BakeReason getCurrentBakeReason() { - if(currentBakeReason == null && !bakeReasonWarned) { - ModernFix.LOGGER.warn("No bake reason found, mixin probably not applied correctly", new IllegalStateException()); - bakeReasonWarned = false; - } - return currentBakeReason; - } - - public static void setCurrentBakeReason(BakeReason reason) { - currentBakeReason = reason; - } -} diff --git a/fabric/build.gradle b/fabric/build.gradle index fd5f0652..997c152c 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -41,7 +41,7 @@ repositories { dependencies { modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" testImplementation "net.fabricmc:fabric-loader-junit:${rootProject.fabric_loader_version}" - include(implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-fabric:${rootProject.mixinextras_version}"))) + include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:${rootProject.mixinextras_version}"))) modCompileOnly(fabricApi.module("fabric-api-base", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } modCompileOnly(fabricApi.module("fabric-screen-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' } diff --git a/forge/gradle.properties b/forge/gradle.properties deleted file mode 100644 index 32f842a6..00000000 --- a/forge/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ATInjector.java b/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ATInjector.java deleted file mode 100644 index f86b9623..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ATInjector.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.embeddedt.modernfix.forge.classloading; - -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.loading.moddiscovery.ModFile; -import net.minecraftforge.fml.loading.moddiscovery.ModValidator; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import org.apache.commons.lang3.tuple.Pair; -import org.embeddedt.modernfix.core.ModernFixMixinPlugin; -import org.embeddedt.modernfix.util.CommonModUtil; - -import java.nio.file.Path; -import java.util.List; -import java.util.stream.Collectors; - -public class ATInjector { - public static void injectModATs() { - CommonModUtil.runWithoutCrash(() -> { - ModValidator validator = ObfuscationReflectionHelper.getPrivateValue(FMLLoader.class, null, "modValidator"); - List modFiles = ObfuscationReflectionHelper.getPrivateValue(ModValidator.class, validator, "candidateMods"); - List> list = modFiles.stream() - .filter(file -> file.getAccessTransformer().isPresent()) - .map(file -> Pair.of(file, file.getAccessTransformer().get())) - .collect(Collectors.toList()); - if(list.size() > 0) { - ModernFixMixinPlugin.instance.logger.warn("Applying ATs from {} mods despite being in errored state, this might cause a crash!", list.size()); - for(var pair : list) { - try { - FMLLoader.addAccessTransformer(pair.getRight(), pair.getLeft()); - } catch(RuntimeException e) { - ModernFixMixinPlugin.instance.logger.error("Exception occured applying AT from {}", pair.getLeft().getFileName(), e); - } - } - } - }, "applying mod ATs in errored state"); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/FastAccessTransformerList.java b/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/FastAccessTransformerList.java deleted file mode 100644 index 420f12e7..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/FastAccessTransformerList.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.embeddedt.modernfix.forge.classloading; - -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; -import net.minecraftforge.accesstransformer.AccessTransformer; -import net.minecraftforge.accesstransformer.AccessTransformerEngine; -import net.minecraftforge.accesstransformer.INameHandler; -import net.minecraftforge.accesstransformer.Target; -import net.minecraftforge.accesstransformer.parser.AccessTransformerList; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import org.objectweb.asm.Type; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -public class FastAccessTransformerList extends AccessTransformerList { - private FastATMap accessTransformerMap; - - public static void attemptReplace() { - AccessTransformerList masterList; - FastAccessTransformerList myList = new FastAccessTransformerList(); - try { - Field master = AccessTransformerEngine.class.getDeclaredField("masterList"); - master.setAccessible(true); - masterList = (AccessTransformerList)master.get(AccessTransformerEngine.INSTANCE); - Field transfomersMap = AccessTransformerList.class.getDeclaredField("accessTransformers"); - transfomersMap.setAccessible(true); - Map, AccessTransformer> map = (Map, AccessTransformer>)transfomersMap.get(masterList); - INameHandler nameHandler = ObfuscationReflectionHelper.getPrivateValue(AccessTransformerList.class, masterList, "nameHandler"); - myList.setNameHandler(nameHandler); - myList.accessTransformerMap = new FastATMap(map); - ObfuscationReflectionHelper.setPrivateValue(AccessTransformerList.class, myList, myList.accessTransformerMap, "accessTransformers"); - master.set(AccessTransformerEngine.INSTANCE, myList); - } catch(ReflectiveOperationException e) { - e.printStackTrace(); - } - } - - @Override - public boolean containsClassTarget(Type type) { - return this.accessTransformerMap.containsType(type); - } - - private static class FastATMap implements Map, AccessTransformer> { - private final Map, AccessTransformer> delegate; - private final Set allContainedTypes; - - public FastATMap(Map, AccessTransformer> delegate) { - this.delegate = new HashMap<>(); - this.allContainedTypes = new ObjectOpenHashSet<>(); - this.putAll(delegate); - } - - @Override - public int size() { - return this.delegate.size(); - } - - @Override - public boolean isEmpty() { - return this.delegate.isEmpty(); - } - - @Override - public boolean containsKey(Object o) { - return this.delegate.containsKey(o); - } - - @Override - public boolean containsValue(Object o) { - return this.delegate.containsValue(o); - } - - @Override - public AccessTransformer get(Object o) { - return this.delegate.get(o); - } - - @Nullable - @Override - public AccessTransformer put(Target target, AccessTransformer accessTransformer) { - this.allContainedTypes.add(target.getASMType()); - return this.delegate.put(target, accessTransformer); - } - - @Override - public AccessTransformer remove(Object o) { - if(o instanceof Target) { - this.allContainedTypes.remove(((Target)o).getASMType()); - } - return this.delegate.remove(o); - } - - @Override - public void putAll(@NotNull Map, ? extends AccessTransformer> map) { - for(Target key : map.keySet()) { - this.allContainedTypes.add(key.getASMType()); - } - this.delegate.putAll(map); - } - - @Override - public void clear() { - this.allContainedTypes.clear(); - this.delegate.clear(); - } - - @NotNull - @Override - public Set> keySet() { - return this.delegate.keySet(); - } - - @NotNull - @Override - public Collection values() { - return this.delegate.values(); - } - - @NotNull - @Override - public Set, AccessTransformer>> entrySet() { - return this.delegate.entrySet(); - } - - public boolean containsType(Type type) { - return this.allContainedTypes.contains(type); - } - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/load/ModWorkManagerQueue.java b/forge/src/main/java/org/embeddedt/modernfix/forge/load/ModWorkManagerQueue.java deleted file mode 100644 index 213e768a..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/load/ModWorkManagerQueue.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.embeddedt.modernfix.forge.load; - -import net.minecraftforge.fml.ModWorkManager; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; - -import java.util.concurrent.ConcurrentLinkedDeque; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.LockSupport; - -public class ModWorkManagerQueue extends ConcurrentLinkedDeque { - private static final long PARK_TIME = TimeUnit.MILLISECONDS.toNanos(25); - - private static final Runnable DUMMY_TASK = () -> {}; - - private boolean shouldReturnDummyTask = false; - - /** - * Sleep for a bit if there are no tasks. - */ - @Override - public Runnable pollFirst() { - Runnable r = super.pollFirst(); - if(r == null) { - LockSupport.parkNanos(PARK_TIME); - boolean isReturning = shouldReturnDummyTask; - shouldReturnDummyTask = !shouldReturnDummyTask; - /* - * We need to kick FML to redraw the loading screen periodically, - * but also allow actually exiting the executor loop, so that - * loading can complete if async work is done. - * - * This is accomplished by alternating between returning a dummy - * task and nothing. - */ - return isReturning ? DUMMY_TASK : null; - } else { - return r; - } - } - - @SuppressWarnings({"unchecked", "rawtypes"}) - public static void replace() { - try { - Class syncExecutorClass = Class.forName("net.minecraftforge.fml.ModWorkManager$SyncExecutor"); - ConcurrentLinkedDeque taskQueue = (ConcurrentLinkedDeque) ObfuscationReflectionHelper.getPrivateValue((Class)syncExecutorClass, (Object)ModWorkManager.syncExecutor(), "tasks"); - ModWorkManagerQueue q = new ModWorkManagerQueue(); - Runnable task; - do { - task = taskQueue.pollFirst(); - if(task != null) - q.push(task); - } while(task != null); - ObfuscationReflectionHelper.setPrivateValue((Class)syncExecutorClass, (Object)ModWorkManager.syncExecutor(), q, "tasks"); - } catch(ReflectiveOperationException e) { - e.printStackTrace(); - } - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/forge_vehicle_packets/ServerGamePacketListenerImplMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/forge_vehicle_packets/ServerGamePacketListenerImplMixin.java deleted file mode 100644 index 5ba643af..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/forge_vehicle_packets/ServerGamePacketListenerImplMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.forge_vehicle_packets; - -import net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(ServerGamePacketListenerImpl.class) -public class ServerGamePacketListenerImplMixin { - @Shadow public ServerPlayer player; - - @Redirect(method = "handleMoveVehicle", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;absMoveTo(DDDFF)V")) - private void movePlayerUsingPositionRider(ServerPlayer player, double x, double y, double z, float yRot, float xRot, ServerboundMoveVehiclePacket packet) { - if(player == this.player) { - // use positionRider - Vec3 oldPos = this.player.position(); - yRot = this.player.getYRot(); - xRot = this.player.getXRot(); - float yHeadRot = this.player.getYHeadRot(); - this.player.getRootVehicle().positionRider(this.player); - // keep old rotation - this.player.setYRot(yRot); - this.player.setXRot(xRot); - this.player.setYHeadRot(yHeadRot); - // save old position - this.player.xo = oldPos.x; - this.player.yo = oldPos.y; - this.player.zo = oldPos.z; - } else - player.absMoveTo(x, y, z, yRot, xRot); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/removed_dimensions/LevelStorageSourceMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/removed_dimensions/LevelStorageSourceMixin.java deleted file mode 100644 index 59b4ae8d..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/removed_dimensions/LevelStorageSourceMixin.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.removed_dimensions; - -import net.minecraft.world.level.storage.LevelStorageSource; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -@Mixin(LevelStorageSource.class) -public class LevelStorageSourceMixin { - @ModifyArg(method = "*", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/DataResult;getOrThrow(ZLjava/util/function/Consumer;)Ljava/lang/Object;", ordinal = 0), index = 0) - private static boolean alwaysAllowPartialDimensions(boolean flag) { - return true; - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java deleted file mode 100644 index b9e504be..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.core; - -import net.minecraft.network.Connection; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.network.ConnectionType; -import net.minecraftforge.network.NetworkContext; -import org.embeddedt.modernfix.forge.packet.NetworkUtils; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ForgeHooks.class) -public abstract class NetworkHooksMixin { - @Inject(method = "handleClientConfigurationComplete", at = @At("RETURN"), remap = false) - private static void setVanillaGlobalFlag(Connection manager, CallbackInfo ci) { - NetworkUtils.isCurrentlyVanilla = NetworkContext.get(manager).getType() == ConnectionType.VANILLA; - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/devenv/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/devenv/GameDataMixin.java deleted file mode 100644 index 5602da08..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/devenv/GameDataMixin.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.devenv; - -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.ForgeRegistry; -import net.minecraftforge.registries.GameData; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(GameData.class) -public class GameDataMixin { - - @Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/registries/ForgeRegistry;dump(Lnet/minecraft/resources/ResourceLocation;)V", remap = false)) - private static void noDump(ForgeRegistry reg, ResourceLocation id) { - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_forge_dummies/NamespacedHolderHelperMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_forge_dummies/NamespacedHolderHelperMixin.java deleted file mode 100644 index ef19734d..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_forge_dummies/NamespacedHolderHelperMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.fast_forge_dummies; - -import com.mojang.serialization.Lifecycle; -import net.minecraft.core.Holder; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Map; - -@Mixin(targets = { "net/minecraftforge/registries/NamespacedWrapper" }) -public abstract class NamespacedHolderHelperMixin extends MappedRegistry { - @Shadow(remap = false) private Map> holdersByName; - - public NamespacedHolderHelperMixin(ResourceKey> arg, Lifecycle lifecycle) { - super(arg, lifecycle); - } - - @Inject(method = "freeze", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraftforge/registries/NamespacedWrapper;holdersByName:Ljava/util/Map;", remap = false), cancellable = true) - private void fastDummyCheck(CallbackInfoReturnable> cir) { - // Quickly iterate without making any streams, etc. to see if everything is fine - // Use the slow path (by returning without cancelling) when there is an error - for(Holder.Reference ref : this.holdersByName.values()) { - if(!ref.isBound()) - return; - } - if (this.unregisteredIntrusiveHolders != null) { - for(Holder.Reference ref : this.unregisteredIntrusiveHolders.values()) { - if(ref.getType() == Holder.Reference.Type.INTRUSIVE && !ref.isBound()) - return; - } - } - // Skip the creation of streams - cir.setReturnValue(this); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java deleted file mode 100644 index 2612ba24..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.fast_registry_validation; - -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import net.minecraftforge.registries.ForgeRegistry; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.Marker; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.lang.reflect.Method; -import java.util.*; - -@Mixin(value = ForgeRegistry.class, remap = false) -public class ForgeRegistryMixin { - private static Method bitSetTrimMethod = null; - private static boolean bitSetTrimMethodRetrieved = false; - - /** - * Cache the result of findMethod instead of running it multiple times. - * Null checks are not required as the surrounding code handles it already. - */ - @Redirect(method = "validateContent", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/util/ObfuscationReflectionHelper;findMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"), require = 0) - private Method skipMultipleRemap(Class clz, String methodName, Class[] params) { - if(!bitSetTrimMethodRetrieved) { - bitSetTrimMethodRetrieved = true; - bitSetTrimMethod = ObfuscationReflectionHelper.findMethod(clz, methodName, params); - } - return bitSetTrimMethod; - } - - private int expectedNextBit = -1; - - /** - * Avoid calling nextClearBit and scanning the whole registry for every block registration. - */ - @Redirect(method = "add(ILnet/minecraft/resources/ResourceLocation;Ljava/lang/Object;Ljava/lang/String;)I", at = @At(value = "INVOKE", target = "Ljava/util/BitSet;nextClearBit(I)I")) - private int useCachedBit(BitSet availabilityMap, int minimum) { - int bit = availabilityMap.nextClearBit(expectedNextBit != -1 ? expectedNextBit : minimum); - expectedNextBit = bit + 1; - return bit; - } - - @Inject(method = { "sync", "clear", "block" }, at = @At("HEAD")) - private void clearBitCache(CallbackInfo ci) { - expectedNextBit = -1; - } - - @Redirect(method = "add(ILnet/minecraft/resources/ResourceLocation;Ljava/lang/Object;Ljava/lang/String;)I", at = @At(value = "INVOKE", target = "Lorg/apache/logging/log4j/Logger;trace(Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V")) - private void skipTrace(Logger logger, Marker marker, String s, Object o, Object o1, Object o2, Object o3, Object o4) { - - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java deleted file mode 100644 index 025aacbc..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.forge_registry_lambda; - -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.RegistryObject; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = RegistryObject.class, remap = false) -public class RegistryObjectMixin { - @Shadow private @Nullable T value; - - @Shadow @Final private ResourceLocation name; - - /** - * @author embeddedt - * @reason avoid lambda allocation on every call - */ - @Overwrite - public T get() { - T ret = this.value; - if(ret == null) { - throw new NullPointerException("Registry Object not present: " + this.name); - } - return ret; - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/reduce_blockstate_cache_rebuilds/BlockCallbacksMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/reduce_blockstate_cache_rebuilds/BlockCallbacksMixin.java deleted file mode 100644 index 85c718d3..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/reduce_blockstate_cache_rebuilds/BlockCallbacksMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.reduce_blockstate_cache_rebuilds; - -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.IForgeRegistryInternal; -import net.minecraftforge.registries.RegistryManager; -import org.embeddedt.modernfix.blockstate.BlockStateCacheHandler; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(targets = { "net/minecraftforge/registries/GameData$BlockCallbacks" }) -public class BlockCallbacksMixin { - @Redirect(method = "onBake", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;initCache()V")) - private void skipCache(BlockState instance) { - - } - - @Inject(method = "onBake", at = @At(value = "TAIL"), remap = false) - private void computeCaches(IForgeRegistryInternal owner, RegistryManager stage, CallbackInfo ci) { - BlockStateCacheHandler.rebuildParallel(false); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/reduce_blockstate_cache_rebuilds/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/reduce_blockstate_cache_rebuilds/GameDataMixin.java deleted file mode 100644 index 1bf49444..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/reduce_blockstate_cache_rebuilds/GameDataMixin.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.reduce_blockstate_cache_rebuilds; - -import com.google.common.collect.Multimap; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.ForgeRegistry; -import net.minecraftforge.registries.GameData; -import org.embeddedt.modernfix.util.BakeReason; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Map; - -@Mixin(GameData.class) -public class GameDataMixin { - @Inject(method = "freezeData", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;forEach(Ljava/util/function/BiConsumer;)V", ordinal = 1), remap = false) - private static void markFreezeBakeReason(CallbackInfo ci) { - BakeReason.setCurrentBakeReason(BakeReason.FREEZE); - } - - @Inject(method = "freezeData", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/registries/GameData;fireRemapEvent(Ljava/util/Map;Z)V"), remap = false) - private static void markEmptyBakeReason1(CallbackInfo ci) { - BakeReason.setCurrentBakeReason(null); - } - - @Inject(method = "revertTo", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;forEach(Ljava/util/function/BiConsumer;)V", ordinal = 1), remap = false) - private static void markRevertBakeReason(CallbackInfo ci) { - BakeReason.setCurrentBakeReason(BakeReason.REVERT); - } - - @Inject(method = "revertTo", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;forEach(Ljava/util/function/BiConsumer;)V", ordinal = 1, shift = At.Shift.AFTER), remap = false) - private static void markEmptyBakeReason2(CallbackInfo ci) { - BakeReason.setCurrentBakeReason(null); - } - - @Inject(method = "injectSnapshot", at = @At("HEAD"), remap = false) - private static void markSnapshotInjectBakeReason(Map snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable> cir) { - BakeReason.setCurrentBakeReason(isLocalWorld ? BakeReason.LOCAL_SNAPSHOT_INJECT : BakeReason.REMOTE_SNAPSHOT_INJECT); - } - - @Inject(method = "injectSnapshot", at = @At("RETURN"), remap = false) - private static void markEmptyBakeReason2(Map snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable> cir) { - BakeReason.setCurrentBakeReason(null); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/resourcepacks/ForgePathPackResourcesMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/resourcepacks/ForgePathPackResourcesMixin.java deleted file mode 100644 index c79ca8d5..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/resourcepacks/ForgePathPackResourcesMixin.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.resourcepacks; - -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.PackResources; -import net.minecraft.server.packs.PackType; -import net.minecraftforge.forgespi.locating.IModFile; -import net.minecraftforge.resource.PathPackResources; -import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.forge.load.ModResourcePackPathFixer; -import org.embeddedt.modernfix.resources.ICachingResourcePack; -import org.embeddedt.modernfix.resources.NewResourcePackAdapter; -import org.embeddedt.modernfix.resources.PackResourcesCacheEngine; -import org.embeddedt.modernfix.util.PackTypeHelper; -import org.jetbrains.annotations.NotNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Set; - -@Mixin(PathPackResources.class) -public abstract class ForgePathPackResourcesMixin implements ICachingResourcePack { - @Shadow(remap = false) protected abstract Path resolve(String... paths); - - @Shadow(remap = false) @NotNull - protected abstract Set getNamespacesFromDisk(PackType type); - - @Shadow(remap = false) private static String[] getPathFromLocation(PackType type, ResourceLocation location) { - throw new AssertionError(); - } - - private PackResourcesCacheEngine cacheEngine; - - private IModFile mfix$resolveFileOverride; - - @Inject(method = "", at = @At("TAIL")) - private void cacheResources(String packId, boolean isBuiltin, final Path source, CallbackInfo ci) { - // handle buggy mods instantiating at the root path, but only if they didn't override at all - // (otherwise they may have handled resolve() already) - if(((Object)this).getClass() == PathPackResources.class) - this.mfix$resolveFileOverride = ModResourcePackPathFixer.getModFileByRootPath(source); - if(this.mfix$resolveFileOverride != null) - ModernFix.LOGGER.warn("PathResourcePack base class instantiated with root path of mod file {}. This probably means a mod should be calling ResourcePackLoader.createPackForMod instead. Applying workaround.", mfix$resolveFileOverride.getFileName()); - invalidateCache(); - PackResourcesCacheEngine.track(this); - } - - @Inject(method = "resolve", at = @At("HEAD"), cancellable = true, remap = false) - private void resolveViaModFile(String[] paths, CallbackInfoReturnable cir) { - if(this.mfix$resolveFileOverride != null) - cir.setReturnValue(this.mfix$resolveFileOverride.findResource(paths)); - } - - private PackResourcesCacheEngine generateResourceCache() { - synchronized (this) { - PackResourcesCacheEngine engine = this.cacheEngine; - if(engine != null) - return engine; - this.cacheEngine = engine = new PackResourcesCacheEngine(this::getNamespacesFromDisk, (type, namespace) -> this.resolve(type.getDirectory(), namespace)); - return engine; - } - } - - @Override - public void invalidateCache() { - this.cacheEngine = null; - } - - @Inject(method = "getNamespaces", at = @At("HEAD"), cancellable = true) - private void useCacheForNamespaces(PackType type, CallbackInfoReturnable> cir) { - PackResourcesCacheEngine engine = cacheEngine; - if(engine != null) { - Set namespaces = engine.getNamespaces(type); - if(namespaces != null) - cir.setReturnValue(namespaces); - } - } - - @Redirect(method = "getRootResource", at = @At(value = "INVOKE", target = "Ljava/nio/file/Files;exists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z")) - private boolean useCacheForExistence(Path path, LinkOption[] options, String[] originalPaths) { - // the cache only stores things with a namespace and pack type - if(originalPaths.length < 3) - return Files.exists(path, options); - else - return this.generateResourceCache().hasResource(originalPaths); - } - - /** - * @author embeddedt - * @reason Use cached listing of mod resources - */ - @Inject(method = "listResources", at = @At("HEAD"), cancellable = true) - private void fastGetResources(PackType type, String namespace, String path, PackResources.ResourceOutput resourceOutput, CallbackInfo ci) - { - if(!PackTypeHelper.isVanillaPackType(type)) - return; - ci.cancel(); - Collection allPossibleResources = this.generateResourceCache().getResources(type, namespace, path, Integer.MAX_VALUE, p -> true); - NewResourcePackAdapter.sendToOutput(location -> { - Path target = resolve(getPathFromLocation(location.getPath().startsWith("lang/") ? PackType.CLIENT_RESOURCES : type, location)); - return () -> Files.newInputStream(target); - }, resourceOutput, allPossibleResources); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistryMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistryMixin.java deleted file mode 100644 index 591be0f4..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistryMixin.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.rewrite_registry; - -import com.google.common.collect.BiMap; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.ForgeRegistry; -import org.embeddedt.modernfix.annotation.IgnoreOutsideDev; -import org.embeddedt.modernfix.forge.registry.FastForgeRegistry; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = ForgeRegistry.class, remap = false) -@IgnoreOutsideDev -public class ForgeRegistryMixin { - @Shadow - @Final - @Mutable - private BiMap ids; - - @Shadow @Final @Mutable private BiMap, V> keys; - - @Shadow @Final private ResourceKey> key; - - @Shadow @Final @Mutable private BiMap names; - - @Shadow @Final @Mutable private BiMap owners; - - private FastForgeRegistry fastRegistry; - - /** - * The following code replaces the Forge HashBiMaps with a more efficient data structure based around - * an array list for IDs and one HashMap going from value -> information. - */ - @Inject(method = "", at = @At("RETURN")) - private void replaceBackingMaps(CallbackInfo ci) { - this.fastRegistry = new FastForgeRegistry<>(this.key); - this.ids = fastRegistry.getIds(); - this.keys = fastRegistry.getKeys(); - this.names = fastRegistry.getNames(); - this.owners = fastRegistry.getOwners(); - } - - @Inject(method = "freeze", at = @At("RETURN")) - private void optimizeRegistry(CallbackInfo ci) { - this.fastRegistry.optimize(); - } - - @Redirect(method = "sync", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;clear()V")) - private void clearBiMap(BiMap map) { - if(map == this.owners) { - this.fastRegistry.clear(); - } else if(map == this.keys || map == this.names || map == this.ids) { - // do nothing, the registry is faster at clearing everything at once - } else - map.clear(); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistrySnapshotMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistrySnapshotMixin.java deleted file mode 100644 index 2412cbf0..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/rewrite_registry/ForgeRegistrySnapshotMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.embeddedt.modernfix.forge.mixin.perf.rewrite_registry; - -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.ForgeRegistry; -import org.embeddedt.modernfix.annotation.IgnoreOutsideDev; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.Map; - -@Mixin(ForgeRegistry.Snapshot.class) -@IgnoreOutsideDev -public class ForgeRegistrySnapshotMixin { - @Shadow(remap = false) @Final @Mutable public Map ids; - - /** - * The only good reason to use tree maps here is to keep the order the same. But we are tracking IDs - * anyway so order shouldn't matter. We replace the maps that will be most used. - */ - @Inject(method = "", at = @At("RETURN")) - private void replaceSnapshotMaps(CallbackInfo ci) { - this.ids = new Object2ObjectOpenHashMap<>(); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java b/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java deleted file mode 100644 index c6f50238..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.embeddedt.modernfix.forge.packet; - -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.Channel; -import net.minecraftforge.network.ChannelBuilder; -import net.minecraftforge.network.SimpleChannel; -import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.ModernFixClient; -import org.embeddedt.modernfix.packet.EntityIDSyncPacket; - -public class PacketHandler { - private static final int PROTOCOL_VERSION = 1; - public static final SimpleChannel INSTANCE = ChannelBuilder - .named(new ResourceLocation(ModernFix.MODID, "main")) - .networkProtocolVersion(PROTOCOL_VERSION) - .serverAcceptedVersions(Channel.VersionTest.ACCEPT_MISSING.or(Channel.VersionTest.exact(PROTOCOL_VERSION))) - .clientAcceptedVersions(Channel.VersionTest.ACCEPT_MISSING.or(Channel.VersionTest.exact(PROTOCOL_VERSION))) - .simpleChannel(); - - public static void register() { - INSTANCE.messageBuilder(EntityIDSyncPacket.class).encoder(EntityIDSyncPacket::serialize).decoder(EntityIDSyncPacket::deserialize).consumerNetworkThread((msg, ctx) -> { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - ctx.enqueueWork(() -> ModernFixClient.handleEntityIDSync(msg)); - ctx.setPacketHandled(true); - }); - }).add(); - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/registry/FastForgeRegistry.java b/forge/src/main/java/org/embeddedt/modernfix/forge/registry/FastForgeRegistry.java deleted file mode 100644 index 3e7dd484..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/registry/FastForgeRegistry.java +++ /dev/null @@ -1,601 +0,0 @@ -package org.embeddedt.modernfix.forge.registry; - -import com.google.common.collect.BiMap; -import com.google.common.collect.Iterators; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Function; - -public class FastForgeRegistry { - private final BiMap ids; - private final DataFieldBiMap names; - private final DataFieldBiMap> keys; - private final DataFieldBiMap owners; - private final ResourceKey> registryKey; - - private final ObjectArrayList valuesById; - private final Object2ObjectOpenHashMap infoByValue; - - private void storeId(V value, int id) { - RegistryValueData pair = infoByValue.computeIfAbsent(value, k -> new RegistryValueData()); - pair.id = id; - } - - private void updateInfoPairAndClearIfNull(V v, Consumer consumer) { - infoByValue.compute(v, (oldValue, oldPair) -> { - if(oldPair == null) - oldPair = new RegistryValueData(); - consumer.accept(oldPair); - if(oldPair.isEmpty()) - return null; - else - return oldPair; - }); - } - - private void ensureArrayCanFitId(int id) { - int desiredSize = id + 1; - while(valuesById.size() < desiredSize) { - valuesById.add(null); - } - } - - public void clear() { - this.infoByValue.clear(); - for(int i = 0; i < this.valuesById.size(); i++) { - this.valuesById.set(i, null); - } - this.names.clearUnsafe(); - this.keys.clearUnsafe(); - this.owners.clearUnsafe(); - } - - public FastForgeRegistry(ResourceKey> registryKey) { - this.registryKey = registryKey; - this.valuesById = new ObjectArrayList<>(); - this.infoByValue = new Object2ObjectOpenHashMap<>(); - this.keys = new DataFieldBiMap<>(p -> (ResourceKey) p.key, (p, k) -> p.key = k); - this.owners = new DataFieldBiMap<>(p -> p.overrideOwner, (p, k) -> p.overrideOwner = k); - this.names = new DataFieldBiMap<>(p -> p.location, (p, l) -> p.location = l); - // IDs require a specialized implementation, as we back the K->V direction with an array - this.ids = new BiMap() { - @Nullable - @Override - public V put(@Nullable Integer key, @Nullable V value) { - RegistryValueData data = infoByValue.get(value); - int unboxedKey = key; - if(data != null && data.id != -1 && data.id != unboxedKey) - throw new IllegalArgumentException("Existing mapping for ID " + data.id + " value " + value + " when new ID " + unboxedKey + " was requested"); - ensureArrayCanFitId(unboxedKey); - V oldValue = valuesById.set(unboxedKey, value); - storeId(value, unboxedKey); - return oldValue; - } - - @Nullable - @Override - public V forcePut(@Nullable Integer key, @Nullable V value) { - ensureArrayCanFitId(key); - V oldValue = valuesById.set(key, value); - if(oldValue != null) { - updateInfoPairAndClearIfNull(oldValue, pair -> pair.id = -1); - } - storeId(value, key); - return oldValue; - } - - @Override - public void putAll(Map map) { - map.forEach(this::put); - } - - @Override - public Set values() { - return Collections.unmodifiableSet(infoByValue.keySet()); - } - - @Override - public BiMap inverse() { - return new BiMap() { - @Nullable - @Override - public Integer put(@Nullable V key, @Nullable Integer value) { - throw new UnsupportedOperationException(); - } - - @Nullable - @Override - public Integer forcePut(@Nullable V key, @Nullable Integer value) { - throw new UnsupportedOperationException(); - } - - @Override - public void putAll(Map map) { - throw new UnsupportedOperationException(); - } - - @Override - public Set values() { - throw new UnsupportedOperationException(); - } - - @Override - public BiMap inverse() { - throw new UnsupportedOperationException(); - } - - @Override - public int size() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isEmpty() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean containsKey(Object key) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean containsValue(Object value) { - throw new UnsupportedOperationException(); - } - - @Override - public Integer get(Object key) { - RegistryValueData pair = infoByValue.get(key); - if(pair == null) - return null; - return pair.id == -1 ? null : pair.id; - } - - @Override - public Integer remove(Object key) { - RegistryValueData pair = infoByValue.get(key); - if(pair == null) - return null; - int id = pair.id; - if(id != -1) - valuesById.set(id, null); - updateInfoPairAndClearIfNull((V)key, p -> p.id = -1); - return id == -1 ? null : id; - } - - @Override - public void clear() { - throw new UnsupportedOperationException(); - } - - @NotNull - @Override - public Set keySet() { - throw new UnsupportedOperationException(); - } - - @NotNull - @Override - public Set> entrySet() { - throw new UnsupportedOperationException(); - } - }; - } - - @Override - public int size() { - return infoByValue.size(); - } - - @Override - public boolean isEmpty() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean containsKey(Object key) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean containsValue(Object value) { - throw new UnsupportedOperationException(); - } - - @Override - public V get(Object key) { - int id = (Integer)key; - if(id < 0 || id >= valuesById.size()) - return null; - else - return valuesById.get(id); - } - - @Override - public V remove(Object key) { - throw new UnsupportedOperationException(); - } - - @Override - public void clear() { - valuesById.clear(); - infoByValue.values().removeIf(pair -> { - pair.id = -1; - return pair.isEmpty(); - }); - } - - @NotNull - @Override - public Set keySet() { - throw new UnsupportedOperationException(); - } - - @NotNull - @Override - public Set> entrySet() { - throw new UnsupportedOperationException(); - } - - @Override - public void forEach(BiConsumer action) { - for(int i = 0 ; i < valuesById.size(); i++) { - V val = valuesById.get(i); - if(val != null) - action.accept(i, val); - } - } - }; - } - - public void optimize() { - this.keys.optimize(); - this.owners.optimize(); - this.names.optimize(); - this.infoByValue.trim(); - } - - public BiMap getIds() { - return ids; - } - - public BiMap, V> getKeys() { - return keys; - } - - public BiMap getNames() { - return names; - } - - public DataFieldBiMap getOwners() { - return owners; - } - - /** - * Custom BiMap implementation that uses one internal hash map for the K->V direction, and the shared global - * information hash map for the V->K direction. - */ - class DataFieldBiMap implements BiMap { - public final Object2ObjectOpenHashMap valuesByKey = new Object2ObjectOpenHashMap<>(); - private final Function getter; - private final BiConsumer setter; - - public DataFieldBiMap(Function getter, BiConsumer setter) { - this.getter = getter; - this.setter = setter; - } - - public void optimize() { - this.valuesByKey.trim(); - } - - public void clearUnsafe() { - this.valuesByKey.clear(); - } - - private V forcePut(@Nullable K key, @Nullable V value, boolean throwOnExisting) { - if(throwOnExisting) { - RegistryValueData dataForValue = infoByValue.get(value); - // null check could be wrong if null is a valid value but doesn't matter in Forge's use - if(dataForValue != null && getter.apply(dataForValue) != null && !Objects.equals(getter.apply(dataForValue), key)) { - throw new IllegalArgumentException("Existing mapping for key " + key + " value " + value); - } - } - V oldValue = valuesByKey.put(key, value); - if(oldValue != null) { - updateInfoPairAndClearIfNull(oldValue, p -> setter.accept(p, null)); - } - updateInfoPairAndClearIfNull(value, p -> setter.accept(p, key)); - return oldValue; - } - - @Nullable - @Override - public V put(@Nullable K key, @Nullable V value) { - return forcePut(key, value, true); - } - - @Nullable - @Override - public V forcePut(@Nullable K key, @Nullable V value) { - return forcePut(key, value, false); - } - - @Override - public void putAll(Map map) { - map.forEach(this::put); - } - - @Override - public Set values() { - return Collections.unmodifiableSet(infoByValue.keySet()); - } - - private DataFieldBiMapInverse inverse = null; - - @Override - public BiMap inverse() { - if(inverse == null) - inverse = new DataFieldBiMapInverse<>(this); - return inverse; - } - - @Override - public int size() { - return valuesByKey.size(); - } - - @Override - public boolean isEmpty() { - return valuesByKey.isEmpty(); - } - - @Override - public boolean containsKey(Object key) { - return valuesByKey.containsKey(key); - } - - @Override - public boolean containsValue(Object value) { - return infoByValue.containsKey(value); - } - - @Override - public V get(Object key) { - return valuesByKey.get(key); - } - - @Override - public V remove(Object key) { - V value = get(key); - if(value == null) - return null; - inverse().remove(value); - return value; - } - - @Override - public void clear() { - valuesByKey.values().forEach(v -> updateInfoPairAndClearIfNull(v, p -> p.key = null)); - valuesByKey.clear(); - } - - @NotNull - @Override - public Set keySet() { - return Collections.unmodifiableSet(valuesByKey.keySet()); - } - - @NotNull - @Override - public Set> entrySet() { - return Collections.unmodifiableSet(valuesByKey.entrySet()); - } - - - } - - class DataFieldBiMapInverse implements BiMap { - private final DataFieldBiMap forward; - - public DataFieldBiMapInverse(DataFieldBiMap forward) { - this.forward = forward; - } - - @Nullable - @Override - public K put(@Nullable V key, @Nullable K value) { - throw new UnsupportedOperationException(); - } - - @Nullable - @Override - public K forcePut(@Nullable V key, @Nullable K value) { - throw new UnsupportedOperationException(); - } - - @Override - public void putAll(Map map) { - throw new UnsupportedOperationException(); - } - - @Override - public Set values() { - throw new UnsupportedOperationException(); - } - - @Override - public BiMap inverse() { - return forward; - } - - @Override - public int size() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isEmpty() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean containsKey(Object key) { - return infoByValue.containsKey(key); - } - - @Override - public boolean containsValue(Object value) { - return forward.valuesByKey.containsKey(value); - } - - @Override - public K get(Object key) { - RegistryValueData pair = infoByValue.get(key); - if(pair == null) - return null; - else - return forward.getter.apply(pair); - } - - @Override - public K remove(Object key) { - RegistryValueData pair = infoByValue.get(key); - if(pair == null) - return null; - else { - K rk = forward.getter.apply(pair); - forward.valuesByKey.remove(rk); - updateInfoPairAndClearIfNull((V)key, p -> forward.setter.accept(p, null)); - return rk; - } - } - - @Override - public void clear() { - throw new UnsupportedOperationException(); - } - - @NotNull - @Override - public Set keySet() { - throw new UnsupportedOperationException(); - } - - @NotNull - @Override - public Set> entrySet() { - throw new UnsupportedOperationException(); - } - } - - class FastForgeRegistryLocationSet implements Set { - private final Set> backingSet; - - public FastForgeRegistryLocationSet(Set> backingSet) { - this.backingSet = backingSet; - } - - @Override - public int size() { - return backingSet.size(); - } - - @Override - public boolean isEmpty() { - return backingSet.isEmpty(); - } - - @Override - public boolean contains(Object o) { - return backingSet.contains(ResourceKey.create(FastForgeRegistry.this.registryKey, (ResourceLocation)o)); - } - - @NotNull - @Override - public Iterator iterator() { - return Iterators.transform(backingSet.iterator(), ResourceKey::location); - } - - @NotNull - @Override - public Object[] toArray() { - Object[] keyArray = backingSet.toArray(); - for(int i = 0; i < keyArray.length; i++) { - keyArray[i] = ((ResourceKey)keyArray[i]).location(); - } - return keyArray; - } - - @NotNull - @Override - public T[] toArray(@NotNull T[] a) { - Object[] keyArray = backingSet.toArray(); - T[] finalArray = Arrays.copyOf(a, keyArray.length); - for(int i = 0; i < keyArray.length; i++) { - finalArray[i] = (T)((ResourceKey)keyArray[i]).location(); - } - return finalArray; - } - - @Override - public boolean add(ResourceLocation resourceLocation) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean remove(Object o) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean containsAll(@NotNull Collection c) { - for(Object o : c) { - if(!contains(o)) - return false; - } - return true; - } - - @Override - public boolean addAll(@NotNull Collection c) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean retainAll(@NotNull Collection c) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean removeAll(@NotNull Collection c) { - throw new UnsupportedOperationException(); - } - - @Override - public void clear() { - throw new UnsupportedOperationException(); - } - } - - static class RegistryValueData { - public ResourceKey key; - public ResourceLocation location; - public int id = -1; - public Object overrideOwner; - - boolean isEmpty() { - return key == null && location == null && id == -1 && overrideOwner == null; - } - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/registry/ObjectHolderClearer.java b/forge/src/main/java/org/embeddedt/modernfix/forge/registry/ObjectHolderClearer.java deleted file mode 100644 index 4f2a9059..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/registry/ObjectHolderClearer.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.embeddedt.modernfix.forge.registry; - -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import net.minecraftforge.registries.ObjectHolderRegistry; -import org.embeddedt.modernfix.ModernFix; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Set; -import java.util.function.Consumer; -import java.util.function.Predicate; - -public class ObjectHolderClearer { - /** - * Many of the built-in Forge holders needlessly hold on to an exception. - */ - public static void clearThrowables() { - Set>> holders = ObfuscationReflectionHelper.getPrivateValue(ObjectHolderRegistry.class, null, "objectHolders"); - if(holders != null) { - int numCleared = 0; - HashMap, Field> throwableField = new HashMap<>(); - Throwable singletonThrowable = new Throwable("[This stacktrace was cleared to save memory]"); - try { - for(Consumer> holder : holders) { - Field target = throwableField.computeIfAbsent(holder.getClass(), clz -> { - Field[] clzFields = clz.getDeclaredFields(); - for(Field f : clzFields) { - if(Throwable.class.isAssignableFrom(f.getType())) { - f.setAccessible(true); - return f; - } - } - return null; - }); - if(target != null) { - target.set(holder, singletonThrowable); - numCleared++; - } - } - } catch(RuntimeException | ReflectiveOperationException | NoClassDefFoundError ignored) { - } - ModernFix.LOGGER.debug("Cleared " + numCleared + " object holder stacktrace references"); - } - } -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/rs/IFluidExternalStorageCache.java b/forge/src/main/java/org/embeddedt/modernfix/forge/rs/IFluidExternalStorageCache.java deleted file mode 100644 index 4b7f192a..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/rs/IFluidExternalStorageCache.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.embeddedt.modernfix.forge.rs; - -import net.minecraftforge.fluids.capability.IFluidHandler; - -public interface IFluidExternalStorageCache { - boolean initCache(IFluidHandler handler); -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/rs/IItemExternalStorageCache.java b/forge/src/main/java/org/embeddedt/modernfix/forge/rs/IItemExternalStorageCache.java deleted file mode 100644 index 4d5555d5..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/rs/IItemExternalStorageCache.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.embeddedt.modernfix.forge.rs; - -import net.minecraftforge.items.IItemHandler; - -public interface IItemExternalStorageCache { - boolean initCache(IItemHandler handler); -} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/util/ModUtil.java b/forge/src/main/java/org/embeddedt/modernfix/forge/util/ModUtil.java deleted file mode 100644 index 3089fc51..00000000 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/util/ModUtil.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.embeddedt.modernfix.forge.util; - -import net.minecraftforge.eventbus.EventBus; -import net.minecraftforge.eventbus.api.EventListenerHelper; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import org.embeddedt.modernfix.ModernFix; - -import java.util.*; -import java.util.concurrent.ForkJoinPool; -import java.util.concurrent.ForkJoinWorkerThread; -import java.util.function.Supplier; - -public class ModUtil { - private static final Set> erroredContexts = new HashSet<>(); - private static boolean busListensToEvent(EventBus bus, Class eventClazz) { - try { - int busID = ObfuscationReflectionHelper.getPrivateValue(EventBus.class, bus, "busID"); - return EventListenerHelper.getListenerList(eventClazz).getListeners(busID).length > 0; - } catch(Exception e) { - ModernFix.LOGGER.error(e); - return false; - } - } - public static Collection findAllModsListeningToEvent(Class eventClazz) { - Set modsListening = new HashSet<>(); - ModList.get().forEachModContainer((modId, container) -> { - Supplier languageExtensionSupplier = ObfuscationReflectionHelper.getPrivateValue(ModContainer.class, container, "contextExtension"); - Object context = languageExtensionSupplier.get(); - if(context == null) - return; - if(context instanceof FMLJavaModLoadingContext) { - if(busListensToEvent((EventBus)((FMLJavaModLoadingContext) context).getModEventBus(), eventClazz)) { - modsListening.add(modId); - } - } else { - synchronized(erroredContexts) { - if(!erroredContexts.contains(context.getClass())) { - ModernFix.LOGGER.warn("Unknown modloading context: " + context.getClass().getName()); - erroredContexts.add(context.getClass()); - } - } - } - }); - return modsListening; - } - - private static final ClassLoader targetClassLoader = Thread.currentThread().getContextClassLoader(); - - private static class ModernFixForkJoinWorkerThread extends ForkJoinWorkerThread { - ModernFixForkJoinWorkerThread(ForkJoinPool pool) { - super(pool); - /* Ensure that the context class loader is set correctly */ - this.setContextClassLoader(targetClassLoader); - } - } - - public static ForkJoinPool commonPool = new ForkJoinPool( - ForkJoinPool.getCommonPoolParallelism(), - ModernFixForkJoinWorkerThread::new, - null, - false - ); -} diff --git a/gradle.properties b/gradle.properties index a71164ea..82f994fe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,12 +2,12 @@ org.gradle.jvmargs=-Xmx2G junit_version=5.10.0-M1 -mixinextras_version=0.2.0-beta.9 +mixinextras_version=0.3.1 mod_id=modernfix minecraft_version=1.20.3 -enabled_platforms=fabric -forge_version=1.20.2-48.0.40 +enabled_platforms=fabric,neoforge +forge_version=20.3.1-beta # parchment_version=2023.07.09 refined_storage_version=4392788 jei_version=16.0.0.28 diff --git a/forge/build.gradle b/neoforge/build.gradle similarity index 84% rename from forge/build.gradle rename to neoforge/build.gradle index 5487310b..1b790a61 100644 --- a/forge/build.gradle +++ b/neoforge/build.gradle @@ -6,18 +6,7 @@ plugins { architectury { platformSetupLoomIde() - forge() -} - -loom { - forge { - convertAccessWideners = true - extraAccessWideners.add loom.accessWidenerPath.get().asFile.name - - mixinConfig "modernfix-common.mixins.json" - mixinConfig "modernfix-forge.mixins.json" - } - mixin.defaultRefmapName = "modernfix.refmap.json" + neoForge() } configurations { @@ -41,12 +30,13 @@ repositories { includeGroup "extra-mods" } } + maven { url "https://maven.neoforged.net" } } dependencies { - forge "net.minecraftforge:forge:${rootProject.forge_version}" - implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-common:${rootProject.mixinextras_version}")) - implementation(include("com.github.llamalad7.mixinextras:mixinextras-forge:${rootProject.mixinextras_version}")) + neoForge "net.neoforged:neoforge:${rootProject.forge_version}" + //implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-common:${rootProject.mixinextras_version}")) + //implementation(include("com.github.llamalad7.mixinextras:mixinextras-forge:${rootProject.mixinextras_version}")) // Remove the next line if you don't want to depend on the API // modApi "me.shedaniel:architectury-forge:${rootProject.architectury_version}" @@ -74,7 +64,7 @@ dependencies { } common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } + shadowCommon(project(path: ":common", configuration: "transformProductionNeoForge")) { transitive = false } } processResources { @@ -97,6 +87,7 @@ remapJar { input.set shadowJar.archiveFile dependsOn shadowJar archiveClassifier.set(null) + atAccessWideners.add "modernfix.accesswidener" } jar { diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties new file mode 100644 index 00000000..2914393d --- /dev/null +++ b/neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=neoforge \ No newline at end of file diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/ModernFixConfig.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/ModernFixConfig.java similarity index 76% rename from forge/src/main/java/org/embeddedt/modernfix/forge/ModernFixConfig.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/ModernFixConfig.java index 268344a9..891f186a 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/ModernFixConfig.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/ModernFixConfig.java @@ -1,8 +1,8 @@ -package org.embeddedt.modernfix.forge; +package org.embeddedt.modernfix.neoforge; import com.google.common.collect.ImmutableList; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; import java.util.List; import java.util.Set; @@ -10,10 +10,10 @@ import java.util.function.Predicate; import java.util.stream.Collectors; public class ModernFixConfig { - private static final ForgeConfigSpec.Builder COMMON_BUILDER = new ForgeConfigSpec.Builder(); - public static ForgeConfigSpec COMMON_CONFIG; + private static final ModConfigSpec.Builder COMMON_BUILDER = new ModConfigSpec.Builder(); + public static ModConfigSpec COMMON_CONFIG; - public static ForgeConfigSpec.ConfigValue> BLACKLIST_ASYNC_JEI_PLUGINS; + public static ModConfigSpec.ConfigValue> BLACKLIST_ASYNC_JEI_PLUGINS; private static Set jeiPluginBlacklist; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ClassLoadHack.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/classloading/ClassLoadHack.java similarity index 94% rename from forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ClassLoadHack.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/classloading/ClassLoadHack.java index 169de148..2a073cbc 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ClassLoadHack.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/classloading/ClassLoadHack.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.classloading; +package org.embeddedt.modernfix.neoforge.classloading; /** * Sometimes mods have classes that circularly reference each other. If each of these classes ends up being loaded diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ModFileScanDataDeduplicator.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/classloading/ModFileScanDataDeduplicator.java similarity index 94% rename from forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ModFileScanDataDeduplicator.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/classloading/ModFileScanDataDeduplicator.java index 61f0ad81..4e607aa2 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ModFileScanDataDeduplicator.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/classloading/ModFileScanDataDeduplicator.java @@ -1,10 +1,10 @@ -package org.embeddedt.modernfix.forge.classloading; +package org.embeddedt.modernfix.neoforge.classloading; import com.google.common.collect.Interner; import com.google.common.collect.Interners; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.forgespi.language.ModFileScanData; -import net.minecraftforge.forgespi.locating.IModFile; +import net.neoforged.fml.ModList; +import net.neoforged.neoforgespi.language.ModFileScanData; +import net.neoforged.neoforgespi.locating.IModFile; import org.objectweb.asm.Type; import java.lang.reflect.Field; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/config/ConfigFixer.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/config/ConfigFixer.java similarity index 91% rename from forge/src/main/java/org/embeddedt/modernfix/forge/config/ConfigFixer.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/config/ConfigFixer.java index 96db11ec..7f310484 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/config/ConfigFixer.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/config/ConfigFixer.java @@ -1,9 +1,9 @@ -package org.embeddedt.modernfix.forge.config; +package org.embeddedt.modernfix.neoforge.config; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.config.IConfigEvent; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.config.IConfigEvent; +import net.neoforged.fml.util.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/config/NightConfigFixer.java similarity index 96% rename from forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/config/NightConfigFixer.java index 9a985a52..69fc507c 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/config/NightConfigFixer.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/config/NightConfigFixer.java @@ -1,9 +1,9 @@ -package org.embeddedt.modernfix.forge.config; +package org.embeddedt.modernfix.neoforge.config; import com.electronwill.nightconfig.core.file.FileWatcher; import cpw.mods.modlauncher.api.LamdbaExceptionUtils; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.fml.util.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.embeddedt.modernfix.util.CommonModUtil; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/datagen/RuntimeDatagen.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/datagen/RuntimeDatagen.java similarity index 89% rename from forge/src/main/java/org/embeddedt/modernfix/forge/datagen/RuntimeDatagen.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/datagen/RuntimeDatagen.java index 47246753..c2c8dc1b 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/datagen/RuntimeDatagen.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/datagen/RuntimeDatagen.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.datagen; +package org.embeddedt.modernfix.neoforge.datagen; import net.minecraft.Util; import net.minecraft.client.Minecraft; @@ -10,15 +10,15 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.packs.PackResources; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.resources.MultiPackResourceManager; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.ScreenEvent; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.data.loading.DatagenModLoader; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModLoader; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.util.ObfuscationReflectionHelper; +import net.neoforged.neoforge.client.event.ScreenEvent; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; +import net.neoforged.neoforge.data.loading.DatagenModLoader; import org.embeddedt.modernfix.ModernFix; import java.nio.file.Path; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/IModelBakerImpl.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/dynresources/IModelBakerImpl.java similarity index 54% rename from forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/IModelBakerImpl.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/dynresources/IModelBakerImpl.java index b2cced35..0de3e12f 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/IModelBakerImpl.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/dynresources/IModelBakerImpl.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.dynresources; +package org.embeddedt.modernfix.neoforge.dynresources; public interface IModelBakerImpl { void mfix$ignoreCache(); diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/dynresources/ModelBakeEventHelper.java similarity index 94% rename from forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/dynresources/ModelBakeEventHelper.java index a1d6b256..17302f30 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/dynresources/ModelBakeEventHelper.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.dynresources; +package org.embeddedt.modernfix.neoforge.dynresources; import com.google.common.collect.ForwardingMap; import com.google.common.collect.ImmutableSet; @@ -7,14 +7,14 @@ import com.google.common.graph.GraphBuilder; import com.google.common.graph.MutableGraph; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.forgespi.language.IModInfo; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.neoforgespi.language.IModInfo; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.dynamicresources.ModelLocationCache; import org.embeddedt.modernfix.util.ForwardingInclDefaultsMap; @@ -35,12 +35,12 @@ public class ModelBakeEventHelper { public ModelBakeEventHelper(Map modelRegistry) { this.modelRegistry = modelRegistry; this.topLevelModelLocations = new HashSet<>(modelRegistry.keySet()); - for(Block block : ForgeRegistries.BLOCKS) { + for(Block block : BuiltInRegistries.BLOCK) { for(BlockState state : block.getStateDefinition().getPossibleStates()) { topLevelModelLocations.add(ModelLocationCache.get(state)); } } - for(Item item : ForgeRegistries.ITEMS) { + for(Item item : BuiltInRegistries.ITEM) { topLevelModelLocations.add(ModelLocationCache.get(item)); } this.dependencyGraph = GraphBuilder.undirected().build(); diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/init/ModernFixClientForge.java similarity index 79% rename from forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/init/ModernFixClientForge.java index fa8ea134..7eaf9018 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/init/ModernFixClientForge.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.init; +package org.embeddedt.modernfix.neoforge.init; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.brigadier.builder.LiteralArgumentBuilder; @@ -6,26 +6,26 @@ import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.DebugScreenOverlay; import net.minecraft.commands.CommandSourceStack; -import net.minecraftforge.client.ConfigScreenHandler; -import net.minecraftforge.client.event.CustomizeGuiOverlayEvent; -import net.minecraftforge.client.event.RecipesUpdatedEvent; -import net.minecraftforge.client.event.RegisterClientCommandsEvent; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.event.TagsUpdatedEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.level.LevelEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.ModLoadingStage; -import net.minecraftforge.fml.ModLoadingWarning; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.bus.api.EventPriority; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModLoader; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.ModLoadingStage; +import net.neoforged.fml.ModLoadingWarning; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.neoforge.client.ConfigScreenHandler; +import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent; +import net.neoforged.neoforge.client.event.RecipesUpdatedEvent; +import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.neoforged.neoforge.event.TagsUpdatedEvent; +import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.neoforge.event.level.LevelEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; import org.embeddedt.modernfix.ModernFixClient; -import org.embeddedt.modernfix.forge.config.NightConfigFixer; +import org.embeddedt.modernfix.neoforge.config.NightConfigFixer; import org.embeddedt.modernfix.screen.ModernFixConfigScreen; import java.util.ArrayList; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/init/ModernFixForge.java similarity index 70% rename from forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/init/ModernFixForge.java index d9780012..37df9424 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/init/ModernFixForge.java @@ -1,38 +1,36 @@ -package org.embeddedt.modernfix.forge.init; +package org.embeddedt.modernfix.neoforge.init; import com.google.common.collect.ImmutableList; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.minecraft.commands.CommandSourceStack; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.OnDatapackSyncEvent; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.event.server.ServerStoppedEvent; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.*; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegisterEvent; -import net.minecraftforge.server.ServerLifecycleHooks; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.EventPriority; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.*; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.OnDatapackSyncEvent; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.server.ServerStoppedEvent; +import net.neoforged.neoforge.registries.RegisterEvent; +import net.neoforged.neoforge.server.ServerLifecycleHooks; import org.apache.commons.lang3.tuple.Pair; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler; -import org.embeddedt.modernfix.forge.ModernFixConfig; -import org.embeddedt.modernfix.forge.classloading.ClassLoadHack; -import org.embeddedt.modernfix.forge.classloading.ModFileScanDataDeduplicator; -import org.embeddedt.modernfix.forge.config.ConfigFixer; -import org.embeddedt.modernfix.forge.config.NightConfigFixer; -import org.embeddedt.modernfix.forge.packet.PacketHandler; -import org.embeddedt.modernfix.forge.registry.ObjectHolderClearer; +import org.embeddedt.modernfix.neoforge.ModernFixConfig; +import org.embeddedt.modernfix.neoforge.classloading.ClassLoadHack; +import org.embeddedt.modernfix.neoforge.classloading.ModFileScanDataDeduplicator; +import org.embeddedt.modernfix.neoforge.config.NightConfigFixer; +import org.embeddedt.modernfix.neoforge.packet.PacketHandler; import java.util.List; @@ -44,16 +42,16 @@ public class ModernFixForge { public ModernFixForge() { commonMod = new ModernFix(); // Register ourselves for server and other game events we are interested in - MinecraftForge.EVENT_BUS.register(this); + NeoForge.EVENT_BUS.register(this); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::registerItems); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> MinecraftForge.EVENT_BUS.register(new ModernFixClientForge())); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> NeoForge.EVENT_BUS.register(new ModernFixClientForge())); ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, (a, b) -> true)); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG); PacketHandler.register(); ModFileScanDataDeduplicator.deduplicate(); ClassLoadHack.loadModClasses(); - ConfigFixer.replaceConfigHandlers(); + //ConfigFixer.replaceConfigHandlers(); } @SubscribeEvent @@ -79,7 +77,7 @@ public class ModernFixForge { private void registerItems(RegisterEvent event) { if(Boolean.getBoolean("modernfix.largeRegistryTest")) { - event.register(ForgeRegistries.Keys.ITEMS, helper -> { + event.register(Registries.ITEM, helper -> { Item.Properties props = new Item.Properties(); for(int i = 0; i < 1000000; i++) { helper.register(new ResourceLocation("modernfix", "item_" + i), new Item(props)); @@ -108,7 +106,6 @@ public class ModernFixForge { ModLoader.get().addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), ModLoadingStage.COMMON_SETUP, "modernfix.perf_mod_warning")); }); } - ObjectHolderClearer.clearThrowables(); } @SubscribeEvent(priority = EventPriority.LOWEST) public void onServerDead(ServerStoppedEvent event) { diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/load/ModResourcePackPathFixer.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/load/ModResourcePackPathFixer.java similarity index 73% rename from forge/src/main/java/org/embeddedt/modernfix/forge/load/ModResourcePackPathFixer.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/load/ModResourcePackPathFixer.java index d9e9f7c7..e95fb453 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/load/ModResourcePackPathFixer.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/load/ModResourcePackPathFixer.java @@ -1,8 +1,8 @@ -package org.embeddedt.modernfix.forge.load; +package org.embeddedt.modernfix.neoforge.load; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.forgespi.language.IModFileInfo; -import net.minecraftforge.forgespi.locating.IModFile; +import net.neoforged.fml.ModList; +import net.neoforged.neoforgespi.language.IModFileInfo; +import net.neoforged.neoforgespi.locating.IModFile; import java.nio.file.Path; import java.util.IdentityHashMap; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java similarity index 93% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java index 2be15e95..b3610d11 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/blueprint_modif_memory_leak/ObjectModificationManagerMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.blueprint_modif_memory_leak; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.blueprint_modif_memory_leak; import com.google.gson.Gson; import com.teamabnormals.blueprint.core.util.modification.ObjectModificationManager; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/chunk_deadlock/ChunkMapLoadMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/chunk_deadlock/ChunkMapLoadMixin.java similarity index 94% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/chunk_deadlock/ChunkMapLoadMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/chunk_deadlock/ChunkMapLoadMixin.java index cfed9788..79d9ec15 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/chunk_deadlock/ChunkMapLoadMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/chunk_deadlock/ChunkMapLoadMixin.java @@ -1,11 +1,11 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.chunk_deadlock; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.chunk_deadlock; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.server.level.ChunkHolder; import net.minecraft.server.level.ChunkMap; import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import net.neoforged.fml.util.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFix; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/chunk_deadlock/ServerChunkCache_CurrentLoadingMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/chunk_deadlock/ServerChunkCache_CurrentLoadingMixin.java similarity index 94% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/chunk_deadlock/ServerChunkCache_CurrentLoadingMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/chunk_deadlock/ServerChunkCache_CurrentLoadingMixin.java index 6553f291..3fac95fd 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/chunk_deadlock/ServerChunkCache_CurrentLoadingMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/chunk_deadlock/ServerChunkCache_CurrentLoadingMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.chunk_deadlock; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.chunk_deadlock; import net.minecraft.server.level.ChunkHolder; import net.minecraft.server.level.ServerChunkCache; @@ -6,7 +6,7 @@ import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import net.neoforged.fml.util.ObfuscationReflectionHelper; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java similarity index 96% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java index c73ef328..ccbec8a2 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.cofh_core_crash; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.cofh_core_crash; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.embeddedt.modernfix.annotation.RequiresMod; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java similarity index 93% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java index 26844d70..868bbdb0 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.ctm_resourceutil_cme; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.ctm_resourceutil_cme; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.annotation.RequiresMod; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java similarity index 94% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java index 569a6ca1..5ba2646e 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.extra_experimental_screen; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.extra_experimental_screen; import com.mojang.serialization.Lifecycle; import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java similarity index 93% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java index 430e2185..f18ad746 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.recipe_book_type_desync; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.recipe_book_type_desync; import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.network.FriendlyByteBuf; @@ -6,7 +6,7 @@ import net.minecraft.stats.RecipeBookSettings; import net.minecraft.world.inventory.RecipeBookType; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.embeddedt.modernfix.forge.packet.NetworkUtils; +import org.embeddedt.modernfix.neoforge.packet.NetworkUtils; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheCyclicMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheCyclicMixin.java similarity index 91% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheCyclicMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheCyclicMixin.java index 3f1eb8e2..4f50e40c 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheCyclicMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheCyclicMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.unsafe_modded_shape_caches; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.unsafe_modded_shape_caches; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.annotation.RequiresMod; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheRSMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheRSMixin.java similarity index 93% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheRSMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheRSMixin.java index c2a43839..8adbd23a 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheRSMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/bugfix/unsafe_modded_shape_caches/ShapeCacheRSMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.unsafe_modded_shape_caches; +package org.embeddedt.modernfix.neoforge.mixin.bugfix.unsafe_modded_shape_caches; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.annotation.RequiresMod; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapClientMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/BootstrapClientMixin.java similarity index 93% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapClientMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/BootstrapClientMixin.java index d1706ba7..45a0167f 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapClientMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/BootstrapClientMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.core; +package org.embeddedt.modernfix.neoforge.mixin.core; import net.minecraft.client.renderer.RenderType; import net.minecraft.server.Bootstrap; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/BootstrapMixin.java similarity index 82% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/BootstrapMixin.java index e8dabfad..369fc6f3 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/BootstrapMixin.java @@ -1,8 +1,7 @@ -package org.embeddedt.modernfix.forge.mixin.core; +package org.embeddedt.modernfix.neoforge.mixin.core; import net.minecraft.server.Bootstrap; -import net.minecraftforge.network.NetworkInitialization; -import org.embeddedt.modernfix.forge.load.ModWorkManagerQueue; +import net.neoforged.neoforge.network.NetworkConstants; import org.embeddedt.modernfix.util.TimeFormatter; import org.slf4j.Logger; import org.spongepowered.asm.mixin.Final; @@ -24,13 +23,12 @@ public class BootstrapMixin { private static void doModernFixBootstrap(CallbackInfo ci) { if(!isBootstrapped) { LOGGER.info("ModernFix reached bootstrap stage ({} after launch)", TimeFormatter.formatNanos(ManagementFactory.getRuntimeMXBean().getUptime() * 1000L * 1000L)); - ModWorkManagerQueue.replace(); } } /* for https://github.com/MinecraftForge/MinecraftForge/issues/9505 */ @Inject(method = "bootStrap", at = @At("RETURN")) private static void doClassloadHack(CallbackInfo ci) { - NetworkInitialization.init(); + NetworkConstants.init(); } } diff --git a/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/NetworkHooksMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/NetworkHooksMixin.java new file mode 100644 index 00000000..aaee04e9 --- /dev/null +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/core/NetworkHooksMixin.java @@ -0,0 +1,17 @@ +package org.embeddedt.modernfix.neoforge.mixin.core; + +import net.minecraft.network.Connection; +import net.neoforged.neoforge.network.NetworkHooks; +import org.embeddedt.modernfix.neoforge.packet.NetworkUtils; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(NetworkHooks.class) +public abstract class NetworkHooksMixin { + @Inject(method = "handleClientLoginSuccess", at = @At("RETURN"), remap = false) + private static void setVanillaGlobalFlag(Connection manager, CallbackInfo ci) { + NetworkUtils.isCurrentlyVanilla = NetworkHooks.isVanillaConnection(manager); + } +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/branding/BrandingControlMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/branding/BrandingControlMixin.java similarity index 72% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/branding/BrandingControlMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/branding/BrandingControlMixin.java index 195b2c34..e6875c20 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/branding/BrandingControlMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/branding/BrandingControlMixin.java @@ -1,9 +1,9 @@ -package org.embeddedt.modernfix.forge.mixin.feature.branding; +package org.embeddedt.modernfix.neoforge.mixin.feature.branding; import com.google.common.collect.ImmutableList; -import net.minecraftforge.internal.BrandingControl; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.neoforge.internal.BrandingControl; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -14,7 +14,7 @@ import java.util.Optional; @Mixin(value = BrandingControl.class, remap = false, priority = 1100) public class BrandingControlMixin { - @Inject(method = "computeBranding", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModList;get()Lnet/minecraftforge/fml/ModList;"), locals = LocalCapture.CAPTURE_FAILHARD, require = 0) + @Inject(method = "computeBranding", at = @At(value = "INVOKE", target = "Lnet/neoforged/fml/ModList;get()Lnet/neoforged/fml/ModList;"), locals = LocalCapture.CAPTURE_FAILHARD, require = 0) private static void addModernFixBranding(CallbackInfo ci, ImmutableList.Builder builder) { Optional mfContainer = ModList.get().getModContainerById("modernfix"); if(mfContainer.isPresent()) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/measure_time/MinecraftMixin_Forge.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/measure_time/MinecraftMixin_Forge.java similarity index 90% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/measure_time/MinecraftMixin_Forge.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/measure_time/MinecraftMixin_Forge.java index ee5a3927..3e2d512d 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/measure_time/MinecraftMixin_Forge.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/measure_time/MinecraftMixin_Forge.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.feature.measure_time; +package org.embeddedt.modernfix.neoforge.mixin.feature.measure_time; import net.minecraft.client.Minecraft; import org.embeddedt.modernfix.ModernFixClient; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/registry_event_progress/GameDataMixin.java similarity index 73% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/registry_event_progress/GameDataMixin.java index 4b0b568e..4170b69d 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/registry_event_progress/GameDataMixin.java @@ -1,15 +1,15 @@ -package org.embeddedt.modernfix.forge.mixin.feature.registry_event_progress; +package org.embeddedt.modernfix.neoforge.mixin.feature.registry_event_progress; -import net.minecraftforge.eventbus.api.Event; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.StartupMessageManager; -import net.minecraftforge.fml.event.IModBusEvent; -import net.minecraftforge.registries.GameData; -import net.minecraftforge.registries.RegisterEvent; +import net.neoforged.bus.api.Event; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoader; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.StartupMessageManager; +import net.neoforged.fml.event.IModBusEvent; +import net.neoforged.neoforge.registries.GameData; +import net.neoforged.neoforge.registries.RegisterEvent; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.embeddedt.modernfix.forge.util.AsyncLoadingScreen; +import org.embeddedt.modernfix.neoforge.util.AsyncLoadingScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -33,7 +33,7 @@ public class GameDataMixin { mfix$asyncScreen = null; } - @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/minecraftforge/eventbus/api/Event;)V")) + @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/neoforged/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/neoforged/bus/api/Event;)V")) private static void swapThreadAndPost(ModLoader loader, T event) { RegisterEvent registryEvent = (RegisterEvent)event; var pb = StartupMessageManager.addProgressBar(registryEvent.getRegistryKey().location().toString(), ModList.get().size()); diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/datapack_reload_exceptions/RecipeManagerMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/datapack_reload_exceptions/RecipeManagerMixin.java similarity index 90% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/datapack_reload_exceptions/RecipeManagerMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/datapack_reload_exceptions/RecipeManagerMixin.java index c1fc64a6..db84f9ce 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/datapack_reload_exceptions/RecipeManagerMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/datapack_reload_exceptions/RecipeManagerMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.datapack_reload_exceptions; +package org.embeddedt.modernfix.neoforge.mixin.perf.datapack_reload_exceptions; import net.minecraft.world.item.crafting.RecipeManager; import org.slf4j.Logger; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java similarity index 69% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java index f51d9928..bb8146dd 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java @@ -1,15 +1,15 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.client.event.ModelEvent; -import net.minecraftforge.eventbus.api.Event; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import org.embeddedt.modernfix.forge.dynresources.ModelBakeEventHelper; +import net.neoforged.bus.api.Event; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoader; +import net.neoforged.fml.util.ObfuscationReflectionHelper; +import net.neoforged.neoforge.client.ClientHooks; +import net.neoforged.neoforge.client.event.ModelEvent; +import org.embeddedt.modernfix.neoforge.dynresources.ModelBakeEventHelper; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -17,12 +17,12 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.lang.reflect.Method; import java.util.Map; -@Mixin(ForgeHooksClient.class) +@Mixin(ClientHooks.class) public class ForgeHooksClientMixin { /** * Generate a more realistic keySet that contains every item and block model location, to help with mod compat. */ - @Redirect(method = "onModifyBakingResult", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEvent(Lnet/minecraftforge/eventbus/api/Event;)V"), remap = false) + @Redirect(method = "onModifyBakingResult", at = @At(value = "INVOKE", target = "Lnet/neoforged/fml/ModLoader;postEvent(Lnet/neoforged/bus/api/Event;)V"), remap = false) private static void postNamespacedKeySetEvent(ModLoader loader, Event event) { if(!ModLoader.isLoadingStateValid()) return; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ItemModelMesherForgeMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ItemModelMesherForgeMixin.java similarity index 85% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ItemModelMesherForgeMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ItemModelMesherForgeMixin.java index 55a4e3e2..5697f927 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ItemModelMesherForgeMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ItemModelMesherForgeMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources; import net.minecraft.client.renderer.ItemModelShaper; import net.minecraft.client.resources.model.BakedModel; @@ -7,8 +7,7 @@ import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import net.minecraftforge.client.model.ForgeItemModelShaper; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.client.model.RegistryAwareItemModelShaper; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.dynamicresources.ModelLocationCache; import org.embeddedt.modernfix.util.ItemMesherMap; @@ -20,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.HashMap; import java.util.Map; -@Mixin(ForgeItemModelShaper.class) +@Mixin(RegistryAwareItemModelShaper.class) @ClientOnlyMixin public abstract class ItemModelMesherForgeMixin extends ItemModelShaper { @Shadow(remap = false) @Final @Mutable private Map, ModelResourceLocation> locations; @@ -45,7 +44,7 @@ public abstract class ItemModelMesherForgeMixin extends ItemModelShaper { ModelResourceLocation map = overrideLocations.getOrDefault(item, SENTINEL); if(map == SENTINEL) { /* generate the appropriate location from our cache */ - map = ModelLocationCache.get(item.get()); + map = ModelLocationCache.get(item.value()); } return map; } @@ -58,7 +57,7 @@ public abstract class ItemModelMesherForgeMixin extends ItemModelShaper { @Overwrite @Override public BakedModel getItemModel(Item item) { - ModelResourceLocation map = mfix$getLocationForge(ForgeRegistries.ITEMS.getDelegateOrThrow(item)); + ModelResourceLocation map = mfix$getLocationForge(item.builtInRegistryHolder()); return map == null ? null : getModelManager().getModel(map); } @@ -70,7 +69,7 @@ public abstract class ItemModelMesherForgeMixin extends ItemModelShaper { @Overwrite @Override public void register(Item item, ModelResourceLocation location) { - overrideLocations.put(ForgeRegistries.ITEMS.getDelegateOrThrow(item), location); + overrideLocations.put(item.builtInRegistryHolder(), location); } /** diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ItemOverridesForgeMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ItemOverridesForgeMixin.java similarity index 96% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ItemOverridesForgeMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ItemOverridesForgeMixin.java index 5057df90..0f758f7d 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ItemOverridesForgeMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ItemOverridesForgeMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources; import net.minecraft.client.renderer.block.model.ItemOverride; import net.minecraft.client.renderer.block.model.ItemOverrides; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java similarity index 97% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java index 7b68311a..25dc4aad 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.client.renderer.texture.TextureAtlasSprite; @@ -10,7 +10,7 @@ import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration; import org.embeddedt.modernfix.duck.IExtendedModelBaker; import org.embeddedt.modernfix.duck.IExtendedModelBakery; import org.embeddedt.modernfix.dynamicresources.ModelMissingException; -import org.embeddedt.modernfix.forge.dynresources.IModelBakerImpl; +import org.embeddedt.modernfix.neoforge.dynresources.IModelBakerImpl; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ModelBakeryMixin.java similarity index 99% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakeryMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ModelBakeryMixin.java index 2f36b941..94b81f46 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java similarity index 87% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java index 478ce77f..89e4d536 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ctm/CTMPackReloadListenerMixin.java @@ -1,16 +1,16 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources.ctm; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources.ctm; import com.google.common.collect.ImmutableList; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.model.*; import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.ChunkRenderTypeSet; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.client.ChunkRenderTypeSet; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; @@ -24,7 +24,6 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import team.chisel.ctm.client.model.AbstractCTMBakedModel; import team.chisel.ctm.client.util.CTMPackReloadListener; import java.util.Map; @@ -60,8 +59,8 @@ public abstract class CTMPackReloadListenerMixin implements ModernFixClientInteg private void refreshLayerHacks() { renderCheckOverrides.clear(); if(blockRenderChecks.isEmpty()) { - for(Block block : ForgeRegistries.BLOCKS.getValues()) { - Holder.Reference holder = ForgeRegistries.BLOCKS.getDelegateOrThrow(block); + for(Block block : BuiltInRegistries.BLOCK) { + Holder.Reference holder = block.builtInRegistryHolder(); ChunkRenderTypeSet original = this.getExistingRenderCheck(block); if(original == null) original = DEFAULT_TYPE_SET; @@ -82,11 +81,14 @@ public abstract class CTMPackReloadListenerMixin implements ModernFixClientInteg public BakedModel onBakedModelLoad(ResourceLocation location, UnbakedModel baseModel, BakedModel originalModel, ModelState modelState, ModelBakery bakery) { if(!(location instanceof ModelResourceLocation)) return originalModel; + if(true) throw new UnsupportedOperationException("not ported yet"); + /* if(!(originalModel instanceof AbstractCTMBakedModel || originalModel instanceof WeightedBakedModel || originalModel instanceof MultiPartBakedModel)) return originalModel; + */ /* we construct a new ResourceLocation because an MRL is coming in */ - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(location.getNamespace(), location.getPath())); - Holder.Reference delegate = block != null ? ForgeRegistries.BLOCKS.getDelegateOrThrow(block) : null; + Block block = BuiltInRegistries.BLOCK.getOptional(new ResourceLocation(location.getNamespace(), location.getPath())).orElse(null); + Holder.Reference delegate = block != null ? block.builtInRegistryHolder() : null; if(block == null || block == Blocks.AIR || renderCheckOverrides.containsKey(delegate)) return originalModel; /* find all states that match this MRL */ diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java similarity index 90% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java index 4af90c43..65630045 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java @@ -1,17 +1,14 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources.ctm; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources.ctm; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.mojang.datafixers.util.Pair; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.model.*; import net.minecraft.resources.ResourceLocation; import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration; -import org.embeddedt.modernfix.forge.dynresources.IModelBakerImpl; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -19,10 +16,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import team.chisel.ctm.CTM; -import team.chisel.ctm.api.model.IModelCTM; -import team.chisel.ctm.client.mixin.ModelBakerImplAccessor; -import team.chisel.ctm.client.model.AbstractCTMBakedModel; -import team.chisel.ctm.client.model.ModelCTM; import team.chisel.ctm.client.texture.IMetadataSectionCTM; import team.chisel.ctm.client.util.ResourceUtil; import team.chisel.ctm.client.util.TextureMetadataHandler; @@ -30,7 +23,6 @@ import team.chisel.ctm.client.util.TextureMetadataHandler; import javax.annotation.Nonnull; import java.io.IOException; import java.util.*; -import java.util.function.Function; @Mixin(TextureMetadataHandler.class) @RequiresMod("ctm") @@ -53,7 +45,8 @@ public abstract class TextureMetadataHandlerMixin implements ModernFixClientInte @Override public BakedModel onBakedModelLoad(ResourceLocation rl, UnbakedModel rootModel, BakedModel baked, ModelState state, ModelBakery bakery) { - if (!(baked instanceof AbstractCTMBakedModel) && !baked.isCustomRenderer()) { + if(true) throw new UnsupportedOperationException("not ported yet"); + if (false /*!(baked instanceof AbstractCTMBakedModel) && !baked.isCustomRenderer()*/) { Deque dependencies = new ArrayDeque<>(); Set seenModels = new HashSet<>(); dependencies.push(rl); @@ -104,6 +97,8 @@ public abstract class TextureMetadataHandlerMixin implements ModernFixClientInte } private void handleInit(ResourceLocation key, BakedModel wrappedModel, ModelBakery bakery) { + if(true) throw new UnsupportedOperationException("not ported yet"); + /* if(wrappedModel instanceof AbstractCTMBakedModel baked) { IModelCTM var10 = baked.getModel(); if (var10 instanceof ModelCTM ctmModel) { @@ -120,5 +115,6 @@ public abstract class TextureMetadataHandlerMixin implements ModernFixClientInte } } } + */ } } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java similarity index 96% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java index e7865e4a..13c6f183 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources.rs; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources.rs; import com.refinedmods.refinedstorage.render.BakedModelOverrideRegistry; import com.refinedmods.refinedstorage.setup.ClientSetup; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java similarity index 97% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java index 12e235a9..fe3fceec 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources.supermartijncore; +package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources.supermartijncore; import com.supermartijn642.core.registry.ClientRegistrationHandler; import com.supermartijn642.core.util.Pair; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/kubejs/RecipeEventJSMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/kubejs/RecipeEventJSMixin.java similarity index 97% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/kubejs/RecipeEventJSMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/kubejs/RecipeEventJSMixin.java index 1848edb6..a5d7503a 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/kubejs/RecipeEventJSMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/kubejs/RecipeEventJSMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.kubejs; +package org.embeddedt.modernfix.neoforge.mixin.perf.kubejs; import dev.latvian.mods.kubejs.recipe.RecipesEventJS; import org.embeddedt.modernfix.ModernFix; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/model_optimizations/OBJLoaderMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/model_optimizations/OBJLoaderMixin.java similarity index 70% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/model_optimizations/OBJLoaderMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/model_optimizations/OBJLoaderMixin.java index 623ddb6f..d7de6de2 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/model_optimizations/OBJLoaderMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/model_optimizations/OBJLoaderMixin.java @@ -1,9 +1,9 @@ -package org.embeddedt.modernfix.forge.mixin.perf.model_optimizations; +package org.embeddedt.modernfix.neoforge.mixin.perf.model_optimizations; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.client.model.obj.ObjLoader; -import net.minecraftforge.client.model.obj.ObjMaterialLibrary; -import net.minecraftforge.client.model.obj.ObjModel; +import net.neoforged.neoforge.client.model.obj.ObjLoader; +import net.neoforged.neoforge.client.model.obj.ObjMaterialLibrary; +import net.neoforged.neoforge.client.model.obj.ObjModel; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Final; @@ -27,12 +27,12 @@ public class OBJLoaderMixin { @Mutable @Shadow(remap = false) private Map modelCache; - @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraftforge/client/model/obj/ObjLoader;materialCache:Ljava/util/Map;", remap = false)) + @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/neoforged/neoforge/client/model/obj/ObjLoader;materialCache:Ljava/util/Map;", remap = false)) private void useConcMap1(ObjLoader instance, Map value) { this.materialCache = new ConcurrentHashMap<>(); } - @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraftforge/client/model/obj/ObjLoader;modelCache:Ljava/util/Map;", remap = false)) + @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/neoforged/neoforge/client/model/obj/ObjLoader;modelCache:Ljava/util/Map;", remap = false)) private void useConcMap2(ObjLoader instance, Map value) { this.modelCache = new ConcurrentHashMap<>(); } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java similarity index 96% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java index f98c6f46..15c3d59b 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/patchouli_deduplicate_books/ClientBookRegistryMixin.java @@ -1,8 +1,8 @@ -package org.embeddedt.modernfix.forge.mixin.perf.patchouli_deduplicate_books; +package org.embeddedt.modernfix.neoforge.mixin.perf.patchouli_deduplicate_books; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; +import net.neoforged.fml.util.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.annotation.RequiresMod; diff --git a/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/reduce_blockstate_cache_rebuilds/BlockCallbacksMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/reduce_blockstate_cache_rebuilds/BlockCallbacksMixin.java new file mode 100644 index 00000000..49d7bd28 --- /dev/null +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/reduce_blockstate_cache_rebuilds/BlockCallbacksMixin.java @@ -0,0 +1,27 @@ +package org.embeddedt.modernfix.neoforge.mixin.perf.reduce_blockstate_cache_rebuilds; + +import com.google.common.collect.ImmutableList; +import net.minecraft.core.Registry; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import org.embeddedt.modernfix.blockstate.BlockStateCacheHandler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(targets = { "net/neoforged/neoforge/registries/NeoForgeRegistryCallbacks$BlockCallbacks" }) +public class BlockCallbacksMixin { + @Redirect(method = "onBake", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/StateDefinition;getPossibleStates()Lcom/google/common/collect/ImmutableList;", ordinal = 0)) + private ImmutableList skipCache(StateDefinition definition) { + // prevent initCache from being called on these blockstates + return ImmutableList.of(); + } + + @Inject(method = "onBake", at = @At(value = "TAIL"), remap = false) + private void computeCaches(Registry registry, CallbackInfo ci) { + BlockStateCacheHandler.rebuildParallel(false); + } +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/tag_id_caching/TagEntryMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/tag_id_caching/TagEntryMixin.java similarity index 93% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/tag_id_caching/TagEntryMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/tag_id_caching/TagEntryMixin.java index 8bdc74b8..ccb95871 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/tag_id_caching/TagEntryMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/tag_id_caching/TagEntryMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.tag_id_caching; +package org.embeddedt.modernfix.neoforge.mixin.perf.tag_id_caching; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagEntry; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/tag_id_caching/TagOrElementLocationMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/tag_id_caching/TagOrElementLocationMixin.java similarity index 92% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/tag_id_caching/TagOrElementLocationMixin.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/tag_id_caching/TagOrElementLocationMixin.java index 43575e93..4180a1fd 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/tag_id_caching/TagOrElementLocationMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/perf/tag_id_caching/TagOrElementLocationMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.perf.tag_id_caching; +package org.embeddedt.modernfix.neoforge.mixin.perf.tag_id_caching; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.ExtraCodecs; diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/NetworkUtils.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/packet/NetworkUtils.java similarity index 61% rename from forge/src/main/java/org/embeddedt/modernfix/forge/packet/NetworkUtils.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/packet/NetworkUtils.java index ddcd27ff..4f1d88dd 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/NetworkUtils.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/packet/NetworkUtils.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.packet; +package org.embeddedt.modernfix.neoforge.packet; public class NetworkUtils { public static boolean isCurrentlyVanilla; diff --git a/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/packet/PacketHandler.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/packet/PacketHandler.java new file mode 100644 index 00000000..4c9bba7a --- /dev/null +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/packet/PacketHandler.java @@ -0,0 +1,33 @@ +package org.embeddedt.modernfix.neoforge.packet; + +import net.minecraft.resources.ResourceLocation; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.DistExecutor; +import net.neoforged.neoforge.network.NetworkEvent; +import net.neoforged.neoforge.network.NetworkRegistry; +import net.neoforged.neoforge.network.simple.SimpleChannel; +import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.ModernFixClient; +import org.embeddedt.modernfix.packet.EntityIDSyncPacket; + +public class PacketHandler { + private static final String PROTOCOL_VERSION = "1"; + public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel( + new ResourceLocation(ModernFix.MODID, "main"), + () -> PROTOCOL_VERSION, + NetworkRegistry.acceptMissingOr(PROTOCOL_VERSION), + NetworkRegistry.acceptMissingOr(PROTOCOL_VERSION) + ); + + public static void register() { + int id = 1; + INSTANCE.registerMessage(id++, EntityIDSyncPacket.class, EntityIDSyncPacket::serialize, EntityIDSyncPacket::deserialize, PacketHandler::handleSyncPacket); + } + + private static void handleSyncPacket(EntityIDSyncPacket packet, NetworkEvent.Context contextSupplier) { + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + contextSupplier.enqueueWork(() -> ModernFixClient.handleEntityIDSync(packet)); + contextSupplier.setPacketHandled(true); + }); + } +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/util/AsyncLoadingScreen.java similarity index 93% rename from forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java rename to neoforge/src/main/java/org/embeddedt/modernfix/neoforge/util/AsyncLoadingScreen.java index 3cb765b8..3b11a888 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/util/AsyncLoadingScreen.java @@ -1,6 +1,6 @@ -package org.embeddedt.modernfix.forge.util; +package org.embeddedt.modernfix.neoforge.util; -import net.minecraftforge.fml.loading.ImmediateWindowHandler; +import net.neoforged.fml.loading.ImmediateWindowHandler; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GLCapabilities; diff --git a/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/util/ModUtil.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/util/ModUtil.java new file mode 100644 index 00000000..d63c8dc2 --- /dev/null +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/util/ModUtil.java @@ -0,0 +1,26 @@ +package org.embeddedt.modernfix.neoforge.util; + +import java.util.*; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinWorkerThread; + +public class ModUtil { + private static final Set> erroredContexts = new HashSet<>(); + + private static final ClassLoader targetClassLoader = Thread.currentThread().getContextClassLoader(); + + private static class ModernFixForkJoinWorkerThread extends ForkJoinWorkerThread { + ModernFixForkJoinWorkerThread(ForkJoinPool pool) { + super(pool); + /* Ensure that the context class loader is set correctly */ + this.setContextClassLoader(targetClassLoader); + } + } + + public static ForkJoinPool commonPool = new ForkJoinPool( + ForkJoinPool.getCommonPoolParallelism(), + ModernFixForkJoinWorkerThread::new, + null, + false + ); +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java b/neoforge/src/main/java/org/embeddedt/modernfix/platform/neoforge/ModernFixPlatformHooksImpl.java similarity index 82% rename from forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java rename to neoforge/src/main/java/org/embeddedt/modernfix/platform/neoforge/ModernFixPlatformHooksImpl.java index e42c150e..58f45578 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/platform/neoforge/ModernFixPlatformHooksImpl.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.platform.forge; +package org.embeddedt.modernfix.platform.neoforge; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; @@ -9,24 +9,22 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.CreativeModeTabSearchRegistry; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.loading.FMLPaths; -import net.minecraftforge.fml.loading.LoadingModList; -import net.minecraftforge.fml.loading.moddiscovery.ModInfo; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.server.ServerLifecycleHooks; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.ModLoader; +import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.fml.loading.FMLPaths; +import net.neoforged.fml.loading.LoadingModList; +import net.neoforged.fml.loading.moddiscovery.ModInfo; +import net.neoforged.neoforge.client.CreativeModeTabSearchRegistry; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.server.ServerLifecycleHooks; import org.embeddedt.modernfix.api.constants.IntegrationConstants; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; -import org.embeddedt.modernfix.forge.classloading.ATInjector; -import org.embeddedt.modernfix.forge.classloading.FastAccessTransformerList; -import org.embeddedt.modernfix.forge.config.NightConfigFixer; -import org.embeddedt.modernfix.forge.init.ModernFixForge; -import org.embeddedt.modernfix.forge.packet.PacketHandler; +import org.embeddedt.modernfix.neoforge.config.NightConfigFixer; +import org.embeddedt.modernfix.neoforge.init.ModernFixForge; +import org.embeddedt.modernfix.neoforge.packet.PacketHandler; import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; import org.embeddedt.modernfix.spark.SparkLaunchProfiler; import org.embeddedt.modernfix.util.CommonModUtil; @@ -90,14 +88,10 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { } public void sendPacket(ServerPlayer player, Object packet) { - PacketHandler.INSTANCE.send(packet, PacketDistributor.PLAYER.with(player)); + PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), packet); } public void injectPlatformSpecificHacks() { - if(!isEarlyLoadingNormally() && ModernFixMixinPlugin.instance.isOptionEnabled("bugfix.forge_at_inject_error.ATInjector")) { - ATInjector.injectModATs(); - } - FastAccessTransformerList.attemptReplace(); /* https://github.com/FabricMC/Mixin/pull/99 */ try { @@ -125,7 +119,7 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { } public void onServerCommandRegister(Consumer> handler) { - MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent event) -> { + NeoForge.EVENT_BUS.addListener((RegisterCommandsEvent event) -> { handler.accept(event.getDispatcher()); }); } diff --git a/forge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml similarity index 90% rename from forge/src/main/resources/META-INF/mods.toml rename to neoforge/src/main/resources/META-INF/mods.toml index 1f6bdc70..cc3ac9e5 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -6,12 +6,19 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader = "javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion = "[46,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion = "[1,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. # The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. # Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. license = "GNU LGPL 3.0" # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/embeddedt/ModernFix/issues" #optional + +[[mixins]] +config="modernfix-common.mixins.json" + +[[mixins]] +config="modernfix-neoforge.mixins.json" + # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod @@ -36,11 +43,11 @@ Egregious, yet effective performance improvements for modern Minecraft # A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. [[dependencies.modernfix]] #optional # the modid of the dependency -modId = "forge" #mandatory +modId = "neoforge" #mandatory # Does this dependency have to exist - if not, ordering below must be specified mandatory = true #mandatory # The version range of the dependency -versionRange = "[46.0.1,)" #mandatory +versionRange = "[20.2.86,23)" #mandatory # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory ordering = "NONE" # Side this dependency is applied on - BOTH, CLIENT or SERVER diff --git a/forge/src/main/resources/modernfix-forge.mixins.json b/neoforge/src/main/resources/modernfix-neoforge.mixins.json similarity index 83% rename from forge/src/main/resources/modernfix-forge.mixins.json rename to neoforge/src/main/resources/modernfix-neoforge.mixins.json index f63f1dfc..6555f46f 100644 --- a/forge/src/main/resources/modernfix-forge.mixins.json +++ b/neoforge/src/main/resources/modernfix-neoforge.mixins.json @@ -1,6 +1,6 @@ { "required": true, - "package": "org.embeddedt.modernfix.forge.mixin", + "package": "org.embeddedt.modernfix.neoforge.mixin", "plugin": "org.embeddedt.modernfix.core.ModernFixMixinPlugin", "compatibilityLevel": "JAVA_8", "minVersion": "0.8", diff --git a/forge/src/main/resources/pack.mcmeta b/neoforge/src/main/resources/pack.mcmeta similarity index 100% rename from forge/src/main/resources/pack.mcmeta rename to neoforge/src/main/resources/pack.mcmeta