/* * This file is part of Skript. * * Skript 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. * * Skript 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 Skript. If not, see <http://www.gnu.org/licenses/>. * * * Copyright 2011-2014 Peter Güttinger * */ package ch.njol.skript.entity; import org.bukkit.entity.Skeleton; import org.bukkit.entity.Skeleton.SkeletonType; import org.eclipse.jdt.annotation.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; /** * @author Peter Güttinger */ public class SkeletonData extends EntityData<Skeleton> { private final static boolean hasWither = Skript.classExists("org.bukkit.entity.Skeleton.SkeletonType"); static { if (hasWither) register(SkeletonData.class, "skeleton", Skeleton.class, 0, "skeleton", "wither skeleton"); else register(SkeletonData.class, "skeleton", Skeleton.class, "skeleton"); } private boolean wither; public SkeletonData() {} public SkeletonData(final boolean wither) { this.wither = wither; } public boolean isWither() { return wither; } @Override protected boolean init(final Literal<?>[] exprs, final int matchedPattern, final ParseResult parseResult) { wither = matchedPattern == 1; return true; } @Override protected boolean init(final @Nullable Class<? extends Skeleton> c, final @Nullable Skeleton e) { wither = e == null || !hasWither ? false : e.getSkeletonType() == SkeletonType.WITHER; return true; } // return wither ? "1" : "0"; @Override protected boolean deserialize(final String s) { if (s.equals("1")) wither = true; else if (s.equals("0")) wither = false; else return false; return true; } @Override public void set(final Skeleton entity) { if (hasWither) entity.setSkeletonType(wither ? SkeletonType.WITHER : SkeletonType.NORMAL); } @Override protected boolean match(final Skeleton entity) { return hasWither ? (entity.getSkeletonType() == SkeletonType.WITHER) == wither : true; } @Override public Class<? extends Skeleton> getType() { return Skeleton.class; } @Override protected boolean equals_i(final EntityData<?> obj) { if (!(obj instanceof SkeletonData)) return false; final SkeletonData other = (SkeletonData) obj; return other.wither == wither; } @Override protected int hashCode_i() { return wither ? 1 : 0; } @Override public boolean isSupertypeOf(final EntityData<?> e) { if (e instanceof SkeletonData) return ((SkeletonData) e).wither == wither; return false; } @Override public EntityData getSuperType() { return new SkeletonData(wither); } }