package net.aufdemrand.denizen.objects.properties.item;
import net.aufdemrand.denizen.objects.dItem;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.objects.Mechanism;
import net.aufdemrand.denizencore.objects.dObject;
import net.aufdemrand.denizencore.objects.properties.Property;
import net.aufdemrand.denizencore.tags.Attribute;
import org.bukkit.CropState;
import org.bukkit.Material;
import org.bukkit.NetherWartsState;
import org.bukkit.material.CocoaPlant;
import org.bukkit.material.Crops;
import org.bukkit.material.NetherWarts;
public class ItemPlantgrowth implements Property {
public static boolean describes(dObject item) {
return item instanceof dItem
&& (
((dItem) item).getItemStack().getData() instanceof Crops
|| ((dItem) item).getItemStack().getData() instanceof NetherWarts
|| ((dItem) item).getItemStack().getData() instanceof CocoaPlant
|| ((dItem) item).getItemStack().getType().equals(Material.PUMPKIN_STEM)
|| ((dItem) item).getItemStack().getType().equals(Material.MELON_STEM)
|| ((dItem) item).getItemStack().getType().equals(Material.CARROT)
|| ((dItem) item).getItemStack().getType().equals(Material.POTATO)
);
}
public static ItemPlantgrowth getFrom(dObject _item) {
if (!describes(_item)) {
return null;
}
else {
return new ItemPlantgrowth((dItem) _item);
}
}
private ItemPlantgrowth(dItem _item) {
item = _item;
}
dItem item;
@Override
public String getAttribute(Attribute attribute) {
if (attribute == null) {
return null;
}
// <--[tag]
// @attribute <i@item.plant_growth>
// @returns Element
// @mechanism dItem.plant_growth
// @group properties
// @description
// Returns the growth level of a plant item as one of the following:
// Wheat: SEEDED, GERMINATED, VERY_SMALL, SMALL, MEDIUM, TALL, VERY_TALL, RIPE
// Nether Warts: SEEDED, STAGE_ONE, STAGE_TWO, RIPE
// Cocoa Plants: SMALL, MEDIUM, LARGE
// Pumpkin stem, melon stem, carrot, potato: 0-7
// -->
if (attribute.startsWith("plant_growth")) {
if (item.getItemStack().getData() instanceof Crops) {
return new Element(((Crops) item.getItemStack().getData()).getState().name())
.getAttribute(attribute.fulfill(1));
}
else if (item.getItemStack().getData() instanceof NetherWarts) {
return new Element(((NetherWarts) item.getItemStack().getData()).getState().name())
.getAttribute(attribute.fulfill(1));
}
else if (item.getItemStack().getData() instanceof CocoaPlant) {
return new Element(((CocoaPlant) item.getItemStack().getData()).getSize().name())
.getAttribute(attribute.fulfill(1));
}
else {
return new Element(item.getItemStack().getData().getData())
.getAttribute(attribute.fulfill(1));
}
}
return null;
}
@Override
public String getPropertyString() {
String state;
if (item.getItemStack().getData() instanceof Crops) {
state = ((Crops) item.getItemStack().getData()).getState().name();
}
else if (item.getItemStack().getData() instanceof NetherWarts) {
state = ((NetherWarts) item.getItemStack().getData()).getState().name();
}
else if (item.getItemStack().getData() instanceof CocoaPlant) {
state = ((CocoaPlant) item.getItemStack().getData()).getSize().name();
}
else {
state = String.valueOf(item.getItemStack().getData().getData());
}
if (!state.equalsIgnoreCase("SEEDED") && !state.equalsIgnoreCase("0")) {
return state;
}
else {
return null;
}
}
@Override
public String getPropertyId() {
return "plant_growth";
}
@Override
public void adjust(Mechanism mechanism) {
// <--[mechanism]
// @object dItem
// @name plant_growth
// @input Element
// @description
// Changes the growth level of plant items.
// See <@link tag i@item.plant_growth> for valid inputs.
// @tags
// <i@item.is_crop>
// <i@item.plant_growth>
// -->
if (mechanism.matches("plant_growth")) {
Element inputValue = new Element(mechanism.getValue().asString().toUpperCase());
if (item.getItemStack().getData() instanceof Crops && inputValue.matchesEnum(CropState.values())) {
((Crops) item.getItemStack().getData()).setState(CropState.valueOf(mechanism.getValue().asString().toUpperCase()));
}
else if (item.getItemStack().getData() instanceof NetherWarts && inputValue.matchesEnum(NetherWartsState.values())) {
((NetherWarts) item.getItemStack().getData()).setState(NetherWartsState.valueOf(mechanism.getValue().asString().toUpperCase()));
}
else if (item.getItemStack().getData() instanceof CocoaPlant && inputValue.matchesEnum(CocoaPlant.CocoaPlantSize.values())) {
((CocoaPlant) item.getItemStack().getData()).setSize(CocoaPlant.CocoaPlantSize.valueOf(mechanism.getValue().asString().toUpperCase()));
}
else if (mechanism.requireInteger()) {
item.getItemStack().getData().setData((byte) mechanism.getValue().asInt());
}
}
}
}