From a2c09040b4712ebc388e1d017819346eceded8fb Mon Sep 17 00:00:00 2001 From: Sotr Date: Fri, 13 Jul 2018 21:35:10 +0800 Subject: [PATCH] Fixes packet send --- .../src/main/java/io/akarin/api/internal/Akari.java | 5 +++++ ...sterEggGuardian.java => MixinItemMonsterEgg.java} | 4 ++-- .../server/mixin/core/MixinMinecraftServer.java | 1 + .../akarin/server/mixin/core/MixinTimingHandler.java | 2 +- .../akarin/server/mixin/core/MixinWorldServer.java | 2 +- .../server/mixin/nsc/OptimisticNetworkManager.java | 12 ++++++------ .../server/mixin/optimization/PandaRedstoneWire.java | 1 - .../server/mixin/realtime/MixinEntityInsentient.java | 2 +- .../server/mixin/realtime/MixinEntityPlayer.java | 2 +- .../main/java/net/minecraft/server/EntityPlayer.java | 2 ++ sources/src/main/resources/mixins.akarin.core.json | 2 +- 11 files changed, 21 insertions(+), 14 deletions(-) rename sources/src/main/java/io/akarin/server/mixin/core/{MonsterEggGuardian.java => MixinItemMonsterEgg.java} (90%) diff --git a/sources/src/main/java/io/akarin/api/internal/Akari.java b/sources/src/main/java/io/akarin/api/internal/Akari.java index 3ce3daf9d..cfbe2fed0 100644 --- a/sources/src/main/java/io/akarin/api/internal/Akari.java +++ b/sources/src/main/java/io/akarin/api/internal/Akari.java @@ -17,6 +17,8 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import co.aikar.timings.Timing; import co.aikar.timings.Timings; import io.akarin.server.core.AkarinGlobalConfig; +import net.minecraft.server.Entity; +import net.minecraft.server.EntityTracker; import net.minecraft.server.MinecraftServer; import net.minecraft.server.Packet; import net.minecraft.server.PlayerConnection; @@ -51,6 +53,9 @@ public abstract class Akari { public AssignableThread(Runnable run) { super(run); } + public AssignableThread() { + super(); + } } public static class AssignableFactory implements ThreadFactory { diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MonsterEggGuardian.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinItemMonsterEgg.java similarity index 90% rename from sources/src/main/java/io/akarin/server/mixin/core/MonsterEggGuardian.java rename to sources/src/main/java/io/akarin/server/mixin/core/MixinItemMonsterEgg.java index d7c7e7307..23c182188 100644 --- a/sources/src/main/java/io/akarin/server/mixin/core/MonsterEggGuardian.java +++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinItemMonsterEgg.java @@ -11,8 +11,8 @@ import net.minecraft.server.Blocks; import net.minecraft.server.ItemMonsterEgg; @Mixin(value = ItemMonsterEgg.class, remap = false) -public abstract class MonsterEggGuardian { - @Redirect(method = "a", at = @At( +public abstract class MixinItemMonsterEgg { + @Redirect(method = "a*", at = @At( value = "FIELD", target = "net/minecraft/server/Blocks.MOB_SPAWNER:Lnet/minecraft/server/Block;", opcode = Opcodes.GETSTATIC diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java index 35c589e1f..d08f8fe62 100644 --- a/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java +++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java @@ -28,6 +28,7 @@ import net.minecraft.server.BlockPosition; import net.minecraft.server.CrashReport; import net.minecraft.server.CustomFunctionData; import net.minecraft.server.ITickable; +import net.minecraft.server.MCUtil; import net.minecraft.server.MinecraftServer; import net.minecraft.server.MojangStatisticsGenerator; import net.minecraft.server.PlayerList; diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java index f44f1045b..b3fca0e5e 100644 --- a/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java +++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinTimingHandler.java @@ -35,7 +35,7 @@ public abstract class MixinTimingHandler { return (Timing) this; } - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({"rawtypes", "unchecked"}) @Inject(method = "startTiming", at = @At("HEAD"), cancellable = true) public void onStartTiming(CallbackInfoReturnable ci) { if (!Akari.isPrimaryThread(false)) ci.setReturnValue(this); // Avoid modify any field diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinWorldServer.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinWorldServer.java index b1c864e61..28fcffe46 100644 --- a/sources/src/main/java/io/akarin/server/mixin/core/MixinWorldServer.java +++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinWorldServer.java @@ -9,7 +9,7 @@ import net.minecraft.server.WorldServer; @Mixin(value = WorldServer.class, remap = false) public abstract class MixinWorldServer implements IMixinLockProvider { - @Redirect(method = "doTick", at = @At( + @Redirect(method = "doTick()V", at = @At( value = "INVOKE", target = "net/minecraft/server/PlayerChunkMap.flush()V" )) diff --git a/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java b/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java index f0a11e531..af279754f 100644 --- a/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java +++ b/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java @@ -32,6 +32,12 @@ public abstract class OptimisticNetworkManager { @Overwrite // PAIL: trySendQueue private boolean m() { + // Akarin start - process slack packets + while (!Akari.slackPackets.isEmpty()) { + // Plugins that hook into those packets will notify their listeners later, so keep sync + dispatchPacket(Akari.slackPackets.poll(), null); + } + // Akarin end if (this.channel != null && this.channel.isOpen()) { if (this.packets.isEmpty()) { // return if the packet queue is empty so that the write lock by Anti-Xray doesn't affect the vanilla performance at all return true; @@ -55,12 +61,6 @@ public abstract class OptimisticNetworkManager { } finally { this.queueLock.readLock().unlock(); } - // Akarin start - process slack packets - while (!Akari.slackPackets.isEmpty()) { - // Plugins that hook into those packets will notify their listeners later, so keep sync - dispatchPacket(Akari.slackPackets.poll(), null); - } - // Akarin end } return true; // Return true if all packets were dispatched diff --git a/sources/src/main/java/io/akarin/server/mixin/optimization/PandaRedstoneWire.java b/sources/src/main/java/io/akarin/server/mixin/optimization/PandaRedstoneWire.java index f2c6373fc..71a50b66f 100644 --- a/sources/src/main/java/io/akarin/server/mixin/optimization/PandaRedstoneWire.java +++ b/sources/src/main/java/io/akarin/server/mixin/optimization/PandaRedstoneWire.java @@ -18,7 +18,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import io.akarin.api.internal.Akari; import net.minecraft.server.BaseBlockPosition; import net.minecraft.server.Block; import net.minecraft.server.BlockDiodeAbstract; diff --git a/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityInsentient.java b/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityInsentient.java index f62489b8b..010e7e6ab 100644 --- a/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityInsentient.java +++ b/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityInsentient.java @@ -42,7 +42,7 @@ public abstract class MixinEntityInsentient extends EntityLiving { super(world); } - @Redirect(method = "doTick", at = @At(value = "FIELD", target = ENTITY_LIVING_AGE_FIELD, opcode = Opcodes.PUTFIELD, ordinal = 0)) + @Redirect(method = "doTick()V", at = @At(value = "FIELD", target = ENTITY_LIVING_AGE_FIELD, opcode = Opcodes.PUTFIELD, ordinal = 0)) public void fixupEntityDespawnAge(EntityInsentient self, int modifier) { int ticks = (int) ((IMixinRealTimeTicking) self.getWorld()).getRealTimeTicks(); this.ticksFarFromPlayer += ticks; diff --git a/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityPlayer.java b/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityPlayer.java index 81999a088..927cc5757 100644 --- a/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityPlayer.java +++ b/sources/src/main/java/io/akarin/server/mixin/realtime/MixinEntityPlayer.java @@ -34,7 +34,7 @@ import net.minecraft.server.Entity; import net.minecraft.server.EntityPlayer; import net.minecraft.server.World; -@Mixin(value = EntityPlayer.class, remap = false) +@Mixin(value = EntityPlayer.class, remap = false, priority = 1001) public abstract class MixinEntityPlayer extends Entity { private static final String ENTITY_PLAYER_MP_PORTAL_COOLDOWN_FIELD = "Lnet/minecraft/entity/player/EntityPlayer;portalCooldown:I"; diff --git a/sources/src/main/java/net/minecraft/server/EntityPlayer.java b/sources/src/main/java/net/minecraft/server/EntityPlayer.java index c9c397375..c9a4de550 100644 --- a/sources/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/sources/src/main/java/net/minecraft/server/EntityPlayer.java @@ -2,6 +2,8 @@ package net.minecraft.server; import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; + +import io.akarin.api.internal.Akari; import io.netty.buffer.Unpooled; import java.util.ArrayDeque; // Paper import java.util.ArrayList; diff --git a/sources/src/main/resources/mixins.akarin.core.json b/sources/src/main/resources/mixins.akarin.core.json index 26335678d..1a13a1a97 100644 --- a/sources/src/main/resources/mixins.akarin.core.json +++ b/sources/src/main/resources/mixins.akarin.core.json @@ -26,8 +26,8 @@ "core.MixinChunkSection", "core.MixinAsyncCatcher", "core.MixinTimingHandler", - "core.MonsterEggGuardian", "core.MixinVersionCommand", + "core.MixinItemMonsterEgg", "core.MixinMinecraftServer", "core.MixinChunkIOExecutor", "core.MixinPlayerConnectionUtils",