Archetype class
Пакет: com.hypixel.hytale.component
Файл: com/hypixel/hytale/component/Archetype.java
implements: Query<ECS_TYPE>
Поля (37)
| Модификаторы | Тип | Имя |
|---|---|---|
|
int |
var1 |
|
int |
var1 |
|
int |
var10 |
|
ComponentType[] |
var11 |
|
ComponentType[] |
var2 |
|
ComponentRegistry |
var2 |
|
int |
var2 |
|
int |
var2 |
|
ComponentType |
var2 |
|
Archetype |
var2 |
|
ComponentType |
var3 |
|
int |
var3 |
|
ComponentType |
var3 |
|
ComponentType[] |
var3 |
|
|
var3 |
|
int |
var3 |
|
|
var3 |
|
int |
var3 |
|
int |
var3 |
|
int |
var4 |
|
int |
var4 |
|
|
var4 |
|
int |
var4 |
|
int |
var4 |
|
ComponentType |
var5 |
|
ComponentType[] |
var5 |
|
int |
var5 |
|
Component |
var6 |
|
ComponentType |
var6 |
|
ComponentType |
var6 |
|
int |
var6 |
|
Class |
var7 |
|
int |
var7 |
|
ComponentType[] |
var7 |
|
Class |
var8 |
|
int |
var8 |
|
int |
var9 |
Методы (44)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("ComponentType is not in archetype: " + var1 + ", " + this) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("ComponentType in Archetype cannot be null") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("ComponentType is already in Archetype! " + var0 + ", " + var1) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Archetype is already empty!") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Archetype doesn't contain ComponentType! " + var0 + ", " + var1) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Invalid component at index " + var4 + " expected " + var7 + " but found null") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Invalid component at index " + var4 + " expected " + var7 + " but found " + var8) |
public |
boolean |
containsboolean contains(@Nonnull ComponentType<ECS_TYPE, ?> var1) |
public |
boolean |
containsboolean contains(@Nonnull Archetype<ECS_TYPE> var1) |
|
boolean |
containsAtboolean containsAt(int var1, @Nonnull ComponentType<ECS_TYPE, ?> var2) |
public |
int |
countint count() |
static |
<ECS_TYPE> Archetype<ECS_TYPE> |
empty<ECS_TYPE> Archetype<ECS_TYPE> empty() |
|
|
for for(int var2 = var1.minIndex; var2 < var1.componentTypes.length; var2++) |
|
|
for for(int var4 = 0; var4 < var3; var4++) |
|
|
for for(int var2 = this.minIndex; var2 < this.componentTypes.length; var2++) |
|
|
for for(int var5 = this.componentTypes.length - 1; var5 >= this.minIndex; var5--) |
|
|
for for(int var5 = 0; var5 < var1; var5++) |
|
|
for for(ComponentType var9 : var0) |
|
|
for for(int var1 = this.minIndex; var1 < this.componentTypes.length; var1++) |
public |
int |
getMinIndexint getMinIndex() |
public |
boolean |
hasSerializableComponentsboolean hasSerializableComponents(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) |
|
|
if if(var5 == null) |
|
|
if if(var6 == null) |
|
|
if if(var3 == null) |
|
|
if if(this.exactQuery == null) |
|
|
if if(var0 == null) |
|
|
if if(var1 == 0) |
|
|
if if(var6 == null) |
|
|
if if(var7 < var3) |
|
|
if if(var7 > var4) |
|
|
if if(var11[var10] != null) |
|
|
if if(var3 == var4) |
|
|
if if(var6 == var4) |
|
|
if if(var6 != var3) |
|
|
if if(var2 != null) |
|
|
if if(this == var1) |
public |
boolean |
isEmptyboolean isEmpty() |
public |
int |
lengthint length() |
abstract |
return |
ofreturn of(var1) |
static |
<ECS_TYPE, T extends Component<ECS_TYPE>> Archetype<ECS_TYPE> |
remove<ECS_TYPE, T extends Component<ECS_TYPE>> Archetype<ECS_TYPE> remove(@Nonnull Archetype<ECS_TYPE> var0, @Nonnull ComponentType<ECS_TYPE, T> var1) |
public |
void |
validateComponentTypevoid validateComponentType(@Nonnull ComponentType<ECS_TYPE, ?> var1) |
public |
void |
validateComponentsvoid validateComponents(@Nonnull Component<ECS_TYPE>[] var1, @Nullable ComponentType<ECS_TYPE, UnknownComponents<ECS_TYPE>> var2) |
|
|
while while(var9 > var3 && var0.componentTypes[var9] == null) |
|
|
while while(var8 < var2 && var7[var8] == null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.component;
class="kw">import com.hypixel.hytale.component.data.unknown.UnknownComponents;
class="kw">import com.hypixel.hytale.component.query.ExactArchetypeQuery;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import java.util.Arrays;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class Archetype<ECS_TYPE> class="kw">implements Query<ECS_TYPE> {
@Nonnull
class="kw">private class="kw">static class="kw">final Archetype EMPTY = new Archetype(0, 0, ComponentType.EMPTY_ARRAY);
class="kw">private class="kw">final int minIndex;
class="kw">private class="kw">final int count;
@Nonnull
class="kw">private class="kw">final ComponentType<ECS_TYPE, ?>[] componentTypes;
@Nullable
class="kw">private ExactArchetypeQuery<ECS_TYPE> exactQuery;
class="kw">private class="kw">final int hashCode;
class="kw">public class="kw">static <ECS_TYPE> Archetype<ECS_TYPE> empty() {
class="kw">return EMPTY;
}
class="kw">private Archetype(int var1, int var2, @Nonnull ComponentType<ECS_TYPE, ?>[] var3) {
this.minIndex = var1;
this.count = var2;
this.componentTypes = var3;
this.hashCode = Arrays.hashCode(var3);
}
class="kw">public int getMinIndex() {
class="kw">return this.minIndex;
}
class="kw">public int count() {
class="kw">return this.count;
}
class="kw">public int length() {
class="kw">return this.componentTypes.length;
}
@Nullable
class="kw">public ComponentType<ECS_TYPE, ?> get(int var1) {
class="kw">return this.componentTypes[var1];
}
class="kw">public boolean isEmpty() {
class="kw">return this.componentTypes.length == 0;
}
class="kw">public boolean contains(@Nonnull ComponentType<ECS_TYPE, ?> var1) {
class="kw">return this.containsAt(var1.getIndex(), var1);
}
boolean containsAt(int var1, @Nonnull ComponentType<ECS_TYPE, ?> var2) {
class="kw">return var1 < this.componentTypes.length && this.componentTypes[var1] == var2;
}
class="kw">public boolean contains(@Nonnull Archetype<ECS_TYPE> var1) {
if (this != var1 && !var1.isEmpty()) {
for (int var2 = var1.minIndex; var2 < var1.componentTypes.length; var2++) {
ComponentType var3 = var1.componentTypes[var2];
if (var3 != null && !this.contains(var3)) {
class="kw">return false;
}
}
class="kw">return true;
} else {
class="kw">return true;
}
}
class="kw">public void validateComponentType(@Nonnull ComponentType<ECS_TYPE, ?> var1) {
if (!this.contains(var1)) {
throw new IllegalArgumentException("ComponentType is not in archetype: " + var1 + ", " + this);
}
}
class="kw">public void validateComponents(@Nonnull Component<ECS_TYPE>[] var1, @Nullable ComponentType<ECS_TYPE, UnknownComponents<ECS_TYPE>> var2) {
int var3 = Math.max(this.componentTypes.length, var1.length);
for (int var4 = 0; var4 < var3; var4++) {
ComponentType var5 = var4 >= this.componentTypes.length ? null : this.componentTypes[var4];
Component var6 = var4 >= var1.length ? null : var1[var4];
if (var5 == null) {
if (var6 != null && (var2 == null || var4 != var2.getIndex())) {
throw new IllegalStateException("Invalid component at index " + var4 + " expected null but found " + var6.getClass());
}
} else {
Class var7 = var5.getTypeClass();
if (var6 == null) {
throw new IllegalStateException("Invalid component at index " + var4 + " expected " + var7 + " but found null");
}
Class var8 = (Class<? class="kw">extends Component>)var6.getClass();
if (!var8.equals(var7)) {
throw new IllegalStateException("Invalid component at index " + var4 + " expected " + var7 + " but found " + var8);
}
}
}
}
class="kw">public boolean hasSerializableComponents(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) {
if (this.isEmpty()) {
class="kw">return false;
}
if (this.contains(var1.getRegistry().getNonSerializedComponentType())) {
class="kw">return false;
}
for (int var2 = this.minIndex; var2 < this.componentTypes.length; var2++) {
ComponentType var3 = this.componentTypes[var2];
if (var3 != null && var1.getComponentCodec(var3) != null) {
class="kw">return true;
}
}
class="kw">return false;
}
@Nonnull
class="kw">public Archetype<ECS_TYPE> getSerializableArchetype(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1, @Nullable Predicate<ComponentType<ECS_TYPE, ?>> var2) {
if (this.isEmpty()) {
class="kw">return EMPTY;
}
if (this.contains(var1.getRegistry().getNonSerializedComponentType())) {
class="kw">return EMPTY;
}
ComponentType[] var3 = null;
int var4 = 0;
for (int var5 = this.componentTypes.length - 1; var5 >= this.minIndex; var5--) {
ComponentType var6 = this.componentTypes[var5];
if (var6 != null && var1.getComponentCodec(var6) != null && (var2 == null || var2.test(var6))) {
if (var3 == null) {
var3 = new ComponentType[var5 + 1];
}
var3[var5] = var6;
var4++;
}
}
class="kw">return var3 == null ? EMPTY : new Archetype<>(this.minIndex, var4, var3);
}
@Nonnull
class="kw">public ExactArchetypeQuery<ECS_TYPE> asExactQuery() {
if (this.exactQuery == null) {
this.exactQuery = new ExactArchetypeQuery<>(this);
}
class="kw">return this.exactQuery;
}
@Nonnull
class="kw">public class="kw">static <ECS_TYPE> Archetype<ECS_TYPE> of(@Nonnull ComponentType<ECS_TYPE, ?> var0) {
if (var0 == null) {
throw new IllegalArgumentException("ComponentType in Archetype cannot be null");
}
int var1 = var0.getIndex();
ComponentType[] var2 = new ComponentType[var1 + 1];
var2[var1] = var0;
class="kw">return new Archetype<>(var1, 1, var2);
}
@SafeVarargs
class="kw">public class="kw">static <ECS_TYPE> Archetype<ECS_TYPE> of(@Nonnull ComponentType<ECS_TYPE, ?>... var0) {
int var1 = var0.length;
if (var1 == 0) {
class="kw">return EMPTY;
}
ComponentRegistry var2 = var0[0].getRegistry();
int var3 = Integer.MAX_VALUE;
int var4 = Integer.MIN_VALUE;
for (int var5 = 0; var5 < var1; var5++) {
ComponentType var6 = var0[var5];
if (var6 == null) {
throw new IllegalArgumentException("ComponentType in Archetype cannot be null (Index: " + var5 + ")");
}
var6.validateRegistry(var2);
int var7 = var6.getIndex();
if (var7 < var3) {
var3 = var7;
}
if (var7 > var4) {
var4 = var7;
}
}
ComponentType[] var11 = new ComponentType[var4 + 1];
for (ComponentType var9 : var0) {
int var10 = var9.getIndex();
if (var11[var10] != null) {
throw new IllegalArgumentException("ComponentType provided multiple times! " + Arrays.toString(var0));
}
var11[var10] = var9;
}
class="kw">return new Archetype<>(var3, var1, var11);
}
@Nonnull
class="kw">public class="kw">static <ECS_TYPE, T class="kw">extends Component<ECS_TYPE>> Archetype<ECS_TYPE> add(@Nonnull Archetype<ECS_TYPE> var0, @Nonnull ComponentType<ECS_TYPE, T> var1) {
if (var0.isEmpty()) {
class="kw">return of(var1);
}
if (var0.contains(var1)) {
throw new IllegalArgumentException("ComponentType is already in Archetype! " + var0 + ", " + var1);
}
var0.validateRegistry(var1.getRegistry());
int var2 = var1.getIndex();
int var3 = Math.min(var2, var0.minIndex);
int var4 = Math.max(var2 + 1, var0.componentTypes.length);
ComponentType[] var5 = Arrays.copyOf(var0.componentTypes, var4);
var5[var2] = var1;
class="kw">return new Archetype<>(var3, var0.count + 1, var5);
}
class="kw">public class="kw">static <ECS_TYPE, T class="kw">extends Component<ECS_TYPE>> Archetype<ECS_TYPE> remove(
@Nonnull Archetype<ECS_TYPE> var0, @Nonnull ComponentType<ECS_TYPE, T> var1
) {
if (var0.isEmpty()) {
throw new IllegalArgumentException("Archetype is already empty!");
}
if (!var0.contains(var1)) {
throw new IllegalArgumentException("Archetype doesn't contain ComponentType! " + var0 + ", " + var1);
}
int var2 = var0.componentTypes.length;
int var3 = var0.minIndex;
int var4 = var2 - 1;
if (var3 == var4) {
class="kw">return EMPTY;
}
int var5 = var0.count - 1;
int var6 = var1.getIndex();
if (var6 == var4) {
int var9 = var6 - 1;
while (var9 > var3 && var0.componentTypes[var9] == null) {
var9--;
}
class="kw">return new Archetype<>(var3, var5, Arrays.copyOf(var0.componentTypes, var9 + 1));
} else {
ComponentType[] var7 = Arrays.copyOf(var0.componentTypes, var2);
var7[var6] = null;
if (var6 != var3) {
class="kw">return new Archetype<>(var3, var5, var7);
}
int var8 = var6 + 1;
while (var8 < var2 && var7[var8] == null) {
var8++;
}
class="kw">return new Archetype<>(var8, var5, var7);
}
}
@Override
class="kw">public boolean test(@Nonnull Archetype<ECS_TYPE> var1) {
class="kw">return var1.contains(this);
}
@Override
class="kw">public boolean requiresComponentType(@Nonnull ComponentType<ECS_TYPE, ?> var1) {
class="kw">return this.contains(var1);
}
@Override
class="kw">public void validateRegistry(@Nonnull ComponentRegistry<ECS_TYPE> var1) {
if (!this.isEmpty()) {
this.componentTypes[this.minIndex].validateRegistry(var1);
}
}
@Override
class="kw">public void validate() {
for (int var1 = this.minIndex; var1 < this.componentTypes.length; var1++) {
ComponentType var2 = this.componentTypes[var1];
if (var2 != null) {
var2.validate();
}
}
}
@Override
class="kw">public boolean equals(@Nullable Object var1) {
if (this == var1) {
class="kw">return true;
} else if (var1 != null && this.getClass() == var1.getClass()) {
Archetype var2 = (Archetype<?>)var1;
class="kw">return Arrays.equals(this.componentTypes, var2.componentTypes);
} else {
class="kw">return false;
}
}
@Override
class="kw">public int hashCode() {
class="kw">return this.hashCode;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "Archetype{componentTypes=" + Arrays.toString(this.componentTypes) + "}";
}
}