Skip to content
This repository has been archived by the owner on Feb 25, 2022. It is now read-only.

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
bristermitten authored Jan 2, 2022
2 parents 0f0103e + 0358d85 commit 7e678c7
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 6 deletions.
43 changes: 37 additions & 6 deletions src/main/java/me/bristermitten/packetlimiter/PacketLimiter.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,29 @@
import com.comphenix.protocol.events.PacketEvent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.lang.reflect.InvocationTargetException;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;

public final class PacketLimiter extends JavaPlugin {
public final class PacketLimiter extends JavaPlugin implements Listener {
private static final int DEFAULT_MAX_PACKETS = 15;
private static final String DEBUG_PREFIX = "[Debug] ";
private final ConcurrentPlayerMap<Queue<PacketContainer>> packetQueue =
new ConcurrentPlayerMap<>(ConcurrentPlayerMap.PlayerKey.NAME);
private final ConcurrentPlayerMap<AtomicInteger> packetsSentInTick =
new ConcurrentPlayerMap<>(ConcurrentPlayerMap.PlayerKey.NAME);

private boolean debugEnabled = false;
private int maxPackets = DEFAULT_MAX_PACKETS;

private void debugLog(String format, Object arg1, Object arg2) {
if (getConfig().getBoolean("debug")) {
if (debugEnabled) {
var message = DEBUG_PREFIX + format;
getSLF4JLogger().info(message, arg1, arg2);
}
Expand All @@ -43,6 +49,9 @@ private Queue<PacketContainer> getPacketQueue(Player player) {
@Override
public void onEnable() {
saveDefaultConfig();

reloadConfig();

//noinspection ConstantConditions
getCommand("paperlagreload").setExecutor(new ReloadCommand(this));

Expand All @@ -54,7 +63,7 @@ public void onEnable() {
getPacketsSentInTick(player).set(0); // Reset packet counter for this tick
int i;
// re-send no more than the maximum packets
for (i = 0; i < getMaxPackets(); i++) {
for (i = 0; i < maxPackets; i++) {
final var packet = queue.poll();
if (packet == null) {
break;
Expand All @@ -70,6 +79,26 @@ public void onEnable() {
debugLog("Resent {} packets to {}", i, player.getName());
}
}), 0L, 1L);

Bukkit.getPluginManager().registerEvents(this, this);
}

@Override
public void reloadConfig() {
super.reloadConfig();

var config = getConfig();

debugEnabled = config.getBoolean("debug");

var $maxPackets = config.getInt("max-packets-per-tick", DEFAULT_MAX_PACKETS);

if ($maxPackets < 1) {
maxPackets = DEFAULT_MAX_PACKETS;
getSLF4JLogger().warn("Illegal value for option `max-packets-per-tick`: {}. Using default value of {}", $maxPackets, DEFAULT_MAX_PACKETS);
} else {
maxPackets = $maxPackets;
}
}

private void registerPacketListener(ProtocolManager protocolManager) {
Expand All @@ -79,7 +108,6 @@ public void onPacketSending(PacketEvent event) {
final var packet = event.getPacket();

final int sentInTick = getPacketsSentInTick(event.getPlayer()).incrementAndGet();
final int maxPackets = getMaxPackets();
if (sentInTick > maxPackets) {
event.setCancelled(true);
debugLog("Cancelling chunk packet to player {} {}", event.getPlayer(), packet);
Expand All @@ -89,7 +117,10 @@ public void onPacketSending(PacketEvent event) {
});
}

private int getMaxPackets() {
return getConfig().getInt("max-packets-per-tick", DEFAULT_MAX_PACKETS);
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e) {
var player = e.getPlayer();
packetQueue.remove(player);
packetsSentInTick.remove(player);
}
}
4 changes: 4 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ commands:
- plreload
description: Reload config for PaperLagFix
permission: paperlagfix.reload
permissions:
paperlagfix.reload:
description: Access to reload command
default: op

0 comments on commit 7e678c7

Please sign in to comment.