/*
* 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.Wolf;
import org.eclipse.jdt.annotation.Nullable;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SkriptParser.ParseResult;
/**
* @author Peter Güttinger
*/
public class WolfData extends EntityData<Wolf> {
static {
EntityData.register(WolfData.class, "wolf", Wolf.class, 1,
"angry wolf", "wolf", "peaceful wolf",
"wild wolf", "tamed wolf");
}
private int angry = 0;
// private String owner = null;
private int tamed = 0;
@Override
protected boolean init(final Literal<?>[] exprs, final int matchedPattern, final ParseResult parseResult) {
if (matchedPattern <= 2)
angry = matchedPattern - 1;
else
tamed = matchedPattern == 3 ? -1 : 1;
return true;
}
@Override
protected boolean init(final @Nullable Class<? extends Wolf> c, final @Nullable Wolf e) {
angry = e == null ? 0 : e.isAngry() ? 1 : -1;
tamed = e == null ? 0 : e.isTamed() ? 1 : -1;
return true;
}
@Override
public void set(final Wolf entity) {
if (angry != 0)
entity.setAngry(angry == 1);
if (tamed != 0)
entity.setTamed(tamed == 1);
// if (owner != null) {
// if (owner.isEmpty())
// entity.setOwner(null);
// else
// entity.setOwner(Bukkit.getOfflinePlayer(owner));
// }
}
@Override
public boolean match(final Wolf entity) {
return (angry == 0 || entity.isAngry() == (angry == 1)) && (tamed == 0 || entity.isTamed() == (tamed == 1));
// && (owner == null || owner.isEmpty() && entity.getOwner() == null || entity.getOwner() != null && entity.getOwner().getName().equalsIgnoreCase(owner));
}
@Override
public Class<Wolf> getType() {
return Wolf.class;
}
@Override
protected int hashCode_i() {
final int prime = 31;
int result = 1;
result = prime * result + angry;
result = prime * result + tamed;
return result;
}
@Override
protected boolean equals_i(final EntityData<?> obj) {
if (!(obj instanceof WolfData))
return false;
final WolfData other = (WolfData) obj;
if (angry != other.angry)
return false;
if (tamed != other.tamed)
return false;
return true;
}
// return angry + "|" + tamed;
@Override
protected boolean deserialize(final String s) {
final String[] split = s.split("\\|");
if (split.length != 2)
return false;
try {
angry = Integer.parseInt(split[0]);
tamed = Integer.parseInt(split[1]);
return true;
} catch (final NumberFormatException e) {
return false;
}
}
@Override
public boolean isSupertypeOf(final EntityData<?> e) {
if (e instanceof WolfData)
return (angry == 0 || ((WolfData) e).angry == angry) && (tamed == 0 || ((WolfData) e).tamed == tamed);
return false;
}
@Override
public EntityData getSuperType() {
return new WolfData();
}
}