CavePVP-Stuff/cSpigot-master/spigot-server-Patches/0214-Work-to-reduce-the-number-of-packets-sent.patch
2023-05-01 19:59:40 +01:00

350 lines
17 KiB
Diff

From 74a187be395185d190917a7e2e5f6b30f04ede53 Mon Sep 17 00:00:00 2001
From: Alfie Cleveland <alfeh@me.com>
Date: Thu, 5 Oct 2017 10:25:54 +0100
Subject: [PATCH] Work to reduce the number of packets sent
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
index 8e05bc923..7c44c064e 100644
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
@@ -251,7 +251,11 @@ public class EntityTrackerEntry {
this.j = this.tracker.motX;
this.k = this.tracker.motY;
this.l = this.tracker.motZ;
- this.broadcast(new PacketPlayOutEntityVelocity(this.tracker.getId(), this.j, this.k, this.l));
+ /*
+ if (this.tracker instanceof EntityArrow || this.tracker instanceof EntityProjectile) {
+ this.broadcast(new PacketPlayOutEntityVelocity(this.tracker.getId(), this.j, this.k, this.l));
+ }
+ */
}
}
@@ -321,7 +325,11 @@ public class EntityTrackerEntry {
}
if (!cancelled) {
- this.broadcastIncludingSelf((Packet) (new PacketPlayOutEntityVelocity(this.tracker)));
+ if (this.tracker instanceof EntityPlayer) {
+ ((EntityPlayer) this.tracker).playerConnection.sendPacket(new PacketPlayOutEntityVelocity(this.tracker));
+ } else if (this.tracker instanceof EntityArrow || this.tracker instanceof EntityProjectile) {
+ // this.broadcast(new PacketPlayOutEntityVelocity(this.tracker));
+ }
}
// CraftBukkit end
@@ -435,26 +443,34 @@ public class EntityTrackerEntry {
return;
}
}
-
- // entityplayer.removeQueue.remove(Integer.valueOf(this.tracker.getId())); // MineHQ
+
+ // entityplayer.removeQueue.remove(Integer.valueOf(this.tracker.getId())); //
+ // MineHQ
// CraftBukkit end
-
+
this.trackedPlayers.add(entityplayer);
Packet packet = this.c();
-
+
// Spigot start - protocol patch
- if ( tracker instanceof EntityPlayer )
- {
- entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.addPlayer( (EntityPlayer) tracker ) );
-
- if ( !entityplayer.getName().equals( entityplayer.listName ) && entityplayer.playerConnection.networkManager.getVersion() > 28 ) { // Spigot Update - 20140927a // Spigot Update - 20141001a
- entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.updateDisplayName( (EntityPlayer) this.tracker ) );
+ // MineHQ start - tablist stuff
+ boolean isTarget18 = entityplayer.playerConnection.networkManager.getVersion() > 28; // MineHQ
+ boolean trackerInstanceOf = this.tracker instanceof EntityPlayer;
+ if (isTarget18) {
+ if (trackerInstanceOf) {
+ entityplayer.playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer((EntityPlayer) tracker));
+ entityplayer.playerConnection.sendPacket(PacketPlayOutPlayerInfo.updateDisplayName((EntityPlayer) this.tracker));
+ }
+ entityplayer.playerConnection.sendPacket(packet);
+ if (trackerInstanceOf && SpigotConfig.onlyCustomTab) entityplayer.playerConnection.sendPacket(PacketPlayOutPlayerInfo.removePlayer((EntityPlayer) tracker));
+ } else {
+ if (tracker instanceof EntityPlayer && !SpigotConfig.onlyCustomTab) { entityplayer.playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer((EntityPlayer) tracker));
}
+
+ entityplayer.playerConnection.sendPacket(packet);
}
+ // MineHQ end
// Spigot end
- entityplayer.playerConnection.sendPacket(packet);
-
if (!this.tracker.getDataWatcher().d()) {
// MineHQ start
PacketPlayOutEntityMetadata metadataPacket = new PacketPlayOutEntityMetadata(this.tracker.getId(), this.tracker.getDataWatcher(), true);
@@ -468,24 +484,6 @@ public class EntityTrackerEntry {
}
// MineHQ end
- // MineHQ start
- /*
- if (this.tracker instanceof EntityLiving) {
- AttributeMapServer attributemapserver = (AttributeMapServer) ((EntityLiving) this.tracker).getAttributeMap();
- Collection collection = attributemapserver.c();
-
- // CraftBukkit start - If sending own attributes send scaled health instead of current maximum health
- if (this.tracker.getId() == entityplayer.getId()) {
- ((EntityPlayer) this.tracker).getBukkitEntity().injectScaledMaxHealth(collection, false);
- }
- // CraftBukkit end
- if (!collection.isEmpty()) {
- entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateAttributes(this.tracker.getId(), collection));
- }
- }
- */
- // MineHQ end
-
this.j = this.tracker.motX;
this.k = this.tracker.motY;
this.l = this.tracker.motZ;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9abe8a94b..74ee10cf4 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -729,6 +729,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
// if (i == 0 || this.getAllowNether()) {
WorldServer worldserver = this.worlds.get(i);
+ if (!worldserver.checkTicking()) continue; // MineHQ
this.methodProfiler.a(worldserver.getWorldData().getName());
this.methodProfiler.a("pools");
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index fee969618..fc0507d6e 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -344,6 +344,8 @@ public abstract class PlayerList {
}
// CraftBukkit end
+ if (!SpigotConfig.playerListPackets) return; // MineHQ
+
// CraftBukkit start - sendAll above replaced with this loop
PacketPlayOutPlayerInfo packet = PacketPlayOutPlayerInfo.addPlayer( entityplayer ); // Spigot - protocol patch
PacketPlayOutPlayerInfo displayPacket = PacketPlayOutPlayerInfo.updateDisplayName( entityplayer ); // Spigot Update - 20140927a
@@ -423,6 +425,7 @@ public abstract class PlayerList {
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) {
+ if (!SpigotConfig.playerListPackets) continue; // MineHQ
entityplayer1.playerConnection.sendPacket(packet);
} else {
entityplayer1.getBukkitEntity().removeDisconnectingPlayer(entityplayer.getBukkitEntity());
@@ -489,7 +492,6 @@ public abstract class PlayerList {
public EntityPlayer processLogin(GameProfile gameprofile, EntityPlayer player) { // CraftBukkit - added EntityPlayer
UUID uuid = EntityHuman.a(gameprofile);
- ArrayList arraylist = Lists.newArrayList();
EntityPlayer entityplayer;
@@ -920,11 +922,13 @@ public abstract class PlayerList {
// Spigot start
try
{
- if ( !players.isEmpty() )
+ if ( !players.isEmpty() && SpigotConfig.updatePingOnTablist)
{
currentPing = ( currentPing + 1 ) % this.players.size();
EntityPlayer player = (EntityPlayer) this.players.get( currentPing );
- if ( player.lastPing == -1 || Math.abs( player.ping - player.lastPing ) > 20 )
+ int oldPingToBars = pingToBars(player.lastPing);
+ int newPingToBars = pingToBars(player.ping);
+ if ( player.lastPing == -1 || oldPingToBars != newPingToBars )
{
Packet packet = PacketPlayOutPlayerInfo.updatePing( player ); // Spigot - protocol patch
for ( EntityPlayer splayer : (List<EntityPlayer>) this.players )
@@ -943,6 +947,18 @@ public abstract class PlayerList {
// Spigot end
}
+ // MineHQ start
+ private int pingToBars(int ping) {
+ if (ping < 0) return 5;
+ else if (ping < 150) return 0;
+ else if (ping < 300) return 1;
+ else if (ping < 600) return 2;
+ else if (ping < 1_000) return 3;
+ else if (ping < Short.MAX_VALUE) return 4;
+ else return 5;
+ }
+ // MineHQ end
+
public void sendAll(Packet packet) {
for (int i = 0; i < this.players.size(); ++i) {
((EntityPlayer) this.players.get(i)).playerConnection.sendPacket(packet);
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index ef249eebd..6b76b4e77 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -12,7 +12,7 @@ import java.util.TreeSet;
import net.minecraft.util.com.google.common.collect.Lists;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-
+import org.bukkit.Bukkit;
// CraftBukkit start
import org.bukkit.WeatherType;
import org.bukkit.block.BlockState;
@@ -45,6 +45,8 @@ public class WorldServer extends World {
public List V = new ArrayList();
private IntHashMap entitiesById;
+ private boolean ticking = false;
+
// CraftBukkit start
public final int dimension;
@@ -78,6 +80,20 @@ public class WorldServer extends World {
((ScoreboardServer) this.scoreboard).a(persistentscoreboard);
}
+ public boolean checkTicking() {
+ if (this.ticking && this.players.isEmpty()) {
+ this.ticking = false;
+ Bukkit.getLogger().info("Not ticking world " + this.getWorld().getName() + ". Unloading spawn...");
+ this.keepSpawnInMemory = false;
+ } else if (!this.players.isEmpty() && !this.ticking) {
+ this.ticking = true;
+ Bukkit.getLogger().info("Ticking world " + this.getWorld().getName() + ". Loading spawn...");
+ this.keepSpawnInMemory = true;
+ }
+
+ return this.ticking;
+ }
+
// CraftBukkit start
@Override
public TileEntity getTileEntity(int i, int j, int k) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 2de043843..539d86b49 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -713,7 +713,7 @@ public class CraftWorld implements World {
public List<Player> getPlayers() {
List<Player> list = new ArrayList<Player>();
- for (Object o : world.entityList) {
+ for (Object o : world.players) {
if (o instanceof net.minecraft.server.Entity) {
net.minecraft.server.Entity mcEnt = (net.minecraft.server.Entity) o;
Entity bukkitEntity = mcEnt.getBukkitEntity();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 0d66e7e1b..47aedf899 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -34,6 +34,7 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.messaging.StandardMessenger;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.util.Vector;
+import org.spigotmc.SpigotConfig;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -219,8 +220,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
EntityPlayer player = (EntityPlayer) playerObj;
if (player.playerConnection != null) {
- player.playerConnection.sendPacket(removeTabPacket);
- player.playerConnection.sendPacket(addThisTabPacket);
+ if (SpigotConfig.playerListPackets) player.playerConnection.sendPacket(removeTabPacket);
+ if (SpigotConfig.playerListPackets || player.playerConnection.networkManager.getVersion() > 27) player.playerConnection.sendPacket(addThisTabPacket);
}
}
@@ -233,6 +234,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
trackerEntry.broadcast(destroyPacket);
trackerEntry.broadcast(spawnPacket);
}
+
+ PacketPlayOutPlayerInfo removeThisTabPacket = PacketPlayOutPlayerInfo.removePlayer(getHandle());
+ for (Object playerObj : MinecraftServer.getServer().getPlayerList().players) {
+ EntityPlayer player = (EntityPlayer) playerObj;
+
+ if (player.playerConnection != null) {
+ if (!SpigotConfig.playerListPackets && player.playerConnection.networkManager.getVersion() > 27) player.playerConnection.sendPacket(removeThisTabPacket);
+ }
+ }
}
@Override
@@ -274,6 +284,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
trackerEntry.broadcast(destroyPacket);
trackerEntry.broadcast(spawnPacket);
}
+
+ PacketPlayOutPlayerInfo removeThisTabPacket = PacketPlayOutPlayerInfo.removePlayer(getHandle());
+ for (Object playerObj : MinecraftServer.getServer().getPlayerList().players) {
+ EntityPlayer player = (EntityPlayer) playerObj;
+ if (!SpigotConfig.playerListPackets) {
+ player.playerConnection.sendPacket(removeThisTabPacket);
+ }
+ }
}
// MineHQ end
@@ -307,6 +325,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
getHandle().listName = name;
+ if (!SpigotConfig.playerListPackets) return; // MineHQ
+
// Change the name on the client side
// Spigot start - protocol patch
String temp = getHandle().listName;
@@ -1067,7 +1087,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
entry.updatePlayer(getHandle());
}
- getHandle().playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer( ( (CraftPlayer) player ).getHandle ())); // Spigot - protocol patch
+ // getHandle().playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer( ( (CraftPlayer) player ).getHandle ())); // Spigot - protocol patch // MineHQ - unneeded
}
public void removeDisconnectingPlayer(Player player) {
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
index 15f7bbb2c..bccf0c4b3 100644
--- a/src/main/java/org/spigotmc/SpigotConfig.java
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
@@ -525,15 +525,24 @@ public class SpigotConfig
private static void cacheChunkMaps() {
cacheChunkMaps = getBoolean("settings.cache-chunk-maps", false);
}
+
+ public static boolean disableSaving;
+ private static void disableSaving() {
+ disableSaving = getBoolean("settings.disableSaving", false);
+ }
+
+ public static boolean playerListPackets;
+ public static boolean updatePingOnTablist;
+ public static boolean onlyCustomTab;
+ private static void packets() {
+ onlyCustomTab = getBoolean("settings.only-custom-tab", false);
+ playerListPackets = !onlyCustomTab && !getBoolean("settings.disable.player-list-packets", false);
+ updatePingOnTablist = !onlyCustomTab && !getBoolean("settings.disable.ping-update-packets", false);
+ }
// MineHQ end
public static boolean reduceArmorDamage;
private static void reduceArmorDamage() {
reduceArmorDamage = getBoolean("settings.reduce-armor-damage", false);
}
-
- public static boolean disableSaving;
- private static void disableSaving() {
- disableSaving = getBoolean("settings.disableSaving", false);
- }
}
--
2.13.5 (Apple Git-94)