Big Update !!!

1st: updated to latest source from Travja !
2nd: lots of changes and fixes:
- MultiArena working and multispawns! (now 20 default worlds in no order
possible, if more are needed keep them in correct order!)
- the defaultspawnpoint always is the last spawnpoint set, or edit the
configfile (spawns.yml).
- setting spawnpoint working now.
- HA commands extended, fixed and with help..., some commands now have
default worldrecognition
- saving and restore of player inventories !!!!
- fixed join/leave/dead-behaviour
- fixed gracetimer and made each map have its own timer!
- lots more i'm not remembering right now...
This commit is contained in:
Jeppa
2015-01-24 13:29:05 +01:00
parent e7bc986459
commit eeda111f57
27 changed files with 2189 additions and 667 deletions

View File

@@ -4,6 +4,7 @@ import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;
@@ -22,7 +23,6 @@ public class Chests implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void ChestBreak(BlockBreakEvent event){
Player p = event.getPlayer();
Block block = event.getBlock();
if(p.hasPermission("HungerArena.Chest.Break")){
Location blocklocation = block.getLocation();
@@ -35,7 +35,6 @@ public class Chests implements Listener {
list2.remove(blockx + "," + blocky + "," + blockz);
plugin.getChests().set("Storage." + blockx + "," + blocky+ "," + blockz, null);
plugin.getChests().set("StorageXYZ", list2);
plugin.getChests().options().copyDefaults(true);
plugin.saveChests();
p.sendMessage("[HungerArena] Chest Removed!");
} else {
@@ -54,28 +53,29 @@ public class Chests implements Listener {
if(plugin.Playing.get(a).contains(p.getName()) && plugin.canjoin.get(a)){
if(!plugin.restricted || (plugin.restricted && plugin.worlds.contains(p.getWorld().getName()))){
if(block!= null){
if(block.getState() instanceof Chest){
ItemStack[] itemsinchest = ((Chest) block.getState()).getInventory().getContents();
if(block.getType()== Material.CHEST){
ItemStack[] itemsinchest = ((Chest) block.getState()).getInventory().getContents().clone();
int blockx = block.getX();
int blocky = block.getY();
int blockz = block.getZ();
String blockw = block.getWorld().getName().toString();
if(!plugin.getChests().contains("Storage." + blockx + "," + blocky + "," + blockz + ".Location.X")){ //getConfig greift auf normale cfg zu.. -> eigene Routine
plugin.getChests().addDefault("Storage." + blockx + "," + blocky + "," + blockz + ".Location.X", blockx);
plugin.getChests().addDefault("Storage." + blockx + "," + blocky + "," + blockz + ".Location.Y", blocky);
plugin.getChests().addDefault("Storage." + blockx + "," + blocky + "," + blockz + ".Location.Z",blockz);
plugin.getChests().addDefault("Storage." + blockx + "," + blocky + "," + blockz + ".Location.W", blockw);
plugin.getChests().addDefault("Storage." + blockx + "," + blocky + "," + blockz + ".ItemsInStorage", itemsinchest);
plugin.getChests().addDefault("Storage." + blockx + "," + blocky + "," + blockz + ".Arena", a);
if(!plugin.getChests().contains("Storage." + blockx + "," + blocky + "," + blockz)){
plugin.getChests().set("Storage." + blockx + "," + blocky + "," + blockz + ".Location.X", blockx);
plugin.getChests().set("Storage." + blockx + "," + blocky + "," + blockz + ".Location.Y", blocky);
plugin.getChests().set("Storage." + blockx + "," + blocky + "," + blockz + ".Location.Z",blockz);
plugin.getChests().set("Storage." + blockx + "," + blocky + "," + blockz + ".Location.W", blockw);
plugin.getChests().set("Storage." + blockx + "," + blocky + "," + blockz + ".ItemsInStorage", itemsinchest);
plugin.getChests().set("Storage." + blockx + "," + blocky + "," + blockz + ".Arena", a);
plugin.saveChests();
}
List<String> list2 = plugin.getChests().getStringList("StorageXYZ");
if(!list2.contains(blockx + "," + blocky + "," + blockz)){
list2.add(blockx + "," + blocky + "," + blockz);
plugin.getChests().set("StorageXYZ", list2);
plugin.getChests().options().copyDefaults(true);
plugin.saveChests();
p.sendMessage(ChatColor.GREEN + "Thank you for finding this undiscovered chest, it has been stored!!");
}
plugin.reloadChests();
}
}
}

View File

@@ -13,6 +13,7 @@ public class CommandBlock implements Listener {
public CommandBlock(Main m) {
this.plugin = m;
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR)
public void CatchCommand(PlayerCommandPreprocessEvent event){
String cmd = event.getMessage();

View File

@@ -0,0 +1,92 @@
package me.Travja.HungerArena;
public class ConfigManager {
public static Main plugin;
public ConfigManager(Main m){
ConfigManager.plugin = m;
}
public void setup(){
System.out.println("Setting up!");
if(!plugin.config.contains("worlds"))
plugin.config.addDefault("worlds", "{}");
if(!plugin.config.contains("DeathMatch"))
plugin.config.addDefault("DeathMatch", "0");
if(!plugin.config.contains("broadcastAll"))
plugin.config.addDefault("broadcastAll", true);
if(!plugin.config.contains("maxPlayers"))
plugin.config.addDefault("maxPlayers", "24");
if(!plugin.config.contains("Start_Message"))
plugin.config.addDefault("Start_Message", "&bLet The Games Begin!");
if(!plugin.config.contains("Auto_Restart"))
plugin.config.addDefault("Auto_Restart", false);
if(!plugin.config.contains("Auto_Start"))
plugin.config.addDefault("Auto_Start", false);
if(!plugin.config.contains("Need_Confirm"))
plugin.config.addDefault("Need_Confirm", true);
if(!plugin.config.contains("Countdown"))
plugin.config.addDefault("Countdown", true);
if(!plugin.config.contains("Countdown_Timer"))
plugin.config.addDefault("Countdown_Timer", "15");
if(!plugin.config.contains("Grace_Period"))
plugin.config.addDefault("Grace_Period", "60");
if(!plugin.config.contains("Protected_Arena"))
plugin.config.addDefault("Protected_Arena", true);
if(!plugin.config.contains("Protected_Arena_Always"))
plugin.config.addDefault("Protected_Arena_Always", true);
if(!plugin.config.contains("Force_Players_toSpawn"))
plugin.config.addDefault("Force_Players_toSpawn", true);
if(!plugin.config.contains("Frozen_Teleport"))
plugin.config.addDefault("Frozen_Teleport", true);
if(!plugin.config.contains("Explode_on_Move"))
plugin.config.addDefault("Explode_on_Move", false);
if(!plugin.config.contains("Cannon_Death"))
plugin.config.addDefault("Cannon_Death", true);
if(!plugin.config.contains("Reward"))
plugin.config.addDefault("Reward", "- 264,10");
if(!plugin.config.contains("Sponsor_Cost"))
plugin.config.addDefault("Sponsor_Cost", "- 264,1");
if(!plugin.config.contains("EntryFee")){
plugin.config.addDefault("EntryFee.enabled", false);
plugin.config.addDefault("EntryFee.eco", false);
plugin.config.addDefault("EntryFee.cost", "50");
plugin.config.addDefault("EntryFee.fee", "- 265,1");
}else{
if(!plugin.config.contains("EntryFee.enabled"))
plugin.config.addDefault("EntryFee.enabled", false);
if(!plugin.config.contains("EntryFee.eco"))
plugin.config.addDefault("EntryFee.eco", false);
if(!plugin.config.contains("EntryFee.cost"))
plugin.config.addDefault("EntryFee.cost", "50");
if(!plugin.config.contains("EntryFee.fee"))
plugin.config.addDefault("EntryFee.fee", "- 265,1");
}
if(!plugin.config.contains("rewardEco")){
plugin.config.addDefault("rewardEco.enabled", false);
plugin.config.addDefault("rewardEco.reward", "100");
}else{
if(!plugin.config.contains("rewardEco.enabled"))
plugin.config.addDefault("rewardEco.enabled", false);
if(!plugin.config.contains("rewardEco.reward"))
plugin.config.addDefault("rewardEco.reward", "100");
}
if(!plugin.config.contains("sponsorEco")){
plugin.config.addDefault("sponsorEco.enabled", false);
plugin.config.addDefault("sponsorEco.cost", "50");
}else{
if(!plugin.config.contains("sponsorEco.enabled"))
plugin.config.addDefault("sponsorEco.enabled", false);
if(!plugin.config.contains("sponsorEco.cost"))
plugin.config.addDefault("sponsorEco.cost", "50");
}
if(!plugin.config.contains("ChatClose"))
plugin.config.addDefault("ChatClose", true);
if(!plugin.config.contains("ChatClose_Radius"))
plugin.config.addDefault("ChatClose_Radius", "10");
if(!plugin.config.contains("WorldEdit"))
plugin.config.addDefault("WorldEdit", false);
if(!plugin.config.contains("spawnsTool"))
plugin.config.addDefault("spawnsTool", "286");
plugin.saveConfig();
}
}

View File

@@ -1,151 +0,0 @@
package me.Travja.HungerArena;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
public class DeathListener implements Listener{
public Main plugin;
public DeathListener(Main m){
this.plugin = m;
}
public FileConfiguration config;
int i = 0;
int a = 0;
@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event){
final Player p = event.getPlayer();
String pname = p.getName();
for(i = 1; i < plugin.Dead.size(); i++){
if(plugin.Dead.get(i).contains(pname)){
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(",");
World spawnw = plugin.getServer().getWorld(Spawncoords[3]);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
final Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
p.teleport(Spawn);
}
}, 10L);
}
}
}
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event){
Player p = event.getEntity();
Server s = p.getServer();
String pname = p.getName();
int players = plugin.Playing.size()-1;
String leftmsg = null;
for(i = 1; i < plugin.Frozen.size(); i++){
if(plugin.Frozen.get(i).contains(pname)){
if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
players = plugin.Playing.get(a).size()-1;
leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!";
if(plugin.config.getString("Cannon_Death").equalsIgnoreCase("True")){
double y = p.getLocation().getY();
double newy = y+200;
double x = p.getLocation().getX();
double z = p.getLocation().getZ();
Location strike = new Location(p.getWorld(), x, newy, z);
p.getWorld().strikeLightning(strike);
}
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
p.getServer().broadcastMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!");
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!");
}
}
plugin.Frozen.get(a).remove(pname);
plugin.Playing.get(a).remove(pname);
plugin.Dead.get(a).add(pname);
if(plugin.config.getBoolean("broadcastAll")){
p.getServer().broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(leftmsg);
}
}
plugin.winner(a);
}
}else if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
players = plugin.Playing.get(a).size()-1;
leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!";
if(plugin.config.getString("Cannon_Death").equalsIgnoreCase("True")){
double y = p.getLocation().getY();
double newy = y+200;
double x = p.getLocation().getX();
double z = p.getLocation().getZ();
Location strike = new Location(p.getWorld(), x, newy, z);
p.getWorld().strikeLightning(strike);
}
plugin.Dead.get(a).add(pname);
plugin.Playing.get(a).remove(pname);
if(p.getKiller() instanceof Player){
if(p.getKiller().getItemInHand().getType().getId()== 0){
Player killer = p.getKiller();
String killername = killer.getName();
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
s.broadcastMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!");
s.broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!");
g.sendMessage(leftmsg);
}
}
plugin.winner(a);
}else{
Player killer = p.getKiller();
String killername = killer.getName();
String weapon = killer.getItemInHand().getType().toString().replace('_', ' ');
String msg = ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with a(n) " + weapon;
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
s.broadcastMessage(msg);
s.broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(msg);
g.sendMessage(leftmsg);
}
}
plugin.winner(a);
}
}else{
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
s.broadcastMessage(ChatColor.LIGHT_PURPLE + pname + " died of natural causes!");
s.broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(ChatColor.LIGHT_PURPLE + pname + " died of natural causes!");
g.sendMessage(leftmsg);
}
}
plugin.winner(a);
}
}
}
}
}

