Autojoin zone on connect

Closes #698. #733.

@taoneill please test.
This commit is contained in:
cmastudios 2014-02-22 01:17:20 -06:00
parent 1d6ffcea7e
commit 4106dd887f
4 changed files with 39 additions and 1 deletions

View File

@ -180,6 +180,7 @@ public class War extends JavaPlugin {
warConfig.put(WarConfig.RESETSPEED, 5000);
warConfig.put(WarConfig.MAXSIZE, 750);
warConfig.put(WarConfig.LANGUAGE, Locale.getDefault().toString());
warConfig.put(WarConfig.AUTOJOIN, "");
warzoneDefaultConfig.put(WarzoneConfig.AUTOASSIGN, false);
warzoneDefaultConfig.put(WarzoneConfig.BLOCKHEADS, true);

View File

@ -153,6 +153,13 @@ public class Warzone {
return bestGuess;
}
public static Warzone getZoneByNameExact(String name) {
for (Warzone zone : War.war.getWarzones()) {
if (zone.getName().equalsIgnoreCase(name)) return zone;
}
return null;
}
public static Warzone getZoneByLocation(Location location) {
for (Warzone warzone : War.war.getWarzones()) {
if (location.getWorld().getName().equals(warzone.getWorld().getName()) && warzone.getVolume() != null && warzone.getVolume().contains(location)) {

View File

@ -11,7 +11,8 @@ public enum WarConfig {
TNTINZONESONLY (Boolean.class),
RESETSPEED (Integer.class),
MAXSIZE (Integer.class),
LANGUAGE (String.class);
LANGUAGE (String.class),
AUTOJOIN (String.class);
private final Class<?> configType;

View File

@ -3,6 +3,7 @@ package com.tommytony.war.event;
import java.util.HashMap;
import java.util.List;
import com.tommytony.war.config.WarConfig;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
@ -73,6 +74,34 @@ public class WarPlayerListener implements Listener {
}
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerJoin(final PlayerJoinEvent event) {
String autojoinName = War.war.getWarConfig().getString(WarConfig.AUTOJOIN);
boolean autojoinEnabled = autojoinName.isEmpty();
if (autojoinEnabled) { // Won't be able to find warzone if unset
Warzone autojoinWarzone = Warzone.getZoneByNameExact(autojoinName);
if (autojoinWarzone == null) {
War.war.getLogger().log(Level.WARNING, "Failed to find autojoin warzone ''{0}''.", new Object[] {autojoinName});
return;
}
if (autojoinWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.DISABLED) || autojoinWarzone.isReinitializing()) {
War.war.badMsg(event.getPlayer(), "join.disabled");
event.getPlayer().teleport(autojoinWarzone.getTeleport());
} else if (!autojoinWarzone.getWarzoneConfig().getBoolean(WarzoneConfig.JOINMIDBATTLE) && autojoinWarzone.isEnoughPlayers()) {
War.war.badMsg(event.getPlayer(), "join.progress");
event.getPlayer().teleport(autojoinWarzone.getTeleport());
} else if (autojoinWarzone.isFull()) {
War.war.badMsg(event.getPlayer(), "join.full.all");
event.getPlayer().teleport(autojoinWarzone.getTeleport());
} else if (autojoinWarzone.isFull(event.getPlayer())) {
War.war.badMsg(event.getPlayer(), "join.permission.all");
event.getPlayer().teleport(autojoinWarzone.getTeleport());
} else { // Player will only ever be autoassigned to a team
autojoinWarzone.autoAssign(event.getPlayer());
}
}
}
@EventHandler
public void onPlayerDropItem(final PlayerDropItemEvent event) {
if (War.war.isLoaded()) {