Optimize Network Manager to not need synchronization
Removes synchronization from sending packets
Makes normal packet sends no longer need to be wrapped and queued like it use to work.
Adds more packet queue immunities on top of keep alive to let the following scenarios go out
without delay:
- Keep Alive
- Chat
- Kick
- All of the packets during the Player Joined World event
Hoping that latter one helps join timeout issues more too for slow connections.
Removes processing packet queue off of main thread
- for the few cases where it is allowed, order is not necessary nor
should it even be happening concurrently in first place (handshaking/login/status)
Ensures packets sent asynchronously are dispatched on main thread
This helps ensure safety for ProtocolLib as packet listeners
are commonly accessing world state. This will allow you to schedule
a packet to be sent async, but itll be dispatched sync for packet
listeners to process.
This should solve some deadlock risks
This may provide a decent performance improvement because thread synchronization incurs a cache reset
so by avoiding ever entering a synchronized block, we get to avoid that, and packet sending is a really
hot activity.
This commit is contained in:
@@ -14,7 +14,7 @@ Adds flying monsters to control ghast and phantoms
|
||||
Adds villagers as separate config
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BehaviorController.java b/src/main/java/net/minecraft/server/BehaviorController.java
|
||||
index a1883eba63..7c6e687707 100644
|
||||
index a1883eba63e..7c6e687707c 100644
|
||||
--- a/src/main/java/net/minecraft/server/BehaviorController.java
|
||||
+++ b/src/main/java/net/minecraft/server/BehaviorController.java
|
||||
@@ -0,0 +0,0 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
|
||||
@@ -26,7 +26,7 @@ index a1883eba63..7c6e687707 100644
|
||||
return this.g.contains(activity);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index fd6dad8437..067420f195 100644
|
||||
index fd6dad8437b..067420f1955 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -68,7 +68,7 @@ index fd6dad8437..067420f195 100644
|
||||
// Paper start
|
||||
return this.pushedByWater();
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java
|
||||
index b40c8d2f83..4eda130750 100644
|
||||
index b40c8d2f83a..4eda130750f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityCreature.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityCreature.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.event.entity.EntityUnleashEvent;
|
||||
@@ -80,7 +80,7 @@ index b40c8d2f83..4eda130750 100644
|
||||
protected EntityCreature(EntityTypes<? extends EntityCreature> entitytypes, World world) {
|
||||
super(entitytypes, world);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
index 6d53254f83..5aca7a9131 100644
|
||||
index 6d53254f838..5aca7a91317 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
@@ -111,7 +111,7 @@ index 6d53254f83..5aca7a9131 100644
|
||||
if (this.isPassenger() && this.getVehicle() instanceof EntityInsentient) {
|
||||
EntityInsentient entityinsentient = (EntityInsentient) this.getVehicle();
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 252b3c5929..38f666bb11 100644
|
||||
index 252b3c59294..38f666bb115 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -124,7 +124,7 @@ index 252b3c5929..38f666bb11 100644
|
||||
public float ba;
|
||||
public float bb;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java
|
||||
index 6d4d41c88c..193dbfc5f6 100644
|
||||
index 6d4d41c88c2..193dbfc5f68 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLlama.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLlama.java
|
||||
@@ -0,0 +0,0 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
@@ -136,7 +136,7 @@ index 6d4d41c88c..193dbfc5f6 100644
|
||||
return this.bJ != null;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PathfinderGoal.java b/src/main/java/net/minecraft/server/PathfinderGoal.java
|
||||
index f22f12eeb0..bdb90a3466 100644
|
||||
index f22f12eeb0b..bdb90a34663 100644
|
||||
--- a/src/main/java/net/minecraft/server/PathfinderGoal.java
|
||||
+++ b/src/main/java/net/minecraft/server/PathfinderGoal.java
|
||||
@@ -0,0 +0,0 @@ public abstract class PathfinderGoal {
|
||||
@@ -152,7 +152,7 @@ index f22f12eeb0..bdb90a3466 100644
|
||||
public void e() {}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java b/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java
|
||||
index 41fb166ce0..e93129f0b2 100644
|
||||
index 41fb166ce0a..e93129f0b28 100644
|
||||
--- a/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java
|
||||
+++ b/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java
|
||||
@@ -0,0 +0,0 @@ import java.util.EnumSet;
|
||||
@@ -193,7 +193,7 @@ index 41fb166ce0..e93129f0b2 100644
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
|
||||
index 44bb18c594..935136771e 100644
|
||||
index 44bb18c5945..935136771e7 100644
|
||||
--- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
|
||||
+++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
|
||||
@@ -0,0 +0,0 @@ public class PathfinderGoalSelector {
|
||||
@@ -237,7 +237,7 @@ index 44bb18c594..935136771e 100644
|
||||
this.d.stream().filter((pathfindergoalwrapped) -> {
|
||||
return pathfindergoalwrapped.j() == pathfindergoal;
|
||||
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalWrapped.java b/src/main/java/net/minecraft/server/PathfinderGoalWrapped.java
|
||||
index 5a8c60ad90..29657fed75 100644
|
||||
index 5a8c60ad909..29657fed751 100644
|
||||
--- a/src/main/java/net/minecraft/server/PathfinderGoalWrapped.java
|
||||
+++ b/src/main/java/net/minecraft/server/PathfinderGoalWrapped.java
|
||||
@@ -0,0 +0,0 @@ public class PathfinderGoalWrapped extends PathfinderGoal {
|
||||
@@ -249,7 +249,7 @@ index 5a8c60ad90..29657fed75 100644
|
||||
return this.c;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 9e161746f2..228e6e9ab9 100644
|
||||
index 9e161746f2a..228e6e9ab99 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -266,7 +266,7 @@ index 9e161746f2..228e6e9ab9 100644
|
||||
public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot
|
||||
|
||||
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
index 92601c581c..d873b8cf3a 100644
|
||||
index 92601c581cf..d873b8cf3ae 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -0,0 +0,0 @@ package org.spigotmc;
|
||||
@@ -653,7 +653,7 @@ index 92601c581c..d873b8cf3a 100644
|
||||
isActive = false;
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 5e932a5d97..9d706626bf 100644
|
||||
index 5e932a5d979..9d706626bf2 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class SpigotWorldConfig
|
||||
|
||||
Reference in New Issue
Block a user