From a4e16704a3a1cfb85a0504d1b8a06027baf9da75 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 21 Mar 2023 09:16:57 -0400 Subject: [PATCH 1/2] Synchronize on public class to prevent obscure crashes in some cases --- .../embeddedt/modernfix/blockstate/BlockStateCacheHandler.java | 2 +- .../reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java b/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java index f1884e4a..1c6c83c0 100644 --- a/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java +++ b/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java @@ -26,7 +26,7 @@ public class BlockStateCacheHandler { } public static void rebuildParallel(boolean force) { - synchronized (BlockBehaviour.BlockStateBase.Cache.class) { + synchronized (BlockBehaviour.BlockStateBase.class) { for (BlockState blockState : Block.BLOCK_STATE_REGISTRY) { ((IBlockState)blockState).clearCache(); } diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java index 38ea9532..8d76abbb 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java @@ -37,7 +37,7 @@ public abstract class BlockStateBaseMixin implements IBlockState { private BlockBehaviour.BlockStateBase.Cache initCacheIfNeeded(BlockBehaviour.BlockStateBase base) { if(cacheInvalid) { // Ensure that only one block's cache is built at a time - synchronized (BlockBehaviour.BlockStateBase.Cache.class) { + synchronized (BlockBehaviour.BlockStateBase.class) { if(cacheInvalid) { // Ensure that if we end up in here recursively, we just use the original cache if(!buildingCache) { From b623b3fa96f2b9a42da5883146072108e541943b Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 21 Mar 2023 09:20:35 -0400 Subject: [PATCH 2/2] Fix Lightspeed incompatibility Fixes #43 --- .../perf/resourcepacks/ModFileResourcePackMixin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java index 15d99e15..c5bc3f68 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/resourcepacks/ModFileResourcePackMixin.java @@ -111,11 +111,11 @@ public abstract class ModFileResourcePackMixin { * @author embeddedt * @reason Use cached listing of mod resources */ - @Overwrite - public Collection getResources(PackType type, String resourceNamespace, String pathIn, int maxDepth, Predicate filter) + @Inject(method = "getResources", at = @At("HEAD"), cancellable = true) + private void fastGetResources(PackType type, String resourceNamespace, String pathIn, int maxDepth, Predicate filter, CallbackInfoReturnable> cir) { Path inputPath = this.resourcePackFS.getPath(pathIn); - return this.rootListingByNamespaceAndType.get(type).getOrDefault(resourceNamespace, Collections.emptyList()).stream(). + cir.setReturnValue(this.rootListingByNamespaceAndType.get(type).getOrDefault(resourceNamespace, Collections.emptyList()).stream(). filter(path -> path.getNameCount() <= maxDepth). // Make sure the depth is within bounds filter(path -> path.startsWith(inputPath)). // Make sure the target path is inside this one filter(path -> filter.test(path.getFileName().toString())). // Test the file name against the predicate @@ -123,6 +123,6 @@ public abstract class ModFileResourcePackMixin { // It is VERY IMPORTANT that we do not rely on Path.toString as this is inconsistent between operating systems // Join the path names ourselves to force forward slashes map(path -> new ResourceLocation(resourceNamespace, slashJoiner.join(path))). - collect(Collectors.toList()); + collect(Collectors.toList())); } }