193 lines
5.9 KiB
Java
193 lines
5.9 KiB
Java
package eu.univento.core.api.map;
|
|
|
|
import eu.univento.core.api.player.CustomPlayer;
|
|
import eu.univento.core.api.player.Perms;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
import org.bukkit.inventory.Inventory;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Random;
|
|
|
|
/**
|
|
* @author joethei
|
|
* @version 0.1
|
|
*/
|
|
public class MapVoting implements Listener{
|
|
|
|
|
|
private Map map1;
|
|
private Map map2;
|
|
private Map map3;
|
|
private String invTitle;
|
|
private ArrayList<CustomPlayer> votes1 = new ArrayList<>();
|
|
private ArrayList<CustomPlayer> votes2 = new ArrayList<>();
|
|
private ArrayList<CustomPlayer> votes3 = new ArrayList<>();
|
|
private Map forcedMap;
|
|
private ArrayList<Map> allMaps = new ArrayList<>();
|
|
|
|
public MapVoting(String invTitle) {
|
|
this.invTitle = invTitle;
|
|
}
|
|
|
|
public void vote(CustomPlayer p, Integer map) {
|
|
switch (map) {
|
|
case 1 : votes1.add(p);
|
|
case 2 : votes2.add(p);
|
|
case 3 : votes3.add(p);
|
|
}
|
|
}
|
|
|
|
public int getVotes(Integer map) {
|
|
switch (map) {
|
|
case 1 : return votes1.size();
|
|
case 2 : return votes2.size();
|
|
case 3 : return votes3.size();
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
public Map getForcedMap() {
|
|
return forcedMap;
|
|
}
|
|
|
|
public Map getWinningMap() {
|
|
if(forcedMap != null) {
|
|
return forcedMap;
|
|
}
|
|
ArrayList<Integer> votes = new ArrayList<>();
|
|
votes.add(votes1.size());
|
|
votes.add(votes2.size());
|
|
votes.add(votes3.size());
|
|
int max = Collections.max(votes);
|
|
return getMap(getMapID(max));
|
|
}
|
|
|
|
public Map getMap(int id) {
|
|
switch (id) {
|
|
case 1: return map1;
|
|
case 2: return map2;
|
|
case 3: return map3;
|
|
default: return null;
|
|
}
|
|
}
|
|
|
|
public int getMapID(int votes) {
|
|
if(votes == votes1.size()) {
|
|
return 1;
|
|
}
|
|
if(votes == votes2.size()) {
|
|
return 2;
|
|
}
|
|
if(votes == votes3.size()) {
|
|
return 3;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public void setVotingMaps() {
|
|
ArrayList<Map> temp = allMaps;
|
|
Random random = new Random();
|
|
map1 = allMaps.get(random.nextInt(temp.size()));
|
|
temp.remove(map1);
|
|
map2 = allMaps.get(random.nextInt(temp.size()));
|
|
temp.remove(map2);
|
|
map3 = allMaps.get(random.nextInt(temp.size()));
|
|
temp.remove(map3);
|
|
|
|
}
|
|
|
|
public void addMap(Map map) {
|
|
allMaps.add(map);
|
|
}
|
|
|
|
public Inventory getInventory(CustomPlayer p) {
|
|
if(p.isAllowed(Perms.Ranks.Admin)) {
|
|
Inventory inv = Bukkit.createInventory(p, 45, invTitle);
|
|
|
|
for(Map map : allMaps) {
|
|
ItemStack item = new ItemStack(map.getItem());
|
|
ItemMeta meta = item.getItemMeta();
|
|
meta.setDisplayName(map.getName());
|
|
ArrayList<String> lore = new ArrayList<>();
|
|
lore.add("§aby " + map.getBuilder());
|
|
meta.setLore(lore);
|
|
|
|
inv.addItem(item);
|
|
}
|
|
|
|
return inv;
|
|
}else{
|
|
Inventory inv = Bukkit.createInventory(p, 9, invTitle);
|
|
|
|
ItemStack map1 = new ItemStack(this.map1.getItem());
|
|
ItemMeta map1Meta = map1.getItemMeta();
|
|
map1Meta.setDisplayName(this.map1.getName());
|
|
ArrayList<String> map1Lore = new ArrayList<>();
|
|
map1Lore.add("§aby " + this.map1.getBuilder());
|
|
map1Meta.setLore(map1Lore);
|
|
map1.setItemMeta(map1Meta);
|
|
|
|
ItemStack map2 = new ItemStack(this.map2.getItem());
|
|
ItemMeta map2Meta = map2.getItemMeta();
|
|
map2Meta.setDisplayName(this.map2.getName());
|
|
ArrayList<String> map2Lore = new ArrayList<>();
|
|
map2Lore.add("§aby " + this.map2.getBuilder());
|
|
map2Meta.setLore(map2Lore);
|
|
map2.setItemMeta(map2Meta);
|
|
|
|
ItemStack map3 = new ItemStack(this.map3.getItem());
|
|
ItemMeta map3Meta = map3.getItemMeta();
|
|
map3Meta.setDisplayName(this.map3.getName());
|
|
ArrayList<String> map3Lore = new ArrayList<>();
|
|
map3Lore.add("§aby " + this.map3.getBuilder());
|
|
map3Meta.setLore(map3Lore);
|
|
map3.setItemMeta(map3Meta);
|
|
|
|
inv.setItem(1, map1);
|
|
inv.setItem(4, map2);
|
|
inv.setItem(7, map3);
|
|
|
|
return inv;
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onInventoryClick(InventoryClickEvent e) {
|
|
if(e.getWhoClicked() instanceof Player) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getWhoClicked().getName());
|
|
if(e.getInventory().getName().equals(invTitle)) {
|
|
if(p.isAllowed(Perms.Ranks.Admin)) {
|
|
allMaps.stream().filter(map -> e.getCurrentItem().getType() == map.getItem()).forEach(map -> {
|
|
forcedMap = map;
|
|
});
|
|
}else{
|
|
if(e.getCurrentItem().getType() == map1.getItem()) {
|
|
vote(p, 1);
|
|
p.closeInventory();
|
|
}
|
|
if(e.getCurrentItem().getType() == map2.getItem()) {
|
|
vote(p, 2);
|
|
p.closeInventory();
|
|
}
|
|
if(e.getCurrentItem().getType() == map3.getItem()) {
|
|
vote(p, 3);
|
|
p.closeInventory();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
public void registerListener(Plugin plugin) {
|
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
|
}
|
|
} |