Fixed some Flags and added a security check in FlagsManager

...to avoid duplicates of Listeners
This commit is contained in:
Florian CUNY 2018-02-07 13:41:37 +01:00
parent f33fa2477a
commit 7b55ca70b2
2 changed files with 24 additions and 9 deletions

View File

@ -38,11 +38,11 @@ public class Flags {
public static final Flag BED = new FlagBuilder().id("BED").icon(Material.BED).build();
public static final Flag BREWING = new FlagBuilder().id("BREWING").icon(Material.BREWING_STAND_ITEM).build();
public static final Flag CHEST = new FlagBuilder().id("CHEST").icon(Material.CHEST).build();
public static final Flag DOOR = new FlagBuilder().id("DOOR).allowedByDefault(true").icon(Material.WOODEN_DOOR).build();
public static final Flag CRAFTING = new FlagBuilder().id("CRAFTING).allowedByDefault(true").icon(Material.WORKBENCH).build();
public static final Flag ENCHANTING = new FlagBuilder().id("ENCHANTING).allowedByDefault(true").icon(Material.ENCHANTMENT_TABLE).build();
public static final Flag DOOR = new FlagBuilder().id("DOOR").allowedByDefault(true).icon(Material.WOODEN_DOOR).build();
public static final Flag CRAFTING = new FlagBuilder().id("CRAFTING").allowedByDefault(true).icon(Material.WORKBENCH).build();
public static final Flag ENCHANTING = new FlagBuilder().id("ENCHANTING").allowedByDefault(true).icon(Material.ENCHANTMENT_TABLE).build();
public static final Flag FURNACE = new FlagBuilder().id("FURNACE").icon(Material.FURNACE).build();
public static final Flag GATE = new FlagBuilder().id("GATE).allowedByDefault(true").icon(Material.FENCE_GATE).build();
public static final Flag GATE = new FlagBuilder().id("GATE").allowedByDefault(true).icon(Material.FENCE_GATE).build();
public static final Flag MUSIC = new FlagBuilder().id("MUSIC").icon(Material.JUKEBOX).build();
public static final Flag LEVER_BUTTON = new FlagBuilder().id("LEVER_BUTTON").icon(Material.LEVER).build();
public static final Flag REDSTONE = new FlagBuilder().id("REDSTONE").icon(Material.REDSTONE).build();
@ -51,7 +51,7 @@ public class Flags {
// Entity interactions
public static final Flag ARMOR_STAND = new FlagBuilder().id("ARMOR_STAND").icon(Material.ARMOR_STAND).listener(new EntityInteractListener()).build();
public static final Flag RIDING = new FlagBuilder().id("RIDING").icon(Material.GOLD_BARDING).build();
public static final Flag TRADING = new FlagBuilder().id("TRADING).allowedByDefault(true").icon(Material.EMERALD).build();
public static final Flag TRADING = new FlagBuilder().id("TRADING").allowedByDefault(true).icon(Material.EMERALD).build();
// Breeding
public static final Flag BREEDING = new FlagBuilder().id("BREEDING").icon(Material.CARROT).listener(new BreedingListener()).build();

View File

@ -1,19 +1,29 @@
package us.tastybento.bskyblock.managers;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import us.tastybento.bskyblock.BSkyBlock;
import us.tastybento.bskyblock.api.flags.Flag;
import us.tastybento.bskyblock.api.panels.PanelItem;
import us.tastybento.bskyblock.lists.Flags;
/**
* @author Poslovitch
* @author tastybento
*/
public class FlagsManager {
private BSkyBlock plugin;
private HashMap<String, Flag> flags = new HashMap<>();
/**
* Stores the flag listeners that have already been registered into Bukkit's API to avoid duplicates.
*/
private ArrayList<Listener> registeredListeners = new ArrayList<>();
public FlagsManager(BSkyBlock plugin) {
this.plugin = plugin;
@ -31,8 +41,13 @@ public class FlagsManager {
public void registerFlag(Flag flag) {
//Bukkit.getLogger().info("DEBUG: registering flag " + flag.getID());
flags.put(flag.getID(), flag);
// If there is a listener, register it into Bukkit.
flag.getListener().ifPresent(l -> Bukkit.getServer().getPluginManager().registerEvents(l, plugin));
// If there is a listener which is not already registered, register it into Bukkit.
flag.getListener().ifPresent(l -> {
if (!registeredListeners.contains(l)) {
Bukkit.getServer().getPluginManager().registerEvents(l, plugin);
registeredListeners.add(l);
}
});
}
public HashMap<String, Flag> getFlags() {
@ -40,8 +55,8 @@ public class FlagsManager {
}
/**
* Get flag by string
* @param key - string name same as the enum
* Get flag by ID
* @param id
* @return Flag or null if not known
*/
public Flag getFlagByID(String id) {