make EntityData value types guaranteed safe at compile time using generics

This commit is contained in:
Pyrbu 2023-06-13 22:31:39 +02:00
parent 3714bafbb4
commit f6f861a652
5 changed files with 18 additions and 15 deletions

@ -11,6 +11,6 @@ public class V1_10MetadataFactory extends V1_9MetadataFactory {
@Override @Override
public EntityData noGravity() { public EntityData noGravity() {
return new EntityData(5, EntityDataTypes.BOOLEAN, true); return newEntityData(5, EntityDataTypes.BOOLEAN, true);
} }
} }

@ -13,8 +13,8 @@ public class V1_13MetadataFactory extends V1_10MetadataFactory {
@Override @Override
public Collection<EntityData> name(Component name) { public Collection<EntityData> name(Component name) {
return ListUtil.immutableList( return ListUtil.immutableList(
new EntityData(2, EntityDataTypes.OPTIONAL_COMPONENT, Optional.of(AdventureSerializer.getGsonSerializer().serialize(name))), newEntityData(2, EntityDataTypes.OPTIONAL_COMPONENT, Optional.of(AdventureSerializer.getGsonSerializer().serialize(name))),
new EntityData(3, EntityDataTypes.BOOLEAN, true) newEntityData(3, EntityDataTypes.BOOLEAN, true)
); );
} }
} }

@ -3,10 +3,8 @@ package lol.pyr.znpcsplus.metadata;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
public class V1_15MetadataFactory extends V1_14MetadataFactory { public class V1_15MetadataFactory extends V1_14MetadataFactory {
@Override @Override
public EntityData cape(boolean enabled) { public EntityData cape(boolean enabled) {
return createCape(16, enabled); return createCape(16, enabled);
} }
} }

@ -1,6 +1,7 @@
package lol.pyr.znpcsplus.metadata; package lol.pyr.znpcsplus.metadata;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataType;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; 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 lol.pyr.znpcsplus.util.list.ListUtil; import lol.pyr.znpcsplus.util.list.ListUtil;
@ -21,14 +22,14 @@ public class V1_8MetadataFactory implements MetadataFactory {
@Override @Override
public EntityData effects(boolean onFire, boolean glowing, boolean invisible) { public EntityData effects(boolean onFire, boolean glowing, boolean invisible) {
return new EntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0))); return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0)));
} }
@Override @Override
public Collection<EntityData> name(Component name) { public Collection<EntityData> name(Component name) {
return ListUtil.immutableList( return ListUtil.immutableList(
new EntityData(2, EntityDataTypes.STRING, AdventureSerializer.getGsonSerializer().serialize(name)), newEntityData(2, EntityDataTypes.STRING, AdventureSerializer.getGsonSerializer().serialize(name)),
new EntityData(3, EntityDataTypes.BYTE, (byte) 1) newEntityData(3, EntityDataTypes.BYTE, (byte) 1)
); );
} }
@ -39,14 +40,18 @@ public class V1_8MetadataFactory implements MetadataFactory {
@Override @Override
public EntityData silent(boolean enabled) { public EntityData silent(boolean enabled) {
return new EntityData(4, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0)); return newEntityData(4, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0));
} }
protected EntityData createSkinLayers(int index, boolean enabled) { protected EntityData createSkinLayers(int index, boolean enabled) {
return new EntityData(index, EntityDataTypes.BYTE, enabled ? Byte.MAX_VALUE : (byte) 0); return newEntityData(index, EntityDataTypes.BYTE, enabled ? Byte.MAX_VALUE : (byte) 0);
} }
protected EntityData createCape(int index, boolean enabled) { protected EntityData createCape(int index, boolean enabled) {
return new EntityData(index, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0)); return newEntityData(index, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0));
}
protected <T> EntityData newEntityData(int index, EntityDataType<T> type, T value) {
return new EntityData(index, type, value);
} }
} }

@ -21,19 +21,19 @@ public class V1_9MetadataFactory extends V1_8MetadataFactory {
@Override @Override
public EntityData effects(boolean onFire, boolean glowing, boolean invisible) { public EntityData effects(boolean onFire, boolean glowing, boolean invisible) {
return new EntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0))); return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0)));
} }
@Override @Override
public Collection<EntityData> name(Component name) { public Collection<EntityData> name(Component name) {
return ListUtil.immutableList( return ListUtil.immutableList(
new EntityData(2, EntityDataTypes.STRING, AdventureSerializer.getGsonSerializer().serialize(name)), newEntityData(2, EntityDataTypes.STRING, AdventureSerializer.getGsonSerializer().serialize(name)),
new EntityData(3, EntityDataTypes.BOOLEAN, true) newEntityData(3, EntityDataTypes.BOOLEAN, true)
); );
} }
@Override @Override
public EntityData silent(boolean enabled) { public EntityData silent(boolean enabled) {
return new EntityData(4, EntityDataTypes.BOOLEAN, enabled); return newEntityData(4, EntityDataTypes.BOOLEAN, enabled);
} }
} }