/* * 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, 2012 Peter Güttinger * */ package ch.njol.skript.entity; import org.bukkit.entity.Horse; import org.bukkit.entity.Horse.Color; import org.bukkit.entity.Horse.Style; import org.bukkit.entity.Horse.Variant; import org.eclipse.jdt.annotation.Nullable; import ch.njol.skript.Skript; import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.variables.Variables; /** * @author Peter Güttinger */ public class HorseData extends EntityData<Horse> { static { if (Skript.classExists("org.bukkit.entity.Horse")) { register(HorseData.class, "horse", Horse.class, 0, "horse", "donkey", "mule", "undead horse", "skeleton horse"); Variables.yggdrasil.registerSingleClass(Variant.class, "Horse.Variant"); Variables.yggdrasil.registerSingleClass(Color.class, "Horse.Color"); Variables.yggdrasil.registerSingleClass(Style.class, "Horse.Style"); } } @Nullable private Variant variant; @Nullable private Color color; @Nullable private Style style; public HorseData() {} public HorseData(final @Nullable Variant variant) { this.variant = variant; } @Override protected boolean init(final Literal<?>[] exprs, final int matchedPattern, final ParseResult parseResult) { variant = Variant.values()[matchedPattern]; // if (variant == Variant.HORSE) { // // TODO color and style // rem: toString // } return true; } @Override protected boolean init(final @Nullable Class<? extends Horse> c, final @Nullable Horse e) { if (e != null) { variant = e.getVariant(); color = e.getColor(); style = e.getStyle(); } return true; } @Override protected boolean match(final Horse entity) { return (variant == null || variant == entity.getVariant()) && (color == null || color == entity.getColor()) && (style == null || style == entity.getStyle()); } @Override public EntityData getSuperType() { return new HorseData(variant); } @Override public void set(final Horse entity) { if (variant != null) entity.setVariant(variant); if (color != null) entity.setColor(color); if (style != null) entity.setStyle(style); } @Override public boolean isSupertypeOf(final EntityData<?> e) { if (!(e instanceof HorseData)) return false; final HorseData d = (HorseData) e; return (variant == null || variant == d.variant) && (color == null || color == d.color) && (style == null || style == d.style); } @Override public Class<? extends Horse> getType() { return Horse.class; } // return (variant == null ? "" : variant.name()) + "," + (color == null ? "" : color.name()) + "," + (style == null ? "" : style.name()); @Override protected boolean deserialize(final String s) { final String[] split = s.split(","); if (split.length != 3) return false; try { variant = split[0].isEmpty() ? null : Variant.valueOf(split[0]); color = split[1].isEmpty() ? null : Color.valueOf(split[1]); style = split[2].isEmpty() ? null : Style.valueOf(split[2]); } catch (final IllegalArgumentException e) { return false; } return true; } @Override protected int hashCode_i() { final int prime = 31; int result = 1; result = prime * result + (color != null ? color.hashCode() : 0); result = prime * result + (style != null ? style.hashCode() : 0); result = prime * result + (variant != null ? variant.hashCode() : 0); return result; } @Override protected boolean equals_i(final EntityData<?> obj) { if (!(obj instanceof HorseData)) return false; final HorseData other = (HorseData) obj; if (color != other.color) return false; if (style != other.style) return false; if (variant != other.variant) return false; return true; } }