View File

@@ -1,63 +0,0 @@
package me.Travja.HungerArena;
import java.util.HashMap;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
public class FreezeListener implements Listener {
public Main plugin;
public FreezeListener(Main m) {
this.plugin = m;
}
int i = 0;
int a = 0;
private HashMap<Integer, Boolean> timeUp= new HashMap<Integer, Boolean>();
@EventHandler
public void onPlayerMove(PlayerMoveEvent event){
Player p = event.getPlayer();
String pname = p.getName();
if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
if(plugin.Frozen.get(a).contains(pname) && plugin.config.getString("Frozen_Teleport").equalsIgnoreCase("True")){
if(plugin.config.getString("Explode_on_Move").equalsIgnoreCase("true")){
for(String players: plugin.Playing.get(a)){
final Player playing = plugin.getServer().getPlayerExact(players);
i = plugin.Playing.get(a).indexOf(players);
if(!timeUp.get(a)){
if(!playing.getLocation().getBlock().getLocation().equals(plugin.location.get(a).get(i))){
playing.teleport(plugin.location.get(a).get(i));
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
if(!timeUp.get(a)){
timeUp.put(a, true);
}
}
},30L);
}
}else{
if(!playing.getLocation().getBlock().getLocation().equals(plugin.location.get(a).get(i))){
if(!plugin.Dead.get(a).contains(playing.getName())){
World world = playing.getLocation().getWorld();
world.createExplosion(playing.getLocation(), 0.0F, false);
playing.setHealth(0);
}
}
}
}
}else{
for(String players:plugin.Playing.get(a)){
Player playing = plugin.getServer().getPlayerExact(players);
i = plugin.Playing.get(a).indexOf(players)+1;
if(!playing.getLocation().getBlock().getLocation().equals(plugin.location.get(a).get(i))){
playing.teleport(plugin.location.get(a).get(i));
}
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,9 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import java.util.List;
import me.Travja.HungerArena.Main;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -25,6 +27,7 @@ public class BlockStorage implements Listener {
public BlockStorage(Main m) {
this.plugin = m;
}
@SuppressWarnings("deprecation")
@EventHandler(priority=EventPriority.MONITOR)
public void BlockBreak(BlockBreakEvent event) {
Block b = event.getBlock();
@@ -38,7 +41,19 @@ public class BlockStorage implements Listener {
}
if ((plugin.getArena(p) != null) || (protall)) { /* Bug1a */
//int a = this.plugin.getArena(p).intValue();
int a = 1; //Jeppa: define a default (may be needed if protall is true)
//Jeppa: get a default arena if protall is true... (but use getArena if set...)
int a = 1;
if (protall) {
String ThisWorld = p.getWorld().getName();
int z=0;
for(z = 1; z <= plugin.worldsNames.size(); z++){
if(plugin.worldsNames.get(z)!= null){
if (plugin.worldsNames.get(z).equals(ThisWorld)){
a=z; // now 'a' is the arenanumber of THIS(current) map -->may still be wrong if there are more than one arena on this map...
}
}
}
}
if (plugin.getArena(p) != null) a = plugin.getArena(p);
if ((!event.isCancelled()) && (((plugin.Playing.get(a)).contains(pname)) || (protall))) /* Bug1a */
{
@@ -68,6 +83,7 @@ public class BlockStorage implements Listener {
}
}
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR)
public void Explosion(EntityExplodeEvent event){
List<Block> blocksd = event.blockList();
@@ -106,6 +122,7 @@ public class BlockStorage implements Listener {
}
}
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR)
public void burningBlocks(BlockBurnEvent event){
Block b = event.getBlock();
@@ -144,7 +161,19 @@ public class BlockStorage implements Listener {
}
}
if ((plugin.getArena(p) != null) || (protall)) { /* Bug1a */
int a = 1; //Jeppa: define a default (may be needed if protall is true)
//Jeppa: get a default arena if protall is true... (but use getArena if set...)
int a = 1;
if (protall) {
String ThisWorld = p.getWorld().getName();
int z=0;
for(z = 1; z <= plugin.worldsNames.size(); z++){
if(plugin.worldsNames.get(z)!= null){
if (plugin.worldsNames.get(z).equals(ThisWorld)){
a=z; // now 'a' is the arenanumber of THIS(current) map -->may still be wrong if there are more than one arena on this map...
}
}
}
}
if (plugin.getArena(p) != null) a = plugin.getArena(p);
if(!event.isCancelled()){
if (((plugin.Playing.get(a)).contains(p.getName())) || (protall)) {
@@ -163,7 +192,6 @@ public class BlockStorage implements Listener {
int y = br.getY();
int z = br.getZ();
String coords = w + "," + x + "," + y + "," + z + "," + a;
p.sendMessage(ChatColor.GREEN + "Sand/Gravel will land at " + coords);
List<String> blocks = plugin.data.getStringList("Blocks_Placed");
blocks.add(coords);
plugin.data.set("Blocks_Placed", blocks);
@@ -213,6 +241,7 @@ public class BlockStorage implements Listener {
}
}
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR)
public void bucketFill(PlayerBucketFillEvent event){
if(plugin.getArena(event.getPlayer())!= null){
@@ -241,6 +270,7 @@ public class BlockStorage implements Listener {
}
}
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR)
public void blockMelt(BlockFadeEvent event){
int i = 0;

View File

@@ -0,0 +1,78 @@
package me.Travja.HungerArena.Listeners;
import java.util.Map;
import java.util.Map.Entry;
import me.Travja.HungerArena.Main;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerMoveEvent;
public class Boundaries implements Listener{
public Main plugin;
public Boundaries(Main m){
this.plugin = m;
}
@EventHandler
public void boundsCheck(PlayerMoveEvent event){
Player p = event.getPlayer();
Boolean inGame = plugin.getArena(p) != null;
Boolean spectating = plugin.isSpectating(p);
if(plugin.config.getBoolean("WorldEdit"))
if(insideBounds(p.getLocation()) && (inGame || spectating) || (!insideBounds(p.getLocation()) && inGame))
event.setCancelled(true);
}
@EventHandler
public void blockBounds(BlockBreakEvent event){
Player p = event.getPlayer();
if(plugin.getArena(p)== null)
if(plugin.config.getBoolean("WorldEdit"))
if(insideBounds(event.getBlock().getLocation())){
p.sendMessage(ChatColor.RED + "That block is protected by HungerArena!");
event.setCancelled(true);
}
}
public boolean insideBounds(Location l){
Location minl = null;
Location maxl = null;
if(plugin.spawns.get("Arena")!= null){
Map<String, Object> temp = plugin.spawns.getConfigurationSection("Arena").getValues(false);
for(Entry<String, Object> entry: temp.entrySet()){
if(plugin.spawns.getConfigurationSection("Arena." + entry.getKey())!= null){
String[] min = ((String) plugin.spawns.get("Arena." + entry.getKey()) + ".Min").split(",");
String[] max = ((String) plugin.spawns.get("Arena." + entry.getKey()) + ".Max").split(",");
try{
World world = Bukkit.getWorld(min[0]);
double x = Double.parseDouble(min[1]);
double y = Double.parseDouble(min[2]);
double z = Double.parseDouble(min[3]);
minl = new Location(world, x, y, z);
World world2 = Bukkit.getWorld(max[0]);
double x2 = Double.parseDouble(max[1]);
double y2 = Double.parseDouble(max[2]);
double z2 = Double.parseDouble(max[3]);
minl = new Location(world2, x2, y2, z2);
}catch(Exception e){
System.out.println(e);
return false;
}
if(minl!= null && maxl!= null){
return l.getX() >= minl.getBlockX()
&& l.getX() < maxl.getBlockX() + 1 && l.getY() >= minl.getBlockY()
&& l.getY() < maxl.getBlockY() + 1 && l.getZ() >= minl.getBlockZ()
&& l.getZ() < maxl.getBlockZ() + 1;
}
}
}
}
return false;
}
}

View File

@@ -1,7 +1,9 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import java.util.List;
import me.Travja.HungerArena.Main;
import org.bukkit.ChatColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

View File

@@ -0,0 +1,282 @@
package me.Travja.HungerArena.Listeners;
//import java.util.ArrayList;
import me.Travja.HungerArena.Main;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
//import org.bukkit.entity.Entity;
//import org.bukkit.entity.Damageable;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
//import org.bukkit.event.entity.EntityDamageByEntityEvent;
//import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.scoreboard.DisplaySlot;
public class DeathListener implements Listener{
public Main plugin;
public DeathListener(Main m){
this.plugin = m;
}
public FileConfiguration config;
int i = 0;
int a = 0;
@EventHandler (priority = EventPriority.HIGHEST)
public void onPlayerRespawn(PlayerRespawnEvent event){
final Player p = event.getPlayer();
String pname = p.getName();
//Jeppa: get the arena the player has died in... (may be not the one he joined...)
String ThisWorld = p.getWorld().getName();
int z=0;
for(z = 1; z <= plugin.worldsNames.size(); z++){
if(plugin.worldsNames.get(z)!= null){
if (plugin.worldsNames.get(z).equals(ThisWorld)){
a=z; // now 'a' is the arenanumber of THIS(current) map
}
}
}
//Jeppa: Fix for lonely players :)
for(i = 1; i < plugin.Dead.size(); i++){ // find the dead player and the arena he has joined(if any)
if ((plugin.Dead.get(i) != null) && (plugin.Dead.get(i).contains(pname)) && (plugin.MatchRunning.get(i) == null)) { // Jeppa: the match has not started yet ! if someone joined a game and suicided before any game started ;) -> reset the dead-list
plugin.Dead.get(i).clear();
}
}
//Jeppa: respawn per needInv!
for(i = 0; i < plugin.needInv.size(); i++){
if(plugin.needInv.contains(pname)){
RespawnDeadPlayer(p,a);
}
}
}
private void RespawnDeadPlayer(Player p, int a){
final Player player = p;
String[] Spawncoords = plugin.spawns.getString("Spawn_coords_"+a).split(","); //Jeppa: spawn to correct respawn! Dies ist der Respawn nach "Natural causes"... -> erst HIER Inv wiedergeben...???
World spawnw = plugin.getServer().getWorld(Spawncoords[3]);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
final Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
player.teleport(Spawn);
//Jeppa: restore inv
plugin.RestoreInv(player, player.getName()); // Jeppa: call for restore inventory of leaving player!!
}
}, 10L);
}
/* //Jeppa: theese routines are not used anymore... (obsolete!!!?!)
@EventHandler (priority = EventPriority.HIGHEST)
public void damage(EntityDamageEvent event){
Entity e = event.getEntity();
if(e instanceof Player){
Player p = (Player) e;
if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
if(plugin.Playing.get(a).size()== 2){
if(event.getDamage()>= ((Damageable)p).getHealth()){
event.setCancelled(true);
String[] Spawncoords = plugin.spawns.getString("Spawn_coords_"+a).split(",");
World spawnw = plugin.getServer().getWorld(Spawncoords[3]);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
final Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
p.setHealth((double) 20);
p.setFoodLevel(20);
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
plugin.scoreboards.remove(p.getName());
plugin.Kills.remove(p.getName());
clearInv(p);
p.teleport(Spawn);
plugin.Frozen.get(a).remove(p.getName());
plugin.Playing.get(a).remove(p.getName());
plugin.winner(a);
}
}
}
}
}
@EventHandler (priority = EventPriority.HIGHEST)
public void damage(EntityDamageByEntityEvent event){
Entity e = event.getEntity();
Entity d = event.getEntity();
if(e instanceof Player){
Player p = (Player) e;
if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
if(plugin.Playing.get(a).size()== 2){
if(event.getDamage()>= ((Damageable)p).getHealth()){
event.setCancelled(true);
String[] Spawncoords = plugin.spawns.getString("Spawn_coords_"+a).split(",");
World spawnw = plugin.getServer().getWorld(Spawncoords[3]);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
final Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
plugin.scoreboards.remove(p.getName());
plugin.Kills.remove(p.getName());
clearInv(p);
p.setHealth((double) 20);
p.setFoodLevel(20);
p.teleport(Spawn);
if(d instanceof Player){
Player k = (Player) d;
if(plugin.getArena(k)!= null){
if(plugin.Kills.containsKey(k.getName()))
plugin.Kills.put(k.getName(), plugin.Kills.get(k.getName())+1);
}
}
plugin.Frozen.get(a).remove(p.getName());
plugin.Playing.get(a).remove(p.getName());
plugin.winner(a);
}
}
}
}
}
*/
@SuppressWarnings("deprecation")
@EventHandler (priority = EventPriority.HIGHEST)
public void onPlayerDeath(PlayerDeathEvent event){
Player p = event.getEntity();
Server s = p.getServer();
String pname = p.getName();
if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
int players = plugin.Playing.get(a).size()-1;
String leftmsg = null;
clearInv(p);
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
plugin.scoreboards.remove(p.getName());
if(!plugin.Frozen.get(a).isEmpty()){
if(plugin.Frozen.get(a).contains(pname)){
if(!(p.getKiller() instanceof Player)){
players = plugin.Playing.get(a).size()-1;
leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!";
if(plugin.config.getString("Cannon_Death").equalsIgnoreCase("True")){
double y = p.getLocation().getY();
double newy = y+200;
double x = p.getLocation().getX();
double z = p.getLocation().getZ();
Location strike = new Location(p.getWorld(), x, newy, z);
p.getWorld().strikeLightning(strike);
}
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
p.getServer().broadcastMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!");
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!");
}
}
plugin.Frozen.get(a).remove(pname);
plugin.Playing.get(a).remove(pname);
if(plugin.config.getBoolean("broadcastAll")){
p.getServer().broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(leftmsg);
}
}
plugin.winner(a);
}
}
}else{
players = plugin.Playing.get(a).size()-1;
leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!";
if(plugin.config.getString("Cannon_Death").equalsIgnoreCase("True")){
double y = p.getLocation().getY();
double newy = y+200;
double x = p.getLocation().getX();
double z = p.getLocation().getZ();
Location strike = new Location(p.getWorld(), x, newy, z);
p.getWorld().strikeLightning(strike);
}
plugin.Dead.get(a).add(pname);
plugin.Playing.get(a).remove(pname);
if(p.getKiller() instanceof Player){
if(p.getKiller().getItemInHand().getType().getId()== 0){
Player killer = p.getKiller();
String killername = killer.getName();
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
s.broadcastMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!");
s.broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!");
g.sendMessage(leftmsg);
}
}
if(plugin.Kills.containsKey(killername))
plugin.Kills.put(killername, plugin.Kills.get(killername)+1);
plugin.winner(a);
}else{
Player killer = p.getKiller();
String killername = killer.getName();
String weapon = "a(n) " + killer.getItemInHand().getType().toString().replace('_', ' ');
if(killer.getItemInHand().hasItemMeta())
if(killer.getItemInHand().getItemMeta().hasDisplayName())
weapon = killer.getItemInHand().getItemMeta().getDisplayName();
String msg = ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with " + weapon;
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
s.broadcastMessage(msg);
s.broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(msg);
g.sendMessage(leftmsg);
}
}
if(plugin.Kills.containsKey(killername))
plugin.Kills.put(killername, plugin.Kills.get(killername)+1);
plugin.winner(a);
}
}else{
event.setDeathMessage("");
if(plugin.config.getBoolean("broadcastAll")){
s.broadcastMessage(ChatColor.LIGHT_PURPLE + pname + " died of natural causes!");
s.broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(ChatColor.LIGHT_PURPLE + pname + " died of " + ChatColor.ITALIC + " probably " + ChatColor.LIGHT_PURPLE + "natural causes!");
g.sendMessage(leftmsg);
}
}
plugin.winner(a);
}
}
}
}
@SuppressWarnings("deprecation")
private void clearInv(Player p){
p.getInventory().clear();
p.getInventory().setBoots(null);
p.getInventory().setChestplate(null);
p.getInventory().setHelmet(null);
p.getInventory().setLeggings(null);
p.updateInventory();
}
}

