Fixes packet send

This commit is contained in:
Sotr
2018-07-13 21:35:10 +08:00
parent c50f6f2a68
commit a2c09040b4
11 changed files with 21 additions and 14 deletions

View File

@@ -17,6 +17,8 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
import co.aikar.timings.Timing; import co.aikar.timings.Timing;
import co.aikar.timings.Timings; import co.aikar.timings.Timings;
import io.akarin.server.core.AkarinGlobalConfig; 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.MinecraftServer;
import net.minecraft.server.Packet; import net.minecraft.server.Packet;
import net.minecraft.server.PlayerConnection; import net.minecraft.server.PlayerConnection;
@@ -51,6 +53,9 @@ public abstract class Akari {
public AssignableThread(Runnable run) { public AssignableThread(Runnable run) {
super(run); super(run);
} }
public AssignableThread() {
super();
}
} }
public static class AssignableFactory implements ThreadFactory { public static class AssignableFactory implements ThreadFactory {

View File

@@ -11,8 +11,8 @@ import net.minecraft.server.Blocks;
import net.minecraft.server.ItemMonsterEgg; import net.minecraft.server.ItemMonsterEgg;
@Mixin(value = ItemMonsterEgg.class, remap = false) @Mixin(value = ItemMonsterEgg.class, remap = false)
public abstract class MonsterEggGuardian { public abstract class MixinItemMonsterEgg {
@Redirect(method = "a", at = @At( @Redirect(method = "a*", at = @At(
value = "FIELD", value = "FIELD",
target = "net/minecraft/server/Blocks.MOB_SPAWNER:Lnet/minecraft/server/Block;", target = "net/minecraft/server/Blocks.MOB_SPAWNER:Lnet/minecraft/server/Block;",
opcode = Opcodes.GETSTATIC opcode = Opcodes.GETSTATIC

View File

@@ -28,6 +28,7 @@ import net.minecraft.server.BlockPosition;
import net.minecraft.server.CrashReport; import net.minecraft.server.CrashReport;
import net.minecraft.server.CustomFunctionData; import net.minecraft.server.CustomFunctionData;
import net.minecraft.server.ITickable; import net.minecraft.server.ITickable;
import net.minecraft.server.MCUtil;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.MojangStatisticsGenerator; import net.minecraft.server.MojangStatisticsGenerator;
import net.minecraft.server.PlayerList; import net.minecraft.server.PlayerList;

View File

@@ -9,7 +9,7 @@ import net.minecraft.server.WorldServer;
@Mixin(value = WorldServer.class, remap = false) @Mixin(value = WorldServer.class, remap = false)
public abstract class MixinWorldServer implements IMixinLockProvider { public abstract class MixinWorldServer implements IMixinLockProvider {
@Redirect(method = "doTick", at = @At( @Redirect(method = "doTick()V", at = @At(
value = "INVOKE", value = "INVOKE",
target = "net/minecraft/server/PlayerChunkMap.flush()V" target = "net/minecraft/server/PlayerChunkMap.flush()V"
)) ))

View File

@@ -32,6 +32,12 @@ public abstract class OptimisticNetworkManager {
@Overwrite // PAIL: trySendQueue @Overwrite // PAIL: trySendQueue
private boolean m() { 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.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 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; return true;
@@ -55,12 +61,6 @@ public abstract class OptimisticNetworkManager {
} finally { } finally {
this.queueLock.readLock().unlock(); 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 return true; // Return true if all packets were dispatched

View File

@@ -18,7 +18,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import io.akarin.api.internal.Akari;
import net.minecraft.server.BaseBlockPosition; import net.minecraft.server.BaseBlockPosition;
import net.minecraft.server.Block; import net.minecraft.server.Block;
import net.minecraft.server.BlockDiodeAbstract; import net.minecraft.server.BlockDiodeAbstract;

View File

@@ -42,7 +42,7 @@ public abstract class MixinEntityInsentient extends EntityLiving {
super(world); 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) { public void fixupEntityDespawnAge(EntityInsentient self, int modifier) {
int ticks = (int) ((IMixinRealTimeTicking) self.getWorld()).getRealTimeTicks(); int ticks = (int) ((IMixinRealTimeTicking) self.getWorld()).getRealTimeTicks();
this.ticksFarFromPlayer += ticks; this.ticksFarFromPlayer += ticks;

View File

@@ -34,7 +34,7 @@ import net.minecraft.server.Entity;
import net.minecraft.server.EntityPlayer; import net.minecraft.server.EntityPlayer;
import net.minecraft.server.World; 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 { public abstract class MixinEntityPlayer extends Entity {
private static final String ENTITY_PLAYER_MP_PORTAL_COOLDOWN_FIELD = "Lnet/minecraft/entity/player/EntityPlayer;portalCooldown:I"; private static final String ENTITY_PLAYER_MP_PORTAL_COOLDOWN_FIELD = "Lnet/minecraft/entity/player/EntityPlayer;portalCooldown:I";

View File

@@ -2,6 +2,8 @@ package net.minecraft.server;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import io.akarin.api.internal.Akari;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import java.util.ArrayDeque; // Paper import java.util.ArrayDeque; // Paper
import java.util.ArrayList; import java.util.ArrayList;

View File

@@ -26,8 +26,8 @@
"core.MixinChunkSection", "core.MixinChunkSection",
"core.MixinAsyncCatcher", "core.MixinAsyncCatcher",
"core.MixinTimingHandler", "core.MixinTimingHandler",
"core.MonsterEggGuardian",
"core.MixinVersionCommand", "core.MixinVersionCommand",
"core.MixinItemMonsterEgg",
"core.MixinMinecraftServer", "core.MixinMinecraftServer",
"core.MixinChunkIOExecutor", "core.MixinChunkIOExecutor",
"core.MixinPlayerConnectionUtils", "core.MixinPlayerConnectionUtils",