aboutsummaryrefslogtreecommitdiff
path: root/main/java/gregtech/api/util/GT_BaseCrop.java
blob: e7cef2c598fc3c95f05d5fe3fb7301dfdeb26547 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package gregtech.api.util;

import static gregtech.api.enums.GT_Values.E;
import gregtech.api.enums.ConfigCategories;
import ic2.api.crops.CropCard;
import ic2.api.crops.Crops;
import ic2.api.crops.ICropTile;

import java.util.ArrayList;
import java.util.Random;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;

public class GT_BaseCrop extends CropCard {
	private String mName = E, mDiscoveredBy = "Gregorius Techneticies", mAttributes[];
	private int mTier = 0, mMaxSize = 0, mAfterHarvestSize = 0, mHarvestSize = 0, mStats[] = new int[5];
	private ItemStack mDrop = null, mSpecialDrops[] = null;
	
	public static ArrayList<GT_BaseCrop> sCropList = new ArrayList<GT_BaseCrop>();
	
	/**
	 * To create new Crops
	 * @param aID Default ID
	 * @param aCropName Name of the Crop
	 * @param aDiscoveredBy The one who discovered the Crop
	 * @param aDrop The Item which is dropped by the Crop. must be != null
	 * @param aBaseSeed Baseseed to plant this Crop. null == crossbreed only
	 * @param aTier tier of the Crop. forced to be >= 1
	 * @param aMaxSize maximum Size of the Crop. forced to be >= 3
	 * @param aGrowthSpeed how fast the Crop grows. if < 0 then its set to Tier*300
	 * @param aHarvestSize the size the Crop needs to be harvested. forced to be between 2 and max size
	 */
	public GT_BaseCrop(int aID, String aCropName, String aDiscoveredBy, ItemStack aDrop, ItemStack[] aSpecialDrops, ItemStack aBaseSeed, int aTier, int aMaxSize, int aGrowthSpeed, int aAfterHarvestSize, int aHarvestSize, int aStatChemical, int aStatFood, int aStatDefensive, int aStatColor, int aStatWeed, String[] aAttributes) {
		mName = aCropName;
		aID = GT_Config.addIDConfig(ConfigCategories.IDs.crops, mName.replaceAll(" ", "_"), aID);
		if (aDiscoveredBy != null && !aDiscoveredBy.equals(E)) mDiscoveredBy = aDiscoveredBy;
		if (aDrop != null && aID > 0 && aID < 256) {
			mDrop = GT_Utility.copy(aDrop);
			mSpecialDrops = aSpecialDrops;
			mTier = Math.max(1, aTier);
			mMaxSize = Math.max(3, aMaxSize);
//			mGrowthSpeed = aGrowthSpeed>0?aGrowthSpeed:mTier*300;
			mHarvestSize = Math.min(Math.max(aHarvestSize, 2), mMaxSize);
			mAfterHarvestSize = Math.min(Math.max(aAfterHarvestSize, 1), mMaxSize-1);
			mStats[0] = aStatChemical;
			mStats[1] = aStatFood;
			mStats[2] = aStatDefensive;
			mStats[3] = aStatColor;
			mStats[4] = aStatWeed;
			mAttributes = aAttributes;
			if (!Crops.instance.registerCrop(this, aID)) throw new GT_ItsNotMyFaultException("Make sure the Crop ID is valid!");
			if (aBaseSeed != null) Crops.instance.registerBaseSeed(aBaseSeed, aID, 1, 1, 1, 1);
			sCropList.add(this);
		}
	}
	
	@Override
	public byte getSizeAfterHarvest(ICropTile crop) {
		return (byte)mAfterHarvestSize;
	}
	
	@Override
    public String[] attributes() {
		return mAttributes;
	}
	
	@Override
	public String discoveredBy() {
		return mDiscoveredBy;
	}
	
	@Override
    public final boolean canGrow(ICropTile aCrop) {
        return aCrop.getSize()  < maxSize();
    }
	
	@Override
    public final boolean canBeHarvested(ICropTile aCrop) {
        return aCrop.getSize() >= mHarvestSize;
    }
	
	@Override
	public boolean canCross(ICropTile aCrop) {
		return aCrop.getSize() + 2 > maxSize();
	}
	
	@Override
    public int stat(int n) {
		if (n < 0 || n >= mStats.length) return 0;
		return mStats[n];
    }
	
	@Override
	public String name() {
		return mName;
	}
	
	@Override
	public int tier() {
		return mTier;
	}
	
	@Override
	public int maxSize() {
		return mMaxSize;
	}
	
	@Override
	public ItemStack getGain(ICropTile aCrop) {
		int tDrop = 0;
		if (mSpecialDrops != null && (tDrop = new Random().nextInt(mSpecialDrops.length+4)) < mSpecialDrops.length && mSpecialDrops[tDrop] != null) {
			return GT_Utility.copy(mSpecialDrops[tDrop]);
		}
		return GT_Utility.copy(mDrop);
	}
	
    @Override
    public boolean rightclick(ICropTile aCrop, EntityPlayer aPlayer) {
    	if (!canBeHarvested(aCrop)) return false;
    	return aCrop.harvest(aPlayer==null?false:aPlayer instanceof EntityPlayerMP);
    }
    
	@Override
	public int getOptimalHavestSize(ICropTile crop) {
		return maxSize();
	}
}