View File

@@ -1,4 +1,6 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import me.Travja.HungerArena.Main;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

View File

@@ -0,0 +1,105 @@
package me.Travja.HungerArena.Listeners;
import java.util.ArrayList;
import java.util.HashMap;
import me.Travja.HungerArena.Main;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
public class FreezeListener implements Listener {
public Main plugin;
public FreezeListener(Main m) {
this.plugin = m;
}
int i = 0;
int a = 0;
private HashMap<Integer, Boolean> timeUp= new HashMap<Integer, Boolean>();
private ArrayList<Integer> timing = new ArrayList<Integer>();
@SuppressWarnings("deprecation")
@EventHandler
public void onPlayerMove(PlayerMoveEvent event){
Player p = event.getPlayer();
String pname = p.getName();
if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
if(plugin.Frozen.get(a).contains(pname) && plugin.config.getString("Frozen_Teleport").equalsIgnoreCase("True")){
if(plugin.config.getString("Explode_on_Move").equalsIgnoreCase("true")){
timeUp.put(a, false);
for(String players: plugin.Playing.get(a)){
Player playing = plugin.getServer().getPlayerExact(players);
i = plugin.Playing.get(a).indexOf(players)+1;
if(!timeUp.get(a) && !timing.contains(a)){
timing.add(a);
if(!playing.getLocation().getBlock().getLocation().equals(plugin.location.get(a).get(i).getBlock().getLocation())){
playing.teleport(plugin.location.get(a).get(i));
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
if(!timeUp.get(a)){
timeUp.put(a, true);
timing.remove(a);
}
}
},30L);
}
}else{
if(!playing.getLocation().getBlock().getLocation().equals(plugin.location.get(a).get(i).getBlock().getLocation())){
if(!plugin.Dead.get(a).contains(playing.getName())){
plugin.Dead.get(a).add(playing.getName());
World world = playing.getLocation().getWorld();
world.createExplosion(playing.getLocation(), 0.0F, false);
playing.setHealth(0.0D);
}
}
}
}
if(plugin.Dead.get(a).contains(pname) && plugin.Playing.get(a).contains(pname)){
int players = plugin.Playing.get(a).size()-1;
String leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!";
if(plugin.config.getString("Cannon_Death").equalsIgnoreCase("True")){
double y = p.getLocation().getY();
double newy = y+200;
double x = p.getLocation().getX();
double z = p.getLocation().getZ();
Location strike = new Location(p.getWorld(), x, newy, z);
p.getWorld().strikeLightning(strike);
}
if(plugin.config.getBoolean("broadcastAll")){
p.getServer().broadcastMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!");
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!");
}
}
plugin.Frozen.get(a).remove(pname);
plugin.Playing.get(a).remove(pname);
if(plugin.config.getBoolean("broadcastAll")){
p.getServer().broadcastMessage(leftmsg);
}else{
for(String gn: plugin.Playing.get(a)){
Player g = plugin.getServer().getPlayer(gn);
g.sendMessage(leftmsg);
}
}
plugin.winner(a);
}
}else{
for(String players:plugin.Playing.get(a)){
Player playing = plugin.getServer().getPlayerExact(players);
i = plugin.Playing.get(a).indexOf(players)+1;
if(!playing.getLocation().getBlock().getLocation().equals(plugin.location.get(a).get(i).getBlock().getLocation())){
playing.teleport(plugin.location.get(a).get(i));
}
}
}
}
}
}
}

View File

