WoolGet/src/main/java/eu/univento/woolget/listeners/Blocks.java

159 lines
7.1 KiB
Java

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<CustomPlayer, Location> placedBlocksBlue = new HashMap<>();
public static HashMap<CustomPlayer,Location> 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<CustomPlayer, Location> map, Location value) {
for(Map.Entry<CustomPlayer, Location> 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));
}
}
}