minecraft-src/net/minecraft/core/NonNullList.java
2025-07-04 01:41:11 +03:00

76 lines
1.9 KiB
Java

package net.minecraft.core;
import com.google.common.collect.Lists;
import java.util.AbstractList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.Validate;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class NonNullList<E> extends AbstractList<E> {
private final List<E> list;
@Nullable
private final E defaultValue;
public static <E> NonNullList<E> create() {
return new NonNullList<>(Lists.<E>newArrayList(), null);
}
public static <E> NonNullList<E> createWithCapacity(int initialCapacity) {
return new NonNullList<>(Lists.<E>newArrayListWithCapacity(initialCapacity), null);
}
/**
* Creates a new NonNullList with <i>fixed</i> size and default value. The list will be filled with the default value.
*/
public static <E> NonNullList<E> withSize(int size, E defaultValue) {
Validate.notNull(defaultValue);
Object[] objects = new Object[size];
Arrays.fill(objects, defaultValue);
return new NonNullList<>(Arrays.asList(objects), defaultValue);
}
@SafeVarargs
public static <E> NonNullList<E> of(E defaultValue, E... elements) {
return new NonNullList<>(Arrays.asList(elements), defaultValue);
}
protected NonNullList(List<E> list, @Nullable E defaultValue) {
this.list = list;
this.defaultValue = defaultValue;
}
@NotNull
public E get(int i) {
return (E)this.list.get(i);
}
public E set(int i, E object) {
Validate.notNull(object);
return (E)this.list.set(i, object);
}
public void add(int i, E object) {
Validate.notNull(object);
this.list.add(i, object);
}
public E remove(int i) {
return (E)this.list.remove(i);
}
public int size() {
return this.list.size();
}
public void clear() {
if (this.defaultValue == null) {
super.clear();
} else {
for (int i = 0; i < this.size(); i++) {
this.set(i, this.defaultValue);
}
}
}
}