@@ -1,4 +1,7 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import me.Travja.HungerArena.HaCommands;
import me.Travja.HungerArena.Main;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -9,6 +12,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scoreboard.DisplaySlot;
public class JoinAndQuitListener implements Listener {
public Main plugin;
@@ -21,6 +25,7 @@ public class JoinAndQuitListener implements Listener {
}
int i = 0;
int a = 0;
@SuppressWarnings("deprecation")
@EventHandler
public void onJoin(PlayerJoinEvent evt) {
Player p = evt.getPlayer();
@@ -32,6 +37,7 @@ public class JoinAndQuitListener implements Listener {
}
}
@SuppressWarnings("deprecation")
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
final Player p = event.getPlayer();
@@ -57,7 +63,7 @@ public class JoinAndQuitListener implements Listener {
}
for(i = 1; i <= plugin.Quit.size(); i++){
if(plugin.Quit.get(i).contains(pname)){
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(",");
String[] Spawncoords = plugin.spawns.getString("Spawn_coords_"+i).split(","); // Jeppa: move the player where he belongs....
String w = Spawncoords[3];
World spawnw = plugin.getServer().getWorld(w);
double spawnx = Double.parseDouble(Spawncoords[0]);
@@ -67,16 +73,17 @@ public class JoinAndQuitListener implements Listener {
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
p.teleport(Spawn);
p.sendMessage(ChatColor.RED + "You have been teleported to spawn because you quit/forfeited!");
p.sendMessage(ChatColor.RED + "You have been teleported to last spawn because you quit/forfeited!");
plugin.RestoreInv(p, p.getName()); // Jeppa: call for restore inventory of leaving player!!
if (plugin.Quit.get(i)!= null) plugin.Quit.get(i).remove(p.getName()); //Jeppa: fix
}
}, 40L);
plugin.Quit.get(i).remove(pname); //Jeppa: fix
pfound = true;
}
}
for(i = 1; i <= plugin.Dead.size(); i++){
if(plugin.Dead.get(i).contains(pname)){
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(",");
String[] Spawncoords = plugin.spawns.getString("Spawn_coords_"+i).split(","); // Jeppa: move the player where he belongs....
String w = Spawncoords[3];
World spawnw = plugin.getServer().getWorld(w);
double spawnx = Double.parseDouble(Spawncoords[0]);
@@ -86,17 +93,18 @@ public class JoinAndQuitListener implements Listener {
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
p.teleport(Spawn);
p.sendMessage(ChatColor.RED + "You have been teleported to spawn because you quit/forfeited!!");
p.sendMessage(ChatColor.RED + "You have been teleported to spawn because you quit/died/forfeited!!");
plugin.RestoreInv(p, p.getName()); // Jeppa: call for restore inventory of leaving player!!
if (plugin.Dead.get(i)!= null) plugin.Dead.get(i).remove(p.getName()); //Jeppa: fix //This may throw an error as it is cleared meanwhile...
}
}, 40L);
plugin.Dead.get(i).remove(pname); //Jeppa: fix
pfound = true;
}
}
for(i = 1; i <= plugin.inArena.size(); i++){
if(plugin.inArena.get(i)!= null){
if(plugin.inArena.get(i).contains(pname)){
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(",");
String[] Spawncoords = plugin.spawns.getString("Spawn_coords_"+i).split(","); // Jeppa: move the player where he belongs....
String w = Spawncoords[3];
World spawnw = plugin.getServer().getWorld(w);
double spawnx = Double.parseDouble(Spawncoords[0]);
@@ -113,32 +121,34 @@ public class JoinAndQuitListener implements Listener {
p.getInventory().setHelmet(null);
plugin.inArena.remove(pname);
p.sendMessage(ChatColor.RED + "You were still in the arena when you left and now the games are over.");
plugin.RestoreInv(p, p.getName()); // Jeppa: call for restore inventory of leaving player!!
if (plugin.inArena.get(i)!= null) plugin.inArena.get(i).remove(p.getName()); //Jeppa: fix
}
}, 40L);
plugin.inArena.get(i).remove(pname); //Jeppa: fix
pfound = true;
}
}
}
//Jeppa: New routine to check if the player reconnected and is unknown to the server!
//Jeppa: New routine to check if the player reconnected and is unknown to the server!
if((plugin.restricted && plugin.worlds.contains(p.getWorld().getName())) || !plugin.restricted){
if (!pfound && plugin.config.getString("Force_Players_toSpawn").equalsIgnoreCase("True")) { //Jeppa: Player is in non of the obove lists.. so he is new to the server due to restart of the server and reconnect of the player...(something like that...)
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(",");
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(","); //Jeppa: Spawn_coords_# may be used .. but default-spawn seems to be more usable ! (can be used as default waitingroom...)
String w = Spawncoords[3];
World spawnw = plugin.getServer().getWorld(w);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
final Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
plugin.RestoreInv(p, p.getName()); // Jeppa: call for restore inventory of leaving player!! -> this is restore inv by restart of server ...
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
p.teleport(Spawn);
p.sendMessage(ChatColor.RED + "You have been teleported to spawn !!");
p.sendMessage(ChatColor.RED + "You have been teleported to spawn!!");
}
}, 40L);
}
}
//^^
//^^
}
@EventHandler
@@ -148,7 +158,7 @@ public class JoinAndQuitListener implements Listener {
for(i = 1; i <= plugin.Frozen.size(); i++){
if (plugin.Frozen.get(i).contains(pname)) {
plugin.Frozen.remove(pname);
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(",");
String[] Spawncoords = plugin.spawns.getString("Spawn_coords").split(",");
String w = Spawncoords[3];
World spawnw = plugin.getServer().getWorld(w);
double spawnx = Double.parseDouble(Spawncoords[0]);
@@ -156,24 +166,34 @@ public class JoinAndQuitListener implements Listener {
double spawnz = Double.parseDouble(Spawncoords[2]);
Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
p.teleport(Spawn);
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
if(plugin.scoreboards.containsKey(p.getName()))
plugin.scoreboards.remove(p.getName());
if(plugin.Kills.containsKey(p.getName()))
plugin.Kills.remove(p.getName());
}
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event){
public void onPlayerQuit(PlayerQuitEvent event){ // delay zum setzen ob Player in der Arena bleibt oder fliegt bei disconnect...
final Player p = event.getPlayer();
final String pname = p.getName();
if(plugin.getArena(p)!= null){
a = plugin.getArena(p);
plugin.Out.get(a).add(pname);
plugin.Playing.get(a).remove(pname);
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){ // Jeppa: how long is this delay?
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
public void run(){
if(plugin.Out.get(a).contains(pname)){
plugin.Quit.get(a).add(pname);
plugin.Out.get(a).remove(pname); //Jeppa: fix
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
if(plugin.scoreboards.containsKey(p.getName()))
plugin.scoreboards.remove(p.getName());
if(plugin.Kills.containsKey(p.getName()))
plugin.Kills.remove(p.getName());
plugin.winner(a);
plugin.inArena.get(a).add(pname); //Jeppa: add him to Quit and to inArena ?
plugin.inArena.get(a).add(pname);
}else if(plugin.getArena(p)== null){
plugin.Quit.get(a).add(pname);
}

View File

@@ -1,4 +1,6 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import me.Travja.HungerArena.Main;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@@ -29,6 +31,11 @@ public class PvP implements Listener {
if(event.isCancelled()){
event.setCancelled(false);
}
if(plugin.gp.get(plugin.getArena(p))!= null){
if(plugin.gp.get(plugin.getArena(p))!= 0){
event.setCancelled(true);
}
}
}
}
if(plugin.getArena(p)!= null){
@@ -51,14 +58,23 @@ public class PvP implements Listener {
if(plugin.getArena(p) != null){
Player shooter = (Player) projectile.getShooter();
if(plugin.getArena(shooter)!= null){
event.setCancelled(false);
if(plugin.gp.get(plugin.getArena(p))!= null)
if(plugin.gp.get(plugin.getArena(p))!= 0)
event.setCancelled(true);
else
event.setCancelled(false);
}
}
}else if(projectile.getShooter() instanceof Entity){
Entity e = projectile.getShooter();
// Entity e = (Entity) projectile.getShooter(); // war in 1.5 zuvor so, ursprünglich aber ohne (Entity), in 1.5.1 wieder ohne???
if(e instanceof Skeleton){
if(plugin.getArena(p)!= null){
event.setCancelled(false);
if(plugin.gp.get(plugin.getArena((Player) e))!= null)
if(plugin.gp.get(plugin.getArena(p))!= 0)
event.setCancelled(true);
else
event.setCancelled(false);
}
}
}
@@ -67,9 +83,10 @@ public class PvP implements Listener {
@EventHandler
public void PlayerDamage(EntityDamageEvent event){
Entity e = event.getEntity();
if(e instanceof Player){
if(plugin.gp!= 0)
event.setCancelled(true);
}
if(e instanceof Player)
if(plugin.getArena((Player) e)!= null)
if(plugin.gp.get(plugin.getArena((Player) e))!= null)
if(plugin.gp.get(plugin.getArena((Player) e))!= 0)
event.setCancelled(true);
}
}

View File

@@ -1,4 +1,6 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import me.Travja.HungerArena.Main;
import org.bukkit.ChatColor;
import org.bukkit.Material;

View File

@@ -1,4 +1,6 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import me.Travja.HungerArena.Main;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@@ -13,6 +15,7 @@ import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.player.*;
import org.bukkit.scoreboard.DisplaySlot;
public class SpectatorListener implements Listener {
public Main plugin;
@@ -84,6 +87,14 @@ public class SpectatorListener implements Listener {
if(plugin.Watching.get(i).contains(attackerName)){
event.setCancelled(true);
Attacker.sendMessage(ChatColor.RED + "You are spectating, you can't interfere with the game!");
return;
}
}
}
for(i = 0; i < plugin.Playing.size(); i++){
if(plugin.Playing.get(i)!= null){
if(plugin.Playing.get(i).contains(attackerName)){
event.setCancelled(true);
}
}
}
@@ -97,6 +108,14 @@ public class SpectatorListener implements Listener {
if(plugin.Watching.get(i).contains(bowManName)){
event.setCancelled(true);
BowMan.sendMessage(ChatColor.RED + "You are spectating, you can't interfere with the game!");
return;
}
}
}
for(i = 0; i < plugin.Playing.size(); i++){
if(plugin.Playing.get(i)!= null){
if(plugin.Playing.get(i).contains(bowManName)){
event.setCancelled(true);
}
}
}
@@ -145,6 +164,11 @@ public class SpectatorListener implements Listener {
double spawnz = Double.parseDouble(Spawncoords[2]);
final Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
p.teleport(Spawn);
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
if(plugin.scoreboards.containsKey(p.getName()))
plugin.scoreboards.remove(p.getName());
if(plugin.Kills.containsKey(p.getName()))
plugin.Kills.remove(p.getName());
}
}
}

View File

@@ -1,7 +1,9 @@
package me.Travja.HungerArena;
package me.Travja.HungerArena.Listeners;
import java.util.List;
import me.Travja.HungerArena.Main;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;

View File

@@ -0,0 +1,49 @@
package me.Travja.HungerArena.Listeners;
import me.Travja.HungerArena.Main;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
public class spawnsListener implements Listener{
public Main plugin;
public spawnsListener(Main m){
this.plugin = m;
}
@SuppressWarnings("deprecation")
@EventHandler
public void interact(PlayerInteractEvent event){
Player p = event.getPlayer();
if(plugin.setting.containsKey(p.getName())){
if(event.getAction()==Action.RIGHT_CLICK_BLOCK){
Location l = event.getClickedBlock().getLocation();
if(p.getItemInHand().getTypeId()== plugin.config.getInt("spawnsTool")){
String[] info = plugin.setting.get(p.getName()).split("-");
if(Integer.parseInt(info[1])!= plugin.config.getInt("maxPlayers")+1){
String coords = l.getWorld().getName() + " " + (l.getX()+.5) + " " + (l.getY()+1) + " " + (l.getZ()+.5); // fixed (.getName()
//Jeppa: Hier das Command anpassen!!!??? oder die Daten vorher bearbeiten die <20>bergeben werden? ->done
//p.sendMessage(ChatColor.DARK_AQUA + "[<5B>bergebeneWerte:] " + ChatColor.RED + "Setting For Arena " + info[0] + " Starting From Point " + info[1]);
//p.sendMessage(ChatColor.DARK_AQUA + "[<5B>bergebeneWerte:] " + ChatColor.RED + "Coords: " + coords);
p.performCommand("startpoint " + info[0] + " " + info[1] + " " + coords);
if(Integer.parseInt(info[1])>= plugin.config.getInt("maxPlayers")){
p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + "All spawns set!");
plugin.setting.remove(p.getName());
}else{
plugin.setting.put(p.getName(), info[0] + "-" + (Integer.parseInt(info[1])+1));
p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + "Next starting point: " + (Integer.parseInt(info[1])+1));
}
}
}
}
}
}
}

View File

@@ -8,45 +8,79 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import me.Travja.HungerArena.Listeners.BlockStorage;
import me.Travja.HungerArena.Listeners.Boundaries;
import me.Travja.HungerArena.Listeners.ChatListener;
import me.Travja.HungerArena.Listeners.DeathListener;
import me.Travja.HungerArena.Listeners.DmgListener;
import me.Travja.HungerArena.Listeners.FreezeListener;
import me.Travja.HungerArena.Listeners.JoinAndQuitListener;
import me.Travja.HungerArena.Listeners.PvP;
import me.Travja.HungerArena.Listeners.Signs;
import me.Travja.HungerArena.Listeners.SpectatorListener;
import me.Travja.HungerArena.Listeners.TeleportListener;
import me.Travja.HungerArena.Listeners.spawnsListener;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.command.CommandExecutor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
public class Main extends JavaPlugin{
static Logger log;
public HashMap<Integer, List<String>> Playing = new HashMap<Integer, List<String>>();
public HashMap<Integer, List<String>> Ready = new HashMap<Integer, List<String>>();
public HashMap<Integer, List<String>> Dead = new HashMap<Integer, List<String>>();
public HashMap<Integer, String> MatchRunning = new HashMap<Integer, String>(); // Jeppa: Marker for the running arenas
public HashMap<Integer, List<String>> Quit = new HashMap<Integer, List<String>>();
public HashMap<Integer, List<String>> Out = new HashMap<Integer, List<String>>();
public HashMap<Integer, List<String>> Watching = new HashMap<Integer, List<String>>();
public HashMap<String, Integer> Kills = new HashMap<String, Integer>();
public HashMap<Integer, List<String>> NeedConfirm = new HashMap<Integer, List<String>>();
public HashMap<Integer, HashMap<Integer, Location>> location = new HashMap<Integer, HashMap<Integer, Location>>();
public ArrayList<Player> Tele = new ArrayList<Player>();
public HashMap<Integer, List<String>> inArena = new HashMap<Integer, List<String>>();
public HashMap<Integer, List<String>> Frozen = new HashMap<Integer, List<String>>();
public HashMap<Integer, List<String>> arena = new HashMap<Integer, List<String>>();
public HashMap<Integer, Boolean> canjoin = new HashMap<Integer, Boolean>();
public HashMap<Integer, Integer> maxPlayers = new HashMap<Integer, Integer>();
public HashMap<Integer, Boolean> open = new HashMap<Integer, Boolean>();
public List<String> worlds;
public HashMap<String, String> setting = new HashMap<String, String>();
public HashMap<Integer, Integer> gp = new HashMap<Integer, Integer>();
public ArrayList<Player> Tele = new ArrayList<Player>();
public ArrayList<String> needInv = new ArrayList<String>();// Jeppa: this is used as a marker now for players that joined an arena (for respawning and restoring inv)
public List<String> worlds = new ArrayList<String>();
public HashMap<Integer, String> worldsNames = new HashMap<Integer, String>(); //Jeppa: for storing the worlds names ...
public HashMap<String, Scoreboard> scoreboards = new HashMap<String, Scoreboard>();
public Listener DeathListener = new DeathListener(this);
public Listener SpectatorListener = new SpectatorListener(this);
public Listener FreezeListener = new FreezeListener(this);
@@ -60,11 +94,18 @@ public class Main extends JavaPlugin{
public Listener Signs = new Signs(this);
public Listener BlockStorage = new BlockStorage(this);
public Listener WinGames = new WinGamesListener(this);
public Listener WorldChange = new WorldChange(this);
public Listener Boundaries = new Boundaries(this);
public Listener spawnsListener = new spawnsListener(this);
public CommandExecutor HaCommands = new HaCommands(this);
public CommandExecutor SponsorCommands = new SponsorCommands(this);
public CommandExecutor SpawnsCommand = new SpawnsCommand(this);
public me.Travja.HungerArena.ConfigManager ConfigManager = new ConfigManager(this);
public boolean exists;
public boolean restricted;
public FileConfiguration config;
public FileConfiguration spawns = null;
public File spawnsFile = null;
@@ -79,34 +120,42 @@ public class Main extends JavaPlugin{
public ArrayList<ItemStack> Reward = new ArrayList<ItemStack>();
public ArrayList<ItemStack> Cost = new ArrayList<ItemStack>();
public ArrayList<ItemStack> Fee = new ArrayList<ItemStack>();
public boolean vault = false;
public boolean eco = false;
public Economy econ = null;
int i = 0;
int v = 0;
int start = 0;
int deathtime = 0;
int timetodeath = 0;
int a = 0;
public int gp = 0;
int grace = 0;
//int grace = 0; //Jeppa: it's no int anymore
//int start = 0; //Jeppa: it's not int anymore...
File PFilePath = new File(getDataFolder(), "/inventories");
@SuppressWarnings("deprecation")
public void onEnable(){
log = this.getLogger();
config = this.getConfig();
config.options().copyDefaults(true);
this.saveDefaultConfig();
if(!new File(this.getDataFolder(), "config.yml").exists())
this.saveDefaultConfig();
spawns = this.getSpawns();
spawns.options().copyDefaults(true);
this.saveSpawns();
if(!new File(this.getDataFolder(), "spawns.yml").exists())
this.saveSpawns();
data = this.getData();
data.options().copyDefaults(true);
this.saveData();
if(!new File(this.getDataFolder(), "Data.yml").exists())
this.saveData();
management = this.getManagement();
management.options().copyDefaults(true);
this.saveManagement();
if(!new File(this.getDataFolder(), "commandAndBlockManagement.yml").exists())
this.saveManagement();
MyChests = this.getChests();
MyChests.options().copyDefaults(true);
this.saveChests();
if(!new File(this.getDataFolder(), "Chests.yml").exists())
this.saveChests();
getServer().getPluginManager().registerEvents(DeathListener, this);
getServer().getPluginManager().registerEvents(SpectatorListener, this);
getServer().getPluginManager().registerEvents(FreezeListener, this);
@@ -119,52 +168,29 @@ public class Main extends JavaPlugin{
getServer().getPluginManager().registerEvents(BlockStorage, this);
getServer().getPluginManager().registerEvents(WinGames, this);
getServer().getPluginManager().registerEvents(Damage, this);
getServer().getPluginManager().registerEvents(WorldChange, this);
getServer().getPluginManager().registerEvents(Boundaries, this);
getServer().getPluginManager().registerEvents(spawnsListener, this);
getCommand("Ha").setExecutor(HaCommands);
getCommand("Sponsor").setExecutor(SponsorCommands);
getCommand("Startpoint").setExecutor(SpawnsCommand);
// Jeppa: create path if not exists
if (!PFilePath.exists()) {
PFilePath.mkdirs();
}
for(File file: PFilePath.listFiles()){ // Jeppa: use changed path
String filename = file.getName();
int lastIndex = filename.lastIndexOf('.');
filename = filename.substring(0, lastIndex >= 0 ? lastIndex : 0); //Jeppa: remove .yml from filename
needInv.add(filename); // Mark player as "lost child" :)
}
i = 1;
if(spawns.getConfigurationSection("Spawns")!= null){
Map<String, Object> temp = spawns.getConfigurationSection("Spawns").getValues(false);
for(Entry<String, Object> entry: temp.entrySet()){
if(spawns.getConfigurationSection("Spawns." + entry.getKey())!= null){
Map<String, Object> temp2 = spawns.getConfigurationSection("Spawns." + entry.getKey()).getValues(false);
for(Map.Entry<String, Object> e: temp2.entrySet()){
if(spawns.get("Spawns." + entry.getKey() + "." + e.getKey())!= null){
String[] coords = ((String) spawns.get("Spawns." + entry.getKey() + "." + e.getKey())).split(",");
Integer a = Integer.parseInt(entry.getKey());
Integer s = Integer.parseInt(e.getKey());
if(location.get(a)== null)
location.put(a, new HashMap<Integer, Location>());
log.info("Added spawn number " + s + " in arena " + a + "!");
location.get(a).put(s, new Location(getServer().getWorld(coords[0]), Double.parseDouble(coords[1]), Double.parseDouble(coords[2]), Double.parseDouble(coords[3])));
}
}
}
}
}
for(i = 1; i <= location.size(); i++){
log.info("Loaded " + location.get(i).size() + " tribute spawns for arena " + i + "!");
Playing.put(i, new ArrayList<String>());
Ready.put(i, new ArrayList<String>());
Dead.put(i, new ArrayList<String>());
Quit.put(i, new ArrayList<String>());
Out.put(i, new ArrayList<String>());
Watching.put(i, new ArrayList<String>());
NeedConfirm.put(i, new ArrayList<String>());
inArena.put(i, new ArrayList<String>());
Frozen.put(i, new ArrayList<String>());
arena.put(i, new ArrayList<String>());
canjoin.put(i, false);
if(location.get(i).size()== config.getInt("maxPlayers")){
maxPlayers.put(i, location.get(i).size());
}else if(location.size()< config.getInt("maxPlayers")){
maxPlayers.put(i, location.get(i).size());
}else if(location.size()> config.getInt("maxPlayers")){
maxPlayers.put(i, config.getInt("maxPlayers"));
}
log.info("Max players is for arena " + i + " is " + maxPlayers.get(i));
open.put(i, true);
}
this.reloadSpawnpoints(); //Jeppa: loading of spawnpoints and fill of areas now moved to subroutine...
if (setupEconomy()) {
log.info("Found Vault! Hooking in for economy!");
}
@@ -210,6 +236,8 @@ public class Main extends JavaPlugin{
}else if(!worlds.isEmpty()){
restricted = true;
}
ConfigManager.setup();
scoreboardInit();
log.info("Enabled v" + getDescription().getVersion());
}
@@ -217,6 +245,85 @@ public class Main extends JavaPlugin{
log.info("Disabled v" + getDescription().getVersion());
}
//Jeppa: routine to reload the spawns and fill arrays as subroutine... will be needed elsewhere...
public void reloadSpawnpoints(){
if(spawns.getConfigurationSection("Spawns")!= null){
Map<String, Object> temp = spawns.getConfigurationSection("Spawns").getValues(false);
for(Entry<String, Object> entry: temp.entrySet()){
if(spawns.getConfigurationSection("Spawns." + entry.getKey())!= null){
Integer a = Integer.parseInt(entry.getKey());
worldsNames.put(a, "none_meening_this_is_not_a_map"); // Jeppa: placeholder
if(location.get(a)== null) location.put(a, new HashMap<Integer, Location>()); // Jeppa: this was only set when real spawnpoints were found.. now we need it to get things work...
Map<String, Object> temp2 = spawns.getConfigurationSection("Spawns." + entry.getKey()).getValues(false);
for(Map.Entry<String, Object> e: temp2.entrySet()){
if(spawns.get("Spawns." + entry.getKey() + "." + e.getKey())!= null){
if(!e.getKey().equals("Max") || !e.getKey().equals("Min")){
String[] coords = ((String) spawns.get("Spawns." + entry.getKey() + "." + e.getKey())).split(",");
Integer s = Integer.parseInt(e.getKey());
log.info("Added spawn number " + s + " in arena " + a + "!");
location.get(a).put(s, new Location(getServer().getWorld(coords[0]), Double.parseDouble(coords[1]), Double.parseDouble(coords[2]), Double.parseDouble(coords[3])));
worldsNames.put(a, coords[0]); // Jeppa: remember arena# and name...!
}
}
}
}
}
}
for(i = 1; i <= location.size(); i++){ //Jeppa: location is arenanumber now!! Count can be changed in defaultconfig !!
if(location.get(i).size()!= 0){
log.info("Loaded " + location.get(i).size() + " tribute spawns for arena " + i + "!");
Playing.put(i, new ArrayList<String>());
Ready.put(i, new ArrayList<String>());
Dead.put(i, new ArrayList<String>());
MatchRunning.put(i, null);
Quit.put(i, new ArrayList<String>());
Out.put(i, new ArrayList<String>());
Watching.put(i, new ArrayList<String>());
NeedConfirm.put(i, new ArrayList<String>());
inArena.put(i, new ArrayList<String>());
Frozen.put(i, new ArrayList<String>());
arena.put(i, new ArrayList<String>());
canjoin.put(i, false);
if(location.get(i).size()== config.getInt("maxPlayers")){
maxPlayers.put(i, location.get(i).size());
}else if(location.size()< config.getInt("maxPlayers")){
maxPlayers.put(i, location.get(i).size());
}else if(location.size()> config.getInt("maxPlayers")){
maxPlayers.put(i, config.getInt("maxPlayers"));
}
log.info("Max players is for arena " + i + " is " + maxPlayers.get(i));
open.put(i, true);
}else{ // Jeppa: this maps/arenas are unused... but still they need some values :( (it's a bugfix for some 'for'-loops..) -> usable arenas 1 - 20 with the new default configuration-file! if more are needed they must count up.. 21 22...
//log.info("If you miss some arenas, f.e. arena #" + i + " make sure arenas are numbered 1 to n !");
log.info("Arena #" + i + " is unused and has no spawns !");
Playing.put(i, new ArrayList<String>());
Ready.put(i, new ArrayList<String>());
Dead.put(i, new ArrayList<String>());
MatchRunning.put(i, null);
Quit.put(i, new ArrayList<String>());
Out.put(i, new ArrayList<String>());
Watching.put(i, new ArrayList<String>());
NeedConfirm.put(i, new ArrayList<String>());
inArena.put(i, new ArrayList<String>());
Frozen.put(i, new ArrayList<String>());
arena.put(i, new ArrayList<String>());
canjoin.put(i, false); // false = free, true = game in action..
maxPlayers.put(i, 0);
open.put(i, false);
}
}
}
public WorldEditPlugin hookWE() {
Plugin wPlugin = getServer().getPluginManager().getPlugin("WorldEdit");
if ((wPlugin == null) || (!(wPlugin instanceof WorldEditPlugin)))
return null;
return (WorldEditPlugin) wPlugin;
}
public boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null) {
return false;
@@ -235,7 +342,6 @@ public class Main extends JavaPlugin{
}
spawns = YamlConfiguration.loadConfiguration(spawnsFile);
// Look for defaults in the jar
InputStream defConfigStream = this.getResource("spawns.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
@@ -264,7 +370,6 @@ public class Main extends JavaPlugin{
}
data = YamlConfiguration.loadConfiguration(dataFile);
// Look for defaults in the jar
InputStream defConfigStream = this.getResource("Data.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
@@ -293,7 +398,6 @@ public class Main extends JavaPlugin{
}
management = YamlConfiguration.loadConfiguration(managementFile);
// Look for defaults in the jar
InputStream defConfigStream = this.getResource("commandAndBlockManagement.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
@@ -316,19 +420,11 @@ public class Main extends JavaPlugin{
this.getLogger().log(Level.SEVERE, "Could not save config to " + managementFile, ex);
}
}
//Jeppa: Add routine like the others for loading Chests with their very own file..
public void reloadChests() {
if (ChestsFile == null) {
ChestsFile = new File(getDataFolder(), "Chests.yml");
}
MyChests = YamlConfiguration.loadConfiguration(ChestsFile);
// Look for defaults in the jar
InputStream defConfigStream = this.getResource("Chests.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
MyChests.setDefaults(defConfig);
}
}
public FileConfiguration getChests() {
if (MyChests == null) {
@@ -346,95 +442,438 @@ public class Main extends JavaPlugin{
this.getLogger().log(Level.SEVERE, "Could not save config to " + ChestsFile, ex);
}
}
//^^
public void winner(final Integer a){
String[] Spawncoords = spawns.getString("Spawn_coords").split(",");
World spawnw = getServer().getWorld(Spawncoords[3]);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
//final String a2 = String.valueOf(a); // Jeppa Test
if(Playing.get(a).size()== 1 && canjoin.get(a)== true){
//Announce winner
for(i = 0; i < Playing.get(a).size(); i++){
String winnername = Playing.get(a).get(i);
Player winner = getServer().getPlayerExact(winnername);
String winnername2 = winner.getName();
getServer().broadcastMessage(ChatColor.GREEN + winnername2 + " is the victor of this Hunger Games!");
winner.getInventory().clear();
winner.getInventory().setBoots(null);
winner.getInventory().setChestplate(null);
winner.getInventory().setHelmet(null);
winner.getInventory().setLeggings(null);
winner.setLevel(0);
for(PotionEffect pe: winner.getActivePotionEffects()){
PotionEffectType potion = pe.getType();
winner.removePotionEffect(potion);
File PFile = null;
FileConfiguration PConfig= null;
public void reloadPFile(String pname) {
if (PFile == null) {
PFile = new File(PFilePath, pname + ".yml"); // Jeppa: set the new playerfile... or the existing one...
}
PConfig = YamlConfiguration.loadConfiguration(PFile);
InputStream defConfigStream = this.getResource("Player.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
PConfig.setDefaults(defConfig);
}
}
public FileConfiguration getPConfig(String pname) {
PFile = null; //Jeppa: must get cleared , else a file from another player could (will) be used at save..!!!
this.reloadPFile(pname); //Jeppa: load/set file
return PConfig;
}
public void savePFile(String pname) {
if (PConfig.getString("player").equals(pname)){ // Jeppa: check if the 'calling' player still is the one who started this...
try {
this.PConfig.save(PFile);
} catch (IOException ex) {
this.getLogger().log(Level.SEVERE, "Could not save config to " + PFile, ex);
}
}else this.getLogger().log(Level.SEVERE, "Could not save config to " + pname + ".yml ! It's not this players inventory!?");
}
@SuppressWarnings("unchecked")
public void RestoreInv(Player p, String pname){ // Jeppa: moved here from 'WorldChange' to make it available for calls from other routines... and lots of changes...
int u=0;
for(u=1;u<Playing.size(); u++){ // do a check thru all available arenas and remove the player from the lists as he is NOT playing anymore...
if(Playing.get(u)!=null){
if(Playing.get(u).contains(pname)){
//Jeppa: player is changing map but not 'Frozen' or he is leaving with /ha leave !!!
Playing.get(u).remove(pname);
if(config.getBoolean("broadcastAll")){
p.getServer().broadcastMessage(ChatColor.RED + pname + " Left Arena " + u + "!");
}
p.sendMessage(ChatColor.AQUA + "You have left the game!");
}
Tele.add(winner);
final World w = winner.getWorld();
winner.teleport(Spawn);
if(config.getBoolean("reloadWorld")){
}
if(Ready.get(u)!=null){
if(Ready.get(u).contains(pname)) Ready.get(u).remove(pname); //Jeppa: if ready is set it can be removed now... maybe this player is just changing worlds without /ha leave ...
//when he comes back he has to /ha join again anyway!
}
}
if(new File(PFilePath, pname + ".yml").exists()){ //Jeppa: the new path...
FileConfiguration pinfo = this.getPConfig(pname);
if((pinfo.getString("player").equals(pname)) && (this.needInv.contains(pname))){ //Jeppa: as waitingroom and playground may be different worlds it will not work checking for the world ... :( but let's check for the player...
try{
ItemStack[] pinv = null;
Object o = pinfo.get("inv");
if(o instanceof ItemStack[]){
pinv = (ItemStack[]) o;
}else if(o instanceof List){
pinv = (ItemStack[]) ((List<ItemStack>) o).toArray(new ItemStack[0]);
}
p.getInventory().setContents(pinv);
p.updateInventory(); //Jeppa: is this still necessary ??? seems to work without.. but...
ItemStack[] parmor = null;
o = pinfo.get("armor");
if(o instanceof ItemStack[]){
parmor = (ItemStack[]) o;
}else if(o instanceof List){
parmor = (ItemStack[]) ((List<ItemStack>) o).toArray(new ItemStack[0]);
}
p.getInventory().setArmorContents(parmor);
p.updateInventory();
p.sendMessage(ChatColor.GOLD + "[HA] " + ChatColor.GREEN + "Your inventory has been restored!");
new File(PFilePath, pname + ".yml").delete();
//Jeppa: maybe there is more than one entry in needInv from disconnection or whatever ... remove them all!
for(i = 0; i < needInv.size(); i++){
String name2 = needInv.get(i);{
if (name2.equals(pname)) needInv.remove(pname);
}
}
}catch(Exception e){
p.sendMessage(ChatColor.RED + "Something went wrong when trying to restore your inv, please contact an administrator.");
System.out.println("Error occured when trying to restore the inv of " + pname + ":");
System.out.println(e);
}
}//else p.sendMessage(ChatColor.RED + "This is not your inventory! :)..."); //DEBUG
}
}
@SuppressWarnings("deprecation")
public void winner(final Integer a){
if(Playing.get(a).size()== 1){
//Jeppa: check if the Arena-respawn is available.
String[] Spawncoords;
if (spawns.getString("Spawn_coords_" + a) != null){
Spawncoords = spawns.getString("Spawn_coords_"+ a).split(",");
} else {
Spawncoords = spawns.getString("Spawn_coords").split(",");
}
World spawnw = getServer().getWorld(Spawncoords[3]);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
if(canjoin.get(a)== true){
//Announce winner
for(i = 0; i < Playing.get(a).size(); i++){
String winnername = Playing.get(a).get(i);
final Player winner = getServer().getPlayerExact(winnername);
String winnername2 = winner.getName();
getServer().broadcastMessage(ChatColor.GREEN + winnername2 + " is the victor of this Hunger Games!");
winner.getInventory().clear();
winner.getInventory().setBoots(null);
winner.getInventory().setChestplate(null);
winner.getInventory().setHelmet(null);
winner.getInventory().setLeggings(null);
winner.setLevel(0);
for(PotionEffect pe: winner.getActivePotionEffects()){
PotionEffectType potion = pe.getType();
winner.removePotionEffect(potion);
}
Tele.add(winner);
needInv.add(winnername2);
winner.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
if(scoreboards.containsKey(winner.getName()))
scoreboards.remove(winner.getName());
if(Kills.containsKey(winner.getName()))
Kills.remove(winner.getName());
//final World w = winner.getWorld();
winner.teleport(Spawn);
////////////////////////////////////////////////////////
//////////////////// FIREWORKS ///////////////////////
////////////////////////////////////////////////////////
for(i = 0; i < 10; i++){
Bukkit.getScheduler().runTaskLater(this, new Runnable(){
public void run(){
//Spawn the Fireworks, get the FireworkMeta.
Firework fw = (Firework) winner.getWorld().spawnEntity(winner.getLocation(), EntityType.FIREWORK);
FireworkMeta fwm = fw.getFireworkMeta();
//Our random generator
Random r = new Random();
//Get the type
int rt = r.nextInt(4) + 1;
Type type = Type.BALL;
if (rt == 1) type = Type.BALL;
if (rt == 2) type = Type.BALL_LARGE;
if (rt == 3) type = Type.BURST;
if (rt == 4) type = Type.CREEPER;
if (rt == 5) type = Type.STAR;
//Get our random colours
int r1i = r.nextInt(17) + 1;
int r2i = r.nextInt(17) + 1;
Color c1 = getColor(r1i);
Color c2 = getColor(r2i);
//Create our effect with this
FireworkEffect effect = FireworkEffect.builder().flicker(r.nextBoolean()).withColor(c1).withFade(c2).with(type).trail(r.nextBoolean()).build();
//Then apply the effect to the meta
fwm.addEffect(effect);
//Generate some random power and set it
int rp = r.nextInt(2) + 1;
fwm.setPower(rp);
//Then apply this to our rocket
fw.setFireworkMeta(fwm);
}
},20 + i*20L);
}
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
/*if(config.getBoolean("reloadWorld")){
getServer().unloadWorld(w, false);
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
public void run(){
getServer().createWorld(new WorldCreator(w.getName()));
}
},200L);
}
if(!config.getBoolean("rewardEco.enabled")){
for(ItemStack Rewards: Reward){
winner.getInventory().addItem(Rewards);
}*/
//Jeppa: restore the winners inventory
this.RestoreInv(winner, winnername2);
if(!config.getBoolean("rewardEco.enabled")){
for(ItemStack Rewards: Reward){
winner.getInventory().addItem(Rewards);
}
}else{
for(ItemStack Rewards: Reward){
winner.getInventory().addItem(Rewards);
}
econ.depositPlayer(winner.getName(), config.getDouble("rewardEco.reward"));
}
}else{
for(ItemStack Rewards: Reward){
winner.getInventory().addItem(Rewards);
if(deathtime.get(a)!= null){
getServer().getScheduler().cancelTask(deathtime.get(a));
deathtime.put(a, null);
}
if(grace.get(a)!= null){
getServer().getScheduler().cancelTask(grace.get(a));
grace.put(a, null);
}
if(start.get(a)!= null){
getServer().getScheduler().cancelTask(start.get(a));
start.put(a, null);
}
econ.depositPlayer(winner.getName(), config.getDouble("rewardEco.reward"));
}
Playing.get(a).clear();
getServer().getScheduler().cancelTask(deathtime);
}
//Show spectators
for(String s1: Watching.get(a)){
Player spectator = getServer().getPlayerExact(s1);
spectator.setAllowFlight(false);
spectator.teleport(Spawn);
for(Player online:getServer().getOnlinePlayers()){
online.showPlayer(spectator);
}
}
if(config.getString("Auto_Restart").equalsIgnoreCase("True")){
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
public void run(){
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha restart " + a);
//Jeppa: clear the other Lists , too! Game is over!
Quit.get(a).clear();
Dead.get(a).clear();
//Show spectators
for(String s1: Watching.get(a)){
Player spectator = getServer().getPlayerExact(s1);
spectator.setAllowFlight(false);
spectator.teleport(Spawn);
for(Player online:getServer().getOnlinePlayers()){
online.showPlayer(spectator);
}
}, 220L);
}
if(config.getString("Auto_Restart").equalsIgnoreCase("True")){
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
public void run(){
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha restart " + a);
}
}, 220L);
}
//Jeppa: new List that marks arenas as started!
MatchRunning.put(a, null);//Jeppa: no, i'm not using boolean ;) this is the marker for the arenas
}else{
//no real winner
for(i = 0; i < Playing.get(a).size(); i++){
String winnername = Playing.get(a).get(i);
Player winner = getServer().getPlayerExact(winnername);
String winnername2 = winner.getName();
winner.getInventory().clear();
winner.getInventory().setBoots(null);
winner.getInventory().setChestplate(null);
winner.getInventory().setHelmet(null);
winner.getInventory().setLeggings(null);
winner.setLevel(0);
for(PotionEffect pe: winner.getActivePotionEffects()){
PotionEffectType potion = pe.getType();
winner.removePotionEffect(potion);
}
Tele.add(winner);
needInv.add(winnername2);
//final World w = winner.getWorld();
winner.teleport(Spawn);
/*if(config.getBoolean("reloadWorld")){
getServer().unloadWorld(w, false);
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
public void run(){
getServer().createWorld(new WorldCreator(w.getName()));
}
},200L);
}*/
//Jeppa: restore the winners inventory
this.RestoreInv(winner, winnername2);
Playing.get(a).clear();
//Jeppa :Fix
if(deathtime.get(a)!= null){
getServer().getScheduler().cancelTask(deathtime.get(a));
deathtime.put(a, null);
}
//Jeppa: clear the other lists too! Game is over!
Quit.get(a).clear();
Dead.get(a).clear();
}
//Show spectators
for(String s1: Watching.get(a)){
Player spectator = getServer().getPlayerExact(s1);
spectator.setAllowFlight(false);
spectator.teleport(Spawn);
for(Player online:getServer().getOnlinePlayers()){
online.showPlayer(spectator);
}
}
if(config.getString("Auto_Restart").equalsIgnoreCase("True")){
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
public void run(){
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha restart " + a);
}
}, 220L);
}
}
}
}
private Color getColor(int i) {
if(i==1)
return Color.AQUA;
else if(i==2)
return Color.BLACK;
else if(i==3)
return Color.BLUE;
else if(i==4)
return Color.FUCHSIA;
else if(i==5)
return Color.GRAY;
else if(i==6)
return Color.GREEN;
else if(i==7)
return Color.LIME;
else if(i==8)
return Color.MAROON;
else if(i==9)
return Color.NAVY;
else if(i==10)
return Color.OLIVE;
else if(i==11)
return Color.ORANGE;
else if(i==12)
return Color.PURPLE;
else if(i==13)
return Color.RED;
else if(i==14)
return Color.SILVER;
else if(i==15)
return Color.TEAL;
else if(i==16)
return Color.WHITE;
else
return Color.YELLOW;
}
private void scoreboardInit(){
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
public void run(){
for(Player pl: getServer().getOnlinePlayers()){
updateScoreboard(pl);
}
}
}, 20L, 10L);
}
@SuppressWarnings("deprecation")
public void updateScoreboard(Player p){
if(getArena(p)!= null){
a = getArena(p);
if(scoreboards.get(p.getName())!= null && scoreboards.get(p.getName()).getObjective("HA")!= null){
Scoreboard sb = scoreboards.get(p.getName());
Objective obj = sb.getObjective("HA");
if(obj!= null){
Score kills = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Kills"));
Score players = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Players"));
Score spectators = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Spectators"));
players.setScore(Playing.get(a).size());
if(Kills.containsKey(p.getName()))
kills.setScore(Kills.get(p.getName()));
if(Watching.get(a)!= null)
spectators.setScore(Watching.get(a).size());
if(config.getInt("DeathMatch")!= 0){
if(timetodeath.get(a)!= null){
if(timetodeath.get(a)> 0){
String secs = String.valueOf((Integer.valueOf(timetodeath.get(a)-timetodeath.get(a)/60*60)< 10) ? "0" + Integer.valueOf(timetodeath.get(a)-timetodeath.get(a)/60*60) : Integer.valueOf(timetodeath.get(a)-timetodeath.get(a)/60*60));
obj.setDisplayName(ChatColor.GREEN + "HA - DMTime: " + ChatColor.AQUA + Integer.valueOf(timetodeath.get(a)/60) + ":" + secs);
}else{
obj.setDisplayName(ChatColor.GREEN + "HA - " + ChatColor.RED + "DEATHMATCH");
}
}
}else{
obj.setDisplayName(ChatColor.GREEN + "HungerArena");
}
p.setScoreboard(sb);
}
}
}
}
public HashMap<Integer, Integer> grace = new HashMap<Integer, Integer>();
public HashMap<Integer, Integer> start = new HashMap<Integer, Integer>();
public HashMap<Integer, Integer> deathtime = new HashMap<Integer, Integer>();
public HashMap<Integer, Integer> timetodeath = new HashMap<Integer, Integer>();
@SuppressWarnings("deprecation")
public void startGames(final Integer a){
String begin = config.getString("Start_Message");
begin = begin.replaceAll("(&([a-f0-9]))", "\u00A7$2");
String begin = ChatColor.translateAlternateColorCodes('&', config.getString("Start_Message"));
final String msg = begin;
/* Jeppa add : */
if(config.getInt("Countdown_Timer") != 0) {
i = config.getInt("Countdown_Timer") ;
} else {
i = 10;
}
for(String gn: Playing.get(a)){
Scoreboard scoreboard = getServer().getScoreboardManager().getNewScoreboard();
Objective sobj = scoreboard.registerNewObjective("HA", "HAData");
sobj.setDisplayName(ChatColor.GREEN + "HA - Starting");
Score skills = sobj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Kills"));
skills.setScore(0);
Score sdeaths = sobj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Spectators"));
sdeaths.setScore(0);
Score splayers = sobj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Players"));
splayers.setScore(0);
sobj.setDisplaySlot(DisplaySlot.SIDEBAR);
Bukkit.getPlayer(gn).setScoreboard(scoreboard);
scoreboards.put(Bukkit.getPlayer(gn).getName(), Bukkit.getPlayer(gn).getScoreboard());
}
getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha Refill " + a);
//Jeppa: new List that marks the arenas as started!
MatchRunning.put(a, "true");//Jeppa: no, i'm not using boolean ;)
if(start.get(a)!= null) getServer().getScheduler().cancelTask(start.get(a));
//start.put(a, null);
if(config.getString("Countdown").equalsIgnoreCase("true")){
start = getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
start.put(a, getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
public void run(){
if(i > 0){
if(worlds.isEmpty()){
if(config.getBoolean("broadcastAll")){
getServer().broadcastMessage(String.valueOf(i));
getServer().broadcastMessage(ChatColor.AQUA + "Game " + a + " starting in: " + String.valueOf(i));
}else{
for(String gn: Playing.get(a)){
Player g = getServer().getPlayer(gn);
g.sendMessage(String.valueOf(i));
g.sendMessage(ChatColor.AQUA + "Game starting in: " + String.valueOf(i));
}
}
}else{
@@ -454,8 +893,22 @@ public class Main extends JavaPlugin{
}
}
i = i-1;
canjoin.put(a, true);
canjoin.put(a, true); // Jeppa: this was the reason for players not being able to join when the timer task was broken (counting below 0)...
if(i== -1){
for(String gn: Playing.get(a)){
Scoreboard scoreboard = getServer().getScoreboardManager().getNewScoreboard();
Objective sobj = scoreboard.registerNewObjective("HA", "HAData");
sobj.setDisplayName(ChatColor.GREEN + "HA - Starting");
Score skills = sobj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Kills"));
skills.setScore(0);
Score sdeaths = sobj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Spectators"));
sdeaths.setScore(0);
Score splayers = sobj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Players"));
splayers.setScore(0);
sobj.setDisplaySlot(DisplaySlot.SIDEBAR);
Bukkit.getPlayer(gn).setScoreboard(scoreboard);
scoreboards.put(Bukkit.getPlayer(gn).getName(), Bukkit.getPlayer(gn).getScoreboard());
}
if(Frozen.get(a)!= null)
Frozen.get(a).clear();
if(config.getBoolean("broadcastAll")){
@@ -466,52 +919,54 @@ public class Main extends JavaPlugin{
g.sendMessage(msg);
}
}
getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha Refill " + a);
getServer().getScheduler().cancelTask(start);
if(config.getInt("Grace_Period")!= 0){
gp = config.getInt("Grace_Period");
grace = getServer().getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("HungerArena"), new Runnable(){
gp.put(a, config.getInt("Grace_Period"));
if(grace.get(a)== null) grace.put(a, getServer().getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("HungerArena"), new Runnable(){
public void run(){
gp = gp-1;
if(gp == 30 || gp == 15 || (gp < 11 && gp != 0)){
gp.put(a, gp.get(a)-1);
if(gp.get(a) == 30 || gp.get(a) == 15 || (gp.get(a) < 11 && gp.get(a) != 0)){
if(config.getBoolean("broadcastAll")){
for(Player wp: location.get(a).get(1).getWorld().getPlayers()){
wp.sendMessage(ChatColor.GREEN + "Grace period ends in " + gp + " seconds!");
wp.sendMessage(ChatColor.GREEN + "Grace period ends in " + gp.get(a) + " seconds!");
}
}else
getServer().broadcastMessage(ChatColor.GREEN + "Grace period ends in " + gp + " seconds!");
getServer().broadcastMessage(ChatColor.GREEN + "Grace period ends in " + gp.get(a) + " seconds!");
}
if(gp == 0){
if(gp.get(a) <= 0){
if(config.getBoolean("broadcastAll")){
for(Player wp: location.get(a).get(1).getWorld().getPlayers()){
wp.sendMessage(ChatColor.GREEN + "Grace period is over, FIGHT!");
}
}else
getServer().broadcastMessage(ChatColor.GREEN + "Grace period is over, FIGHT!");
getServer().getScheduler().cancelTask(grace);
getServer().getScheduler().cancelTask(grace.get(a));
grace.put(a, null);
}
}
},20L, 20L);
},20L, 20L));
}
if(config.getInt("DeathMatch")!= 0){
int death = config.getInt("DeathMatch");
timetodeath = death;
deathtime = getServer().getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("HungerArena"), new Runnable(){
timetodeath.put(a, death*60);
if(deathtime.get(a)== null) deathtime.put(a, getServer().getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("HungerArena"), new Runnable(){
public void run(){
timetodeath = timetodeath-1;
if(config.getBoolean("broadcastAll")){
for(Player wp: location.get(a).get(1).getWorld().getPlayers()){
if(timetodeath!= 0){
wp.sendMessage(ChatColor.RED + String.valueOf(timetodeath) + " mins till the death match!");
timetodeath.put(a, timetodeath.get(a)-1);
if(Integer.valueOf(timetodeath.get(a))%300== 0){
if(config.getBoolean("broadcastAll")){
for(Player wp: location.get(a).get(1).getWorld().getPlayers()){
if(timetodeath.get(a)!= 0){
wp.sendMessage(ChatColor.YELLOW + String.valueOf(timetodeath.get(a)/60) + ChatColor.RED + " mins till the death match!");
}
}
}else{
for(String gn: Playing.get(a)){
Player g = getServer().getPlayer(gn);
g.sendMessage(ChatColor.YELLOW + String.valueOf(timetodeath.get(a)) + ChatColor.RED + " mins till the death match!");
}
}
}else{
for(String gn: Playing.get(a)){
Player g = getServer().getPlayer(gn);
g.sendMessage(ChatColor.RED + String.valueOf(timetodeath) + " mins till the death match!");
}
}
if(timetodeath== 0){
if(timetodeath.get(a)<= 0){
i = 1;
for(String playing: Playing.get(a)){
Player tribute = getServer().getPlayerExact(playing);
tribute.teleport(location.get(a).get(i));
@@ -525,23 +980,24 @@ public class Main extends JavaPlugin{
}
}
if(config.getBoolean("broadcastAll")){
for(Player wp: location.get(a).get(0).getWorld().getPlayers()){
wp.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.size() + " tributes will be facing off!");
for(Player wp: location.get(a).get(1).getWorld().getPlayers()){
wp.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.get(a).size() + " tributes will be facing off!");
}
}else{
for(String gn: Playing.get(a)){
Player g = getServer().getPlayer(gn);
g.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.size() + " tributes will be facing off!");
g.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.get(a).size() + " tributes will be facing off!");
}
}
getServer().getScheduler().cancelTask(deathtime);
getServer().getScheduler().cancelTask(deathtime.get(a));
deathtime.put(a, null);
}
}
}, 1200L, 1200L);
}, 20L, 20L));
}
}
}
}, 20L, 20L);
}, 20L, 20L));
}else{
Frozen.get(a).clear();
if(config.getBoolean("broadcastAll")){

View File

@@ -3,6 +3,7 @@ package me.Travja.HungerArena;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
@@ -14,40 +15,101 @@ public class SpawnsCommand implements CommandExecutor {
public Main plugin;
int i = 0;
int a = 0;
boolean NoPlayerSpawns = true; // Jeppa : default
public SpawnsCommand(Main m) {
this.plugin = m;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
Player p = (Player) sender;
String ThisWorld = p.getWorld().getName();
for(i = 1; i <= plugin.worldsNames.size(); i++){ //worldsNames-Inhalt (integer) entspricht der Arenanummer !!
if(plugin.worldsNames.get(i)!= null){ //Jeppa: damit das so geht m<>ssen die Arenen aber wirklich durchgez<65>hlt sein!!
if (plugin.worldsNames.get(i).equals(ThisWorld)){
a=i; // now 'a' is the arenanumber of THIS(current) map , only available if this map already has min. one startpoint!
//p.sendMessage(ChatColor.GREEN + "[HungerArena]: Diese Map[KurzeAbfrage!! in startpoint]: "+ ThisWorld + " ist nummer: "+ a);
NoPlayerSpawns = false; // mapname found -> there are PlayerSpawns...--> map seems playable
}
}
}
if(cmd.getName().equalsIgnoreCase("StartPoint")){
if(p.hasPermission("HungerArena.StartPoint")){
if(!plugin.restricted || (plugin.restricted && plugin.worlds.contains(p.getWorld().getName()))){
if(args.length>= 2){
Location loc = null;
double x;
double y;
double z;
if(args.length == 6){
try{ // was missing.....
i = Integer.valueOf(args[1]);
a = Integer.valueOf(args[0]);
}catch(Exception e){
p.sendMessage(ChatColor.RED + "Argument not an integer!");
return true; //Jeppa: true??? false ???
}
String world = args[2];
x = Double.parseDouble(args[3]);
y = Double.parseDouble(args[4]);
z = Double.parseDouble(args[5]);
loc = new Location(Bukkit.getWorld(world), x, y, z);
if(plugin.location.get(a)!= null){
if(plugin.location.get(a).size()>= i){
plugin.location.get(a).put(i, new Location(loc.getWorld(), x, y, z));
}else{
plugin.location.get(a).put(i, new Location(loc.getWorld(), x, y, z));
}
}else{
plugin.location.put(a, new HashMap<Integer, Location>());
plugin.location.get(a).put(i, new Location(loc.getWorld(), x, y, z));
plugin.Playing.put(a, new ArrayList<String>());
plugin.Ready.put(a, new ArrayList<String>());
plugin.Dead.put(a, new ArrayList<String>());
plugin.Quit.put(a, new ArrayList<String>());
plugin.Out.put(a, new ArrayList<String>());
plugin.Watching.put(a, new ArrayList<String>());
plugin.NeedConfirm.put(a, new ArrayList<String>());
plugin.inArena.put(a, new ArrayList<String>());
plugin.Frozen.put(a, new ArrayList<String>());
plugin.arena.put(a, new ArrayList<String>());
plugin.canjoin.put(a, false);
plugin.open.put(a, true);
}
String coords = plugin.location.get(a).get(i).getWorld().getName() + "," + (plugin.location.get(a).get(i).getX()+.5) + "," + plugin.location.get(a).get(i).getY() + "," + (plugin.location.get(a).get(i).getZ()+.5);
p.sendMessage(coords);
plugin.spawns.set("Spawns." + a + "." + i, coords);
plugin.saveSpawns();
plugin.maxPlayers.put(a, plugin.location.get(a).size());
p.sendMessage(ChatColor.AQUA + "You have set the spawn location of Tribute " + i + " in arena " + a + "!");
this.plugin.reloadSpawnpoints(); // Jeppa: fix the check-routines looking for arenas in the HashMaps... -> muss in jede routine vor den return!!!
return true;
}
if(args.length>= 2){ // Welt und Pos Startummer angegeben
try{
i = Integer.valueOf(args[1]);
a = Integer.valueOf(args[0]);
}catch(Exception e){
p.sendMessage(ChatColor.RED + "Argument not an integer!");
return true; //Jeppa: wieso true???
}
if(i >= 1 && i <= plugin.config.getInt("maxPlayers")){
if(plugin.restricted && !plugin.worlds.contains(p.getWorld().getName())){
p.sendMessage(ChatColor.GOLD + "We ran the command, however, this isn't a world you defined in the config...");
p.sendMessage(ChatColor.GOLD + "If this is the right world, please disregard this message.");
}
Location ploc = p.getLocation().getBlock().getLocation();
double x = ploc.getX();
double y = ploc.getY();
double z = ploc.getZ();
loc = p.getLocation().getBlock().getLocation();
x = loc.getX();
y = loc.getY();
z = loc.getZ();
if(plugin.location.get(a)!= null){
if(plugin.location.get(a).size()>= i){
plugin.location.get(a).put(i, new Location(ploc.getWorld(), x, y, z));
plugin.location.get(a).put(i, new Location(loc.getWorld(), x, y, z));
}else{
plugin.location.get(a).put(i, new Location(ploc.getWorld(), x, y, z));
plugin.location.get(a).put(i, new Location(loc.getWorld(), x, y, z));
}
}else{
plugin.location.put(a, new HashMap<Integer, Location>());
plugin.location.get(a).put(i, new Location(ploc.getWorld(), x, y, z));
plugin.location.get(a).put(i, new Location(loc.getWorld(), x, y, z));
plugin.Playing.put(a, new ArrayList<String>());
plugin.Ready.put(a, new ArrayList<String>());
plugin.Dead.put(a, new ArrayList<String>());
@@ -61,14 +123,57 @@ public class SpawnsCommand implements CommandExecutor {
plugin.canjoin.put(a, false);
plugin.open.put(a, true);
}
String coords = plugin.location.get(a).get(i).getWorld().getName() + "," + plugin.location.get(a).get(i).getX() + "," + plugin.location.get(a).get(i).getY() + "," + plugin.location.get(a).get(i).getZ();
String coords = plugin.location.get(a).get(i).getWorld().getName() + "," + (plugin.location.get(a).get(i).getX()+.5) + "," + plugin.location.get(a).get(i).getY() + "," + (plugin.location.get(a).get(i).getZ()+.5);
p.sendMessage(coords);
plugin.spawns.set("Spawns." + a + "." + i, coords);
plugin.saveSpawns();
plugin.maxPlayers.put(a, plugin.location.get(a).size());
p.sendMessage(ChatColor.AQUA + "You have set the spawn location of Tribute " + i + " in arena " + a + "!");
this.plugin.reloadSpawnpoints(); // Jeppa: fix for the check-routines looking for arenas in the HashMaps... -> muss in jede routine vor den return!!!
}else{
p.sendMessage(ChatColor.RED + "You can't go past " + plugin.maxPlayers + " players!");
p.sendMessage(ChatColor.RED + "You can't go past " + plugin.config.getInt("maxPlayers") + " players!");
}
}else if(args.length == 1){
if (sender instanceof Player){
p = (Player) sender;
if(NoPlayerSpawns){ // oben wurde keine Welt gefunden! --> this is for changing the arenanumber to correct value ! If this arena already has playerspawns use that arenanumber , ignore the given number
try{
a = Integer.parseInt(args[0]); // kein Int = Fehler, Nicht vorhanden = Fehler
}catch(Exception e){
p.sendMessage(ChatColor.RED + "Argument not an integer!");
return true;
}
}
if (plugin.spawns.get("Spawns." + a) != null){
int start = 1;
while(start<plugin.config.getInt("maxPlayers")+2){
if (plugin.spawns.get("Spawns." + a + "." + start) != null){
start = start+1;
if(start== plugin.config.getInt("maxPlayers")+1){
p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.GREEN + "All spawns set, type /startpoint [Arena #] [Spawn #] to over-ride previous points!");
return true;
}
}else{
int sloc = start;
start = plugin.config.getInt("maxPlayers")+1;
p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + "Begin Setting For Arena " + a + " Starting From Point " + sloc);
plugin.setting.put(p.getName(), a + "-" + sloc);
//--> Mit angabe der Arena wird NICHT der erste punkt gesetzt oder weitergemacht, sondern das Wekzeug aktiviert!
//dem player hier noch das "Werkzeug" per Befehl in die Hand dr<64>cken??? TODO
return true;
}
}
}
p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + "Begin Setting For Arena " + a + " Starting From Point " + 1);
plugin.setting.put(p.getName(), a + "-" + 1);
//dem player hier noch das "Werkzeug" per Befehl in die Hand dr<64>cken??? TODO
return true;
}else{
sender.sendMessage(ChatColor.BLUE + "This Can Only Be Sent As A Player");
}
} else {
p.sendMessage(ChatColor.RED + "No argument given! \nUse command like this:\n/startpoint [Arena #] [Startpoint #] for setting your position as a startpoint.\n/startpoint [Arena #] [Startpoint #] [Mapname] [x] [y] [z] \nOr you can use /startpoint [Arena #] to use the 'spawntool': ID"+ plugin.config.getInt("spawnsTool") +" for setting the startpoints!"); // \n If this map already has startpoints you can use /startpoint without any arguments !");
return false;
}
}
}else{

View File

@@ -15,6 +15,7 @@ public class SponsorCommands implements CommandExecutor {
this.plugin = m;
}
@SuppressWarnings("deprecation")
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if(cmd.getName().equalsIgnoreCase("Sponsor")){

View File

@@ -0,0 +1,44 @@
package me.Travja.HungerArena;
//import java.io.File;
//import java.util.List;
//import org.bukkit.ChatColor;
//import org.bukkit.configuration.file.FileConfiguration;
//import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
//import org.bukkit.inventory.ItemStack;
public class WorldChange implements Listener {
public Main plugin;
public WorldChange(Main m) {
plugin = m;
}
//@SuppressWarnings({ "deprecation", "unchecked" })
@EventHandler
public void worldChange(PlayerChangedWorldEvent event){
Player p = event.getPlayer();
String pname = p.getName();
String ThisWorld = p.getWorld().getName();
int i=0;
int a=0;
for(i = 1; i <= plugin.worldsNames.size(); i++){ //Jeppa: get the number of arena the player is moving in!
if(plugin.worldsNames.get(i)!= null){
if (plugin.worldsNames.get(i).equals(ThisWorld)){
a=i; //now 'a' is the HA-arena the player has moved in now --> can be (or not) the one he joined, !!
}
}
}
//Jeppa:
if(plugin.Frozen.get(a)!=null){ //Dont't call it when changing to non-HA-map!
if(!plugin.Frozen.get(a).contains(pname)){ //Only give back the players inventory at mapchange if this mapchange is NOT a teleport from waitingarea to playgroud!! And don't remove him from "Playing" and "Ready" in this case!!!
//Jeppa : This may collide with other tools like MultiInv oder Multiverse Inv !!!???? but shouldn't !
plugin.RestoreInv(p, pname); //Jeppa: This will also do a check thru all available arenas and remove the player from the lists as he is NOT playing...
}
}
}
}