/* * Copyright 2011 Tyler Blair. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are those of the * authors and contributors and should not be interpreted as representing official policies, * either expressed or implied, of anybody else. */ package com.griefcraft.model; import com.griefcraft.util.StringUtil; import org.json.simple.JSONObject; public class Flag { /** * The ordering of this enum <b>MUST NOT</b> change. The ordinal value is stored internally. * However, the name of a flag may freely change at any time. */ public enum Type { /** * Redstone use will be disabled on the protection if protections.denyRedstone = false; * however if denyRedstone = true, this flag will instead enable redstone on the protection! */ REDSTONE, /** * Attracts dropped items within a certain radius into the protection's inventory */ MAGNET, /** * Protection is exempt from being auto removed from LWC - e.g /lwc admin expire -remove 2 weeks */ EXEMPTION(true), /** * The door will automatically close after the time configured in plugins/LWC/doors.yml */ AUTOCLOSE, /** * Allows explosions to blow a protection up */ ALLOWEXPLOSIONS, /** * Controls whether or not hoppers can be used on a protection */ HOPPER; Type() { this(false); } Type(boolean restricted) { this.restricted = restricted; } /** * If the flag is restricted to only LWC admins */ private boolean restricted; /** * @return true if the flag should only be usable by LWC admins */ public boolean isRestricted() { return restricted; } } /** * The flag type */ private Type type; /** * Flag data */ private final JSONObject data = new JSONObject(); public Flag(Type type) { this.type = type; data.put("id", type.ordinal()); } /** * Decode JSON data for a flag * * @param node * @return */ public static Flag decodeJSON(JSONObject node) { if (node == null) { return null; } // decode the type int ordinal = -1; try { ordinal = Integer.parseInt(node.get("id").toString()); } catch (NumberFormatException e) { return null; } // Still not valid.. if (ordinal == -1) { return null; } // let's do a range check Type[] values = Type.values(); if (ordinal > values.length) { return null; } // good good Type type = values[ordinal]; // create the Flag and hand over the data we have Flag flag = new Flag(type); flag.getData().putAll(node); return flag; } @Override public String toString() { return StringUtil.capitalizeFirstLetter(type.toString()); } /** * @return */ public Type getType() { return type; } /** * @return */ public JSONObject getData() { return data; } }