War v0.5 (Rommel)

This commit is contained in:
taoneill 2011-01-23 18:57:03 -05:00
parent 41f7bc881b
commit 4d8179c8fd
7 changed files with 87 additions and 73 deletions

View File

@ -45,7 +45,6 @@ public class War extends JavaPlugin {
public War(PluginLoader pluginLoader, Server instance,
PluginDescriptionFile desc, File folder, File plugin, ClassLoader cLoader) {
super(pluginLoader, instance, desc, folder, plugin, cLoader);
// TODO: switch to bukkit config file
this.desc = desc;
}
@ -72,10 +71,7 @@ public class War extends JavaPlugin {
for(Warzone warzone : warzones) {
for(Team team : warzone.getTeams()) {
for(Player player : team.getPlayers()) {
if(warzone.hasPlayerInventory(player.getName())) {
warzone.restorePlayerInventory(player);
player.sendMessage(str("War disabled. Your inventory has (hopefully) been restored."));
}
warzone.handlePlayerLeave(player, warzone.getTeleport());
}
}
if(warzone.getLobby() != null) {
@ -168,7 +164,13 @@ public class War extends JavaPlugin {
boolean warped = false;
for(Warzone warzone : this.getWarzones()) {
if(warzone.getName().equals(arguments[0]) && warzone.getTeleport() != null){
player.teleportTo(warzone.getTeleport());
Team playerTeam = getPlayerTeam(player.getName());
if(playerTeam != null) {
Warzone playerWarzone = getPlayerTeamWarzone(player.getName());
playerWarzone.handlePlayerLeave(player, warzone.getTeleport());
} else {
player.teleportTo(warzone.getTeleport());
}
warped = true;
}
}
@ -227,6 +229,9 @@ public class War extends JavaPlugin {
team.addPlayer(player);
team.resetSign();
warzone.respawnPlayer(team, player);
if(warHub != null) {
warHub.resetZoneSign(warzone);
}
foundTeam = true;
} else {
player.sendMessage(this.str("Team " + name + " is full."));
@ -250,22 +255,8 @@ public class War extends JavaPlugin {
player.sendMessage(this.str("Usage: /leave. " +
"Must be in a team already."));
} else {
Team playerTeam = this.getPlayerTeam(player.getName());
playerTeam.removePlayer(player.getName());
playerTeam.resetSign();
Warzone zone = this.warzone(player.getLocation());
if(zone.getLobby() != null) {
zone.getLobby().resetTeamGateSign(playerTeam);
}
player.teleportTo(zone.getTeleport());
if(zone.hasPlayerInventory(player.getName())) {
zone.restorePlayerInventory(player);
}
player.sendMessage(this.str("Left the zone. Your inventory has (hopefully) been restored."));
if(this.getWarHub() != null) {
this.getWarHub().resetZoneSign(zone);
}
Warzone zone = getPlayerTeamWarzone(player.getName());
zone.handlePlayerLeave(player, zone.getTeleport());
}
}
@ -301,11 +292,7 @@ public class War extends JavaPlugin {
Team playerTeam = this.getPlayerTeam(player.getName());
Warzone playerWarzone = getPlayerTeamWarzone(player.getName());
if(playerTeam != null) { // was in zone
playerTeam.removePlayer(player.getName());
}
if(playerWarzone != null) {
playerWarzone.getLobby().resetTeamGateSign(playerTeam);
this.getWarHub().resetZoneSign(playerWarzone); // gotta see i just left
playerWarzone.handlePlayerLeave(player, this.getWarHub().getLocation());
}
player.teleportTo(this.getWarHub().getLocation());
}

View File

@ -30,7 +30,7 @@ public class WarBlockListener extends BlockListener {
Player player = event.getPlayer();
Block block = event.getBlock();
boolean captured = false;
if(player != null) {
if(player != null && block != null) {
Team team = war.getPlayerTeam(player.getName());
Warzone zone = war.getPlayerTeamWarzone(player.getName());
boolean isZoneMaker = war.isZoneMaker(player);
@ -45,27 +45,35 @@ public class WarBlockListener extends BlockListener {
t.teamcast(war.str("Monument " + monument.getName() + " has been captured by team " + team.getName() + "."));
}
captured = true; // important otherwise cancelled down a few line by isImportantblock
return; // important otherwise cancelled down a few line by isImportantblock
} else {
player.sendMessage(war.str("You can't capture a monument without a block of your team's material. Get one from your team spawn."));
event.setCancelled(true);
return;
}
}
if(!captured) {
if(zone != null && zone.isImportantBlock(block) && !isZoneMaker){
player.sendMessage(war.str("Can't build here."));
event.setCancelled(true);
}
// protect warzone lobbies
if(block != null) {
for(Warzone wz: war.getWarzones()) {
if(wz.getLobby() != null && wz.getLobby().getVolume().contains(block) && !isZoneMaker) {
player.sendMessage(war.str("Can't build here."));
event.setCancelled(true);
}
}
if(zone != null && zone.isImportantBlock(block) && !isZoneMaker){
player.sendMessage(war.str("Can't build here."));
event.setCancelled(true);
return;
}
// protect warzone lobbies
if(block != null) {
for(Warzone wz: war.getWarzones()) {
if(wz.getLobby() != null && wz.getLobby().getVolume().contains(block) && !isZoneMaker) {
player.sendMessage(war.str("Can't build here."));
event.setCancelled(true);
return;
}
}
}
}
// protect the hub
if(war.getWarHub() != null && war.getWarHub().getVolume().contains(block)) {
player.sendMessage(war.str("Can't build here."));
event.setCancelled(true);
return;
}
}
}
@ -81,6 +89,7 @@ public class WarBlockListener extends BlockListener {
// can't actually destroy blocks in a warzone if not part of a team
player.sendMessage(war.str("Can't destroy part of a warzone if you're not in a team."));
event.setCancelled(true);
return;
} else if(team != null && block != null && warzone != null
&& warzone.isMonumentCenterBlock(block)){
Monument monument = warzone.getMonumentFromCenterBlock(block);
@ -92,16 +101,19 @@ public class WarBlockListener extends BlockListener {
}
monument.uncapture();
}
return;
}else if(warzone != null && warzone.isImportantBlock(block) && !isZoneMaker) {
if(team != null && team.getVolume().contains(block)) {
if(player.getInventory().contains(team.getMaterial())) {
player.sendMessage(war.str("You already have a " + team.getName() + " block."));
event.setCancelled(true);
return;
}
// let team members loot one block the spawn for monument captures
} else if (!warzone.isMonumentCenterBlock(block)){
player.sendMessage(war.str("Can't destroy this."));
event.setCancelled(true);
return;
}
}
@ -111,9 +123,17 @@ public class WarBlockListener extends BlockListener {
if(zone.getLobby().getVolume().contains(block)) {
player.sendMessage(war.str("Can't destroy this."));
event.setCancelled(true);
return;
}
}
}
// protect the hub
if(war.getWarHub() != null && war.getWarHub().getVolume().contains(block)) {
player.sendMessage(war.str("Can't destroy this."));
event.setCancelled(true);
return;
}
}
}
}

