Implement proper paper workaround for initializing viewers of a tracker entry
Avoids trouble down the line...
This commit is contained in:
1 parent
a616e18488
commit
7fda292b69
3 files changed
+36
-7
No files matched your search
+2
-3
@@ -4,7 +4,6 @@ import com.bergerkiller.mountiplex.reflection.declarations.Template;
|
||||
import com.bergerkiller.generated.net.minecraft.world.entity.EntityHandle;
|
||||
import org.bukkit.entity.Player;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Instance wrapper handle for type <b>net.minecraft.server.level.EntityTrackerEntry</b>.
|
||||
@@ -36,7 +35,7 @@ public abstract class EntityTrackerEntryHandle extends Template.Handle {
|
||||
public abstract EntityTrackerEntryStateHandle getState();
|
||||
public abstract EntityHandle getEntity();
|
||||
public abstract void setEntity(EntityHandle entity);
|
||||
public abstract void scanPlayers(List<Player> playerList);
|
||||
public abstract void updateViewers();
|
||||
public abstract void removeViewer(Player player);
|
||||
public abstract void updatePlayer(Player player);
|
||||
public abstract void hideForAll();
|
||||
@@ -82,7 +81,7 @@ public abstract class EntityTrackerEntryHandle extends Template.Handle {
|
||||
public final Template.Method.Converted<Void> setState = new Template.Method.Converted<Void>();
|
||||
public final Template.Method.Converted<EntityHandle> getEntity = new Template.Method.Converted<EntityHandle>();
|
||||
public final Template.Method.Converted<Void> setEntity = new Template.Method.Converted<Void>();
|
||||
public final Template.Method.Converted<Void> scanPlayers = new Template.Method.Converted<Void>();
|
||||
public final Template.Method<Void> updateViewers = new Template.Method<Void>();
|
||||
public final Template.Method.Converted<Void> removeViewer = new Template.Method.Converted<Void>();
|
||||
public final Template.Method.Converted<Void> updatePlayer = new Template.Method.Converted<Void>();
|
||||
public final Template.Method<Void> hideForAll = new Template.Method<Void>();
|
||||
|
||||
@@ -263,7 +263,7 @@ public class CommonEntity<T extends org.bukkit.entity.Entity> extends ExtendedEn
|
||||
newEntry.updatePlayer(previousViewer);
|
||||
}
|
||||
} else {
|
||||
newEntry.scanPlayers(getWorld().getPlayers());
|
||||
newEntry.updateViewers();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+33
-3
@@ -299,11 +299,33 @@ class EntityTrackerEntry {
|
||||
entry#trackerEntryEntity = entity;
|
||||
}
|
||||
|
||||
public void updateViewers() {
|
||||
Entity entity = instance#entity;
|
||||
#if exists net.minecraft.server.level.PlayerChunkMap$EntityTracker final void updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<net.minecraft.server.level.EntityPlayer> newTrackerCandidates);
|
||||
// Paper after some optimizations were made to tracking
|
||||
#require net.minecraft.server.level.PlayerChunkMap$EntityTracker final void paperUpdatePlayers:updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<net.minecraft.server.level.EntityPlayer> newTrackerCandidates);
|
||||
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet players = entity.getPlayersInTrackRange();
|
||||
instance#paperUpdatePlayers(players);
|
||||
#else
|
||||
// Spigot / old paper
|
||||
#if version >= 1.17
|
||||
WorldServer world = (WorldServer) entity.level;
|
||||
#else
|
||||
WorldServer world = (WorldServer) entity.world;
|
||||
#endif
|
||||
#if version >= 1.18
|
||||
java.util.List playersOnWorld = world.players();
|
||||
instance.updatePlayers(playersOnWorld);
|
||||
#else
|
||||
java.util.List playersOnWorld = world.getPlayers();
|
||||
instance.track(playersOnWorld);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#if version >= 1.18
|
||||
public void scanPlayers:updatePlayers((List<org.bukkit.entity.Player>) List<EntityPlayer> playerList);
|
||||
public void removeViewer:removePlayer((org.bukkit.entity.Player) EntityPlayer player);
|
||||
#else
|
||||
public void scanPlayers:track((List<org.bukkit.entity.Player>) List<EntityPlayer> playerList);
|
||||
public void removeViewer:clear((org.bukkit.entity.Player) EntityPlayer player);
|
||||
#endif
|
||||
#else
|
||||
@@ -323,7 +345,15 @@ class EntityTrackerEntry {
|
||||
instance#entity = entity;
|
||||
}
|
||||
|
||||
public void scanPlayers((List<org.bukkit.entity.Player>) List<EntityHuman> playerList);
|
||||
public void updateViewers() {
|
||||
Entity entity = instance#entity;
|
||||
|
||||
// Spigot / old paper
|
||||
WorldServer world = (WorldServer) entity.world;
|
||||
java.util.List playersOnWorld = world.players;
|
||||
instance.scanPlayers(playersOnWorld);
|
||||
}
|
||||
|
||||
public void removeViewer:a((org.bukkit.entity.Player) EntityPlayer player);
|
||||
#endif
|
||||
|
||||
|
||||
Reference in new issue
Block a user