split name metadata to avoid creating unnecessary lists

This commit is contained in:
Pyrbu 2023-06-26 17:50:32 +02:00
parent d22a8152e0
commit e5a62ed952
5 changed files with 22 additions and 34 deletions

@ -4,8 +4,6 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose; import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import java.util.Collection;
/** /**
* 1.8 <a href="https://wiki.vg/index.php?title=Entity_metadata&oldid=7415">...</a> * 1.8 <a href="https://wiki.vg/index.php?title=Entity_metadata&oldid=7415">...</a>
* 1.9 <a href="https://wiki.vg/index.php?title=Entity_metadata&oldid=7968">...</a> * 1.9 <a href="https://wiki.vg/index.php?title=Entity_metadata&oldid=7968">...</a>
@ -23,7 +21,8 @@ public interface MetadataFactory {
EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat); EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat);
EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra); EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra);
EntityData silent(boolean enabled); EntityData silent(boolean enabled);
Collection<EntityData> name(Component name); EntityData name(Component name);
EntityData nameShown();
EntityData noGravity(); EntityData noGravity();
EntityData pose(EntityPose pose); EntityData pose(EntityPose pose);
EntityData shaking(boolean enabled); EntityData shaking(boolean enabled);

@ -5,16 +5,12 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.util.adventure.AdventureSerializer; import com.github.retrooper.packetevents.util.adventure.AdventureSerializer;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import java.util.Collection;
import java.util.Optional; import java.util.Optional;
public class V1_13MetadataFactory extends V1_11MetadataFactory { public class V1_13MetadataFactory extends V1_11MetadataFactory {
@Override @Override
public Collection<EntityData> name(Component name) { public EntityData name(Component name) {
return list( return newEntityData(2, EntityDataTypes.OPTIONAL_COMPONENT, Optional.of(AdventureSerializer.getGsonSerializer().serialize(name)));
newEntityData(2, EntityDataTypes.OPTIONAL_COMPONENT, Optional.of(AdventureSerializer.getGsonSerializer().serialize(name))),
newEntityData(3, EntityDataTypes.BOOLEAN, true)
);
} }
@Override @Override

@ -8,7 +8,6 @@ import com.github.retrooper.packetevents.util.adventure.AdventureSerializer;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
public class V1_8MetadataFactory implements MetadataFactory { public class V1_8MetadataFactory implements MetadataFactory {
@ -23,11 +22,13 @@ public class V1_8MetadataFactory implements MetadataFactory {
} }
@Override @Override
public Collection<EntityData> name(Component name) { public EntityData name(Component name) {
return list( return newEntityData(2, EntityDataTypes.STRING, AdventureSerializer.getLegacyGsonSerializer().serialize(name));
newEntityData(2, EntityDataTypes.STRING, AdventureSerializer.getLegacyGsonSerializer().serialize(name)), }
newEntityData(3, EntityDataTypes.BYTE, (byte) 1)
); @Override
public EntityData nameShown() {
return newEntityData(3, EntityDataTypes.BYTE, (byte) 1);
} }
@Override @Override
@ -80,11 +81,4 @@ public class V1_8MetadataFactory implements MetadataFactory {
protected <T> EntityData newEntityData(int index, EntityDataType<T> type, T value) { protected <T> EntityData newEntityData(int index, EntityDataType<T> type, T value) {
return new EntityData(index, type, value); return new EntityData(index, type, value);
} }
@SafeVarargs
protected final <T> List<T> list(T... items) {
ArrayList<T> list = new ArrayList<>(items.length);
for (int i = 0; i < items.length; i++) list.add(i, items[i]);
return list;
}
} }

@ -5,8 +5,6 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.util.adventure.AdventureSerializer; import com.github.retrooper.packetevents.util.adventure.AdventureSerializer;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import java.util.Collection;
public class V1_9MetadataFactory extends V1_8MetadataFactory { public class V1_9MetadataFactory extends V1_8MetadataFactory {
@Override @Override
public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) { public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) {
@ -24,11 +22,13 @@ public class V1_9MetadataFactory extends V1_8MetadataFactory {
} }
@Override @Override
public Collection<EntityData> name(Component name) { public EntityData name(Component name) {
return list( return newEntityData(2, EntityDataTypes.STRING, AdventureSerializer.getGsonSerializer().serialize(name));
newEntityData(2, EntityDataTypes.STRING, AdventureSerializer.getGsonSerializer().serialize(name)), }
newEntityData(3, EntityDataTypes.BOOLEAN, true)
); @Override
public EntityData nameShown() {
return newEntityData(3, EntityDataTypes.BOOLEAN, true);
} }
@Override @Override

@ -145,7 +145,10 @@ public class V1_8PacketFactory implements PacketFactory {
add(data, metadataFactory.usingItem(properties.getProperty(propertyRegistry.getByName("using_item", Boolean.class)), false, false)); add(data, metadataFactory.usingItem(properties.getProperty(propertyRegistry.getByName("using_item", Boolean.class)), false, false));
add(data, metadataFactory.potionColor(properties.getProperty(propertyRegistry.getByName("potion_color", Color.class)).asRGB())); add(data, metadataFactory.potionColor(properties.getProperty(propertyRegistry.getByName("potion_color", Color.class)).asRGB()));
add(data, metadataFactory.potionAmbient(properties.getProperty(propertyRegistry.getByName("potion_ambient", Boolean.class)))); add(data, metadataFactory.potionAmbient(properties.getProperty(propertyRegistry.getByName("potion_ambient", Boolean.class))));
if (properties.hasProperty(propertyRegistry.getByName("name"))) addAll(data, metadataFactory.name(PapiUtil.set(player, properties.getProperty(propertyRegistry.getByName("name", Component.class))))); if (properties.hasProperty(propertyRegistry.getByName("name"))) {
add(data, metadataFactory.name(PapiUtil.set(player, properties.getProperty(propertyRegistry.getByName("name", Component.class)))));
add(data, metadataFactory.nameShown());
}
return data; return data;
} }
@ -205,8 +208,4 @@ public class V1_8PacketFactory implements PacketFactory {
protected void add(Map<Integer, EntityData> map, EntityData data) { protected void add(Map<Integer, EntityData> map, EntityData data) {
map.put(data.getIndex(), data); map.put(data.getIndex(), data);
} }
protected void addAll(Map<Integer, EntityData> map, Collection<EntityData> data) {
for (EntityData d : data) add(map, d);
}
} }