/*******************************************************************************
* Copyright (c) 2015 - 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*******************************************************************************/
package jsettlers.common.material;
import java.util.EnumSet;
import jsettlers.common.images.EImageLinkType;
import jsettlers.common.images.ImageLink;
import jsettlers.common.images.OriginalImageLink;
/**
* Enum to define all material types.
*
* @author Andreas Eberle
*/
public enum EMaterialType {
AXE((short) 46, 3, 153, true, 18, false),
BOW((short) 63, 14, 114, true, 14, false),
BLADE((short) 55, 3, 138, true, 16, false),
BREAD((short) 49, 3, 186, true, 6, true),
COAL((short) 34, 3, 144, true, 5, true),
CROP((short) 50, 3, 180, true, 10, true),
FISH((short) 47, 3, 189, true, 7, true),
FISHINGROD((short) 66, 3, 141, true, 21, false),
FLOUR((short) 48, 3, 183, true, 9, false),
GOLD((short) 37, 3, 135, true, 24, false),
GOLDORE((short) 36, 3, 150, true, 23, false),
HAMMER((short) 51, 3, 126, true, 17, false),
IRON((short) 42, 3, 132, true, 3, true),
IRONORE((short) 39, 3, 147, true, 4, false),
MEAT((short) 52, 3, 162, true, 8, true),
PICK((short) 53, 3, 129, true, 19, false),
PIG((short) 73, 3, 159, true, 11, false),
PLANK((short) 33, 3, 168, true, 0, false),
SAW((short) 54, 3, 177, true, 20, false),
SCYTHE((short) 56, 3, 165, true, 22, false),
SPEAR((short) 60, 14, 117, true, 15, false),
STONE((short) 43, 3, 174, true, 1, false),
SWORD((short) 59, 14, 111, true, 13, false),
TRUNK((short) 41, 3, 171, true, 2, false),
WATER((short) 77, 3, 156, true, 12, false),
WINE((short) 69, 14, 123, true, 25, false),
// Now the non-droppable materials
NO_MATERIAL((short) 0, 0, 0, false, -1, false),
MEAD((short) 90, 14, 126, false, -1, true),
HONEY((short) 89, 14, 129, false, -1, true),
GEMS((short) 79, 24, 120, false, -1, false),
SULFUR((short) 80, 34, 126, false, -1, false),
RICE((short) 78, 34, 129, false, -1, false),
KEG((short) 70, 34, 132, false, -1, false),
BOX((short) 82, 0, 0, false, -1, false),
// ammo for cannon (6 frames instead of 8)
CANNON_AMMO((short) 86, 0, 0, false, -1, false),
// ammo for ballista (6 frames instead of 8)
BALLISTA_AMMO((short) 87, 0, 0, false, -1, false),
// ammo for catapult (6 frames instead of 8)
CATAPULT_AMMO((short) 88, 0, 0, false, -1, false),
WHITE_BREAD((short) 0, 0, 0, false, -1, false),
BASKET((short) 0, 0, 0, false, -1, false),
TREE((short) 0, 0, 0, false, -1, false),
PLANT((short) 0, 0, 0, false, -1, false),
EMPTY_BUCKET((short) 0, 0, 0, false, -1, false);
public static final EMaterialType[] VALUES = EMaterialType.values();
public static final int NUMBER_OF_MATERIALS = VALUES.length;
/**
* The droppable {@link EMaterialType}s in the order of their default priority.
*/
public static final EMaterialType[] DROPPABLE_MATERIALS;
public static final int NUMBER_OF_DROPPABLE_MATERIALS;
static {
// calculate the number of droppable materials and build up an array in
// the default priority order. (not all materials have priority index but may be dropped)
int numberOfDroppable = 0;
for (int i = 0; i < NUMBER_OF_MATERIALS; i++) {
if (VALUES[i].droppable && VALUES[i].defaultPrioIdx >= 0) {
numberOfDroppable++;
}
}
NUMBER_OF_DROPPABLE_MATERIALS = numberOfDroppable;
DROPPABLE_MATERIALS = new EMaterialType[numberOfDroppable];
for (int i = 0; i < NUMBER_OF_MATERIALS; i++) {
if (VALUES[i].droppable && VALUES[i].defaultPrioIdx >= 0) {
DROPPABLE_MATERIALS[VALUES[i].defaultPrioIdx] = VALUES[i];
}
}
}
public static final EnumSet<EMaterialType> WEAPONS = EnumSet.of(
EMaterialType.SWORD,
EMaterialType.SPEAR,
EMaterialType.BOW);
public static final EnumSet<EMaterialType> TOOLS = EnumSet.of(
EMaterialType.HAMMER,
EMaterialType.BLADE,
EMaterialType.PICK,
EMaterialType.AXE,
EMaterialType.SAW,
EMaterialType.SCYTHE,
EMaterialType.FISHINGROD);
public final byte ordinal;
private final short stackIndex;
private final boolean droppable;
private final int defaultPrioIdx;
private final boolean distributionConfigurable;
private final OriginalImageLink imageLink;
EMaterialType(short stackIndex, int guiFile, int guiBase, boolean droppable, int defaultPrioIdx, boolean distributionConfigurable) {
this.stackIndex = stackIndex;
this.defaultPrioIdx = defaultPrioIdx;
this.distributionConfigurable = distributionConfigurable;
this.ordinal = (byte) super.ordinal();
this.droppable = droppable;
imageLink = new OriginalImageLink(EImageLinkType.GUI, guiFile, guiBase, 0);
}
/**
* gets the index of the material for stacks. <br>
* used for jsettlers.graphics
*
* @return
*/
public short getStackIndex() {
return stackIndex;
}
/**
* Gets an icon that is used in the GUI for this material.
*
* @return An image link to the icon.
*/
public ImageLink getIcon() {
return imageLink;
}
/**
*
* @return Returns true if this material can be dropped.
*/
public boolean isDroppable() {
return droppable;
}
public boolean isDistributionConfigurable() {
return distributionConfigurable;
}
}