Super lock track method - Resolves GH-23

This commit is contained in:
Sotr
2018-07-13 21:17:50 +08:00
parent 9cfe108024
commit c50f6f2a68
4 changed files with 30 additions and 1 deletions

View File

@@ -60,7 +60,6 @@ public abstract class MixinMinecraftServer {
TileEntityHopper.skipHopperEvents = world.paperConfig.disableHopperMoveEvents || InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0;
}
AkarinSlackScheduler.boot();
}
@Overwrite

View File

@@ -0,0 +1,27 @@
package io.akarin.server.mixin.core;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import net.minecraft.server.Entity;
import net.minecraft.server.EntityPlayer;
import net.minecraft.server.WorldManager;
import net.minecraft.server.WorldServer;
@Mixin(value = WorldManager.class, remap = false)
public abstract class MixinWorldManager {
@Shadow @Final private WorldServer world;
@Overwrite
public void a(Entity entity) {
this.world.getTracker().entriesLock.lock(); // Akarin
this.world.getTracker().track(entity);
this.world.getTracker().entriesLock.unlock(); // Akarin
if (entity instanceof EntityPlayer) {
this.world.worldProvider.a((EntityPlayer) entity);
}
}
}

View File

@@ -745,7 +745,9 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
if (entity instanceof EntityPlayer) {
WorldServer worldServer = (WorldServer) entity.getWorld();
worldServer.tracker.untrackEntity(this);
worldServer.tracker.entriesLock.lock(); // Akarin
worldServer.tracker.track(this);
worldServer.tracker.entriesLock.unlock(); // Akarin
}
// Paper end