Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / Behavior.java
package net.minecraft.server;

import java.util.Map;
import java.util.Map.Entry;

public abstract class Behavior<E extends EntityLiving> {

    private final Map<MemoryModuleType<?>, MemoryStatus> a;
    private Behavior.Status b;
    private long c;
    private final int d;
    private final int e;

    public Behavior(Map<MemoryModuleType<?>, MemoryStatus> map) {
        this(map, 60);
    }

    public Behavior(Map<MemoryModuleType<?>, MemoryStatus> map, int i) {
        this(map, i, i);
    }

    public Behavior(Map<MemoryModuleType<?>, MemoryStatus> map, int i, int j) {
        this.b = Behavior.Status.STOPPED;
        this.d = i;
        this.e = j;
        this.a = map;
    }

    public Behavior.Status a() {
        return this.b;
    }

    public final boolean b(WorldServer worldserver, E e0, long i) {
        if (this.a(e0) && this.a(worldserver, e0)) {
            this.b = Behavior.Status.RUNNING;
            int j = this.d + worldserver.getRandom().nextInt(this.e + 1 - this.d);

            this.c = i + (long) j;
            this.a(worldserver, e0, i);
            return true;
        } else {
            return false;
        }
    }

    protected void a(WorldServer worldserver, E e0, long i) {}

    public final void c(WorldServer worldserver, E e0, long i) {
        if (!this.a(i) && this.g(worldserver, e0, i)) {
            this.d(worldserver, e0, i);
        } else {
            this.e(worldserver, e0, i);
        }

    }

    protected void d(WorldServer worldserver, E e0, long i) {}

    public final void e(WorldServer worldserver, E e0, long i) {
        this.b = Behavior.Status.STOPPED;
        this.f(worldserver, e0, i);
    }

    protected void f(WorldServer worldserver, E e0, long i) {}

    protected boolean g(WorldServer worldserver, E e0, long i) {
        return false;
    }

    protected boolean a(long i) {
        return i > this.c;
    }

    protected boolean a(WorldServer worldserver, E e0) {
        return true;
    }

    public String toString() {
        return this.getClass().getSimpleName();
    }

    private boolean a(E e0) {
        return this.a.entrySet().stream().allMatch((entry) -> {
            MemoryModuleType<?> memorymoduletype = (MemoryModuleType) entry.getKey();
            MemoryStatus memorystatus = (MemoryStatus) entry.getValue();

            return e0.getBehaviorController().a(memorymoduletype, memorystatus);
        });
    }

    public static enum Status {

        STOPPED, RUNNING;

        private Status() {}
    }
}