aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java
blob: 128e3dfeb167247029f5a7ae6d053fa7fae9c799 (plain)
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
57
package gregtech.loaders.misc.bees;

import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.IAlleleBeeEffect;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IEffectData;
import forestry.core.genetics.alleles.Allele;

// helper class for implementing custom bee effects, based on MagicBees' implementation
public abstract class GTAlleleEffect extends Allele implements IAlleleBeeEffect {

    public static final IAlleleBeeEffect FORESTRY_BASE_EFFECT = (IAlleleBeeEffect) AlleleManager.alleleRegistry
        .getAllele("forestry.effectNone");
    protected boolean combinable;
    protected int tickThrottle; // If set, this amount of ticks have to pass before an effect ticks

    public GTAlleleEffect(String id, boolean isDominant, int tickThrottle) {
        super("gregtech." + id, "gregtech." + id, isDominant);
        AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.EFFECT);
        combinable = false;
        this.tickThrottle = tickThrottle;
    }

    @Override
    public boolean isCombinable() {
        return combinable;
    }

    public GTAlleleEffect setIsCombinable(boolean canCombine) {
        combinable = canCombine;
        return this;
    }

    @Override
    public abstract IEffectData validateStorage(IEffectData storedData);

    @Override
    public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
        int ticksPassed = storedData.getInteger(0);
        if (ticksPassed >= this.tickThrottle) {
            storedData = this.doEffectTickThrottled(genome, storedData, housing);
        } else {
            storedData.setInteger(0, ticksPassed + 1);
        }
        return storedData;
    }

    protected abstract IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData,
        IBeeHousing housing);

    @Override
    public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
        return FORESTRY_BASE_EFFECT.doFX(genome, storedData, housing);
    }
}