-
-
Notifications
You must be signed in to change notification settings - Fork 44
/
EntityList.java
56 lines (46 loc) · 1.34 KB
/
EntityList.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package me.nallar.tickthreading.minecraft.entitylist;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import me.nallar.tickthreading.minecraft.TickManager;
import net.minecraft.world.World;
/*
* Used to override World.loadedTileEntityList.
* */
public abstract class EntityList<T> extends ArrayList<T> {
final TickManager manager;
EntityList(World world, Field overriddenField, TickManager manager) {
this.manager = manager;
overriddenField.setAccessible(true);
try {
//This should hopefully avoid leaving the world in a bad state if something goes wrong.
this.addAll((Collection<? extends T>) overriddenField.get(world));
overriddenField.set(world, this);
} catch (Exception e) {
throw new RuntimeException("Failed to override " + overriddenField.getName() + " in world " + world.getWorldInfo().getWorldName(), e);
}
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public int size() {
return 0;
}
@Override
public abstract boolean add(T t);
@Override
public boolean addAll(Collection<? extends T> c) {
boolean changed = false;
for (T t : c) {
changed |= add(t);
}
return changed;
}
@Override
public abstract boolean remove(Object o);
public void unload() {
manager.unload();
}
}