Update to 1.20.5
This commit is contained in:
parent
2e9a6f27e0
commit
2cce200e4d
|
|
@ -1,87 +0,0 @@
|
||||||
package org.embeddedt.modernfix.packet;
|
|
||||||
|
|
||||||
import com.mojang.datafixers.util.Pair;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
|
||||||
import net.minecraft.network.codec.StreamCodec;
|
|
||||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
|
||||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class EntityIDSyncPacket implements CustomPacketPayload {
|
|
||||||
public static final StreamCodec<FriendlyByteBuf, EntityIDSyncPacket> STREAM_CODEC = CustomPacketPayload.codec(EntityIDSyncPacket::write, EntityIDSyncPacket::new);
|
|
||||||
|
|
||||||
public static final ResourceLocation ID = new ResourceLocation(ModernFix.MODID, "entity_id_sync");
|
|
||||||
public static final CustomPacketPayload.Type<EntityIDSyncPacket> TYPE = CustomPacketPayload.createType(ID.toString());
|
|
||||||
|
|
||||||
private Map<Class<? extends Entity>, List<Pair<String, Integer>>> map;
|
|
||||||
|
|
||||||
public EntityIDSyncPacket(Map<Class<? extends Entity>, List<Pair<String, Integer>>> map) {
|
|
||||||
this.map = map;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<Class<? extends Entity>, List<Pair<String, Integer>>> getFieldInfo() {
|
|
||||||
return this.map;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(FriendlyByteBuf buf) {
|
|
||||||
buf.writeVarInt(map.keySet().size());
|
|
||||||
for(Map.Entry<Class<? extends Entity>, List<Pair<String, Integer>>> entry : map.entrySet()) {
|
|
||||||
buf.writeUtf(entry.getKey().getName());
|
|
||||||
buf.writeVarInt(entry.getValue().size());
|
|
||||||
for(Pair<String, Integer> field : entry.getValue()) {
|
|
||||||
buf.writeUtf(field.getFirst());
|
|
||||||
buf.writeVarInt(field.getSecond());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public EntityIDSyncPacket(FriendlyByteBuf buf) {
|
|
||||||
this.map = new HashMap<>();
|
|
||||||
EntityIDSyncPacket self = this;
|
|
||||||
int numEntityClasses = buf.readVarInt();
|
|
||||||
for(int i = 0; i < numEntityClasses; i++) {
|
|
||||||
String clzName = buf.readUtf();
|
|
||||||
try {
|
|
||||||
Class<?> clz;
|
|
||||||
try {
|
|
||||||
clz = Class.forName(clzName);
|
|
||||||
} catch(ClassNotFoundException e) {
|
|
||||||
ModernFix.LOGGER.warn("Entity class not found: {}", clzName);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(!Entity.class.isAssignableFrom(clz)) {
|
|
||||||
ModernFix.LOGGER.error("Not an entity: " + clzName);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
int numFields = buf.readVarInt();
|
|
||||||
for(int j = 0; j < numFields; j++) {
|
|
||||||
String fieldName = buf.readUtf();
|
|
||||||
int id = buf.readVarInt();
|
|
||||||
Field f = clz.getDeclaredField(fieldName);
|
|
||||||
if(!Modifier.isStatic(f.getModifiers()))
|
|
||||||
continue;
|
|
||||||
f.setAccessible(true);
|
|
||||||
if(!EntityDataAccessor.class.isAssignableFrom(f.get(null).getClass())) {
|
|
||||||
ModernFix.LOGGER.error("Not a data accessor field: " + clz + "." + fieldName);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
self.map.computeIfAbsent((Class<? extends Entity>)clz, k -> new ArrayList<>()).add(Pair.of(fieldName, id));
|
|
||||||
}
|
|
||||||
} catch(ReflectiveOperationException e) {
|
|
||||||
ModernFix.LOGGER.error("Error deserializing packet", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Type<? extends CustomPacketPayload> type() {
|
|
||||||
return TYPE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -5,9 +5,9 @@ junit_version=5.10.0-M1
|
||||||
mixinextras_version=0.3.2
|
mixinextras_version=0.3.2
|
||||||
|
|
||||||
mod_id=modernfix
|
mod_id=modernfix
|
||||||
minecraft_version=1.20.5-rc2
|
minecraft_version=1.20.5
|
||||||
enabled_platforms=fabric
|
enabled_platforms=fabric,neoforge
|
||||||
forge_version=20.4.190
|
forge_version=20.5.0-beta
|
||||||
# parchment_version=2023.07.09
|
# parchment_version=2023.07.09
|
||||||
refined_storage_version=4392788
|
refined_storage_version=4392788
|
||||||
jei_version=16.0.0.28
|
jei_version=16.0.0.28
|
||||||
|
|
@ -15,7 +15,7 @@ rei_version=13.0.678
|
||||||
ctm_version=1.20.1-1.1.8+4
|
ctm_version=1.20.1-1.1.8+4
|
||||||
kubejs_version=1902.6.0-build.142
|
kubejs_version=1902.6.0-build.142
|
||||||
rhino_version=1902.2.2-build.268
|
rhino_version=1902.2.2-build.268
|
||||||
supported_minecraft_versions=1.20.5-rc2
|
supported_minecraft_versions=1.20.5
|
||||||
|
|
||||||
fabric_loader_version=0.15.9
|
fabric_loader_version=0.15.9
|
||||||
fabric_api_version=0.97.5+1.20.5
|
fabric_api_version=0.97.5+1.20.5
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ dependencies {
|
||||||
processResources {
|
processResources {
|
||||||
inputs.property "version", project.version
|
inputs.property "version", project.version
|
||||||
|
|
||||||
filesMatching("META-INF/mods.toml") {
|
filesMatching("META-INF/neoforge.mods.toml") {
|
||||||
expand "version": project.version
|
expand "version": project.version
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package org.embeddedt.modernfix.neoforge.config;
|
package org.embeddedt.modernfix.neoforge.config;
|
||||||
|
|
||||||
import com.electronwill.nightconfig.core.file.FileWatcher;
|
import com.electronwill.nightconfig.core.file.FileWatcher;
|
||||||
import cpw.mods.modlauncher.api.LamdbaExceptionUtils;
|
import cpw.mods.modlauncher.api.LambdaExceptionUtils;
|
||||||
import net.neoforged.fml.loading.FMLLoader;
|
import net.neoforged.fml.loading.FMLLoader;
|
||||||
import net.neoforged.fml.util.ObfuscationReflectionHelper;
|
import net.neoforged.fml.util.ObfuscationReflectionHelper;
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
|
|
@ -51,7 +51,7 @@ public class NightConfigFixer {
|
||||||
}
|
}
|
||||||
|
|
||||||
static class MonitoringMap extends ConcurrentHashMap<Path, Object> {
|
static class MonitoringMap extends ConcurrentHashMap<Path, Object> {
|
||||||
private static final Class<?> WATCHED_FILE = LamdbaExceptionUtils.uncheck(() -> Class.forName("com.electronwill.nightconfig.core.file.FileWatcher$WatchedFile"));
|
private static final Class<?> WATCHED_FILE = LambdaExceptionUtils.uncheck(() -> Class.forName("com.electronwill.nightconfig.core.file.FileWatcher$WatchedFile"));
|
||||||
private static final Field CHANGE_HANDLER = ObfuscationReflectionHelper.findField(WATCHED_FILE, "changeHandler");
|
private static final Field CHANGE_HANDLER = ObfuscationReflectionHelper.findField(WATCHED_FILE, "changeHandler");
|
||||||
|
|
||||||
public MonitoringMap(ConcurrentHashMap<Path, ?> oldMap) {
|
public MonitoringMap(ConcurrentHashMap<Path, ?> oldMap) {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import net.minecraft.server.packs.resources.MultiPackResourceManager;
|
||||||
import net.neoforged.api.distmarker.Dist;
|
import net.neoforged.api.distmarker.Dist;
|
||||||
import net.neoforged.bus.api.SubscribeEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.neoforged.fml.ModLoader;
|
import net.neoforged.fml.ModLoader;
|
||||||
import net.neoforged.fml.common.Mod;
|
import net.neoforged.fml.common.EventBusSubscriber;
|
||||||
import net.neoforged.fml.util.ObfuscationReflectionHelper;
|
import net.neoforged.fml.util.ObfuscationReflectionHelper;
|
||||||
import net.neoforged.neoforge.client.event.ScreenEvent;
|
import net.neoforged.neoforge.client.event.ScreenEvent;
|
||||||
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||||
|
|
@ -27,7 +27,7 @@ import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
@EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class RuntimeDatagen {
|
public class RuntimeDatagen {
|
||||||
private static final String RESOURCES_OUT_DIR = getPropertyOrBlank("modernfix.datagen.output");
|
private static final String RESOURCES_OUT_DIR = getPropertyOrBlank("modernfix.datagen.output");
|
||||||
private static final String RESOURCES_IN_DIR = getPropertyOrBlank("modernfix.datagen.existing");
|
private static final String RESOURCES_IN_DIR = getPropertyOrBlank("modernfix.datagen.existing");
|
||||||
|
|
@ -67,7 +67,7 @@ public class RuntimeDatagen {
|
||||||
List<PackResources> oldPacks = new ArrayList<>(manager.listPacks().collect(Collectors.toList()));
|
List<PackResources> oldPacks = new ArrayList<>(manager.listPacks().collect(Collectors.toList()));
|
||||||
oldPacks.add(Minecraft.getInstance().getVanillaPackResources());
|
oldPacks.add(Minecraft.getInstance().getVanillaPackResources());
|
||||||
ObfuscationReflectionHelper.setPrivateValue(ExistingFileHelper.class, existingFileHelper, new MultiPackResourceManager(PackType.CLIENT_RESOURCES, oldPacks), "clientResources");
|
ObfuscationReflectionHelper.setPrivateValue(ExistingFileHelper.class, existingFileHelper, new MultiPackResourceManager(PackType.CLIENT_RESOURCES, oldPacks), "clientResources");
|
||||||
ModLoader.get().runEventGenerator(mc->new GatherDataEvent(mc, dataGeneratorConfig.makeGenerator(p->dataGeneratorConfig.isFlat() ? p : p.resolve(mc.getModId()), dataGeneratorConfig.getMods().contains(mc.getModId())), dataGeneratorConfig, existingFileHelper));
|
ModLoader.runEventGenerator(mc->new GatherDataEvent(mc, dataGeneratorConfig.makeGenerator(p->dataGeneratorConfig.isFlat() ? p : p.resolve(mc.getModId()), dataGeneratorConfig.getMods().contains(mc.getModId())), dataGeneratorConfig, existingFileHelper));
|
||||||
dataGeneratorConfig.runAll();
|
dataGeneratorConfig.runAll();
|
||||||
ObfuscationReflectionHelper.setPrivateValue(DatagenModLoader.class, null, false, "runningDataGen");
|
ObfuscationReflectionHelper.setPrivateValue(DatagenModLoader.class, null, false, "runningDataGen");
|
||||||
ModernFix.LOGGER.info("Finished runtime datagen.");
|
ModernFix.LOGGER.info("Finished runtime datagen.");
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,18 @@ import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.components.DebugScreenOverlay;
|
import net.minecraft.client.gui.components.DebugScreenOverlay;
|
||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.neoforged.bus.api.EventPriority;
|
import net.neoforged.bus.api.EventPriority;
|
||||||
|
import net.neoforged.bus.api.IEventBus;
|
||||||
import net.neoforged.bus.api.SubscribeEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
|
import net.neoforged.fml.ModContainer;
|
||||||
import net.neoforged.fml.ModLoader;
|
import net.neoforged.fml.ModLoader;
|
||||||
import net.neoforged.fml.ModLoadingContext;
|
import net.neoforged.fml.ModLoadingContext;
|
||||||
import net.neoforged.fml.ModLoadingStage;
|
|
||||||
import net.neoforged.fml.ModLoadingWarning;
|
import net.neoforged.fml.ModLoadingWarning;
|
||||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
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.CustomizeGuiOverlayEvent;
|
||||||
import net.neoforged.neoforge.client.event.RecipesUpdatedEvent;
|
import net.neoforged.neoforge.client.event.RecipesUpdatedEvent;
|
||||||
import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent;
|
import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent;
|
||||||
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
|
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
|
||||||
|
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
|
||||||
import net.neoforged.neoforge.client.settings.KeyConflictContext;
|
import net.neoforged.neoforge.client.settings.KeyConflictContext;
|
||||||
import net.neoforged.neoforge.event.TagsUpdatedEvent;
|
import net.neoforged.neoforge.event.TagsUpdatedEvent;
|
||||||
import net.neoforged.neoforge.event.TickEvent;
|
import net.neoforged.neoforge.event.TickEvent;
|
||||||
|
|
@ -34,14 +34,11 @@ import java.util.List;
|
||||||
public class ModernFixClientForge {
|
public class ModernFixClientForge {
|
||||||
private static ModernFixClient commonMod;
|
private static ModernFixClient commonMod;
|
||||||
|
|
||||||
public ModernFixClientForge() {
|
public ModernFixClientForge(ModContainer modContainer, IEventBus modBus) {
|
||||||
commonMod = new ModernFixClient();
|
commonMod = new ModernFixClient();
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::keyBindRegister);
|
modBus.addListener(this::keyBindRegister);
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup);
|
modBus.addListener(this::onClientSetup);
|
||||||
ModLoadingContext.get().registerExtensionPoint(
|
modContainer.registerExtensionPoint(IConfigScreenFactory.class, (mc, screen) -> new ModernFixConfigScreen(screen));
|
||||||
ConfigScreenHandler.ConfigScreenFactory.class,
|
|
||||||
() -> new ConfigScreenHandler.ConfigScreenFactory((mc, screen) -> new ModernFixConfigScreen(screen))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private KeyMapping configKey;
|
private KeyMapping configKey;
|
||||||
|
|
@ -54,7 +51,7 @@ public class ModernFixClientForge {
|
||||||
private void onClientSetup(FMLClientSetupEvent event) {
|
private void onClientSetup(FMLClientSetupEvent event) {
|
||||||
if(false) {
|
if(false) {
|
||||||
event.enqueueWork(() -> {
|
event.enqueueWork(() -> {
|
||||||
ModLoader.get().addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), ModLoadingStage.SIDED_SETUP, "modernfix.connectedness_dynresoruces"));
|
ModLoader.addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), "modernfix.connectedness_dynresoruces"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,29 +8,25 @@ import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.neoforged.api.distmarker.Dist;
|
import net.neoforged.api.distmarker.Dist;
|
||||||
import net.neoforged.bus.api.EventPriority;
|
import net.neoforged.bus.api.EventPriority;
|
||||||
|
import net.neoforged.bus.api.IEventBus;
|
||||||
import net.neoforged.bus.api.SubscribeEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.neoforged.fml.*;
|
import net.neoforged.fml.*;
|
||||||
import net.neoforged.fml.common.Mod;
|
import net.neoforged.fml.common.Mod;
|
||||||
import net.neoforged.fml.config.ModConfig;
|
import net.neoforged.fml.config.ModConfig;
|
||||||
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext;
|
|
||||||
import net.neoforged.fml.loading.FMLLoader;
|
import net.neoforged.fml.loading.FMLLoader;
|
||||||
import net.neoforged.neoforge.common.NeoForge;
|
import net.neoforged.neoforge.common.NeoForge;
|
||||||
import net.neoforged.neoforge.event.OnDatapackSyncEvent;
|
|
||||||
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
||||||
import net.neoforged.neoforge.event.server.ServerStartedEvent;
|
import net.neoforged.neoforge.event.server.ServerStartedEvent;
|
||||||
import net.neoforged.neoforge.event.server.ServerStoppedEvent;
|
import net.neoforged.neoforge.event.server.ServerStoppedEvent;
|
||||||
import net.neoforged.neoforge.registries.RegisterEvent;
|
import net.neoforged.neoforge.registries.RegisterEvent;
|
||||||
import net.neoforged.neoforge.server.ServerLifecycleHooks;
|
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
|
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
|
||||||
import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler;
|
|
||||||
import org.embeddedt.modernfix.neoforge.ModernFixConfig;
|
import org.embeddedt.modernfix.neoforge.ModernFixConfig;
|
||||||
import org.embeddedt.modernfix.neoforge.classloading.ClassLoadHack;
|
import org.embeddedt.modernfix.neoforge.classloading.ClassLoadHack;
|
||||||
import org.embeddedt.modernfix.neoforge.classloading.ModFileScanDataDeduplicator;
|
import org.embeddedt.modernfix.neoforge.classloading.ModFileScanDataDeduplicator;
|
||||||
import org.embeddedt.modernfix.neoforge.config.NightConfigFixer;
|
import org.embeddedt.modernfix.neoforge.config.NightConfigFixer;
|
||||||
import org.embeddedt.modernfix.neoforge.packet.PacketHandler;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -39,16 +35,14 @@ public class ModernFixForge {
|
||||||
private static ModernFix commonMod;
|
private static ModernFix commonMod;
|
||||||
public static boolean launchDone = false;
|
public static boolean launchDone = false;
|
||||||
|
|
||||||
public ModernFixForge() {
|
public ModernFixForge(ModContainer modContainer, IEventBus modBus) {
|
||||||
commonMod = new ModernFix();
|
commonMod = new ModernFix();
|
||||||
// Register ourselves for server and other game events we are interested in
|
// Register ourselves for server and other game events we are interested in
|
||||||
NeoForge.EVENT_BUS.register(this);
|
NeoForge.EVENT_BUS.register(this);
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup);
|
modBus.addListener(this::commonSetup);
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::registerItems);
|
modBus.addListener(this::registerItems);
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> NeoForge.EVENT_BUS.register(new ModernFixClientForge()));
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> NeoForge.EVENT_BUS.register(new ModernFixClientForge(modContainer, modBus)));
|
||||||
ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, (a, b) -> true));
|
modContainer.registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG);
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG);
|
|
||||||
PacketHandler.register();
|
|
||||||
ModFileScanDataDeduplicator.deduplicate();
|
ModFileScanDataDeduplicator.deduplicate();
|
||||||
ClassLoadHack.loadModClasses();
|
ClassLoadHack.loadModClasses();
|
||||||
//ConfigFixer.replaceConfigHandlers();
|
//ConfigFixer.replaceConfigHandlers();
|
||||||
|
|
@ -66,15 +60,6 @@ public class ModernFixForge {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onDatapackSync(OnDatapackSyncEvent event) {
|
|
||||||
if(event.getPlayer() != null) {
|
|
||||||
if(!ServerLifecycleHooks.getCurrentServer().isDedicatedServer() && event.getPlayerList().getPlayerCount() == 0)
|
|
||||||
return;
|
|
||||||
EntityDataIDSyncHandler.onDatapackSyncEvent(event.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void registerItems(RegisterEvent event) {
|
private void registerItems(RegisterEvent event) {
|
||||||
if(Boolean.getBoolean("modernfix.largeRegistryTest")) {
|
if(Boolean.getBoolean("modernfix.largeRegistryTest")) {
|
||||||
event.register(Registries.ITEM, helper -> {
|
event.register(Registries.ITEM, helper -> {
|
||||||
|
|
@ -98,11 +83,11 @@ public class ModernFixForge {
|
||||||
boolean isPresent = !FMLLoader.isProduction() || warning.getLeft().stream().anyMatch(name -> ModList.get().isLoaded(name));
|
boolean isPresent = !FMLLoader.isProduction() || warning.getLeft().stream().anyMatch(name -> ModList.get().isLoaded(name));
|
||||||
if(!isPresent) {
|
if(!isPresent) {
|
||||||
atLeastOneWarning = true;
|
atLeastOneWarning = true;
|
||||||
ModLoader.get().addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), ModLoadingStage.COMMON_SETUP, warning.getRight()));
|
ModLoader.addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), warning.getRight()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(atLeastOneWarning)
|
if(atLeastOneWarning)
|
||||||
ModLoader.get().addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), ModLoadingStage.COMMON_SETUP, "modernfix.perf_mod_warning"));
|
ModLoader.addWarning(new ModLoadingWarning(ModLoadingContext.get().getActiveContainer().getModInfo(), "modernfix.perf_mod_warning"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
package org.embeddedt.modernfix.neoforge.mixin.bugfix.chunk_deadlock;
|
|
||||||
|
|
||||||
import net.minecraft.server.level.ChunkHolder;
|
|
||||||
import net.minecraft.server.level.ServerChunkCache;
|
|
||||||
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.neoforged.fml.util.ObfuscationReflectionHelper;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
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.lang.invoke.MethodHandle;
|
|
||||||
import java.lang.invoke.MethodHandles;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
@Mixin(value = ServerChunkCache.class, priority = 1100)
|
|
||||||
public abstract class ServerChunkCache_CurrentLoadingMixin {
|
|
||||||
@Shadow @Nullable protected abstract ChunkHolder getVisibleChunkIfPresent(long l);
|
|
||||||
|
|
||||||
private static final MethodHandle CURRENTLY_LOADING;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
Field currentlyLoadingField = ObfuscationReflectionHelper.findField(ChunkHolder.class, "currentlyLoading");
|
|
||||||
currentlyLoadingField.setAccessible(true);
|
|
||||||
CURRENTLY_LOADING = MethodHandles.lookup().unreflectGetter(currentlyLoadingField);
|
|
||||||
} catch(Exception e) {
|
|
||||||
throw new RuntimeException("Failed to get currentlyLoading field", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check the currentlyLoading field before going to the future chain, as was done in 1.16. In 1.18 upstream seems
|
|
||||||
* to have only applied this to getChunkNow().
|
|
||||||
*/
|
|
||||||
@Inject(method = "getChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerChunkCache;getChunkFutureMainThread(IILnet/minecraft/world/level/chunk/ChunkStatus;Z)Ljava/util/concurrent/CompletableFuture;"), cancellable = true, require = 0)
|
|
||||||
private void checkCurrentlyLoading(int chunkX, int chunkZ, ChunkStatus requiredStatus, boolean load, CallbackInfoReturnable<ChunkAccess> cir) {
|
|
||||||
long i = ChunkPos.asLong(chunkX, chunkZ);
|
|
||||||
ChunkHolder holder = this.getVisibleChunkIfPresent(i);
|
|
||||||
if(holder != null) {
|
|
||||||
LevelChunk c;
|
|
||||||
try {
|
|
||||||
c = (LevelChunk)CURRENTLY_LOADING.invokeExact(holder);
|
|
||||||
} catch(Throwable e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
c = null;
|
|
||||||
}
|
|
||||||
if(c != null)
|
|
||||||
cir.setReturnValue(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -5,8 +5,8 @@ import net.neoforged.bus.api.EventPriority;
|
||||||
import net.neoforged.fml.ModList;
|
import net.neoforged.fml.ModList;
|
||||||
import net.neoforged.fml.ModLoader;
|
import net.neoforged.fml.ModLoader;
|
||||||
import net.neoforged.fml.ModLoadingContext;
|
import net.neoforged.fml.ModLoadingContext;
|
||||||
import net.neoforged.fml.StartupMessageManager;
|
|
||||||
import net.neoforged.fml.event.IModBusEvent;
|
import net.neoforged.fml.event.IModBusEvent;
|
||||||
|
import net.neoforged.fml.loading.progress.StartupNotificationManager;
|
||||||
import net.neoforged.neoforge.registries.GameData;
|
import net.neoforged.neoforge.registries.GameData;
|
||||||
import net.neoforged.neoforge.registries.RegisterEvent;
|
import net.neoforged.neoforge.registries.RegisterEvent;
|
||||||
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
||||||
|
|
@ -35,12 +35,12 @@ public class GameDataMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/neoforged/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/neoforged/bus/api/Event;)V"))
|
@Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/neoforged/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/neoforged/bus/api/Event;)V"))
|
||||||
private static <T extends Event & IModBusEvent> void swapThreadAndPost(ModLoader loader, T event) {
|
private static <T extends Event & IModBusEvent> void swapThreadAndPost(T event) {
|
||||||
RegisterEvent registryEvent = (RegisterEvent)event;
|
RegisterEvent registryEvent = (RegisterEvent)event;
|
||||||
// We control phases ourselves so we can make a separate progress bar for each phase.
|
// We control phases ourselves so we can make a separate progress bar for each phase.
|
||||||
String registryName = registryEvent.getRegistryKey().location().toString();
|
String registryName = registryEvent.getRegistryKey().location().toString();
|
||||||
for(EventPriority phase : EventPriority.values()) {
|
for(EventPriority phase : EventPriority.values()) {
|
||||||
var pb = StartupMessageManager.addProgressBar(registryName, ModList.get().size());
|
var pb = StartupNotificationManager.addProgressBar(registryName, ModList.get().size());
|
||||||
try {
|
try {
|
||||||
ModList.get().forEachModInOrder(mc -> {
|
ModList.get().forEachModInOrder(mc -> {
|
||||||
ModLoadingContext.get().setActiveContainer(mc);
|
ModLoadingContext.get().setActiveContainer(mc);
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
package org.embeddedt.modernfix.neoforge.packet;
|
|
||||||
|
|
||||||
import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext;
|
|
||||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent;
|
|
||||||
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
|
|
||||||
import net.neoforged.neoforge.network.registration.IPayloadRegistrar;
|
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
|
||||||
import org.embeddedt.modernfix.ModernFixClient;
|
|
||||||
import org.embeddedt.modernfix.packet.EntityIDSyncPacket;
|
|
||||||
|
|
||||||
public class PacketHandler {
|
|
||||||
private static void registerPackets(final RegisterPayloadHandlerEvent event) {
|
|
||||||
final IPayloadRegistrar registrar = event.registrar(ModernFix.MODID).optional();
|
|
||||||
registrar.play(EntityIDSyncPacket.ID, EntityIDSyncPacket::new, PacketHandler::handleSyncPacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void register() {
|
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(PacketHandler::registerPackets);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleSyncPacket(EntityIDSyncPacket packet, PlayPayloadContext context) {
|
|
||||||
context.workHandler().execute(() -> ModernFixClient.handleEntityIDSync(packet));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -83,7 +83,7 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPacket(ServerPlayer player, CustomPacketPayload packet) {
|
public void sendPacket(ServerPlayer player, CustomPacketPayload packet) {
|
||||||
PacketDistributor.PLAYER.with(player).send(packet);
|
PacketDistributor.sendToPlayer(player, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void injectPlatformSpecificHacks() {
|
public void injectPlatformSpecificHacks() {
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ modId = "neoforge" #mandatory
|
||||||
# Does this dependency have to exist - if not, ordering below must be specified
|
# Does this dependency have to exist - if not, ordering below must be specified
|
||||||
type = "required" #mandatory
|
type = "required" #mandatory
|
||||||
# The version range of the dependency
|
# The version range of the dependency
|
||||||
versionRange = "[20.4.132-beta,)" #mandatory
|
versionRange = "[20.5.0-beta,)" #mandatory
|
||||||
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
|
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
|
||||||
ordering = "NONE"
|
ordering = "NONE"
|
||||||
# Side this dependency is applied on - BOTH, CLIENT or SERVER
|
# Side this dependency is applied on - BOTH, CLIENT or SERVER
|
||||||
Loading…
Reference in New Issue
Block a user