diff --git a/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/common/optimization/NoopReadWriteLock.java b/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/common/optimization/NoopReadWriteLock.java new file mode 100644 index 00000000..21acd7d4 --- /dev/null +++ b/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/common/optimization/NoopReadWriteLock.java @@ -0,0 +1,61 @@ +package io.izzel.arclight.impl.common.optimization; + +import org.jetbrains.annotations.NotNull; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; + +public class NoopReadWriteLock implements ReadWriteLock { + + private static final NoopReadWriteLock INSTANCE = new NoopReadWriteLock(); + private static final NoopLock LOCK = new NoopLock(); + + @NotNull + @Override + public Lock readLock() { + return LOCK; + } + + @NotNull + @Override + public Lock writeLock() { + return LOCK; + } + + public static ReadWriteLock instance() { + return INSTANCE; + } + + private static class NoopLock implements Lock { + + @Override + public void lock() { + } + + @Override + public void lockInterruptibly() throws InterruptedException { + } + + @Override + public boolean tryLock() { + return true; + } + + @Override + public boolean tryLock(long time, @NotNull TimeUnit unit) throws InterruptedException { + return true; + } + + @Override + public void unlock() { + } + + @NotNull + @Override + public Condition newCondition() { + throw new AssertionError(); + } + } +} diff --git a/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/mixin/optimization/general/EntityDataManagerMixin_Optimize.java b/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/mixin/optimization/general/EntityDataManagerMixin_Optimize.java new file mode 100644 index 00000000..6b3bd6c2 --- /dev/null +++ b/arclight-forge-1.16/src/main/java/io/izzel/arclight/impl/mixin/optimization/general/EntityDataManagerMixin_Optimize.java @@ -0,0 +1,25 @@ +package io.izzel.arclight.impl.mixin.optimization.general; + +import io.izzel.arclight.impl.common.optimization.NoopReadWriteLock; +import net.minecraft.entity.Entity; +import net.minecraft.network.datasync.EntityDataManager; +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.concurrent.locks.ReadWriteLock; + +@Mixin(EntityDataManager.class) +public class EntityDataManagerMixin_Optimize { + + @Shadow @Final @Mutable private ReadWriteLock lock; + + @Inject(method = "", at = @At("RETURN")) + private void optimize$dropLock(Entity entityIn, CallbackInfo ci) { + this.lock = NoopReadWriteLock.instance(); + } +} diff --git a/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json b/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json index 27aa7766..d0dba3c2 100644 --- a/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json +++ b/arclight-forge-1.16/src/main/resources/mixins.arclight.impl.optimization.1_16.json @@ -5,6 +5,7 @@ "refmap": "mixins.arclight.impl.refmap.1_16.json", "mixins": [ "ClassInheritanceMultiMapMixin", + "EntityDataManagerMixin_Optimize", "VoxelShapesMixin", "activationrange.ActivationRangeMixin", "activationrange.EntityMixin_ActivationRange",