All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.craftbukkit.inventory.CraftMetaCharge Maven / Gradle / Ivy

package org.bukkit.craftbukkit.inventory;

import com.google.common.collect.ImmutableMap.Builder;
import net.minecraft.server.NBTTagCompound;
import org.bukkit.FireworkEffect;
import org.bukkit.Material;
import org.bukkit.configuration.serialization.DelegateDeserialization;
import org.bukkit.craftbukkit.inventory.CraftMetaItem.SerializableMeta;
import org.bukkit.inventory.meta.FireworkEffectMeta;

import java.util.Map;

@DelegateDeserialization(SerializableMeta.class)
class CraftMetaCharge extends CraftMetaItem implements FireworkEffectMeta {
  static final ItemMetaKey EXPLOSION = new ItemMetaKey("Explosion", "firework-effect");

  private FireworkEffect effect;

  CraftMetaCharge(CraftMetaItem meta) {
    super(meta);

    if (meta instanceof CraftMetaCharge) {
      effect = ((CraftMetaCharge) meta).effect;
    }
  }

  CraftMetaCharge(Map map) {
    super(map);

    setEffect(SerializableMeta.getObject(FireworkEffect.class, map, EXPLOSION.BUKKIT, true));
  }

  CraftMetaCharge(NBTTagCompound tag) {
    super(tag);

    if (tag.hasKey(EXPLOSION.NBT)) {
      effect = CraftMetaFirework.getEffect(tag.getCompound(EXPLOSION.NBT));
    }
  }

  @Override
  public boolean hasEffect() {
    return effect != null;
  }

  @Override
  public FireworkEffect getEffect() {
    return effect;
  }

  @Override
  public void setEffect(FireworkEffect effect) {
    this.effect = effect;
  }

  @Override
  void applyToItem(NBTTagCompound itemTag) {
    super.applyToItem(itemTag);

    if (hasEffect()) {
      itemTag.set(EXPLOSION.NBT, CraftMetaFirework.getExplosion(effect));
    }
  }

  @Override
  boolean applicableTo(Material type) {
    switch (type) {
      case FIREWORK_CHARGE:
        return true;
      default:
        return false;
    }
  }

  @Override
  boolean isEmpty() {
    return super.isEmpty() && !hasChargeMeta();
  }

  boolean hasChargeMeta() {
    return hasEffect();
  }

  @Override
  boolean equalsCommon(CraftMetaItem meta) {
    if (!super.equalsCommon(meta)) {
      return false;
    }
    if (meta instanceof CraftMetaCharge) {
      CraftMetaCharge that = (CraftMetaCharge) meta;

      return (hasEffect() ? that.hasEffect() && this.effect.equals(that.effect) : !that.hasEffect());
    }
    return true;
  }

  @Override
  boolean notUncommon(CraftMetaItem meta) {
    return super.notUncommon(meta) && (meta instanceof CraftMetaCharge || !hasChargeMeta());
  }

  @Override
  int applyHash() {
    final int original;
    int hash = original = super.applyHash();

    if (hasEffect()) {
      hash = 61 * hash + effect.hashCode();
    }

    return hash != original ? CraftMetaCharge.class.hashCode() ^ hash : hash;
  }

  @Override
  public CraftMetaCharge clone() {
    return (CraftMetaCharge) super.clone();
  }

  @Override
  Builder serialize(Builder builder) {
    super.serialize(builder);

    if (hasEffect()) {
      builder.put(EXPLOSION.BUKKIT, effect);
    }

    return builder;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy