mirror of
https://github.com/taoneill/war.git
synced 2024-11-23 18:55:28 +01:00
Closes gh-25. Closes gh-60. Order of zone creation (or order in war.txt) dictates the order of the zone on the warhub. Can now disable/enable a warzone so that is dissapears form the warhub and players cant join. This lets the zone maker work in peace.
This commit is contained in:
parent
109b513600
commit
46fd5ff1bb
@ -610,6 +610,11 @@ public class War extends JavaPlugin {
|
||||
}
|
||||
warzone.initializeZone(); // bring back team spawns etc
|
||||
this.msg(player, "Warzone config saved. Zone reset.");
|
||||
|
||||
if(warHub != null) { // maybe the zone was disabled/enabled
|
||||
warHub.getVolume().resetBlocks();
|
||||
warHub.initialize();
|
||||
}
|
||||
} else {
|
||||
this.badMsg(player, "Failed to read named parameters.");
|
||||
}
|
||||
@ -638,6 +643,11 @@ public class War extends JavaPlugin {
|
||||
}
|
||||
warzone.initializeZone(); // bring back team spawns etc
|
||||
|
||||
if(warHub != null) { // maybe the zone was disabled/enabled
|
||||
warHub.getVolume().resetBlocks();
|
||||
warHub.initialize();
|
||||
}
|
||||
|
||||
this.msg(player, "Warzone " + warzone.getName() + " initial state changed. Saved " + savedBlocks + " blocks.");
|
||||
}
|
||||
}
|
||||
@ -928,34 +938,38 @@ public class War extends JavaPlugin {
|
||||
} else {
|
||||
lobby = warzone.getLobby();
|
||||
}
|
||||
List<Team> teams = warzone.getTeams();
|
||||
boolean foundTeam = false;
|
||||
for(Team team : teams) {
|
||||
if(team.getName().equals(name)) {
|
||||
if(!warzone.hasPlayerInventory(player.getName())) {
|
||||
warzone.keepPlayerInventory(player);
|
||||
this.msg(player, "Your inventory is is storage until you /leave.");
|
||||
}
|
||||
if(team.getPlayers().size() < warzone.getTeamCap()) {
|
||||
team.addPlayer(player);
|
||||
team.resetSign();
|
||||
warzone.respawnPlayer(team, player);
|
||||
if(warHub != null) {
|
||||
warHub.resetZoneSign(warzone);
|
||||
}
|
||||
foundTeam = true;
|
||||
} else {
|
||||
this.badMsg(player, "Team " + name + " is full.");
|
||||
foundTeam = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(foundTeam) {
|
||||
for(Team team : teams){
|
||||
team.teamcast("" + player.getName() + " joined " + name);
|
||||
}
|
||||
if(warzone.isDisabled()) {
|
||||
badMsg(player, "This warzone is disabled.");
|
||||
} else {
|
||||
this.badMsg(player, "No such team. Try /teams.");
|
||||
List<Team> teams = warzone.getTeams();
|
||||
boolean foundTeam = false;
|
||||
for(Team team : teams) {
|
||||
if(team.getName().equals(name)) {
|
||||
if(!warzone.hasPlayerInventory(player.getName())) {
|
||||
warzone.keepPlayerInventory(player);
|
||||
this.msg(player, "Your inventory is is storage until you /leave.");
|
||||
}
|
||||
if(team.getPlayers().size() < warzone.getTeamCap()) {
|
||||
team.addPlayer(player);
|
||||
team.resetSign();
|
||||
warzone.respawnPlayer(team, player);
|
||||
if(warHub != null) {
|
||||
warHub.resetZoneSign(warzone);
|
||||
}
|
||||
foundTeam = true;
|
||||
} else {
|
||||
this.badMsg(player, "Team " + name + " is full.");
|
||||
foundTeam = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(foundTeam) {
|
||||
for(Team team : teams){
|
||||
team.teamcast("" + player.getName() + " joined " + name);
|
||||
}
|
||||
} else {
|
||||
this.badMsg(player, "No such team. Try /teams.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1061,6 +1075,10 @@ public class War extends JavaPlugin {
|
||||
String onOff = namedParams.get("unbreakable");
|
||||
warzone.setUnbreakableZoneBlocks(onOff.equals("on") || onOff.equals("true"));
|
||||
}
|
||||
if(namedParams.containsKey("disabled")) {
|
||||
String onOff = namedParams.get("disabled");
|
||||
warzone.setDisabled(onOff.equals("on") || onOff.equals("true"));
|
||||
}
|
||||
// if(namedParams.containsKey("dropLootOnDeath")){
|
||||
// String onOff = namedParams.get("dropLootOnDeath");
|
||||
// warzone.setDropLootOnDeath(onOff.equals("on") || onOff.equals("true"));
|
||||
@ -1221,13 +1239,14 @@ public class War extends JavaPlugin {
|
||||
this.getLogger().log(Level.WARNING, "[War] " + str);
|
||||
}
|
||||
|
||||
// the only way to find a zone that has only one corner
|
||||
public Warzone findWarzone(String warzoneName) {
|
||||
for(Warzone warzone : warzones) {
|
||||
if(warzone.getName().equals(warzoneName)) {
|
||||
return warzone;
|
||||
}
|
||||
}
|
||||
for(Warzone warzone : incompleteZones) {
|
||||
for(Warzone warzone : incompleteZones) {
|
||||
if(warzone.getName().equals(warzoneName)) {
|
||||
return warzone;
|
||||
}
|
||||
|
@ -126,24 +126,28 @@ public class WarPlayerListener extends PlayerListener {
|
||||
if(oldTeam == null && canPlay) { // trying to counter spammy player move
|
||||
isAutoAssignGate = zone.getLobby().isAutoAssignGate(playerLoc);
|
||||
if(isAutoAssignGate) {
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
int noOfPlayers = 0;
|
||||
for(Team t : zone.getTeams()) {
|
||||
noOfPlayers += t.getPlayers().size();
|
||||
}
|
||||
if(noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
|
||||
Team team = zone.autoAssign(player);
|
||||
event.setFrom(team.getTeamSpawn());
|
||||
event.setCancelled(true);
|
||||
if(war.getWarHub() != null) {
|
||||
war.getWarHub().resetZoneSign(zone);
|
||||
}
|
||||
if(zone.isDisabled()){
|
||||
handleDisabledZone(event, player, zone);
|
||||
} else {
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
war.badMsg(player, "All teams are full.");
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
int noOfPlayers = 0;
|
||||
for(Team t : zone.getTeams()) {
|
||||
noOfPlayers += t.getPlayers().size();
|
||||
}
|
||||
if(noOfPlayers < zone.getTeams().size() * zone.getTeamCap()) {
|
||||
Team team = zone.autoAssign(player);
|
||||
event.setFrom(team.getTeamSpawn());
|
||||
event.setCancelled(true);
|
||||
if(war.getWarHub() != null) {
|
||||
war.getWarHub().resetZoneSign(zone);
|
||||
}
|
||||
} else {
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
war.badMsg(player, "All teams are full.");
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -153,7 +157,9 @@ public class WarPlayerListener extends PlayerListener {
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
Team diamondTeam = zone.getTeamByMaterial(TeamMaterials.TEAMDIAMOND);
|
||||
if(diamondTeam.getPlayers().size() < zone.getTeamCap()) {
|
||||
if(zone.isDisabled()){
|
||||
handleDisabledZone(event, player, zone);
|
||||
} else if(diamondTeam.getPlayers().size() < zone.getTeamCap()) {
|
||||
diamondTeam.addPlayer(player);
|
||||
diamondTeam.resetSign();
|
||||
if(war.getWarHub() != null) {
|
||||
@ -181,7 +187,9 @@ public class WarPlayerListener extends PlayerListener {
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
Team ironTeam = zone.getTeamByMaterial(TeamMaterials.TEAMIRON);
|
||||
if(ironTeam.getPlayers().size() < zone.getTeamCap()) {
|
||||
if(zone.isDisabled()){
|
||||
handleDisabledZone(event, player, zone);
|
||||
} else if(ironTeam.getPlayers().size() < zone.getTeamCap()) {
|
||||
ironTeam.addPlayer(player);
|
||||
ironTeam.resetSign();
|
||||
if(war.getWarHub() != null) {
|
||||
@ -209,7 +217,9 @@ public class WarPlayerListener extends PlayerListener {
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
Team goldTeam = zone.getTeamByMaterial(TeamMaterials.TEAMGOLD);
|
||||
if(goldTeam.getPlayers().size() < zone.getTeamCap()) {
|
||||
if(zone.isDisabled()){
|
||||
handleDisabledZone(event, player, zone);
|
||||
} else if(goldTeam.getPlayers().size() < zone.getTeamCap()) {
|
||||
goldTeam.addPlayer(player);
|
||||
goldTeam.resetSign();
|
||||
if(war.getWarHub() != null) {
|
||||
@ -365,6 +375,15 @@ public class WarPlayerListener extends PlayerListener {
|
||||
|
||||
}
|
||||
|
||||
private void handleDisabledZone(PlayerMoveEvent event, Player player, Warzone zone) {
|
||||
if(zone.getLobby() != null) {
|
||||
war.badMsg(player, "This warzone is disabled.");
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void dropFromOldTeamIfAny(Player player) {
|
||||
// drop from old team if any
|
||||
Team previousTeam = war.getPlayerTeam(player.getName());
|
||||
|
@ -1,7 +1,9 @@
|
||||
package com.tommytony.war;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
@ -24,7 +26,7 @@ public class WarHub {
|
||||
private final War war;
|
||||
private Location location;
|
||||
private Volume volume;
|
||||
private List<Block> zoneGateBlocks = new ArrayList<Block>();
|
||||
private Map<String, Block> zoneGateBlocks = new HashMap<String, Block>();
|
||||
|
||||
public WarHub(War war, Location location) {
|
||||
this.war = war;
|
||||
@ -46,12 +48,12 @@ public class WarHub {
|
||||
|
||||
public Warzone getDestinationWarzoneForLocation(Location playerLocation) {
|
||||
Warzone zone = null;
|
||||
for(Block gate : zoneGateBlocks) {
|
||||
for(String zoneName : zoneGateBlocks.keySet()) {
|
||||
Block gate = zoneGateBlocks.get(zoneName);
|
||||
if(gate.getX() == playerLocation.getBlockX()
|
||||
&& gate.getY() == playerLocation.getBlockY()
|
||||
&& gate.getZ() == playerLocation.getBlockZ()) {
|
||||
int zoneIndex = zoneGateBlocks.indexOf(gate);
|
||||
zone = war.getWarzones().get(zoneIndex);
|
||||
zone = war.findWarzone(zoneName);
|
||||
}
|
||||
}
|
||||
return zone;
|
||||
@ -60,7 +62,11 @@ public class WarHub {
|
||||
public void initialize() {
|
||||
// for now, draw the wall of gates to the west
|
||||
zoneGateBlocks.clear();
|
||||
int noOfWarzones = war.getWarzones().size();
|
||||
int disabled = 0;
|
||||
for(Warzone zone : war.getWarzones()) {
|
||||
if(zone.isDisabled()) disabled++;
|
||||
}
|
||||
int noOfWarzones = war.getWarzones().size() - disabled;
|
||||
if(noOfWarzones > 0) {
|
||||
int hubWidth = noOfWarzones * 4 + 2;
|
||||
int halfHubWidth = hubWidth / 2;
|
||||
@ -80,19 +86,22 @@ public class WarHub {
|
||||
// draw gates
|
||||
Block currentGateBlock = volume.getCornerOne().getFace(BlockFace.UP).getFace(BlockFace.WEST, hubDepth).getFace(BlockFace.NORTH, 2);
|
||||
|
||||
for(int i = 0;i < war.getWarzones().size(); i++) { // gonna use the index to find it again
|
||||
zoneGateBlocks.add(0, currentGateBlock);
|
||||
currentGateBlock.getFace(BlockFace.DOWN).setType(Material.GLOWSTONE);
|
||||
currentGateBlock.setType(Material.PORTAL);
|
||||
currentGateBlock.getFace(BlockFace.UP).setType(Material.PORTAL);
|
||||
currentGateBlock.getFace(BlockFace.SOUTH).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.NORTH).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.SOUTH).getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.NORTH).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.SOUTH).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.NORTH).getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock = currentGateBlock.getFace(BlockFace.NORTH, 4);
|
||||
for(Warzone zone : war.getWarzones()) { // gonna use the index to find it again
|
||||
if(!zone.isDisabled()) {
|
||||
zoneGateBlocks.put(zone.getName(), currentGateBlock);
|
||||
currentGateBlock.getFace(BlockFace.DOWN).setType(Material.GLOWSTONE);
|
||||
currentGateBlock.setType(Material.PORTAL);
|
||||
currentGateBlock.getFace(BlockFace.UP).setType(Material.PORTAL);
|
||||
currentGateBlock.getFace(BlockFace.SOUTH).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.NORTH).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.SOUTH).getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.NORTH).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.SOUTH).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.NORTH).getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock.getFace(BlockFace.UP).getFace(BlockFace.UP).setType(Material.OBSIDIAN);
|
||||
currentGateBlock = currentGateBlock.getFace(BlockFace.NORTH, 4);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// War hub sign
|
||||
@ -115,7 +124,7 @@ public class WarHub {
|
||||
|
||||
// Warzone signs
|
||||
for(Warzone zone : war.getWarzones()) {
|
||||
if(zone.ready()) {
|
||||
if(!zone.isDisabled() && zone.ready()) {
|
||||
this.resetZoneSign(zone);
|
||||
}
|
||||
}
|
||||
@ -123,12 +132,8 @@ public class WarHub {
|
||||
}
|
||||
|
||||
public void resetZoneSign(Warzone zone) {
|
||||
int i = 0;
|
||||
for(i = 0; i < war.getWarzones().size(); i++) {
|
||||
if(zone.getName() == war.getWarzones().get(i).getName()) break;
|
||||
}
|
||||
|
||||
Block zoneGate = zoneGateBlocks.get(i);
|
||||
Block zoneGate = zoneGateBlocks.get(zone.getName());
|
||||
Block block = zoneGate.getFace(BlockFace.SOUTH).getFace(BlockFace.EAST, 1);
|
||||
if(block.getType() != Material.SIGN_POST) block.setType(Material.SIGN_POST);
|
||||
block.setData((byte)8);
|
||||
|
@ -56,6 +56,7 @@ public class Warzone {
|
||||
private boolean blockHeads;
|
||||
private boolean dropLootOnDeath;
|
||||
private boolean unbreakableZoneBlocks;
|
||||
private boolean disabled = false;
|
||||
|
||||
|
||||
public Warzone(War war, World world, String name) {
|
||||
@ -1114,5 +1115,13 @@ public class Warzone {
|
||||
return unbreakableZoneBlocks;
|
||||
}
|
||||
|
||||
public void setDisabled(boolean disabled) {
|
||||
this.disabled = disabled;
|
||||
}
|
||||
|
||||
public boolean isDisabled() {
|
||||
return disabled;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -211,6 +211,9 @@ public class WarzoneMapper {
|
||||
// unbreakableZoneBlocks
|
||||
warzone.setUnbreakableZoneBlocks(warzoneConfig.getBoolean("unbreakableZoneBlocks"));
|
||||
|
||||
// disabled
|
||||
warzone.setDisabled(warzoneConfig.getBoolean("disabled"));
|
||||
|
||||
// dropLootOnDeath
|
||||
//warzone.setDropLootOnDeath(warzoneConfig.getBoolean("dropLootOnDeath"));
|
||||
|
||||
@ -395,6 +398,9 @@ public class WarzoneMapper {
|
||||
// unbreakableZoneBlocks
|
||||
warzoneConfig.setBoolean("unbreakableZoneBlocks", warzone.isUnbreakableZoneBlocks());
|
||||
|
||||
// disabled
|
||||
warzoneConfig.setBoolean("disabled", warzone.isDisabled());
|
||||
|
||||
// defaultDropLootOnDeath
|
||||
//warzoneConfig.setBoolean("dropLootOnDeath", warzone.isDropLootOnDeath());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user