RateKickingConnection.java

net.minecraft.network.RateKickingConnection

信息

  • 全限定名:net.minecraft.network.RateKickingConnection
  • 类型:public class
  • 包:net.minecraft.network
  • 源码路径:src/main/java/net/minecraft/network/RateKickingConnection.java
  • 起始行号:L9
  • 继承:Connection
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L10
    • 说明:

      TODO

  • EXCEED_REASON

    • 类型: Component
    • 修饰符: private static final
    • 源码定位: L11
    • 说明:

      TODO

  • rateLimitPacketsPerSecond

    • 类型: int
    • 修饰符: private final
    • 源码定位: L12
    • 说明:

      TODO

内部类/嵌套类型

构造器

public RateKickingConnection(int rateLimitPacketsPerSecond) @ L14

  • 构造器名:RateKickingConnection
  • 源码定位:L14
  • 修饰符:public

参数:

  • rateLimitPacketsPerSecond: int

说明:

TODO

方法

下面的方法块按源码顺序生成。

protected void tickSecond() @ L19

  • 方法名:tickSecond
  • 源码定位:L19
  • 返回类型:void
  • 修饰符:protected

参数:

说明:

TODO

代码

public class RateKickingConnection extends Connection {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final Component EXCEED_REASON = Component.translatable("disconnect.exceeded_packet_rate");
    private final int rateLimitPacketsPerSecond;
 
    public RateKickingConnection(int rateLimitPacketsPerSecond) {
        super(PacketFlow.SERVERBOUND);
        this.rateLimitPacketsPerSecond = rateLimitPacketsPerSecond;
    }
 
    @Override
    protected void tickSecond() {
        super.tickSecond();
        float averageReceivedPackets = this.getAverageReceivedPackets();
        if (averageReceivedPackets > this.rateLimitPacketsPerSecond) {
            LOGGER.warn("Player exceeded rate-limit (sent {} packets per second)", averageReceivedPackets);
            this.send(new ClientboundDisconnectPacket(EXCEED_REASON), PacketSendListener.thenRun(() -> this.disconnect(EXCEED_REASON)));
            this.setReadOnly();
        }
    }
}

引用的其他类