Package ch.njol.skript.entity

Source Code of ch.njol.skript.entity.EndermanData

/*
*   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 java.util.Arrays;

import org.bukkit.entity.Enderman;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.localization.ArgsMessage;
import ch.njol.skript.registrations.Classes;
import ch.njol.util.Checker;
import ch.njol.util.coll.CollectionUtils;

/**
* @author Peter Güttinger
*/
public class EndermanData extends EntityData<Enderman> {
  static {
    EntityData.register(EndermanData.class, "enderman", Enderman.class, "enderman");
  }
 
  @Nullable
  private ItemType[] hand = null;
 
  @SuppressWarnings("unchecked")
  @Override
  protected boolean init(final Literal<?>[] exprs, final int matchedPattern, final ParseResult parseResult) {
    if (exprs[0] != null)
      hand = ((Literal<ItemType>) exprs[0]).getAll();
    return true;
  }
 
  @Override
  protected boolean init(final @Nullable Class<? extends Enderman> c, final @Nullable Enderman e) {
    if (e != null) {
      final MaterialData m = e.getCarriedMaterial();
      if (m != null) {
        final ItemStack i = m.toItemStack(1);
        if (i == null)
          return false;
        hand = new ItemType[] {new ItemType(i)};
      }
    }
    return true;
  }
 
  @Override
  public void set(final Enderman entity) {
    if (hand != null) {
      final ItemType t = CollectionUtils.getRandom(hand);
      assert t != null;
      final ItemStack i = t.getBlock().getRandom();
      if (i != null)
        entity.setCarriedMaterial(i.getData());
    }
   
  }
 
  @Override
  public boolean match(final Enderman entity) {
    return hand == null || SimpleExpression.check(hand, new Checker<ItemType>() {
      @SuppressWarnings("deprecation")
      @Override
      public boolean check(final @Nullable ItemType t) {
        return t != null && t.isOfType(entity.getCarriedMaterial().getItemTypeId(), entity.getCarriedMaterial().getData());
      }
    }, false, false);
  }
 
  @Override
  public Class<Enderman> getType() {
    return Enderman.class;
  }
 
  private final static ArgsMessage format = new ArgsMessage("entities.enderman.format");
 
  @Override
  public String toString(final int flags) {
    final ItemType[] hand = this.hand;
    if (hand == null)
      return super.toString(flags);
    return format.toString(super.toString(flags), Classes.toString(hand, false));
  }
 
  @Override
  protected int hashCode_i() {
    return Arrays.hashCode(hand);
  }
 
  @Override
  protected boolean equals_i(final EntityData<?> obj) {
    if (!(obj instanceof EndermanData))
      return false;
    final EndermanData other = (EndermanData) obj;
    return Arrays.equals(hand, other.hand);
  }
 
//    if (hand == null)
//      return "";
//    final StringBuilder b = new StringBuilder();
//    for (final ItemType h : hand) {
//      final Pair<String, String> s = Classes.serialize(h);
//      if (s == null)
//        return null;
//      if (b.length() != 0)
//        b.append(",");
//      b.append(s.first);
//      b.append(":");
//      b.append(s.second.replace(",", ",,").replace(":", "::"));
//    }
//    return b.toString();
  @SuppressWarnings("null")
  @Override
  @Deprecated
  protected boolean deserialize(final String s) {
    if (s.isEmpty())
      return true;
    final String[] split = s.split("(?<!,),(?!,)");
    hand = new ItemType[split.length];
    for (int i = 0; i < hand.length; i++) {
      final String[] t = split[i].split("(?<!:):(?::)");
      if (t.length != 2)
        return false;
      final Object o = Classes.deserialize(t[0], t[1].replace(",,", ",").replace("::", ":"));
      if (o == null || !(o instanceof ItemType))
        return false;
      hand[i] = (ItemType) o;
    }
    return false;
  }
 
  private boolean isSubhand(final @Nullable ItemType[] sub) {
    if (hand != null)
      return sub != null && ItemType.isSubset(hand, sub);
    return true;
  }
 
  @Override
  public boolean isSupertypeOf(final EntityData<?> e) {
    if (e instanceof EndermanData)
      return isSubhand(((EndermanData) e).hand);
    return false;
  }
 
  @Override
  public EntityData getSuperType() {
    return new EndermanData();
  }
 
}
TOP

Related Classes of ch.njol.skript.entity.EndermanData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.