Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-08 17:20:24 +01:00
Add utility method for initializing entity types
Dieser Commit ist enthalten in:
Ursprung
e3dde71821
Commit
6c58f0980c
@ -269,15 +269,6 @@ public enum Entity1_19Types implements EntityType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void initialize(final Protocol<?, ?, ?, ?> protocol) {
|
public static void initialize(final Protocol<?, ?, ?, ?> protocol) {
|
||||||
for (final Entity1_19Types type : values()) {
|
EntityTypeUtil.initialize(values(), TYPES, protocol, (type, id) -> type.id = id);
|
||||||
if (type.isAbstractType()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int id = protocol.getMappingData().getEntityMappings().mappedId(type.identifier());
|
|
||||||
Preconditions.checkArgument(id != -1, "Entity type %s has no id", type.identifier());
|
|
||||||
type.id = id;
|
|
||||||
}
|
|
||||||
EntityTypeUtil.fill(values(), TYPES);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,14 +22,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.viaversion.viaversion.util;
|
package com.viaversion.viaversion.util;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import com.viaversion.viaversion.api.Via;
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
|
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class EntityTypeUtil {
|
public final class EntityTypeUtil {
|
||||||
|
|
||||||
|
private static final EntityType[] EMPTY_ARRAY = new EntityType[0];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an ordered array with each index representing the actual entity id.
|
* Returns an ordered array with each index representing the actual entity id.
|
||||||
@ -46,7 +50,29 @@ public class EntityTypeUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
types.sort(Comparator.comparingInt(EntityType::getId));
|
types.sort(Comparator.comparingInt(EntityType::getId));
|
||||||
return types.toArray(new EntityType[0]);
|
return types.toArray(EMPTY_ARRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets entity type ids based on the protocol's mapping data and fills the given typesToFill array with the index corresponding to the id.
|
||||||
|
*
|
||||||
|
* @param values full enum values
|
||||||
|
* @param typesToFill yet unfilled array to be filled with types ordered by id
|
||||||
|
* @param protocol protocol to get entity types from
|
||||||
|
* @param idSetter function to set the internal entity id
|
||||||
|
* @param <T> entity type
|
||||||
|
*/
|
||||||
|
public static <T extends EntityType> void initialize(final T[] values, final EntityType[] typesToFill, final Protocol<?, ?, ?, ?> protocol, final EntityIdSetter<T> idSetter) {
|
||||||
|
for (final T type : values) {
|
||||||
|
if (type.isAbstractType()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int id = protocol.getMappingData().getEntityMappings().mappedId(type.identifier());
|
||||||
|
Preconditions.checkArgument(id != -1, "Entity type %s has no id", type.identifier());
|
||||||
|
idSetter.setId(type, id);
|
||||||
|
typesToFill[id] = type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EntityType[] createSizedArray(final EntityType[] values) {
|
public static EntityType[] createSizedArray(final EntityType[] values) {
|
||||||
@ -56,15 +82,7 @@ public class EntityTypeUtil {
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new EntityType[(int) count];
|
return new EntityType[count];
|
||||||
}
|
|
||||||
|
|
||||||
public static void fill(final EntityType[] values, final EntityType[] toFill) {
|
|
||||||
for (final EntityType type : values) {
|
|
||||||
if (!type.isAbstractType()) {
|
|
||||||
toFill[type.getId()] = type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -83,4 +101,10 @@ public class EntityTypeUtil {
|
|||||||
}
|
}
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface EntityIdSetter<T extends EntityType> {
|
||||||
|
|
||||||
|
void setId(T entityType, int id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren