// Path: src/main/java/net/frozenbit/plugin5zig/cubecraft/gamemodes/TimeLootVotableMode.java
// public abstract class TimeLootVotableMode extends VotableCubeCraftGameMode {
//     @Override
//     protected String formatVoteString(CubeCraftPlayer player, Map<String, String> vote) {
//         DaytimeType time = vote.containsKey("time") ?
//                 DaytimeType.fromString(vote.get("time")) : DaytimeType.NONE;
//         return (player.getRank() == Rank.GOLD ? ChatColor.DARK_GRAY :
//                 LootType.fromString(firstNonNull(vote.get("loot"), "")).color)
//                + player.getName() + ChatColor.RESET + " " + time.coloredSymbol();
//     }
// 
//     @Override
//     public String formatVoteResult(Map<String, String> draw) {
//         LootType lootType = LootType.fromString(draw.get("loot"));
//         return lootType + "/" + draw.get("time");
//     }
// 
//     @Override
//     protected boolean isShownInVoterList(CubeCraftPlayer player) {
//         return player.isStaff() || Rank.GOLD.compareTo(player.getRank()) <= 0;
//     }
// 
//     @Override
//     protected String[] getVoteCategories() {
//         return new String[]{"loot", "time"};
//     }
// 
//     public enum DaytimeType {
//         DAY_TIME("Day", ChatColor.GOLD, "●"),
//         SUNSET("Sunset", ChatColor.GOLD, "◓"),
//         NIGHT_TIME("Night", ChatColor.GOLD, "☾"),
//         NONE("", ChatColor.RESET, "");
// 
//         public final String chatName;
//         public final ChatColor color;
//         public final String symbol;
// 
//         DaytimeType(String chatName, ChatColor color, String symbol) {
//             this.chatName = chatName;
//             this.color = color;
//             this.symbol = symbol;
//         }
// 
//         public static DaytimeType fromString(String daytime) {
//             for (DaytimeType daytimeType : DaytimeType.values()) {
//                 if (daytimeType.chatName.equals(daytime)) {
//                     return daytimeType;
//                 }
//             }
//             throw new IllegalArgumentException("value '" + daytime + "' unknown");
//         }
// 
//         public String coloredSymbol() {
//             return color + symbol + ChatColor.RESET;
//         }
// 
//         @Override
//         public String toString() {
//             return chatName;
//         }
//     }
// 
//     public enum LootType {
//         NONE("", ChatColor.GRAY),
//         BASIC("Basic", ChatColor.GREEN),
//         NORMAL("Normal", ChatColor.YELLOW),
//         OVERPOWERED("Overpowered", ChatColor.DARK_RED);
// 
//         public final String chatName;
//         public final ChatColor color;
// 
//         LootType(String chatName, ChatColor color) {
//             this.chatName = chatName;
//             this.color = color;
//         }
// 
//         public static LootType fromString(String string) {
//             for (LootType type : LootType.values()) {
//                 if (type.chatName.equalsIgnoreCase(string)) {
//                     return type;
//                 }
//             }
//             throw new IllegalArgumentException("type '" + string + "' not found");
//         }
// 
//         @Override
//         public String toString() {
//             return color + chatName + ChatColor.RESET;
//         }
// 
//     }
// }
// 
// Path: src/main/java/net/frozenbit/plugin5zig/cubecraft/gamemodes/VotableCubeCraftGameMode.java
// public abstract class VotableCubeCraftGameMode extends CubeCraftGameMode {
//     private Table<CubeCraftPlayer, String, String> votes = HashBasedTable.create();
//     private Map<String, String> draw = new HashMap<>();
//     private TimeLootVotableMode.LootType chestType = TimeLootVotableMode.LootType.NONE;
//     private long lastDrawResultTime;
//     private ArrayList<String> formattedVoterList;
//     private String formattedVoteResult;
// 
//     protected abstract String formatVoteString(CubeCraftPlayer player, Map<String, String> vote);
// 
//     protected abstract String formatVoteResult(Map<String, String> draw);
// 
//     protected abstract boolean isShownInVoterList(CubeCraftPlayer player);
// 
//     protected abstract String[] getVoteCategories();
// 
//     public final long getVoteResultTime() {
//         return lastDrawResultTime;
//     }
// 
//     public final String getVoteResult() {
//         if (formattedVoteResult == null) {
//             formattedVoteResult = isDrawDone() ? formatVoteResult(Collections.unmodifiableMap(draw)) : "";
//         }
//         return formattedVoteResult;
//     }
// 
//     public boolean isDrawDone() {
//         for (String category : getVoteCategories()) {
//             if (!draw.containsKey(category)) {
//                 return false;
//             }
//         }
//         return true;
//     }
// 
//     public final List<String> getFormattedVoterList() {
//         if (formattedVoterList == null) {
//             formattedVoterList = new ArrayList<>();
//             for (CubeCraftPlayer player : players) {
//                 if (isShownInVoterList(player)) {
//                     formattedVoterList.add(formatVoteString(player, votes.row(player)));
//                 }
//             }
//         }
//         return formattedVoterList;
//     }
// 
//     @Override
//     public void playerListUpdate() {
//         super.playerListUpdate();
//         formattedVoterList = null;
//     }
// 
//     public final void onDrawResult(String category, String vote) {
//         draw.put(category, vote);
//         lastDrawResultTime = System.currentTimeMillis();
//         formattedVoteResult = null;
//     }
// 
//     public final void onVote(String playerName, String category, String vote) {
//         CubeCraftPlayer voter = getPlayerByName(playerName);
//         votes.put(voter, category, vote);
//         formattedVoterList = null;
//     }
// 
// }


import eu.the5zig.mod.The5zigAPI;
import eu.the5zig.mod.modules.GameModeItem;
import eu.the5zig.mod.render.RenderLocation;
import net.frozenbit.plugin5zig.cubecraft.gamemodes.TimeLootVotableMode;
import net.frozenbit.plugin5zig.cubecraft.gamemodes.VotableCubeCraftGameMode;
package net.frozenbit.plugin5zig.cubecraft.items;



public class GameModifiersItem extends GameModeItem<VotableCubeCraftGameMode> {

    public GameModifiersItem() {
// Path: src/main/java/net/frozenbit/plugin5zig/cubecraft/gamemodes/TimeLootVotableMode.java
// public abstract class TimeLootVotableMode extends VotableCubeCraftGameMode {
//     @Override
//     protected String formatVoteString(CubeCraftPlayer player, Map<String, String> vote) {
//         DaytimeType time = vote.containsKey("time") ?
//                 DaytimeType.fromString(vote.get("time")) : DaytimeType.NONE;
//         return (player.getRank() == Rank.GOLD ? ChatColor.DARK_GRAY :
//                 LootType.fromString(firstNonNull(vote.get("loot"), "")).color)
//                + player.getName() + ChatColor.RESET + " " + time.coloredSymbol();
//     }
// 
//     @Override
//     public String formatVoteResult(Map<String, String> draw) {
//         LootType lootType = LootType.fromString(draw.get("loot"));
//         return lootType + "/" + draw.get("time");
//     }
// 
//     @Override
//     protected boolean isShownInVoterList(CubeCraftPlayer player) {
//         return player.isStaff() || Rank.GOLD.compareTo(player.getRank()) <= 0;
//     }
// 
//     @Override
//     protected String[] getVoteCategories() {
//         return new String[]{"loot", "time"};
//     }
// 
//     public enum DaytimeType {
//         DAY_TIME("Day", ChatColor.GOLD, "●"),
//         SUNSET("Sunset", ChatColor.GOLD, "◓"),
//         NIGHT_TIME("Night", ChatColor.GOLD, "☾"),
//         NONE("", ChatColor.RESET, "");
// 
//         public final String chatName;
//         public final ChatColor color;
//         public final String symbol;
// 
//         DaytimeType(String chatName, ChatColor color, String symbol) {
//             this.chatName = chatName;
//             this.color = color;
//             this.symbol = symbol;
//         }
// 
//         public static DaytimeType fromString(String daytime) {
//             for (DaytimeType daytimeType : DaytimeType.values()) {
//                 if (daytimeType.chatName.equals(daytime)) {
//                     return daytimeType;
//                 }
//             }
//             throw new IllegalArgumentException("value '" + daytime + "' unknown");
//         }
// 
//         public String coloredSymbol() {
//             return color + symbol + ChatColor.RESET;
//         }
// 
//         @Override
//         public String toString() {
//             return chatName;
//         }
//     }
// 
//     public enum LootType {
//         NONE("", ChatColor.GRAY),
//         BASIC("Basic", ChatColor.GREEN),
//         NORMAL("Normal", ChatColor.YELLOW),
//         OVERPOWERED("Overpowered", ChatColor.DARK_RED);
// 
//         public final String chatName;
//         public final ChatColor color;
// 
//         LootType(String chatName, ChatColor color) {
//             this.chatName = chatName;
//             this.color = color;
//         }
// 
//         public static LootType fromString(String string) {
//             for (LootType type : LootType.values()) {
//                 if (type.chatName.equalsIgnoreCase(string)) {
//                     return type;
//                 }
//             }
//             throw new IllegalArgumentException("type '" + string + "' not found");
//         }
// 
//         @Override
//         public String toString() {
//             return color + chatName + ChatColor.RESET;
//         }
// 
//     }
// }
// 
// Path: src/main/java/net/frozenbit/plugin5zig/cubecraft/gamemodes/VotableCubeCraftGameMode.java
// public abstract class VotableCubeCraftGameMode extends CubeCraftGameMode {
//     private Table<CubeCraftPlayer, String, String> votes = HashBasedTable.create();
//     private Map<String, String> draw = new HashMap<>();
//     private TimeLootVotableMode.LootType chestType = TimeLootVotableMode.LootType.NONE;
//     private long lastDrawResultTime;
//     private ArrayList<String> formattedVoterList;
//     private String formattedVoteResult;
// 
//     protected abstract String formatVoteString(CubeCraftPlayer player, Map<String, String> vote);
// 
//     protected abstract String formatVoteResult(Map<String, String> draw);
// 
//     protected abstract boolean isShownInVoterList(CubeCraftPlayer player);
// 
//     protected abstract String[] getVoteCategories();
// 
//     public final long getVoteResultTime() {
//         return lastDrawResultTime;
//     }
// 
//     public final String getVoteResult() {
//         if (formattedVoteResult == null) {
//             formattedVoteResult = isDrawDone() ? formatVoteResult(Collections.unmodifiableMap(draw)) : "";
//         }
//         return formattedVoteResult;
//     }
// 
//     public boolean isDrawDone() {
//         for (String category : getVoteCategories()) {
//             if (!draw.containsKey(category)) {
//                 return false;
//             }
//         }
//         return true;
//     }
// 
//     public final List<String> getFormattedVoterList() {
//         if (formattedVoterList == null) {
//             formattedVoterList = new ArrayList<>();
//             for (CubeCraftPlayer player : players) {
//                 if (isShownInVoterList(player)) {
//                     formattedVoterList.add(formatVoteString(player, votes.row(player)));
//                 }
//             }
//         }
//         return formattedVoterList;
//     }
// 
//     @Override
//     public void playerListUpdate() {
//         super.playerListUpdate();
//         formattedVoterList = null;
//     }
// 
//     public final void onDrawResult(String category, String vote) {
//         draw.put(category, vote);
//         lastDrawResultTime = System.currentTimeMillis();
//         formattedVoteResult = null;
//     }
// 
//     public final void onVote(String playerName, String category, String vote) {
//         CubeCraftPlayer voter = getPlayerByName(playerName);
//         votes.put(voter, category, vote);
//         formattedVoterList = null;
//     }
// 
// }


// Path: src/main/java/net/frozenbit/plugin5zig/cubecraft/items/GameModifiersItem.java
import eu.the5zig.mod.The5zigAPI;
import eu.the5zig.mod.modules.GameModeItem;
import eu.the5zig.mod.render.RenderLocation;
import net.frozenbit.plugin5zig.cubecraft.gamemodes.TimeLootVotableMode;
import net.frozenbit.plugin5zig.cubecraft.gamemodes.VotableCubeCraftGameMode;

package net.frozenbit.plugin5zig.cubecraft.items;



public class GameModifiersItem extends GameModeItem<VotableCubeCraftGameMode> {

    public GameModifiersItem() {
        super(VotableCubeCraftGameMode.class);