mirror of
https://github.com/Minestom/Minestom.git
synced 2025-03-02 11:21:15 +01:00
Netty improvements
This commit is contained in:
parent
618fd2b536
commit
f307303758
@ -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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user