From a7a9aac23a306ace1302fca04344e9c4313ec0a7 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 26 Dec 2025 15:37:32 -0500 Subject: [PATCH] Begin cleaning up a large volume of code --- .../embeddedt/modernfix/ModernFixClient.java | 105 ------------------ .../blockstate/BlockStateCacheHandler.java | 2 +- .../blockstate/FerriteCorePostProcess.java | 62 ----------- .../modernfix/chunk/SafeBlockGetter.java | 78 ------------- .../chunk_deadlock/BlockStateBaseMixin.java | 22 ---- .../chunk_deadlock/ServerLevelMixin.java | 18 --- .../bugfix/concurrency/MinecraftMixin.java | 36 ------ .../mixin/core/SynchedEntityDataMixin.java | 26 ----- .../direct_stack_trace/CrashReportMixin.java | 22 ---- .../ServerChunkCacheMixin.java | 71 ------------ .../cache_model_materials/MultipartMixin.java | 28 ----- .../MixinResourceLocation.java | 30 ----- .../EntityRenderDispatcherMixin.java | 38 ------- .../EntityRenderersMixin.java | 29 ----- .../BlockElementFaceDeserializerMixin.java | 23 ---- .../model_optimizations/PropertyMixin.java | 18 ++- .../ResourceKeyMixin.java | 28 ----- .../BlocksMixin.java | 2 +- .../modernfix/dedup/IdentifierCaches.java | 6 - .../dynamicresources/UVController.java | 8 -- .../entity/EntityDataIDSyncHandler.java | 57 ---------- .../modernfix/packet/EntityIDSyncPacket.java | 78 ------------- .../BlockCallbacksMixin.java | 2 +- .../modernfix/forge/packet/PacketHandler.java | 15 --- 24 files changed, 11 insertions(+), 793 deletions(-) delete mode 100644 common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/BlockStateBaseMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/ServerLevelMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/concurrency/MinecraftMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/core/SynchedEntityDataMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/stalled_chunk_load_detection/ServerChunkCacheMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_model_materials/MultipartMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/deduplicate_location/MixinResourceLocation.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderDispatcherMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderersMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/ResourceKeyMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java diff --git a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java index 7dbee016..aa55531a 100644 --- a/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java +++ b/common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java @@ -1,17 +1,11 @@ package org.embeddedt.modernfix; -import com.mojang.datafixers.util.Pair; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.client.Minecraft; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; import net.minecraft.util.MemoryReserve; -import net.minecraft.world.entity.Entity; import org.embeddedt.modernfix.api.constants.IntegrationConstants; import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; -import org.embeddedt.modernfix.packet.EntityIDSyncPacket; import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; import org.embeddedt.modernfix.searchtree.JEIBackedSearchTree; import org.embeddedt.modernfix.searchtree.REIBackedSearchTree; @@ -21,7 +15,6 @@ import org.embeddedt.modernfix.util.ClassInfoManager; import org.embeddedt.modernfix.world.IntegratedWatchdog; import java.lang.management.ManagementFactory; -import java.lang.reflect.Field; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; @@ -108,104 +101,6 @@ public class ModernFixClient { } } - /** - * Check if the IDs match and remap them if not. - * @return true if ID remap was needed - */ - private static boolean compareAndSwitchIds(Class eClass, String fieldName, EntityDataAccessor accessor, int newId) { - if(accessor.id != newId) { - ModernFix.LOGGER.warn("Corrected ID mismatch on {} field {}. Client had {} but server wants {}.", - eClass, - fieldName, - accessor.id, - newId); - accessor.id = newId; - return true; - } else { - ModernFix.LOGGER.debug("{} {} ID fine: {}", eClass, fieldName, newId); - return false; - } - } - - /** - * Horrendous hack to allow tracking every synced entity data manager. - * - * This is to ensure we can perform ID fixup on already constructed managers. - */ - public static final Set allEntityDatas = Collections.newSetFromMap(new WeakHashMap<>()); - - private static final Field entriesArrayField; - static { - Field field; - try { - field = SynchedEntityData.class.getDeclaredField("entriesArray"); - field.setAccessible(true); - } catch(ReflectiveOperationException e) { - field = null; - } - entriesArrayField = field; - } - - /** - * Extremely hacky method to detect and correct mismatched entity data parameter IDs on the client and server. - * - * The technique is far from ideal, but it should detect reliably and also not break already constructed entities. - */ - public static void handleEntityIDSync(EntityIDSyncPacket packet) { - Map, List>> info = packet.getFieldInfo(); - boolean fixNeeded = false; - for(Map.Entry, List>> entry : info.entrySet()) { - Class eClass = entry.getKey(); - for(Pair field : entry.getValue()) { - String fieldName = field.getFirst(); - int newId = field.getSecond(); - try { - Field f = eClass.getDeclaredField(fieldName); - f.setAccessible(true); - EntityDataAccessor accessor = (EntityDataAccessor)f.get(null); - if(compareAndSwitchIds(eClass, fieldName, accessor, newId)) - fixNeeded = true; - } catch(NoSuchFieldException e) { - ModernFix.LOGGER.warn("Couldn't find field on {}: {}", eClass, fieldName); - } catch(ReflectiveOperationException e) { - throw new RuntimeException("Unexpected exception", e); - } - } - } - /* Now the ID mappings on synced entity data instances are probably all wrong. Fix that. */ - List dataEntries; - synchronized (allEntityDatas) { - if(fixNeeded) { - dataEntries = new ArrayList<>(allEntityDatas); - for(SynchedEntityData manager : dataEntries) { - Int2ObjectOpenHashMap> fixedMap = new Int2ObjectOpenHashMap<>(); - List> items = new ArrayList<>(manager.itemsById.values()); - for(SynchedEntityData.DataItem item : items) { - fixedMap.put(item.getAccessor().id, item); - } - manager.lock.writeLock().lock(); - try { - manager.itemsById.replaceAll((id, parameter) -> fixedMap.get((int)id)); - if(entriesArrayField != null) { - try { - SynchedEntityData.DataItem[] dataArray = new SynchedEntityData.DataItem[items.size()]; - for(int i = 0; i < dataArray.length; i++) { - dataArray[i] = fixedMap.get(i); - } - entriesArrayField.set(manager, dataArray); - } catch(ReflectiveOperationException e) { - ModernFix.LOGGER.error(e); - } - } - } finally { - manager.lock.writeLock().unlock(); - } - } - } - allEntityDatas.clear(); - } - } - public void onServerStarted(MinecraftServer server) { if(!ModernFixMixinPlugin.instance.isOptionEnabled("feature.integrated_server_watchdog.IntegratedWatchdog")) return; diff --git a/common/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java b/common/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java index c2be9256..b1eb833a 100644 --- a/common/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java +++ b/common/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.block.state.BlockState; import org.embeddedt.modernfix.duck.IBlockState; public class BlockStateCacheHandler { - public static void rebuildParallel(boolean force) { + public static void invalidateCache() { synchronized (BlockBehaviour.BlockStateBase.class) { for (BlockState blockState : Block.BLOCK_STATE_REGISTRY) { ((IBlockState)blockState).clearCache(); diff --git a/common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java b/common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java deleted file mode 100644 index 70daf00e..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/blockstate/FerriteCorePostProcess.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.embeddedt.modernfix.blockstate; - -import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntMaps; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.StateHolder; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.reflect.Field; - -public class FerriteCorePostProcess { - private static final boolean willPostProcess; - - private static final MethodHandle theTable, toKeyIndex; - - static { - boolean success = true; - MethodHandle table = null, keyIndex = null; - try { - Class fastMap = Class.forName("malte0811.ferritecore.fastmap.FastMap"); - Field field = fastMap.getDeclaredField("toKeyIndex"); - field.setAccessible(true); - keyIndex = MethodHandles.publicLookup().unreflectSetter(field); - field = StateHolder.class.getDeclaredField("ferritecore_globalTable"); - field.setAccessible(true); - table = MethodHandles.publicLookup().unreflectGetter(field); - } catch(ReflectiveOperationException | RuntimeException e) { - e.printStackTrace(); - success = false; - } - willPostProcess = success; - theTable = table; - toKeyIndex = keyIndex; - } - - private static final Object2IntMap EMPTY_MAP; - - static { - Object2IntArrayMap map = new Object2IntArrayMap<>(); - map.defaultReturnValue(-1); - EMPTY_MAP = Object2IntMaps.unmodifiable(map); - } - - public static > void postProcess(StateDefinition state) { - if(!willPostProcess) - return; - try { - if(state.getProperties().size() == 0) { - for(S holder : state.getPossibleStates()) { - // deduplicate Object2IntMap objects from FerriteCore - // will probably be fixed upstream at some point, but likely not for older versions - Object table = theTable.invoke(holder); - toKeyIndex.invoke(table, EMPTY_MAP); - } - } - } catch(Throwable e) { - e.printStackTrace(); - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java b/common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java deleted file mode 100644 index 3d4efe52..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.embeddedt.modernfix.chunk; - -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Fluids; -import org.jetbrains.annotations.Nullable; - -public class SafeBlockGetter implements BlockGetter { - private final ServerLevel wrapped; - private final Thread mainThread; - - public SafeBlockGetter(ServerLevel wrapped) { - this.wrapped = wrapped; - this.mainThread = Thread.currentThread(); - } - - public boolean shouldUse() { - return Thread.currentThread() != this.mainThread; - } - - @Nullable - private BlockGetter getChunkSafe(BlockPos pos) { - // can safely call getChunkForLighting off-thread - BlockGetter access = this.wrapped.getChunkSource().getChunkForLighting(pos.getX() >> 4, pos.getZ() >> 4); - if(!(access instanceof ChunkAccess)) - return null; - ChunkAccess chunk = (ChunkAccess)access; - if(!chunk.getStatus().isOrAfter(ChunkStatus.FULL)) - return null; - return chunk; - } - - @Override - public int getMaxBuildHeight() { - return this.wrapped.getMaxBuildHeight(); - } - - @Override - public int getMaxLightLevel() { - return this.wrapped.getMaxLightLevel(); - } - - @Override - public int getMinBuildHeight() { - return this.wrapped.getMinBuildHeight(); - } - - @Override - public int getHeight() { - return this.wrapped.getHeight(); - } - - @Nullable - @Override - public BlockEntity getBlockEntity(BlockPos pos) { - BlockGetter g = getChunkSafe(pos); - return g == null ? null : g.getBlockEntity(pos); - } - - @Override - public BlockState getBlockState(BlockPos pos) { - BlockGetter g = getChunkSafe(pos); - return g == null ? Blocks.AIR.defaultBlockState() : g.getBlockState(pos); - } - - @Override - public FluidState getFluidState(BlockPos pos) { - BlockGetter g = getChunkSafe(pos); - return g == null ? Fluids.EMPTY.defaultFluidState() : g.getFluidState(pos); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/BlockStateBaseMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/BlockStateBaseMixin.java deleted file mode 100644 index 464130c8..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/BlockStateBaseMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.bugfix.chunk_deadlock; - -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.state.BlockBehaviour; -import org.embeddedt.modernfix.chunk.SafeBlockGetter; -import org.embeddedt.modernfix.duck.ISafeBlockGetter; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(value = BlockBehaviour.BlockStateBase.class, priority = 100) -public class BlockStateBaseMixin { - @ModifyVariable(method = "getOffset", at = @At("HEAD"), argsOnly = true, index = 1) - private BlockGetter useSafeGetter(BlockGetter g) { - if(g instanceof ISafeBlockGetter) { - SafeBlockGetter replacement = ((ISafeBlockGetter) g).mfix$getSafeBlockGetter(); - if(replacement.shouldUse()) - return replacement; - } - return g; - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/ServerLevelMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/ServerLevelMixin.java deleted file mode 100644 index e7c3b137..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/chunk_deadlock/ServerLevelMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.bugfix.chunk_deadlock; - -import net.minecraft.server.level.ServerLevel; -import org.embeddedt.modernfix.chunk.SafeBlockGetter; -import org.embeddedt.modernfix.duck.ISafeBlockGetter; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(ServerLevel.class) -public class ServerLevelMixin implements ISafeBlockGetter { - @Unique - private final SafeBlockGetter mfix$safeBlockGetter = new SafeBlockGetter((ServerLevel)(Object)this); - - @Override - public SafeBlockGetter mfix$getSafeBlockGetter() { - return mfix$safeBlockGetter; - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/concurrency/MinecraftMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/concurrency/MinecraftMixin.java deleted file mode 100644 index 875fcbd7..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/concurrency/MinecraftMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.bugfix.concurrency; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.thread.BlockableEventLoop; -import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.spongepowered.asm.mixin.Mixin; - -import java.util.function.BooleanSupplier; - -@Mixin(Minecraft.class) -@ClientOnlyMixin -public abstract class MinecraftMixin extends BlockableEventLoop { - - protected MinecraftMixin(String p_i50403_1_) { - super(p_i50403_1_); - } - - @Override - public void managedBlock(BooleanSupplier pIsDone) { - if(!this.isSameThread()) { - ModernFix.LOGGER.warn("A mod is calling Minecraft.managedBlock from the wrong thread. This is most likely related to one of our parallelizations."); - ModernFix.LOGGER.warn("ModernFix will work around this, however ideally the issue should be patched in the other mod."); - ModernFix.LOGGER.warn("Stacktrace", new IllegalThreadStateException()); - while(!pIsDone.getAsBoolean()) { - try { - Thread.sleep(100); - } catch(InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - } else { - super.managedBlock(pIsDone); - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/core/SynchedEntityDataMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/core/SynchedEntityDataMixin.java deleted file mode 100644 index 9737a2f2..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/core/SynchedEntityDataMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.core; - -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.world.entity.Entity; -import org.embeddedt.modernfix.ModernFixClient; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -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(SynchedEntityData.class) -@ClientOnlyMixin -public class SynchedEntityDataMixin { - /** - * Store this in our set of all entity data objects. - * - * Not an ideal solution, but it should guarantee compatibility with mods. - */ - @Inject(method = "", at = @At("RETURN")) - private void storeInSet(Entity arg, CallbackInfo ci) { - synchronized (ModernFixClient.allEntityDatas) { - ModernFixClient.allEntityDatas.add((SynchedEntityData)(Object)this); - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java deleted file mode 100644 index 2841921c..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/direct_stack_trace/CrashReportMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.feature.direct_stack_trace; - -import net.minecraft.CrashReport; -import net.minecraft.CrashReportCategory; -import org.spongepowered.asm.mixin.Final; -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; - -@Mixin(CrashReport.class) -public class CrashReportMixin { - @Shadow @Final private Throwable exception; - - @Inject(method = "addCategory(Ljava/lang/String;I)Lnet/minecraft/CrashReportCategory;", at = @At(value = "INVOKE", target = "Ljava/io/PrintStream;println(Ljava/lang/String;)V")) - private void dumpStacktrace(String s, int i, CallbackInfoReturnable cir) { - new Exception("ModernFix crash stacktrace").printStackTrace(); - if(this.exception != null) - this.exception.printStackTrace(); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/stalled_chunk_load_detection/ServerChunkCacheMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/stalled_chunk_load_detection/ServerChunkCacheMixin.java deleted file mode 100644 index 72a6fb2b..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/stalled_chunk_load_detection/ServerChunkCacheMixin.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.feature.stalled_chunk_load_detection; - -import com.mojang.datafixers.util.Either; -import net.minecraft.core.Holder; -import net.minecraft.core.registries.Registries; -import net.minecraft.server.level.ChunkHolder; -import net.minecraft.server.level.ServerChunkCache; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.chunk.EmptyLevelChunk; -import org.embeddedt.modernfix.ModernFix; -import org.spongepowered.asm.mixin.Final; -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.concurrent.*; - -@Mixin(value = ServerChunkCache.class, priority = 1100) -public abstract class ServerChunkCacheMixin { - @Shadow @Final private Thread mainThread; - @Shadow @Final public ServerLevel level; - - @Shadow protected abstract CompletableFuture> getChunkFutureMainThread(int k, int l, ChunkStatus arg, boolean bl); - - @Shadow @Final private ServerChunkCache.MainThreadExecutor mainThreadProcessor; - private final boolean debugDeadServerAccess = Boolean.getBoolean("modernfix.debugBadChunkloading"); - - @Inject(method = "getChunk", at = @At("HEAD"), cancellable = true) - private void bailIfServerDead(int chunkX, int chunkZ, ChunkStatus requiredStatus, boolean load, CallbackInfoReturnable cir) { - if(!this.level.getServer().isRunning() && !this.mainThread.isAlive()) { - ModernFix.LOGGER.fatal("A mod is accessing chunks from a stopped server (this will also cause memory leaks)"); - if(debugDeadServerAccess) { - new Exception().printStackTrace(); - } - Holder plains = this.level.registryAccess().registryOrThrow(Registries.BIOME).getHolderOrThrow(Biomes.PLAINS); - cir.setReturnValue(new EmptyLevelChunk(this.level, new ChunkPos(chunkX, chunkZ), plains)); - } else if(Thread.currentThread() != this.mainThread) { - CompletableFuture> future = CompletableFuture.supplyAsync(() -> this.getChunkFutureMainThread(chunkX, chunkZ, requiredStatus, false), this.mainThreadProcessor).join(); - if(!future.isDone()) { - // Wait at least 500 milliseconds before printing anything - Either resultingChunk = null; - try { - resultingChunk = future.get(500, TimeUnit.MILLISECONDS); - } catch(InterruptedException | ExecutionException | TimeoutException ignored) { - } - if(resultingChunk != null && resultingChunk.left().isPresent()) { - cir.setReturnValue(resultingChunk.left().get()); - return; - } - if(debugDeadServerAccess) - ModernFix.LOGGER.warn("Async loading of a chunk was requested, this might not be desirable", new Exception()); - try { - resultingChunk = future.get(10, TimeUnit.SECONDS); - if(resultingChunk.left().isPresent()) { - cir.setReturnValue(resultingChunk.left().get()); - return; - } - } catch(InterruptedException | ExecutionException | TimeoutException e) { - ModernFix.LOGGER.error("Async chunk load took way too long, this needs to be reported to the appropriate mod.", e); - } - //cir.setReturnValue(new EmptyLevelChunk(this.level, new ChunkPos(chunkX, chunkZ))); - } - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_model_materials/MultipartMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_model_materials/MultipartMixin.java deleted file mode 100644 index 4d620db9..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/cache_model_materials/MultipartMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.cache_model_materials; - -import net.minecraft.client.renderer.block.model.multipart.MultiPart; -import net.minecraft.resources.ResourceLocation; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -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.CallbackInfoReturnable; - -import java.util.Collection; - -@Mixin(MultiPart.class) -@ClientOnlyMixin -public class MultipartMixin { - private Collection dependencyCache = null; - @Inject(method = "getDependencies", at = @At("HEAD"), cancellable = true) - private void useDependencyCache(CallbackInfoReturnable> cir) { - if(dependencyCache != null) - cir.setReturnValue(dependencyCache); - } - - @Inject(method = "getDependencies", at = @At("RETURN")) - private void storeDependencyCache(CallbackInfoReturnable> cir) { - if(dependencyCache == null) - dependencyCache = cir.getReturnValue(); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/deduplicate_location/MixinResourceLocation.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/deduplicate_location/MixinResourceLocation.java deleted file mode 100644 index eb2c8cba..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/deduplicate_location/MixinResourceLocation.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.deduplicate_location; - -import net.minecraft.resources.ResourceLocation; -import org.embeddedt.modernfix.dedup.IdentifierCaches; -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; - -@Mixin(ResourceLocation.class) -public class MixinResourceLocation { - @Mutable - @Shadow - @Final - protected String namespace; - - @Mutable - @Shadow - @Final - protected String path; - - @Inject(method = "([Ljava/lang/String;)V", at = @At("RETURN")) - private void reinit(String[] id, CallbackInfo ci) { - this.namespace = IdentifierCaches.NAMESPACES.deduplicate(this.namespace); - this.path = IdentifierCaches.PATH.deduplicate(this.path); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderDispatcherMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderDispatcherMixin.java deleted file mode 100644 index 4d3f3b41..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderDispatcherMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_entity_renderers; - -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.embeddedt.modernfix.entity.EntityRendererMap; -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.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Map; - -@Mixin(EntityRenderDispatcher.class) -@ClientOnlyMixin -public class EntityRenderDispatcherMixin { - @Shadow private Map, EntityRenderer> renderers; - - private EntityRendererMap mfix$dynamicRenderers; - - @Inject(method = "getRenderer", at = @At("RETURN"), cancellable = true) - private void checkNullness(T entity, CallbackInfoReturnable> cir) { - // apparently some mods yeet the renderers map and cause issues - if(cir.getReturnValue() == null) - cir.setReturnValue((EntityRenderer)mfix$dynamicRenderers.get(entity.getType())); - } - - @Redirect(method = "onResourceManagerReload", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;renderers:Ljava/util/Map;")) - private void setRendererField(EntityRenderDispatcher instance, Map, EntityRenderer> incomingMap) { - this.renderers = incomingMap; - this.mfix$dynamicRenderers = (EntityRendererMap)incomingMap; - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderersMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderersMixin.java deleted file mode 100644 index a6d93ca0..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_entity_renderers/EntityRenderersMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_entity_renderers; - -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.entity.EntityRenderers; -import net.minecraft.world.entity.EntityType; -import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.embeddedt.modernfix.entity.EntityRendererMap; -import org.spongepowered.asm.mixin.Final; -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(EntityRenderers.class) -@ClientOnlyMixin -public class EntityRenderersMixin { - @Shadow @Final private static Map, EntityRendererProvider> PROVIDERS; - - @Inject(method = "createEntityRenderers", at = @At("HEAD"), cancellable = true) - private static void createDynamicRendererLoader(EntityRendererProvider.Context context, CallbackInfoReturnable, EntityRenderer>> cir) { - cir.setReturnValue(new EntityRendererMap(PROVIDERS, context)); - ModernFix.LOGGER.info("Dynamic entity renderer hook setup"); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java deleted file mode 100644 index 17404372..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonElement; -import net.minecraft.client.renderer.block.model.BlockElementFace; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.embeddedt.modernfix.dynamicresources.UVController; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.lang.reflect.Type; - -@Mixin(BlockElementFace.Deserializer.class) -@ClientOnlyMixin -public class BlockElementFaceDeserializerMixin { - - @Redirect(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/client/renderer/block/model/BlockElementFace;", - at = @At(value = "INVOKE", target = "Lcom/google/gson/JsonDeserializationContext;deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;)Ljava/lang/Object;", ordinal = 0, remap = false)) - private Object skipUvsForInitialLoad(JsonDeserializationContext context, JsonElement element, Type type) { - return UVController.useDummyUv.get() ? UVController.dummyUv : context.deserialize(element, type); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/model_optimizations/PropertyMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/model_optimizations/PropertyMixin.java index a443db3a..9c85baa2 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/model_optimizations/PropertyMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/model_optimizations/PropertyMixin.java @@ -1,25 +1,22 @@ package org.embeddedt.modernfix.common.mixin.perf.model_optimizations; import net.minecraft.world.level.block.state.properties.Property; -import org.embeddedt.modernfix.dedup.IdentifierCaches; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(Property.class) public class PropertyMixin { - @Shadow @Mutable - @Final private String name; - - @Shadow private Integer hashCode; + @Shadow @Final private String name; @Shadow @Final private Class clazz; - @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/state/properties/Property;name:Ljava/lang/String;")) - private void internName(Property instance, String name) { - this.name = IdentifierCaches.PROPERTY.deduplicate(name); + @ModifyVariable(method = "", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private static String internName(String name) { + return name.intern(); } + /** * @author embeddedt * @reason compare hashcodes if generated, use reference equality for speed @@ -32,7 +29,8 @@ public class PropertyMixin { return false; } else { Property property = (Property)p_equals_1_; - /* reference equality is safe here because of deduplication */ + /* reference equality is safe here because of interning above */ + //noinspection StringEquality return this.clazz == property.getValueClass() && this.name == property.getName(); } } diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/ResourceKeyMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/ResourceKeyMixin.java deleted file mode 100644 index 7d6701db..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/ResourceKeyMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.mojang_registry_size; - -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -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.CallbackInfoReturnable; - -import java.util.Map; - -@Mixin(ResourceKey.class) -public class ResourceKeyMixin { - private static final Map>> INTERNING_MAP = new Object2ObjectOpenHashMap<>(); - @Inject(method = "create(Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/resources/ResourceKey;", at = @At("HEAD"), cancellable = true) - private static void createEfficient(ResourceLocation parent, ResourceLocation location, CallbackInfoReturnable> cir) { - synchronized (ResourceKey.class) { - Map> keys = INTERNING_MAP.computeIfAbsent(parent, k -> new Object2ObjectOpenHashMap<>()); - ResourceKey key = keys.get(location); - if(key == null) { - key = new ResourceKey<>(parent, location); - keys.put(location, key); - } - cir.setReturnValue((ResourceKey)key); - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlocksMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlocksMixin.java index dac6f26d..3d35f9c3 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlocksMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlocksMixin.java @@ -16,7 +16,7 @@ import java.util.function.Consumer; public class BlocksMixin { @ModifyArg(method = "rebuildCache", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/IdMapper;forEach(Ljava/util/function/Consumer;)V"), index = 0) private static Consumer getEmptyConsumer(Consumer original) { - BlockStateCacheHandler.rebuildParallel(true); + BlockStateCacheHandler.invalidateCache(); return o -> {}; } diff --git a/common/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java b/common/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java index e69b36d5..b8569f6b 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java +++ b/common/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java @@ -7,10 +7,4 @@ public class IdentifierCaches { public static final DeduplicationCache NAMESPACES = new DeduplicationCache<>(); public static final DeduplicationCache PATH = new DeduplicationCache<>(); public static final DeduplicationCache PROPERTY = new DeduplicationCache<>(); - - public static void printDebug() { - ModernFix.LOGGER.info("[[[ Identifier de-duplication statistics ]]]"); - ModernFix.LOGGER.info("Namespace cache: {}", NAMESPACES); - ModernFix.LOGGER.info("Path cache: {}", PATH); - } } diff --git a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java deleted file mode 100644 index 7b2efe7e..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.embeddedt.modernfix.dynamicresources; - -import net.minecraft.client.renderer.block.model.BlockFaceUV; - -public class UVController { - public static final ThreadLocal useDummyUv = ThreadLocal.withInitial(() -> Boolean.FALSE); - public static final BlockFaceUV dummyUv = new BlockFaceUV(new float[4], 0); -} diff --git a/common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java b/common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java deleted file mode 100644 index 9a9bb88d..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.embeddedt.modernfix.entity; - -import com.mojang.datafixers.util.Pair; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.packet.EntityIDSyncPacket; -import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; - -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class EntityDataIDSyncHandler { - private static Map, List>> fieldsToSyncMap; - - @SuppressWarnings("unchecked") - public static void onDatapackSyncEvent(ServerPlayer targetPlayer) { - if(targetPlayer != null) { - /* Compute the current set of serializer IDs in use and send them */ - if(fieldsToSyncMap == null) { - fieldsToSyncMap = new HashMap<>(); - Map, Integer> entityPoolMap = SynchedEntityData.ENTITY_ID_POOL; - List fieldsToSync = new ArrayList<>(); - for(Class eClass : entityPoolMap.keySet()) { - fieldsToSync.clear(); - try { - Field[] classFields = eClass.getDeclaredFields(); - for(Field field : classFields) { - if(!Modifier.isStatic(field.getModifiers())) - continue; - field.setAccessible(true); - Object o = field.get(null); - if(o != null && EntityDataAccessor.class.isAssignableFrom(o.getClass())) { - fieldsToSync.add(field); - } - } - for(Field field : fieldsToSync) { - int id = ((EntityDataAccessor)field.get(null)).id; - fieldsToSyncMap.computeIfAbsent(eClass, k -> new ArrayList<>()).add(Pair.of(field.getName(), id)); - } - } catch(Throwable e) { - ModernFix.LOGGER.error("Skipping entity ID sync for {}: {}", eClass.getName(), e); - } - } - } - EntityIDSyncPacket packet = new EntityIDSyncPacket(fieldsToSyncMap); - ModernFix.LOGGER.debug("Sending ID correction packet to client with " + fieldsToSyncMap.size() + " classes"); - ModernFixPlatformHooks.INSTANCE.sendPacket(targetPlayer, packet); - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java b/common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java deleted file mode 100644 index 6fe2c6b1..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.embeddedt.modernfix.packet; - -import com.mojang.datafixers.util.Pair; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.syncher.EntityDataAccessor; -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 { - private Map, List>> map; - - public EntityIDSyncPacket(Map, List>> map) { - this.map = map; - } - - public Map, List>> getFieldInfo() { - return this.map; - } - - public EntityIDSyncPacket() { - this.map = new HashMap<>(); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeVarInt(map.keySet().size()); - for(Map.Entry, List>> entry : map.entrySet()) { - buf.writeUtf(entry.getKey().getName()); - buf.writeVarInt(entry.getValue().size()); - for(Pair field : entry.getValue()) { - buf.writeUtf(field.getFirst()); - buf.writeVarInt(field.getSecond()); - } - } - } - - @SuppressWarnings("unchecked") - public static EntityIDSyncPacket deserialize(FriendlyByteBuf buf) { - EntityIDSyncPacket self = new EntityIDSyncPacket(); - 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)clz, k -> new ArrayList<>()).add(Pair.of(fieldName, id)); - } - } catch(ReflectiveOperationException e) { - ModernFix.LOGGER.error("Error deserializing packet", e); - } - } - return self; - } -} 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 index 85c718d3..45c1634d 100644 --- 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 @@ -20,6 +20,6 @@ public class BlockCallbacksMixin { @Inject(method = "onBake", at = @At(value = "TAIL"), remap = false) private void computeCaches(IForgeRegistryInternal owner, RegistryManager stage, CallbackInfo ci) { - BlockStateCacheHandler.rebuildParallel(false); + BlockStateCacheHandler.invalidateCache(); } } 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 index 3613b7a4..be9b272b 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/packet/PacketHandler.java @@ -1,17 +1,10 @@ package org.embeddedt.modernfix.forge.packet; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; -import org.embeddedt.modernfix.packet.EntityIDSyncPacket; - -import java.util.function.Supplier; public class PacketHandler { public static final SimpleChannel INSTANCE = buildChannel("main", "1"); @@ -39,13 +32,5 @@ public class PacketHandler { } public static void register() { - INSTANCE.registerMessage(1, EntityIDSyncPacket.class, EntityIDSyncPacket::serialize, EntityIDSyncPacket::deserialize, PacketHandler::handleSyncPacket); - } - - private static void handleSyncPacket(EntityIDSyncPacket packet, Supplier contextSupplier) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - contextSupplier.get().enqueueWork(() -> ModernFixClient.handleEntityIDSync(packet)); - contextSupplier.get().setPacketHandled(true); - }); } }