Compute the tags packet only once to improve performance on high connection traffic

This commit is contained in:
themode 2020-12-15 06:21:59 +01:00
parent 5c9fd9294a
commit 69adb67394
2 changed files with 27 additions and 9 deletions

View File

@ -23,7 +23,6 @@ import net.minestom.server.event.item.ItemDropEvent;
import net.minestom.server.event.item.ItemUpdateStateEvent;
import net.minestom.server.event.item.PickupExperienceEvent;
import net.minestom.server.event.player.*;
import net.minestom.server.gamedata.tags.TagManager;
import net.minestom.server.instance.Chunk;
import net.minestom.server.instance.Instance;
import net.minestom.server.instance.block.CustomBlock;
@ -299,18 +298,19 @@ public class Player extends LivingEntity implements CommandSender {
}
// Recipes end
// Send server tags
TagsPacket tags = new TagsPacket();
TagManager tagManager = MinecraftServer.getTagManager();
tagManager.addRequiredTagsToPacket(tags);
// Tags start
{
TagsPacket tags = TagsPacket.getRequiredTagsPacket();
UpdateTagListEvent event = new UpdateTagListEvent(tags);
callEvent(UpdateTagListEvent.class, event);
UpdateTagListEvent event = new UpdateTagListEvent(tags);
callEvent(UpdateTagListEvent.class, event);
getPlayerConnection().sendPacket(tags);
this.playerConnection.sendPacket(tags);
}
// Tags end
// Some client update
playerConnection.sendPacket(getPropertiesPacket()); // Send default properties
this.playerConnection.sendPacket(getPropertiesPacket()); // Send default properties
refreshHealth(); // Heal and send health packet
refreshAbilities(); // Send abilities packet
getInventory().update();

View File

@ -1,5 +1,6 @@
package net.minestom.server.network.packet.server.play;
import net.minestom.server.MinecraftServer;
import net.minestom.server.gamedata.tags.Tag;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
@ -20,6 +21,12 @@ public class TagsPacket implements ServerPacket {
public List<Tag> fluidTags = new LinkedList<>();
public List<Tag> entityTags = new LinkedList<>();
private static final TagsPacket REQUIRED_TAGS_PACKET = new TagsPacket();
static {
MinecraftServer.getTagManager().addRequiredTagsToPacket(REQUIRED_TAGS_PACKET);
}
@Override
public void write(@NotNull BinaryWriter writer) {
writeTags(writer, blockTags, name -> Registries.getBlock(name).ordinal());
@ -48,4 +55,15 @@ public class TagsPacket implements ServerPacket {
public int getId() {
return ServerPacketIdentifier.TAGS;
}
/**
* Gets the {@link TagsPacket} sent to every {@link net.minestom.server.entity.Player}
* on login.
*
* @return the default tags packet
*/
@NotNull
public static TagsPacket getRequiredTagsPacket() {
return REQUIRED_TAGS_PACKET;
}
}