Netty improvements

This commit is contained in:
Eoghanmc22 2020-11-18 20:28:56 -05:00
parent 618fd2b536
commit f307303758
8 changed files with 59 additions and 13 deletions

View File

@ -98,6 +98,7 @@ public final class MinecraftServer {
private static PacketListenerManager packetListenerManager;
private static PacketProcessor packetProcessor;
private static NettyServer nettyServer;
private static boolean processNettyErrors = true;
// In-Game Manager
private static ConnectionManager connectionManager;
@ -599,6 +600,25 @@ public final class MinecraftServer {
return updateManager;
}
/**
* Gets if the server should process netty errors and other unnecessary netty events
*
* @return should process netty errors
*/
public static boolean processingNettyErrors() {
return processNettyErrors;
}
/**
* Sets if the server should process netty errors and other unnecessary netty events
* false is faster
*
* @param processNettyErrors should process netty errors
*/
public static void setShouldProcessNettyErrors(boolean processNettyErrors) {
MinecraftServer.processNettyErrors = processNettyErrors;
}
/**
* Starts the server.
* <p>

View File

@ -514,8 +514,12 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
final float value = instances[i].getBaseValue();
property.instance = instances[i];
property.attribute = instances[i].getAttribute();
property.value = value;
if (getEntityType() == EntityType.PLAYER && instances[i].getAttribute().equals(Attributes.MOVEMENT_SPEED))
property.value = ((Player) this).getWalkingSpeed();
else
property.value = value;
properties[i] = property;
}

View File

@ -32,6 +32,8 @@ public class ClientChannel extends SimpleChannelInboundHandler<InboundPacket> {
public void channelRead0(ChannelHandlerContext ctx, InboundPacket packet) {
try {
packetProcessor.process(ctx, packet);
} catch (Exception e) {
e.printStackTrace();
} finally {
final int availableBytes = packet.body.readableBytes();

View File

@ -13,6 +13,7 @@ public class LoginSuccessPacket implements ServerPacket {
public String username;
public LoginSuccessPacket(UUID uuid, String username) {
System.out.println(username + " logged in");
this.uuid = uuid;
this.username = username;
}

View File

@ -1,7 +1,5 @@
package net.minestom.server.network.packet.server.play;
import java.util.Collection;
import net.minestom.server.attribute.Attribute;
import net.minestom.server.attribute.AttributeInstance;
import net.minestom.server.attribute.AttributeModifier;
@ -10,6 +8,8 @@ import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import net.minestom.server.utils.binary.BinaryWriter;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
public class EntityPropertiesPacket implements ServerPacket {
public int entityId;
@ -37,10 +37,6 @@ public class EntityPropertiesPacket implements ServerPacket {
public AttributeInstance instance;
private void write(BinaryWriter writer) {
if (instance != null) {
attribute = instance.getAttribute();
value = instance.getBaseValue();
}
float maxValue = attribute.getMaxValue();
// Bypass vanilla limit client-side if needed (by sending the max value allowed)

View File

@ -2,6 +2,7 @@ package net.minestom.server.network.player;
import io.netty.channel.Channel;
import io.netty.channel.socket.SocketChannel;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.PlayerSkin;
import net.minestom.server.extras.mojangAuth.Decrypter;
import net.minestom.server.extras.mojangAuth.Encrypter;
@ -92,10 +93,26 @@ public class NettyPlayerConnection extends PlayerConnection {
@Override
public void sendPacket(@NotNull ServerPacket serverPacket) {
if (shouldSendPacket(serverPacket)) {
if (getPlayer() != null) {
channel.write(serverPacket); // Flush on player update
if (getPlayer() != null) { // Flush on player update
if (MinecraftServer.processingNettyErrors())
channel.write(serverPacket).addListener(future -> {
if (!future.isSuccess()) {
future.cause().printStackTrace();
}
});
else {
channel.write(serverPacket, channel.voidPromise());
}
} else {
channel.writeAndFlush(serverPacket);
if (MinecraftServer.processingNettyErrors())
channel.writeAndFlush(serverPacket).addListener(future -> {
if (!future.isSuccess()) {
future.cause().printStackTrace();
}
});
else {
channel.writeAndFlush(serverPacket, channel.voidPromise());
}
}
}
}

View File

@ -91,7 +91,11 @@ public final class PacketUtils {
writer = new BinaryWriter(BufUtils.getBuffer(true, 40_000));
else
writer = new BinaryWriter(BufUtils.getBuffer(true));
packet.write(writer);
try {
packet.write(writer);
} catch (Exception e) {
e.printStackTrace();
}
return writer.getBuffer();
}

View File

@ -4,7 +4,6 @@ import demo.blocks.BurningTorchBlock;
import demo.blocks.StoneBlock;
import demo.blocks.UpdatableBlockDemo;
import demo.commands.*;
import io.netty.util.ResourceLeakDetector;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandManager;
import net.minestom.server.extras.optifine.OptifineSupport;
@ -20,10 +19,13 @@ import net.minestom.server.utils.time.UpdateOption;
public class Main {
public static void main(String[] args) {
ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID);
//System.setProperty("io.netty.leakDetection.targetRecords", "10");
//ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID);
MinecraftServer minecraftServer = MinecraftServer.init();
MinecraftServer.setShouldProcessNettyErrors(false);
final NettyServer nettyServer = MinecraftServer.getNettyServer();
nettyServer.setWriteLimit(500_000);
nettyServer.setWriteLimit(500_000);