First v0.6 (Zhukov) commit. Adding CTF with setteamflag command. Works great.

This commit is contained in:
taoneill 2011-01-27 11:36:20 -05:00
parent 4d8179c8fd
commit 82367f22e6
10 changed files with 338 additions and 40 deletions

View File

@ -97,8 +97,9 @@ public class War extends JavaPlugin {
pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_ENTITY, entityListener, Priority.High, this);
//pm.registerEvent(Event.Type.ENTITY_DAMAGED, entityListener, Priority.High, this);
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_PROJECTILE, entityListener, Priority.High, this);
pm.registerEvent(Event.Type.ENTITY_EXPLODE, entityListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.High, this);
pm.registerEvent(Event.Type.BLOCK_PLACED, blockListener, Priority.Normal, this);
pm.registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Normal, this);
@ -615,7 +616,8 @@ public class War extends JavaPlugin {
lobby = warzone.getLobby();
}
for(Team t : warzone.getTeams()) {
t.getVolume().resetBlocks();
if(t.getTeamFlag() != null) t.getFlagVolume().resetBlocks();
t.getSpawnVolume().resetBlocks();
}
for(Monument m : warzone.getMonuments()) {
m.getVolume().resetBlocks();
@ -663,7 +665,6 @@ public class War extends JavaPlugin {
warzone.getLobby().initialize();
}
newTeam.setTeamSpawn(player.getLocation());
player.sendMessage(this.str("Team " + name + " created with spawn here."));
}
@ -671,6 +672,43 @@ public class War extends JavaPlugin {
}
}
// /setteamflag <diamond/iron/gold/d/i/g>
else if(command.equals("setteamflag")) {
if(arguments.length < 1 || !this.inAnyWarzone(player.getLocation())
|| (arguments.length > 0 && TeamMaterials.teamMaterialFromString(arguments[0]) == null)) {
player.sendMessage(this.str("Usage: /setteamflag <diamond/iron/gold/d/i/g>. " +
"Sets the team flag post to the current location. " +
"Must be in a warzone (try /zones and /zone). "));
} else {
Material teamMaterial = TeamMaterials.teamMaterialFromString(arguments[0]);
String name = TeamMaterials.teamMaterialToString(teamMaterial);
Warzone warzone = this.warzone(player.getLocation());
Team team = warzone.getTeamByMaterial(teamMaterial);
if(team == null) {
// no such team yet
player.sendMessage(this.str("Place the team spawn first."));
return true;
} else if (team.getFlagVolume() == null){
// new team flag
team.setTeamFlag(player.getLocation());
Location playerLoc = player.getLocation();
player.teleportTo(new Location(playerLoc.getWorld(),
playerLoc.getBlockX(), playerLoc.getBlockY() + 1, playerLoc.getBlockZ()));
player.sendMessage(this.str("Team " + name + " flag added here."));
} else {
// relocate flag
team.getFlagVolume().resetBlocks();
team.setTeamFlag(player.getLocation());
Location playerLoc = player.getLocation();
player.teleportTo(new Location(playerLoc.getWorld(),
playerLoc.getBlockX(), playerLoc.getBlockY() + 1, playerLoc.getBlockZ()));
player.sendMessage(this.str("Team " + name + " flag moved."));
}
WarzoneMapper.save(this, warzone, false);
}
}
// /deleteteam <teamname>
else if(command.equals("deleteteam")) {
if(arguments.length < 1 || (!this.inAnyWarzone(player.getLocation())
@ -695,7 +733,8 @@ public class War extends JavaPlugin {
}
}
if(team != null) {
team.getVolume().resetBlocks();
if(team.getFlagVolume() != null) team.getFlagVolume().resetBlocks();
team.getSpawnVolume().resetBlocks();
warzone.getTeams().remove(team);
if(warzone.getLobby() != null) {
warzone.getLobby().getVolume().resetBlocks();

View File

@ -2,15 +2,18 @@ package bukkit.tommytony.war;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockDamageLevel;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
import com.tommytony.war.Monument;
import com.tommytony.war.Team;
import com.tommytony.war.TeamMaterials;
import com.tommytony.war.Warzone;
/**
@ -103,13 +106,35 @@ public class WarBlockListener extends BlockListener {
}
return;
}else if(warzone != null && warzone.isImportantBlock(block) && !isZoneMaker) {
if(team != null && team.getVolume().contains(block)) {
if(team != null && team.getSpawnVolume().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 (team != null && warzone.isEnemyTeamFlagBlock(team, block)) {
if(warzone.isFlagThief(player.getName())) {
// detect audacious thieves
player.sendMessage(war.str("You can only steal one flag at a time!"));
} else {
// player just broke the flag block of other team: cancel to avoid drop, give player the block, set block to air
Team lostFlagTeam = warzone.getTeamForFlagBlock(block);
player.getInventory().clear();
player.getInventory().addItem(new ItemStack(lostFlagTeam.getMaterial(), 1));
warzone.addFlagThief(lostFlagTeam, player.getName());
block.setType(Material.AIR);
for(Team t : warzone.getTeams()) {
t.teamcast(war.str(player.getName() + " stole team " + lostFlagTeam.getName() + "'s flag."));
if(t.getName().equals(lostFlagTeam.getName())){
t.teamcast(war.str("Prevent " + player.getName() + " from reaching team " + team.getName() + "'s spawn."));
}
}
player.sendMessage(war.str("You have team " + lostFlagTeam + "'s flag. Reach your team spawn to capture it!"));
}
event.setCancelled(true);
return;
} else if (!warzone.isMonumentCenterBlock(block)){
player.sendMessage(war.str("Can't destroy this."));
event.setCancelled(true);

View File

@ -1,9 +1,14 @@
package bukkit.tommytony.war;
import java.util.List;
import org.bukkit.block.Block;
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.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityListener;
import com.tommytony.war.Team;
@ -23,6 +28,13 @@ public class WarEntityListener extends EntityListener {
// TODO Auto-generated constructor stub
}
public void onEntityDeath(EntityDeathEvent event) {
if(event.getEntity() instanceof Player) {
((Player)event.getEntity()).sendMessage(war.str("You really died!"));
}
}
// public void onEntityDamage(EntityDamageEvent event) {
//// Entity defender = event.getEntity();
////
@ -62,7 +74,7 @@ public class WarEntityListener extends EntityListener {
&& attackerTeam != defenderTeam
&& attackerWarzone == defenderWarzone) {
// Make sure one of the players isn't in the spawn
if(!defenderTeam.getVolume().contains(d.getLocation())){
if(!defenderTeam.getSpawnVolume().contains(d.getLocation())){
// A real attack: handle death scenario. ==> now handled in entity damage as well
//synchronized(d) {
// if(d.getHealth() <= 0) {
@ -133,6 +145,29 @@ public class WarEntityListener extends EntityListener {
public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) {
handlerAttackDefend(event);
}
public void onEntityExplode(EntityExplodeEvent event) {
// protect zones elements, lobbies and warhub from creepers
List<Block> explodedBlocks = event.blockList();
for(Block block : explodedBlocks) {
if(war.getWarHub() != null && war.getWarHub().getVolume().contains(block)) {
event.setCancelled(true);
war.info("Explosion prevented at warhub.");
return;
}
for(Warzone zone : war.getWarzones()) {
if(zone.isImportantBlock(block)) {
event.setCancelled(true);
war.info("Explosion prevented in zone " + zone.getName() + ".");
return;
} else if (zone.getLobby() != null && zone.getLobby().getVolume().contains(block)) {
event.setCancelled(true);
war.info("Explosion prevented at zone " + zone.getName() + " lobby.");
return;
}
}
}
}
// private void handleDeath(Player player, Warzone playerWarzone, Team playerTeam) {
// // teleport to team spawn upon death

View File

@ -50,15 +50,10 @@ public class WarPlayerListener extends PlayerListener {
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
Location playerLoc = event.getFrom(); // same as player.getLoc. Don't call again we need same result.
//Location from = event.getFrom();
Warzone locZone = null;
ZoneLobby locLobby = null;
//if(from != null) {
locZone = war.warzone(playerLoc);
locLobby = war.lobby(playerLoc);
//}
// synchronized(player) {
//Location to = event.getTo();
locZone = war.warzone(playerLoc);
locLobby = war.lobby(playerLoc);
boolean canPlay = war.canPlayWar(player);
boolean isMaker = war.isZoneMaker(player);
@ -242,6 +237,7 @@ public class WarPlayerListener extends PlayerListener {
//playerWarzone.respawnPlayer(team, player);
player.teleportTo(team.getTeamSpawn());
event.setCancelled(true);
return;
}
// Monuments
@ -251,6 +247,24 @@ public class WarPlayerListener extends PlayerListener {
&& random.nextInt(42) == 3 ) { // one chance out of many of getting healed
player.setHealth(20);
player.sendMessage(war.str("Your dance pleases the monument's voodoo. You gain full health!"));
return;
}
// Flag capture
if(playerWarzone.isFlagThief(player.getName())
&& (team.getSpawnVolume().contains(player.getLocation())
|| (team.getFlagVolume() != null && team.getFlagVolume().contains(player.getLocation())))) {
// flags can be captured at own spawn or own flag pole
team.setPoints(team.getPoints() + 1);
Team victim = playerWarzone.getVictimTeamForThief(player.getName());
victim.getFlagVolume().resetBlocks(); // bring back flag to team that lost it
victim.initializeTeamFlag();
for(Team t : playerWarzone.getTeams()) {
t.teamcast(war.str(player.getName() + " captured team " + victim.getName()
+ "'s flag. Team " + team.getName() + " scores one point." ));
}
playerWarzone.respawnPlayer(team, player);
playerWarzone.removeThief(player.getName());
}
} else if (locZone != null && locZone.getLobby() != null
&& !locZone.getLobby().isLeavingZone(playerLoc) && !isMaker) {

View File

@ -24,38 +24,42 @@ import com.tommytony.war.volumes.Volume;
public class Team {
private List<Player> players = new ArrayList<Player>();
private Location teamSpawn = null;
private Location teamFlag = null;
private String name;
private int remainingTickets;
private int points = 0;
private Volume volume;
private Volume spawnVolume;
private Volume flagVolume;
private final Warzone warzone;
private Material material;
private War war;
public Team(String name, Material material, Location teamSpawn, War war, Warzone warzone) {
this.warzone = warzone;
this.setName(name);
this.teamSpawn = teamSpawn;
this.setVolume(new Volume(name, war, warzone.getWorld()));
this.war = war;
this.setSpawnVolume(new Volume(name, war, warzone.getWorld()));
this.material = material;
this.setFlagVolume(null); // no flag at the start
}
public Material getMaterial() {
return material;
}
private void setVolume() {
if(volume.isSaved()) volume.resetBlocks();
private void setSpawnVolume() {
if(spawnVolume.isSaved()) spawnVolume.resetBlocks();
int x = teamSpawn.getBlockX();
int y = teamSpawn.getBlockY();
int z = teamSpawn.getBlockZ();
this.volume.setCornerOne(warzone.getWorld().getBlockAt(x-2, y-1, z-2));
this.volume.setCornerTwo(warzone.getWorld().getBlockAt(x+2, y+5, z+2));
this.spawnVolume.setCornerOne(warzone.getWorld().getBlockAt(x-2, y-1, z-2));
this.spawnVolume.setCornerTwo(warzone.getWorld().getBlockAt(x+2, y+5, z+2));
}
public void initializeTeamSpawn(Location teamSpawn) {
public void initializeTeamSpawn() {
// make air
this.volume.setToMaterial(Material.AIR);
this.spawnVolume.setToMaterial(Material.AIR);
// Set the spawn
int x = teamSpawn.getBlockX();
@ -159,10 +163,10 @@ public class Team {
this.teamSpawn = teamSpawn;
// this resets the block to old state
this.setVolume();
getVolume().saveBlocks();
this.setSpawnVolume();
getSpawnVolume().saveBlocks();
initializeTeamSpawn(teamSpawn);
initializeTeamSpawn();
}
public Location getTeamSpawn() {
@ -221,14 +225,14 @@ public class Team {
return points;
}
public Volume getVolume() {
public Volume getSpawnVolume() {
return volume;
return spawnVolume;
}
public void resetSign(){
this.getVolume().resetBlocks();
this.initializeTeamSpawn(this.getTeamSpawn()); // reset everything instead of just sign
this.getSpawnVolume().resetBlocks();
this.initializeTeamSpawn(); // reset everything instead of just sign
// BUKKIT
// int x = teamSpawn.getBlockX();
@ -263,12 +267,107 @@ public class Team {
}
}
public void setVolume(Volume volume) {
this.volume = volume;
public void setSpawnVolume(Volume volume) {
this.spawnVolume = volume;
}
public void setPoints(int score) {
this.points = score;
}
public void setFlagVolume(Volume flagVolume) {
this.flagVolume = flagVolume;
}
public Volume getFlagVolume() {
return flagVolume;
}
private void setFlagVolume() {
if(flagVolume == null) flagVolume = new Volume(getName() + "flag", war, warzone.getWorld());
if(flagVolume.isSaved()) flagVolume.resetBlocks();
int x = teamFlag.getBlockX();
int y = teamFlag.getBlockY();
int z = teamFlag.getBlockZ();
this.flagVolume.setCornerOne(warzone.getWorld().getBlockAt(x-2, y-1, z-2));
this.flagVolume.setCornerTwo(warzone.getWorld().getBlockAt(x+2, y+5, z+2));
}
public void initializeTeamFlag() {
// make air
this.flagVolume.setToMaterial(Material.AIR);
// Set the flag blocks
int x = teamFlag.getBlockX();
int y = teamFlag.getBlockY();
int z = teamFlag.getBlockZ();
// first ring
warzone.getWorld().getBlockAt(x+1, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z-1).setType(Material.OBSIDIAN);
// outer ring
warzone.getWorld().getBlockAt(x+2, y-1, z+2).setType(Material.GLOWSTONE);
warzone.getWorld().getBlockAt(x+2, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+2, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+2, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+2, y-1, z-2).setType(Material.GLOWSTONE);
warzone.getWorld().getBlockAt(x-1, y-1, z+2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-1, y-1, z-2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z+2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y-1, z-2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z+2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x+1, y-1, z-2).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z+2).setType(Material.GLOWSTONE);
warzone.getWorld().getBlockAt(x-2, y-1, z+1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z-1).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x-2, y-1, z-2).setType(Material.GLOWSTONE);
// flag post
warzone.getWorld().getBlockAt(x, y, z).setType(Material.OBSIDIAN);
warzone.getWorld().getBlockAt(x, y+1, z).setType(material);
}
public void setTeamFlag(Location teamFlag) {
this.teamFlag = teamFlag;
// this resets the block to old state
this.setFlagVolume();
getFlagVolume().saveBlocks();
initializeTeamFlag();
}
public boolean isTeamFlagBlock(Block block) {
if(teamFlag != null) {
int flagX = teamFlag.getBlockX();
int flagY = teamFlag.getBlockY() + 1;
int flagZ = teamFlag.getBlockZ();
if(block.getX() == flagX
&& block.getY() == flagY
&& block.getZ() == flagZ) {
return true;
}
}
return false;
}
public Location getTeamFlag() {
return teamFlag;
}
}

View File

@ -28,7 +28,7 @@ public class WarHub {
public WarHub(War war, Location location) {
this.war = war;
this.location = location;
this.volume = new Volume("warHub", war, location.getWorld());
this.volume = new Volume("warhub", war, location.getWorld());
}
public Volume getVolume() {

View File

@ -39,6 +39,7 @@ public class Warzone {
private int scoreCap = 5;
private HashMap<String, ItemStack[]> inventories = new HashMap<String, ItemStack[]>();
private HashMap<String, Team> flagThieves = new HashMap<String, Team>();
private World world;
private Material[] originalSoutheastBlocks;
private Material[] originalNorthwestBlocks;
@ -184,7 +185,8 @@ public class Warzone {
volume.resetWallBlocks(BlockFace.SOUTH);
for(Team team : teams) {
team.getVolume().resetBlocks();
team.getSpawnVolume().resetBlocks();
if(team.getTeamFlag() != null) team.getFlagVolume().resetBlocks();
}
for(Monument monument : monuments) {
@ -221,6 +223,7 @@ public class Warzone {
}
team.setRemainingTickets(lifePool);
team.setTeamSpawn(team.getTeamSpawn());
if(team.getTeamFlag() != null) team.setTeamFlag(team.getTeamFlag());
team.resetSign();
}
@ -238,6 +241,7 @@ public class Warzone {
}
team.setRemainingTickets(lifePool);
team.setTeamSpawn(team.getTeamSpawn());
if(team.getTeamFlag() != null) team.setTeamFlag(team.getTeamFlag());
team.resetSign();
}
}
@ -488,10 +492,16 @@ public class Warzone {
}
}
for(Team t : teams) {
if(t.getVolume().contains(block)){
if(t.getSpawnVolume().contains(block)){
return true;
} else if (t.getFlagVolume() != null
&& t.getFlagVolume().contains(block)) {
return true;
}
}
if(volume.isWallBlock(block)){
return true;
}
// if(lobby != null) {
// lobby.getVolume().contains(block);
// }
@ -801,5 +811,41 @@ public class Warzone {
}
public boolean isEnemyTeamFlagBlock(Team playerTeam, Block block) {
for(Team team : teams) {
if(!team.getName().equals(playerTeam.getName())
&& team.isTeamFlagBlock(block)) {
return true;
}
}
return false;
}
public Team getTeamForFlagBlock(Block block) {
for(Team team : teams) {
if(team.isTeamFlagBlock(block)) {
return team;
}
}
return null;
}
public void addFlagThief(Team lostFlagTeam, String flagThief) {
flagThieves.put(flagThief, lostFlagTeam);
}
public boolean isFlagThief(String suspect) {
if(flagThieves.containsKey(suspect)) return true;
return false;
}
public Team getVictimTeamForThief(String thief) {
return flagThieves.get(thief);
}
public void removeThief(String thief) {
flagThieves.remove(thief);
}
}

View File

@ -112,6 +112,24 @@ public class WarzoneMapper {
}
}
// teamFlags
String teamFlagsStr = warzoneConfig.getString("teamFlags");
if(teamFlagsStr != null && !teamFlagsStr.equals("")) {
String[] teamFlagsSplit = teamFlagsStr.split(";");
for(String teamFlagStr : teamFlagsSplit) {
if(teamFlagStr != null && !teamFlagStr.equals("")){
String[] teamFlagStrSplit =teamFlagStr.split(",");
Team team = warzone.getTeamByMaterial(TeamMaterials.teamMaterialFromString(teamFlagStrSplit[0]));
if(team != null) {
int teamFlagX = Integer.parseInt(teamFlagStrSplit[1]);
int teamFlagY = Integer.parseInt(teamFlagStrSplit[2]);
int teamFlagZ = Integer.parseInt(teamFlagStrSplit[3]);
team.setTeamFlag(new Location(world, teamFlagX, teamFlagY, teamFlagZ)); // this may screw things up
}
}
}
}
// ff
warzone.setFriendlyFire(warzoneConfig.getBoolean("friendlyFire"));
@ -183,7 +201,10 @@ public class WarzoneMapper {
// team spawn blocks
for(Team team : warzone.getTeams()) {
team.setVolume(VolumeMapper.loadVolume(team.getName(), warzone.getName(), war, world));
team.setSpawnVolume(VolumeMapper.loadVolume(team.getName(), warzone.getName(), war, world));
if(team.getTeamFlag() != null) {
team.setFlagVolume(VolumeMapper.loadVolume(team.getName()+"flag", warzone.getName(), war, world));
}
}
// lobby
@ -251,6 +272,16 @@ public class WarzoneMapper {
}
warzoneConfig.setString("teams", teamsStr);
// team flags
String teamFlagsStr = "";;
for(Team team : teams) {
if(team.getFlagVolume() != null) {
Location flag = team.getTeamFlag();
teamFlagsStr += team.getName() + "," + flag.getBlockX() + "," + flag.getBlockY() + "," + flag.getBlockZ() + ";";
}
}
warzoneConfig.setString("teamFlags", teamFlagsStr);
// ff
warzoneConfig.setBoolean("firendlyFire", warzone.getFriendlyFire());
@ -315,10 +346,13 @@ public class WarzoneMapper {
VolumeMapper.save(monument.getVolume(), warzone.getName(), war);
}
// team spawn blocks
// team spawn & flag blocks
for(Team team : teams) {
VolumeMapper.save(team.getVolume(), warzone.getName(), war);
}
VolumeMapper.save(team.getSpawnVolume(), warzone.getName(), war);
if(team.getFlagVolume() != null) {
VolumeMapper.save(team.getFlagVolume(), warzone.getName(), war);
}
}
if(warzone.getLobby() != null) {
VolumeMapper.save(warzone.getLobby().getVolume(), warzone.getName(), war);

View File

@ -1,5 +1,5 @@
name: War
version: 0.5 (Rommel)
version: 0.6 (Zhukov)
description: Lets you create team deathmatch arenas (warzones) for a more structured PVP experience.
author: tommytony
website: war.tommytony.com
@ -54,6 +54,9 @@ commands:
setmonument:
description: Zone makers only. Creates or moves a monument. Must be in warzone.
usage: /setmonument <monument-name>
setteamflag:
description: Zone makers only. Creates or moves a team flag post for CTF-style play. The only available teams are diamond, iron and gold. Must be warzone.
usage: /setteamflag <diamond/iron/gold/d/i/g>
resetzone:
description: Zone makers only. Reloads zone blocks from memory by default. Reloads blocks from disk if "hard" option is added. Sends everyone back to the warzone lobby. Must be in zone or lobby.
usage: /resetzone, /resetzone <hard/h>

View File

@ -1,5 +1,5 @@
name: War
version: 0.5 (Rommel)
version: 0.6 (Zhukov)
description: Lets you create team deathmatch arenas (warzones) for a more structured PVP experience.
author: tommytony
website: war.tommytony.com
@ -54,6 +54,9 @@ commands:
setmonument:
description: Zone makers only. Creates or moves a monument. Must be in warzone.
usage: /setmonument <monument-name>
setteamflag:
description: Zone makers only. Creates or moves a team flag post for CTF-style play. The only available teams are diamond, iron and gold. Must be warzone.
usage: /setteamflag <diamond/iron/gold/d/i/g>
resetzone:
description: Zone makers only. Reloads zone blocks from memory by default. Reloads blocks from disk if "hard" option is added. Sends everyone back to the warzone lobby. Must be in zone or lobby.
usage: /resetzone, /resetzone <hard/h>