View File

@ -4,7 +4,6 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityListener;
import com.tommytony.war.Team;

View File

@ -40,19 +40,9 @@ public class WarPlayerListener extends PlayerListener {
Team team = war.getPlayerTeam(player.getName());
if(team != null) {
Warzone zone = war.getPlayerTeamWarzone(player.getName());
if(zone != null && zone.hasPlayerInventory(player.getName())) {
player.teleportTo(zone.getTeleport());
zone.restorePlayerInventory(player);
if(zone.getLobby() != null) {
zone.getLobby().resetTeamGateSign(team);
}
if(zone != null) {
zone.handlePlayerLeave(player, zone.getTeleport());
}
team.removePlayer(player.getName());
team.resetSign();
if(war.getWarHub() != null) {
war.getWarHub().resetZoneSign(zone);
}
player.sendMessage(war.str("You have left the warzone. Your inventory has (hopefully) been restored."));
}
}
@ -235,19 +225,9 @@ public class WarPlayerListener extends PlayerListener {
// same as leave, except using event.setFrom and cancelling even .. don't ask me, see NetServerHandler code
Team playerTeam = war.getPlayerTeam(player.getName());
if(playerTeam != null) {
playerTeam.removePlayer(player.getName());
playerTeam.resetSign();
event.setFrom(playerWarzone.getTeleport());
player.teleportTo(playerWarzone.getTeleport());
playerWarzone.handlePlayerLeave(player, playerWarzone.getTeleport());
event.setCancelled(true);
playerWarzone.restorePlayerInventory(player);
if(playerWarzone.getLobby() != null) {
playerWarzone.getLobby().resetTeamGateSign(playerTeam);
}
player.sendMessage(war.str("Left the zone. Your inventory has (hopefully) been restored."));
if(war.getWarHub() != null) {
war.getWarHub().resetZoneSign(locZone);
}
return;
}
}

View File

@ -444,17 +444,22 @@ public class Warzone {
public void keepPlayerInventory(Player player) {
PlayerInventory inventory = player.getInventory();
ItemStack[] contents = inventory.getContents();
inventories.put(player.getName(), contents);
inventories.put(player.getName(), contents);
}
public void restorePlayerInventory(Player player) {
ItemStack[] originalContents = inventories.remove(player.getName());
PlayerInventory playerInv = player.getInventory();
if(originalContents != null) {
PlayerInventory playerInv = player.getInventory();
playerInv.clear();
playerInv.setHelmet(new ItemStack(0));
playerInv.setContents(originalContents);
for(ItemStack item : originalContents) {
if(item.getTypeId() != 0) {
playerInv.addItem(item);
}
}
}
// BUKKIT
// playerInv.setHelmet(new ItemStack(Material.AIR));
}
public boolean hasMonument(String monumentName) {
@ -773,5 +778,28 @@ public class Warzone {
return drawZoneOutline;
}
public void handlePlayerLeave(Player player, Location destination) {
Team playerTeam = war.getPlayerTeam(player.getName());
if(playerTeam !=null) {
Warzone zone = war.getPlayerTeamWarzone(player.getName());
playerTeam.removePlayer(player.getName());
playerTeam.resetSign();
if(zone != null) {
if(zone.getLobby() != null) {
zone.getLobby().resetTeamGateSign(playerTeam);
}
player.teleportTo(destination);
if(zone.hasPlayerInventory(player.getName())) {
zone.restorePlayerInventory(player);
}
player.sendMessage(war.str("Left the zone. Your inventory has (hopefully) been restored."));
if(war.getWarHub() != null) {
war.getWarHub().resetZoneSign(zone);
}
}
}
}
}

View File

@ -1,5 +1,5 @@
name: War
version: 0.4 (Montgomery)
version: 0.5 (Rommel)
description: Lets you create team deathmatch arenas (warzones) for a more structured PVP experience.
author: tommytony
website: war.tommytony.com

View File

@ -1,5 +1,5 @@
name: War
version: 0.4 (Montgomery)
version: 0.5 (Rommel)
description: Lets you create team deathmatch arenas (warzones) for a more structured PVP experience.
author: tommytony
website: war.tommytony.com