Package com.bergerkiller.bukkit.common.internal

Source Code of com.bergerkiller.bukkit.common.internal.CommonEntityBlacklist$BlacklistFilter

package com.bergerkiller.bukkit.common.internal;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;

import me.snowleo.bleedingmobs.BleedingMobs;

import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.plugin.Plugin;

import regalowl.hyperconomy.HyperConomy;

import com.bergerkiller.bukkit.common.filtering.Filter;
import com.kellerkindt.scs.ShowCaseStandalone;
import com.narrowtux.showcase.Showcase;

public class CommonEntityBlacklist implements Filter<Entity> {
  private final List<BlacklistFilter> availableFilters = new ArrayList<BlacklistFilter>();

  public CommonEntityBlacklist() {
    // ===============================================
    // ==== Initialize all available filters here ====
    // ===============================================

    // Showcase
    availableFilters.add(new BlacklistFilter("Showcase") {
      @Override
      public boolean isFiltered(Entity element) {
        if (element instanceof Item) {
          return Showcase.instance.getItemByDrop((Item) element) != null;
        }
        return false;
      }
    });
    // Showcase Standalone
    availableFilters.add(new BlacklistFilter("ShowCaseStandalone") {
      @Override
      public boolean isFiltered(Entity element) {
        if (element instanceof Item) {
          ShowCaseStandalone plugin = (ShowCaseStandalone) getPlugin();
          return plugin.getShopHandler().isShopItem((Item) element);
        }
        return false;
      }
    });
    // HyperConomy
    availableFilters.add(new BlacklistFilter("HyperConomy") {
      @Override
      public boolean isFiltered(Entity element) {
        if (element instanceof Item) {
          return HyperConomy.hyperAPI.isItemDisplay((Item) element);
        }
        return false;
      }
    });
    // Bleeding Mobs
    availableFilters.add(new BlacklistFilter("BleedingMobs") {
      @Override
      @SuppressWarnings("deprecation")
      public boolean isFiltered(Entity element) {
        if (element instanceof Item) {
          BleedingMobs bm = (BleedingMobs) this.getPlugin();
          if (bm.isSpawning() || (bm.isWorldEnabled(element.getWorld()) && bm.isParticleItem(element.getUniqueId()))) {
            return true;
          }
        }
        return false;
      }
    });
  }

  public void updateDependency(Plugin plugin, String pluginName, boolean enabled) {
    for (BlacklistFilter filter : this.availableFilters) {
      if (filter.matchPlugin(pluginName)) {
        filter.trySetEnabled(plugin, enabled);
      }
    }
  }

  @Override
  public boolean isFiltered(Entity element) {
    for (BlacklistFilter filter : this.availableFilters) {
      try {
        if (filter.isEnabled() && filter.isFiltered(element)) {
          return true;
        }
      } catch (Throwable t) {
        CommonPlugin.LOGGER.log(Level.SEVERE, filter.getPluginName() +
            " entity filter verification failed (update needed?), contact the authors!");
        filter.trySetEnabled(filter.getPlugin(), false);
      }
    }
    return false;
  }

  private static abstract class BlacklistFilter implements Filter<Entity> {
    private final String pluginName;
    private boolean enabled = false;
    private Plugin pluginInstance = null;

    public BlacklistFilter(String pluginName) {
      this.pluginName = pluginName;
    }

    public void trySetEnabled(Plugin plugin, boolean enabled) {
      this.enabled = enabled;
      try {
        onEnabledChange(plugin, enabled);
        if (enabled) {
          CommonPlugin.LOGGER.log(Level.INFO, pluginName + " detected: Items belonging to this plugin will be ignored");
        }
      } catch (Throwable t) {
        CommonPlugin.LOGGER.log(Level.SEVERE, "Error while " + (enabled ? "adding" : "removing") +
            " item ignore support for " + pluginName, t);
      }
      this.pluginInstance = enabled ? plugin : null;
    }

    public void onEnabledChange(Plugin plugin, boolean enabled) {
    }

    public boolean isEnabled() {
      return this.enabled;
    }

    public String getPluginName() {
      return pluginName;
    }

    public Plugin getPlugin() {
      return pluginInstance;
    }

    public boolean matchPlugin(String pluginName) {
      return pluginName.equals(this.pluginName);
    }
  }
}
TOP

Related Classes of com.bergerkiller.bukkit.common.internal.CommonEntityBlacklist$BlacklistFilter

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.