package eu.univento.woolget.listeners; import eu.univento.core.Core; import eu.univento.core.api.game.Team; import eu.univento.core.api.game.TeamManager; import eu.univento.core.api.player.CustomPlayer; import eu.univento.woolget.WoolGet; import eu.univento.woolget.game.GameCounter; import eu.univento.woolget.game.GameStage; import eu.univento.woolget.game.RestartCounter; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.FallingBlock; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerArmorStandManipulateEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import java.util.HashMap; import java.util.Map; /** * @author joethei * @version 0.1 */ public class Blocks implements Listener{ public static HashMap placedBlocksBlue = new HashMap<>(); public static HashMap placedBlocksYellow = new HashMap<>(); private static Team teamBlue; private static Team teamYellow; private boolean blue; private boolean yellow; public static void setTeams() { teamBlue = TeamManager.getTeam("blue"); teamYellow = TeamManager.getTeam("yellow"); } @EventHandler public void onBlockPlace(BlockPlaceEvent e) { if(WoolGet.getGameStage() == GameStage.Warmup && e.getBlock().getType() == Material.WOOL) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); Bukkit.broadcastMessage(p.getDisplayName() + " hat seinen Block platziert"); if (teamBlue.isPlayer(p)) { placedBlocksBlue.put(p, e.getBlock().getLocation()); if(teamBlue.getPlayers().size() == placedBlocksBlue.size()) { blue = true; Bukkit.broadcastMessage("Team Blau hat alle Blöcke platziert"); } } if (teamYellow.isPlayer(p)) { placedBlocksYellow.put(p, e.getBlock().getLocation()); if(teamYellow.getPlayers().size() == placedBlocksYellow.size()) { yellow = true; Bukkit.broadcastMessage("Team Gelb hat alle Blöcke platziert"); } } if(blue && yellow) { WoolGet.setGameStage(GameStage.Game); WoolGet.gameID = Bukkit.getScheduler().scheduleSyncRepeatingTask(WoolGet.getInstance(), new GameCounter(), 20L, 20L); for(CustomPlayer players : Core.getOnlinePlayers()) { players.setExp(0.0F); } Bukkit.getScheduler().cancelTask(WoolGet.warmupID); } } } @EventHandler public void onBlockBreak(BlockBreakEvent e) { e.setCancelled(true); CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(WoolGet.getGameStage() == GameStage.Game && e.getBlock().getType() == Material.WOOL) { if(placedBlocksBlue.containsValue(e.getBlock().getLocation())) { CustomPlayer t = getKeyByValue(placedBlocksBlue, e.getBlock().getLocation()); if(TeamManager.getTeam(p) != TeamManager.getTeam(t)) { Bukkit.broadcastMessage(p.getDisplayName() + " hat den Block von " + t.getDisplayName() + " abgebaut"); e.getBlock().setType(Material.AIR); TNTPrimed tnt = e.getBlock().getWorld().spawn(e.getBlock().getLocation(), TNTPrimed.class); tnt.setFuseTicks(100); tnt.setGlowing(true); tnt.setCustomName(t.getDisplayName()); tnt.setCustomNameVisible(true); placedBlocksBlue.remove(t); if(placedBlocksBlue.size() == 0) { Bukkit.broadcastMessage("Team Gelb hat gewonnen"); WoolGet.setGameStage(GameStage.Restart); WoolGet.restartID = WoolGet.getInstance().getServer().getScheduler().scheduleSyncRepeatingTask(WoolGet.getInstance(), new RestartCounter(), 20L, 20L); Bukkit.getScheduler().cancelTask(WoolGet.gameID); } }else{ return; } } if(placedBlocksYellow.containsValue(e.getBlock().getLocation())) { CustomPlayer t = getKeyByValue(placedBlocksYellow, e.getBlock().getLocation()); if(TeamManager.getTeam(p) != TeamManager.getTeam(t)) { Bukkit.broadcastMessage(p.getDisplayName() + " hat den Block von " + t.getDisplayName() + " abgebaut"); e.getBlock().setType(Material.AIR); TNTPrimed tnt = e.getBlock().getWorld().spawn(e.getBlock().getLocation(), TNTPrimed.class); tnt.setFuseTicks(100); tnt.setGlowing(true); tnt.setCustomName(t.getDisplayName()); tnt.setCustomNameVisible(true); placedBlocksYellow.remove(t); if(placedBlocksYellow.size() == 0) { Bukkit.broadcastMessage("Team Blau hat gewonnen"); WoolGet.setGameStage(GameStage.Restart); WoolGet.restartID = WoolGet.getInstance().getServer().getScheduler().scheduleSyncRepeatingTask(WoolGet.getInstance(), new RestartCounter(), 20L, 20L); Bukkit.getScheduler().cancelTask(WoolGet.gameID); } }else{ return; } } }if(WoolGet.getGameStage() == GameStage.Warmup || WoolGet.getGameStage() == GameStage.Game) { e.getBlock().getDrops().clear(); if(teamBlue.isPlayer(p)) e.getBlock().getDrops().add(new ItemStack(Material.STAINED_GLASS, 1, (short) 11)); if(teamYellow.isPlayer(p)) e.getBlock().getDrops().add(new ItemStack(Material.STAINED_GLASS, 1, (short) 4)); } } @EventHandler public void onArmorStandManipulate(PlayerArmorStandManipulateEvent e) { e.setCancelled(true); } private CustomPlayer getKeyByValue(HashMap map, Location value) { for(Map.Entry entry : map.entrySet()) { if(entry.getValue().equals(value)) { return entry.getKey(); } } return null; } @EventHandler public void onEntityExplode(EntityExplodeEvent e) { for(Block b : e.blockList()) { float x = -5.0F + (float) (Math.random() * 11.0D); float y = -6.0F + (float) (Math.random() * 12.0D); float z = -7.0F + (float) (Math.random() * 13.0D); FallingBlock fall = b.getWorld().spawnFallingBlock(b.getLocation(), b.getType(), b.getData()); fall.setDropItem(false); fall.setVelocity(new Vector(x, y, z)); } } }