/* * Copyright (C) 2013-2016 Gonçalo Baltazar <me@goncalomb.com> * * This file is part of NBTEditor. * * NBTEditor is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NBTEditor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NBTEditor. If not, see <http://www.gnu.org/licenses/>. */ package com.goncalomb.bukkit.nbteditor.nbt.attributes; import java.util.ArrayList; import java.util.List; import com.goncalomb.bukkit.mylib.reflect.NBTTagCompound; import com.goncalomb.bukkit.mylib.reflect.NBTTagList; public final class Attribute { private AttributeType _type; private double _base; private List<Modifier> _modifiers = new ArrayList<Modifier>(); public static Attribute fromNBT(NBTTagCompound data) { Attribute attribute = new Attribute(AttributeType.getByInternalName(data.getString("Name")), data.getDouble("Base")); if (data.hasKey("Modifiers")) { Object[] modifiersData = data.getListAsArray("Modifiers"); attribute._modifiers = new ArrayList<Modifier>(modifiersData.length); for (Object mod : modifiersData) { attribute.addModifier(Modifier.fromNBT((NBTTagCompound) mod)); } } return attribute; } public Attribute(AttributeType type, double base) { _type = type; setBase(base); } public AttributeType getType() { return _type; } public double getMin() { return _type.getMin(); } public double getMax() { return _type.getMax(); } public double getBase() { return _base; } public void setBase(double value) { _base = Math.max(Math.min(value, getMax()), getMin()); } public List<Modifier> getModifiers() { return new ArrayList<Modifier>(_modifiers); } public void setModifiers(List<Modifier> modifiers) { _modifiers.clear(); if (modifiers != null) { _modifiers.addAll(modifiers); } } public void addModifier(Modifier modifier) { _modifiers.add(modifier); } public Modifier removeModifier(int index) { return _modifiers.remove(index); } public NBTTagCompound toNBT() { NBTTagCompound data = new NBTTagCompound(); data.setString("Name", _type._internalName); data.setDouble("Base", _base); if (_modifiers.size() > 0) { NBTTagList modifiersData = new NBTTagList(); for (Modifier modifier : _modifiers) { modifiersData.add(modifier.toNBT()); } data.setList("Modifiers", modifiersData); } return data; } }